From d9470ab98027bccc7f04f20e634c2c70ab7e67fa Mon Sep 17 00:00:00 2001 From: JMARyA Date: Mon, 23 Dec 2024 08:58:46 +0100 Subject: [PATCH 01/74] update --- technology/applications/Applications.md | 1 + technology/applications/utilities/virt-manager.md | 8 ++++++++ technology/libvirt.md | 11 +++++++++++ technology/linux/Proxmox.md | 2 +- technology/linux/qemu.md | 2 ++ technology/tools/Virtual Machine.md | 4 +++- 6 files changed, 26 insertions(+), 2 deletions(-) create mode 100644 technology/applications/utilities/virt-manager.md create mode 100644 technology/libvirt.md diff --git a/technology/applications/Applications.md b/technology/applications/Applications.md index 010685c..38e6c49 100644 --- a/technology/applications/Applications.md +++ b/technology/applications/Applications.md @@ -119,6 +119,7 @@ rev: 2024-12-10 - [Wildcard](utilities/Wildcard.md) - [Textpieces](utilities/Textpieces.md) - [ImHex](utilities/ImHex.md) +- [VirtManager](utilities/virt-manager.md) # Mobile - [Aegis](./utilities/Aegis.md) diff --git a/technology/applications/utilities/virt-manager.md b/technology/applications/utilities/virt-manager.md new file mode 100644 index 0000000..00aa38a --- /dev/null +++ b/technology/applications/utilities/virt-manager.md @@ -0,0 +1,8 @@ +--- +obj: application +repo: https://github.com/virt-manager/virt-manager +website: https://virt-manager.org +--- + +# Virt Manager +#wip diff --git a/technology/libvirt.md b/technology/libvirt.md new file mode 100644 index 0000000..12460e9 --- /dev/null +++ b/technology/libvirt.md @@ -0,0 +1,11 @@ +--- +obj: application +repo: https://gitlab.com/libvirt +website: https://libvirt.org +arch-wiki: https://wiki.archlinux.org/title/Libvirt +--- + +# libvirt +#wip + +libvirt has a GUI frontend with [virt-manager](./applications/utilities/virt-manager.md). diff --git a/technology/linux/Proxmox.md b/technology/linux/Proxmox.md index 2e04be4..4909efb 100644 --- a/technology/linux/Proxmox.md +++ b/technology/linux/Proxmox.md @@ -17,4 +17,4 @@ Proxmox Virtual Environment (Proxmox VE) is an open-source virtualization platfo ### 4. **Storage Options:** - Proxmox VE offers various storage options, including local storage, networked storage (Ceph, NFS, iSCSI), and [ZFS](filesystems/ZFS.md) (Zettabyte File System) support. This allows users to choose the storage solution that best fits their requirements. ### 5. **Backup and Restore:** -- The built-in backup and restore features simplify data protection in Proxmox VE. Users can create scheduled backups of VMs and containers, allowing for quick recovery in case of data loss or system failures. \ No newline at end of file +- The built-in backup and restore features simplify data protection in Proxmox VE. Users can create scheduled backups of VMs and containers, allowing for quick recovery in case of data loss or system failures. diff --git a/technology/linux/qemu.md b/technology/linux/qemu.md index f4f3ea0..bceb283 100644 --- a/technology/linux/qemu.md +++ b/technology/linux/qemu.md @@ -5,6 +5,8 @@ repo: https://github.com/qemu/qemu rev: 2024-05-02 --- +#refactor -> https://wiki.archlinux.org/title/QEMU + # QEMU QEMU is an open-source emulator and virtualizer that enables running operating systems and various software applications on different hardware architectures. It supports [emulation](../emulation/Emulation.md) of various CPU architectures, including x86, ARM, PowerPC, and SPARC, among others. It allows running [virtual machines](../tools/Virtual%20Machine.md). diff --git a/technology/tools/Virtual Machine.md b/technology/tools/Virtual Machine.md index ee4d410..e733233 100644 --- a/technology/tools/Virtual Machine.md +++ b/technology/tools/Virtual Machine.md @@ -3,6 +3,7 @@ aliases: ["VM"] obj: concept wiki: https://en.wikipedia.org/wiki/Virtual_machine --- + # Virtual Machine In computing, a virtual machine (VM) is the virtualization or [emulation](../emulation/Emulation.md) of a computer system. Virtual machines are based on computer architectures and provide the functionality of a physical computer. @@ -10,4 +11,5 @@ Virtual Machine can be used to run operating systems in an isolated environment. ## Virtual Machine Software - [qemu](../linux/qemu.md) -- [Proxmox](../linux/Proxmox.md) \ No newline at end of file +- [Proxmox](../linux/Proxmox.md) +- [libvirt](../libvirt.md) From 012c4a1cde3fb422c3746493941f90dde51f62eb Mon Sep 17 00:00:00 2001 From: JMARyA Date: Mon, 23 Dec 2024 09:17:58 +0100 Subject: [PATCH 02/74] update ufw --- technology/applications/network/ufw.md | 125 ++++++++++++++++++++++++- 1 file changed, 121 insertions(+), 4 deletions(-) diff --git a/technology/applications/network/ufw.md b/technology/applications/network/ufw.md index a8b8019..cb81b85 100644 --- a/technology/applications/network/ufw.md +++ b/technology/applications/network/ufw.md @@ -1,5 +1,7 @@ --- obj: application +repo: https://git.launchpad.net/ufw/ +arch-wiki: https://wiki.archlinux.org/title/Uncomplicated_Firewall --- # ufw @@ -17,19 +19,134 @@ The next line is only needed _once_ the first time you install the package: ufw enable ``` -See status: +**See status:** ```shell ufw status ``` -Enable/Disable +**Enable/Disable:** ```shell ufw enable ufw disable ``` -Allow/Deny ports +**Allow/Deny:** ```shell ufw allow ufw deny -``` \ No newline at end of file + +ufw allow from +ufw deny from +``` + +## Forward policy +Users needing to run a VPN such as OpenVPN or WireGuard can adjust the `DEFAULT_FORWARD_POLICY` variable in `/etc/default/ufw` from a value of `DROP` to `ACCEPT` to forward all packets regardless of the settings of the user interface. To forward for a specific interface like `wg0`, user can add the following line in the filter block + +```sh +# /etc/ufw/before.rules + +-A ufw-before-forward -i wg0 -j ACCEPT +-A ufw-before-forward -o wg0 -j ACCEPT +``` + +You may also need to uncomment + +```sh +# /etc/ufw/sysctl.conf + +net/ipv4/ip_forward=1 +net/ipv6/conf/default/forwarding=1 +net/ipv6/conf/all/forwarding=1 +``` + +## Adding other applications +The PKG comes with some defaults based on the default ports of many common daemons and programs. Inspect the options by looking in the `/etc/ufw/applications.d` directory or by listing them in the program itself: + +```sh +ufw app list +``` + +If users are running any of the applications on a non-standard port, it is recommended to simply make `/etc/ufw/applications.d/custom` containing the needed data using the defaults as a guide. + +> **Warning**: If users modify any of the PKG provided rule sets, these will be overwritten the first time the ufw package is updated. This is why custom app definitions need to reside in a non-PKG file as recommended above! + +Example, deluge with custom tcp ports that range from 20202-20205: + +```ini +[Deluge-my] +title=Deluge +description=Deluge BitTorrent client +ports=20202:20205/tcp +``` + +Should you require to define both tcp and udp ports for the same application, simply separate them with a pipe as shown: this app opens tcp ports 10000-10002 and udp port 10003: + +```ini +ports=10000:10002/tcp|10003/udp +``` + +One can also use a comma to define ports if a range is not desired. This example opens tcp ports 10000-10002 (inclusive) and udp ports 10003 and 10009 + +```ini +ports=10000:10002/tcp|10003,10009/udp +``` + +## Deleting applications +Drawing on the Deluge/Deluge-my example above, the following will remove the standard Deluge rules and replace them with the Deluge-my rules from the above example: + +```sh +ufw delete allow Deluge +ufw allow Deluge-my +``` + +## Black listing IP addresses +It might be desirable to add ip addresses to a blacklist which is easily achieved simply by editing `/etc/ufw/before.rules` and inserting an `iptables DROP` line at the bottom of the file right above the "COMMIT" word. + +```sh +# /etc/ufw/before.rules + +... +## blacklist section +# block just 199.115.117.99 +-A ufw-before-input -s 199.115.117.99 -j DROP +# block 184.105.*.* +-A ufw-before-input -s 184.105.0.0/16 -j DROP + +# don't delete the 'COMMIT' line or these rules won't be processed +COMMIT +``` + +## Rate limiting with ufw +ufw has the ability to deny connections from an IP address that has attempted to initiate 6 or more connections in the last 30 seconds. Users should consider using this option for services such as SSH. + +Using the above basic configuration, to enable rate limiting we would simply replace the allow parameter with the limit parameter. The new rule will then replace the previous. + +```sh +ufw limit SSH +``` + +## Disable remote ping +Change `ACCEPT` to `DROP` in the following lines: + +```sh +/etc/ufw/before.rules + +# ok icmp codes +... +-A ufw-before-input -p icmp --icmp-type echo-request -j ACCEPT +``` + +If you use IPv6, related rules are in `/etc/ufw/before6.rules`. + +## Disable UFW logging +Disabling logging may be useful to stop UFW filling up the kernel (dmesg) and message logs: + +```sh +ufw logging off +``` + +## UFW and Docker +Docker in standard mode writes its own iptables rules and ignores ufw ones, which could lead to security issues. A solution can be found at https://github.com/chaifeng/ufw-docker. + +## GUI frontends +If you are using KDE Plasma, you can just go to `Wi-Fi & Networking > Firewall` to access and adjust firewall configurations given `plasma-firewall` is installed. From 0167d523256e33cb33fc124d2ee402e7c7a553e1 Mon Sep 17 00:00:00 2001 From: JMARyA Date: Mon, 23 Dec 2024 10:48:51 +0100 Subject: [PATCH 03/74] update systemd-boot --- technology/linux/systemd/systemd-boot.md | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/technology/linux/systemd/systemd-boot.md b/technology/linux/systemd/systemd-boot.md index 9b54efa..aac4d52 100644 --- a/technology/linux/systemd/systemd-boot.md +++ b/technology/linux/systemd/systemd-boot.md @@ -10,16 +10,29 @@ systemd-boot is a simple UEFI boot manager which executes configured EFI images. It is simple to configure but can only start EFI executables such as the [Linux](../Linux.md) kernel EFISTUB, UEFI shell, GRUB, or the [Windows](../../windows/Windows.md) Boot Manager. ## Install -Install: +**Install**: ```shell -bootctl install +bootctl install [--esp-path=PATH] ``` -Update: +**Update**: ```shell bootctl update ``` +**Update seed file:** +```shell +bootctl random-seed +``` + +**See status:** +```shell +bootctl status + +# List entries +bootctl list +``` + ## Configuration The loader configuration is stored in the file `_esp_/loader/loader.conf`. From bb16b3fceb277bc4fdb4a7ca8de7a653f4eeac39 Mon Sep 17 00:00:00 2001 From: JMARyA Date: Mon, 23 Dec 2024 11:08:19 +0100 Subject: [PATCH 04/74] update --- technology/applications/network/NetworkManager.md | 2 ++ technology/linux/systemd/Systemd-Mounts.md | 4 ++-- technology/linux/systemd/Systemd-Timers.md | 14 +++++++------- technology/linux/systemd/Systemd.md | 9 +++++++-- technology/linux/systemd/hostnamectl.md | 6 ++++++ technology/linux/systemd/journalctl.md | 6 ++++++ technology/linux/systemd/localectl.md | 7 +++++++ technology/linux/systemd/loginctl.md | 6 ++++++ technology/linux/systemd/networkctl.md | 6 ++++++ technology/linux/systemd/systemd-analyze.md | 6 ++++++ technology/linux/systemd/systemd-ask-pass.md | 6 ++++++ technology/linux/systemd/systemd-detect-virt.md | 6 ++++++ technology/linux/systemd/systemd-firstboot.md | 6 ++++++ technology/linux/systemd/systemd-inhibit.md | 6 ++++++ technology/linux/systemd/systemd-resolve.md | 6 ++++++ technology/linux/systemd/systemd-timesyncd.md | 9 +++++++++ technology/linux/systemd/userdbctl.md | 6 ++++++ 17 files changed, 100 insertions(+), 11 deletions(-) create mode 100644 technology/linux/systemd/hostnamectl.md create mode 100644 technology/linux/systemd/journalctl.md create mode 100644 technology/linux/systemd/localectl.md create mode 100644 technology/linux/systemd/loginctl.md create mode 100644 technology/linux/systemd/networkctl.md create mode 100644 technology/linux/systemd/systemd-analyze.md create mode 100644 technology/linux/systemd/systemd-ask-pass.md create mode 100644 technology/linux/systemd/systemd-detect-virt.md create mode 100644 technology/linux/systemd/systemd-firstboot.md create mode 100644 technology/linux/systemd/systemd-inhibit.md create mode 100644 technology/linux/systemd/systemd-resolve.md create mode 100644 technology/linux/systemd/systemd-timesyncd.md create mode 100644 technology/linux/systemd/userdbctl.md diff --git a/technology/applications/network/NetworkManager.md b/technology/applications/network/NetworkManager.md index 44ed17c..7e20ae4 100644 --- a/technology/applications/network/NetworkManager.md +++ b/technology/applications/network/NetworkManager.md @@ -2,6 +2,8 @@ obj: application --- +#refactor + # NetworkManager [NetworkManager](https://networkmanager.dev/) is a program for providing detection and configuration for systems to automatically connect to networks. NetworkManager's functionality can be useful for both wireless and wired networks. For wireless networks, NetworkManager prefers known wireless networks and has the ability to switch to the most reliable network. NetworkManager-aware applications can switch from online and offline mode. NetworkManager also prefers wired connections over wireless ones, has support for modem connections and certain types of VPN. NetworkManager was originally developed by Red Hat and now is hosted by the GNOME project. diff --git a/technology/linux/systemd/Systemd-Mounts.md b/technology/linux/systemd/Systemd-Mounts.md index c645e8d..7ea58e4 100644 --- a/technology/linux/systemd/Systemd-Mounts.md +++ b/technology/linux/systemd/Systemd-Mounts.md @@ -14,7 +14,7 @@ Fields inside the mount section: - `Options` : Mount options to use when mounting. This takes a comma-separated list of options. This setting is optional. ## Example -``` +```ini [Unit] Documentation=man:fstab(5) man:systemd-fstab-generator(8) SourcePath=/etc/fstab @@ -24,4 +24,4 @@ What=/dev/sda1 Where=/mnt Type=btrfs Options=nosuid,nodev,nofail,compress=zstd,ro -``` \ No newline at end of file +``` diff --git a/technology/linux/systemd/Systemd-Timers.md b/technology/linux/systemd/Systemd-Timers.md index 5b1b1f7..55a0d60 100644 --- a/technology/linux/systemd/Systemd-Timers.md +++ b/technology/linux/systemd/Systemd-Timers.md @@ -18,11 +18,11 @@ systemctl list-timers ## Examples ### Monotonic timer - A timer which will start 15 minutes after boot and again every week while the system is running. -`/etc/systemd/system/foo.timer` -``` +```ini +# /etc/systemd/system/foo.timer + [Unit] Description=Run foo weekly and on boot @@ -35,11 +35,11 @@ WantedBy=timers.target ``` ### Realtime timer - A timer which starts once a week (at 12:00am on Monday). When activated, it triggers the service immediately if it missed the last start time (option `Persistent=true`), for example due to the system being powered off: -`/etc/systemd/system/foo.timer` -``` +```ini +# /etc/systemd/system/foo.timer + [Unit] Description=Run foo weekly @@ -59,4 +59,4 @@ An asterisk may be used to specify any value and commas may be used to list poss In the below example the service is run the first four days of each month at 12:00 PM, but _only_ if that day is a Monday or a Tuesday. -`OnCalendar=Mon,Tue *-*-01..04 12:00:00` \ No newline at end of file +`OnCalendar=Mon,Tue *-*-01..04 12:00:00` diff --git a/technology/linux/systemd/Systemd.md b/technology/linux/systemd/Systemd.md index c508346..c5251a8 100644 --- a/technology/linux/systemd/Systemd.md +++ b/technology/linux/systemd/Systemd.md @@ -65,6 +65,11 @@ systemctl mask unit systemctl unmask unit ``` +Get a list of overridden unit files: +```shell +systemd-delta +``` + ## Power Management Shut down and reboot the system `systemctl reboot` @@ -98,7 +103,7 @@ There are several different start-up types to consider when writing a custom ser - `Type=idle`: _systemd_ will delay execution of the service binary until all jobs are dispatched. Other than that behavior is very similar to `Type=simple`. #### Example -``` +```ini [Unit] Description=Description After=network.target @@ -149,4 +154,4 @@ Below are the fields the Install section has: Systemd supports other unit types than `.service`. Some include: - [Systemd-Timers](Systemd-Timers.md) -- [Systemd-Mounts](Systemd-Mounts.md) \ No newline at end of file +- [Systemd-Mounts](Systemd-Mounts.md) diff --git a/technology/linux/systemd/hostnamectl.md b/technology/linux/systemd/hostnamectl.md new file mode 100644 index 0000000..56bfaa0 --- /dev/null +++ b/technology/linux/systemd/hostnamectl.md @@ -0,0 +1,6 @@ +--- +obj: application +--- + +# hostnamectl +#wip diff --git a/technology/linux/systemd/journalctl.md b/technology/linux/systemd/journalctl.md new file mode 100644 index 0000000..9e119a7 --- /dev/null +++ b/technology/linux/systemd/journalctl.md @@ -0,0 +1,6 @@ +--- +obj: application +--- + +# journalctl +#wip diff --git a/technology/linux/systemd/localectl.md b/technology/linux/systemd/localectl.md new file mode 100644 index 0000000..77ca526 --- /dev/null +++ b/technology/linux/systemd/localectl.md @@ -0,0 +1,7 @@ +--- +obj: application +--- + +# localectl +#wip +https://man.archlinux.org/man/localectl.1 diff --git a/technology/linux/systemd/loginctl.md b/technology/linux/systemd/loginctl.md new file mode 100644 index 0000000..da735c9 --- /dev/null +++ b/technology/linux/systemd/loginctl.md @@ -0,0 +1,6 @@ +--- +obj: application +--- + +# loginctl +#wip diff --git a/technology/linux/systemd/networkctl.md b/technology/linux/systemd/networkctl.md new file mode 100644 index 0000000..0ddbe1f --- /dev/null +++ b/technology/linux/systemd/networkctl.md @@ -0,0 +1,6 @@ +--- +obj: application +--- + +# networkctl +#wip diff --git a/technology/linux/systemd/systemd-analyze.md b/technology/linux/systemd/systemd-analyze.md new file mode 100644 index 0000000..918ccba --- /dev/null +++ b/technology/linux/systemd/systemd-analyze.md @@ -0,0 +1,6 @@ +--- +obj: application +--- + +# systemd-analyze +#wip diff --git a/technology/linux/systemd/systemd-ask-pass.md b/technology/linux/systemd/systemd-ask-pass.md new file mode 100644 index 0000000..c321193 --- /dev/null +++ b/technology/linux/systemd/systemd-ask-pass.md @@ -0,0 +1,6 @@ +--- +obj: application +--- + +# systemd-ask-pass +#wip diff --git a/technology/linux/systemd/systemd-detect-virt.md b/technology/linux/systemd/systemd-detect-virt.md new file mode 100644 index 0000000..1adb851 --- /dev/null +++ b/technology/linux/systemd/systemd-detect-virt.md @@ -0,0 +1,6 @@ +--- +obj: application +--- + +# systemd-detect-virt +#wip diff --git a/technology/linux/systemd/systemd-firstboot.md b/technology/linux/systemd/systemd-firstboot.md new file mode 100644 index 0000000..8073a62 --- /dev/null +++ b/technology/linux/systemd/systemd-firstboot.md @@ -0,0 +1,6 @@ +--- +obj: application +--- + +# systemd-firstboot +#wip diff --git a/technology/linux/systemd/systemd-inhibit.md b/technology/linux/systemd/systemd-inhibit.md new file mode 100644 index 0000000..d728255 --- /dev/null +++ b/technology/linux/systemd/systemd-inhibit.md @@ -0,0 +1,6 @@ +--- +obj: application +--- + +# systemd-inhibit +#wip diff --git a/technology/linux/systemd/systemd-resolve.md b/technology/linux/systemd/systemd-resolve.md new file mode 100644 index 0000000..5896281 --- /dev/null +++ b/technology/linux/systemd/systemd-resolve.md @@ -0,0 +1,6 @@ +--- +obj: application +--- + +# systemd-resolve +#wip diff --git a/technology/linux/systemd/systemd-timesyncd.md b/technology/linux/systemd/systemd-timesyncd.md new file mode 100644 index 0000000..1578234 --- /dev/null +++ b/technology/linux/systemd/systemd-timesyncd.md @@ -0,0 +1,9 @@ +--- +obj: application +arch-wiki: https://wiki.archlinux.org/title/Systemd-timesyncd +--- + +# systemd-timesyncd +#wip + +timedatectl diff --git a/technology/linux/systemd/userdbctl.md b/technology/linux/systemd/userdbctl.md new file mode 100644 index 0000000..90bbd1e --- /dev/null +++ b/technology/linux/systemd/userdbctl.md @@ -0,0 +1,6 @@ +--- +obj: application +--- + +# userdbctl +#wip From f4ba4007aca465fdea28578357a7975a5ac8959e Mon Sep 17 00:00:00 2001 From: JMARyA Date: Mon, 23 Dec 2024 11:25:13 +0100 Subject: [PATCH 05/74] update --- .../linux/systemd/systemd-detect-virt.md | 48 ++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) diff --git a/technology/linux/systemd/systemd-detect-virt.md b/technology/linux/systemd/systemd-detect-virt.md index 1adb851..9be0c68 100644 --- a/technology/linux/systemd/systemd-detect-virt.md +++ b/technology/linux/systemd/systemd-detect-virt.md @@ -1,6 +1,52 @@ --- obj: application +rev: 2024-12-23 --- # systemd-detect-virt -#wip +systemd-detect-virt detects execution in a virtualized environment. It identifies the virtualization technology and can distinguish full machine virtualization from container virtualization. systemd-detect-virt exits with a return value of 0 (success) if a virtualization technology is detected, and non-zero (error) otherwise. By default, any type of virtualization is detected, and the options `--container` and `--vm` can be used to limit what types of virtualization are detected. + +When executed without `--quiet` will print a short identifier for the detected virtualization technology. The following technologies are currently identified: + +| **Type** | **ID** | **Product** | +| --------- | ---------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| vm | `qemu` | QEMU software virtualization, without KVM | +| vm | `kvm` | Linux KVM kernel virtual machine, in combination with QEMU. Not used for other virtualizers using the KVM interfaces, such as Oracle VirtualBox or Amazon EC2 Nitro, see below. | +| vm | `amazon` | Amazon EC2 Nitro using Linux KVM | +| vm | `zvm` | s390 z/VM | +| vm | `vmware` | VMware Workstation or Server, and related products | +| vm | `microsoft` | Hyper-V, also known as Viridian or Windows Server Virtualization | +| vm | `oracle` | Oracle VM VirtualBox (historically marketed by innotek and Sun Microsystems), for legacy and KVM hypervisor | +| vm | `powervm` | IBM PowerVM hypervisor — comes as firmware with some IBM POWER servers | +| vm | `xen` | Xen hypervisor (only domU, not dom0) | +| vm | `bochs` | Bochs Emulator | +| vm | `uml` | User-mode Linux | +| vm | `parallels` | Parallels Desktop, Parallels Server | +| vm | `bhyve` | bhyve, FreeBSD hypervisor | +| vm | `qnx` | QNX hypervisor | +| vm | `acrn` | ACRN hypervisor | +| vm | `apple` | Apple virtualization framework | +| vm | `sre` | LMHS SRE hypervisor | +| vm | `google` | Google Compute Engine | +| container | `openvz` | OpenVZ/Virtuozzo | +| container | `lxc` | Linux container implementation by LXC | +| container | `lxc-libvirt` | Linux container implementation by libvirt | +| container | `systemd-nspawn` | systemd's minimal container implementation, see systemd-nspawn(1) manual page | +| container | `docker` | Docker container manager | +| container | `podman` | Podman container manager | +| container | `rkt` | rkt app container runtime | +| container | `wsl` | Windows Subsystem for Linux | +| container | `proot` | proot userspace chroot/bind mount emulation | +| container | `pouch` | Pouch Container Engine | + +If multiple virtualization solutions are used, only the "innermost" is detected and identified. That means if both machine and container virtualization are used in conjunction, only the latter will be identified (unless `--vm` is passed). + +## Options + +| Option | Description | +| ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `-c, --container` | Only detects container virtualization (i.e. shared kernel virtualization). | +| `-v, --vm` | Only detects hardware virtualization. | +| `-r, --chroot` | Detect whether invoked in a chroot environment. In this mode, no output is written, but the return value indicates whether the process was invoked in a chroot() environment or not. | +| `-q, --quiet` | Suppress output of the virtualization technology identifier. | +| `--list` | Output all currently known and detectable container and VM environments. | From f86008079d815823690e2d2e9f98e72d3554b1c2 Mon Sep 17 00:00:00 2001 From: JMARyA Date: Mon, 23 Dec 2024 14:46:40 +0100 Subject: [PATCH 06/74] update systemd-firstboot --- technology/linux/systemd/systemd-firstboot.md | 41 ++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/technology/linux/systemd/systemd-firstboot.md b/technology/linux/systemd/systemd-firstboot.md index 8073a62..4b70000 100644 --- a/technology/linux/systemd/systemd-firstboot.md +++ b/technology/linux/systemd/systemd-firstboot.md @@ -3,4 +3,43 @@ obj: application --- # systemd-firstboot -#wip +systemd-firstboot allows for setting of basic system settings before or during the first boot of a newly created system. The tool is able of initialize the following system settings: timezone, locale, hostname, the root password, as well as automated generation of a machine ID. + +As systemd-firstboot interacts with the filesystem directly and does not make use of the related systemd services (such as timedatectl, hostnamectl or localectl), it should not be executed on an already running system. + +Settings can be specified non-interactively when externally used on filesystem images, or interactively if executed during the early boot process. + +Usage: `systemd-firstboot [OPTIONS...]` + +## Options + +| Option | Description | +| ------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `--root=root` | Takes a directory path as an argument. All paths will be prefixed with the given alternate root path, including config search paths. This is useful to operate on a system image mounted to the specified directory instead of the host system itself. | +| `--image=path` | Takes a path to a disk image file or block device node. If specified all operations are applied to file system in the indicated disk image. This is similar to `--root=` but operates on file systems stored in disk images or block devices. The disk image should either contain just a file system or a set of file systems within a GPT partition table. | +| `--locale=LOCALE`, `--locale-messages=LOCALE` | Sets the system locale, more specifically the `LANG=` and `LC_MESSAGES` settings. The argument should be a valid locale identifier, such as `de_DE.UTF-8`. This controls the `locale.conf` configuration file. | +| `--keymap=KEYMAP` | Sets the system keyboard layout. The argument should be a valid keyboard map, such as `de-latin1`. This controls the `KEYMAP` entry in the `vconsole.conf` configuration file. | +| `--timezone=TIMEZONE` | Sets the system time zone. The argument should be a valid time zone identifier, such as `Europe/Berlin`. This controls the `localtime` symlink. | +| `--hostname=HOSTNAME` | Sets the system hostname. The argument should be a hostname, compatible with DNS. This controls the `hostname` configuration file. | +| `--setup-machine-id` | Initialize the system's machine ID to a random ID. This controls the `machine-id` file. This option only works in combination with `--root=` or `--image=`. On a running system, machine-id is written by the manager with help from `systemd-machine-id-commit.service`. | +| `--machine-id=ID` | Set the system's machine ID to the specified value. The same restrictions apply as to `--setup-machine-id`. | +| `--root-password=PASSWORD`, `--root-password-file=PATH`, `--root-password-hashed=HASHED_PASSWORD` | Sets the password of the system's root user. This creates/modifies the `passwd` and `shadow` files. This setting exists in three forms: `--root-password=` accepts the password to set directly on the command line, `--root-password-file=` reads it from a file and `--root-password-hashed=` accepts an already hashed password on the command line. | +| `--root-shell=SHELL` | Sets the shell of the system's root user. This creates/modifies the `passwd` file. | +| `--kernel-command-line=CMDLINE` | Sets the system's kernel command line. This controls the `/etc/kernel/cmdline` file which is used by kernel-install. | +| `--prompt-locale`, `--prompt-keymap`, `--prompt-timezone`, `--prompt-hostname`, `--prompt-root-password`, `--prompt-root-shell` | Prompt the user interactively for a specific basic setting. Note that any explicit configuration settings specified on the command line take precedence, and the user is not prompted for it. | +| `--prompt` | Query the user for locale, keymap, timezone, hostname, root's password, and root's shell. | +| `--copy-locale`, `--copy-keymap`, `--copy-timezone`, `--copy-root-password`, `--copy-root-shell` | Copy a specific basic setting from the host. This only works in combination with `--root=` or `--image=`. | +| `--copy` | Copy locale, keymap, time zone, root password and shell from the host. | +| `--force` | Write configuration even if the relevant files already exist. Without this option, systemd-firstboot doesn't modify or replace existing files. Note that when configuring the root account, even with this option, systemd-firstboot only modifies the entry of the "root" user, leaving other entries in `/etc/passwd` and `/etc/shadow` intact. | +| `--reset` | If specified, all existing files that are configured by systemd-firstboot are removed. Note that the files are removed regardless of whether they'll be configured with a new value or not. This operation ensures that the next boot of the image will be considered a first boot, and systemd-firstboot will prompt again to configure each of the removed files. | +| `--delete-root-password` | Removes the password of the system's root user, enabling login as root without a password unless the root account is locked. Note that this is extremely insecure and hence this option should not be used lightly. | +| `--welcome=` | Takes a boolean argument. By default when prompting the user for configuration options a brief welcome text is shown before the first question is asked. Pass false to this option to turn off the welcome text. | + +## Delete existing settings +If the following files are present, systemd-firstboot will not prompt for the setting they relate to. + +```sh +rm /etc/{machine-id,localtime,hostname,shadow,locale.conf} +``` + +Edit `/etc/passwd` and remove the root account from it, otherwise the root will be treating as configured and systemd-firstboot will not prompt for the root password. From 927a163c7f754c5025b97523e361ccbbaeee3c8f Mon Sep 17 00:00:00 2001 From: JMARyA Date: Mon, 23 Dec 2024 15:22:30 +0100 Subject: [PATCH 07/74] update --- technology/linux/fwupd.md | 9 +++++++++ technology/linux/smartctl.md | 6 ++++++ technology/linux/udev.md | 9 +++++++++ technology/linux/udisks.md | 9 +++++++++ 4 files changed, 33 insertions(+) create mode 100644 technology/linux/fwupd.md create mode 100644 technology/linux/smartctl.md create mode 100644 technology/linux/udev.md create mode 100644 technology/linux/udisks.md diff --git a/technology/linux/fwupd.md b/technology/linux/fwupd.md new file mode 100644 index 0000000..76891b3 --- /dev/null +++ b/technology/linux/fwupd.md @@ -0,0 +1,9 @@ +--- +obj: application +arch-wiki: https://wiki.archlinux.org/title/Fwupd +website: https://fwupd.org +repo: https://github.com/fwupd/fwupd +--- + +# fwupd +#wip diff --git a/technology/linux/smartctl.md b/technology/linux/smartctl.md new file mode 100644 index 0000000..e0c1b65 --- /dev/null +++ b/technology/linux/smartctl.md @@ -0,0 +1,6 @@ +--- +obj: application +--- + +# smartctl +#wip diff --git a/technology/linux/udev.md b/technology/linux/udev.md new file mode 100644 index 0000000..0fb4f83 --- /dev/null +++ b/technology/linux/udev.md @@ -0,0 +1,9 @@ +--- +obj: application +arch-wiki: https://wiki.archlinux.org/title/Udev +--- + +# udev +#wip +udev +udevadm diff --git a/technology/linux/udisks.md b/technology/linux/udisks.md new file mode 100644 index 0000000..fb4e585 --- /dev/null +++ b/technology/linux/udisks.md @@ -0,0 +1,9 @@ +--- +obj: application +arch-wiki: https://wiki.archlinux.org/title/Udisks +website: https://www.freedesktop.org/wiki/Software/udisks +repo: https://github.com/storaged-project/udisks +--- + +# udisks +#wip From 95e46634639c63516d5737e04f2c87512d211ace Mon Sep 17 00:00:00 2001 From: JMARyA Date: Wed, 8 Jan 2025 11:48:29 +0100 Subject: [PATCH 08/74] update pacman --- .../applications/package managers/arch-linux/Pacman.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/technology/applications/package managers/arch-linux/Pacman.md b/technology/applications/package managers/arch-linux/Pacman.md index f6d8985..bbaa46e 100644 --- a/technology/applications/package managers/arch-linux/Pacman.md +++ b/technology/applications/package managers/arch-linux/Pacman.md @@ -1,7 +1,7 @@ --- obj: application arch-wiki: https://wiki.archlinux.org/title/Pacman -rev: 2024-12-19 +rev: 2025-01-08 --- # Pacman @@ -48,6 +48,11 @@ List explicitly installed packages: pacman -Qe ``` +List of packages owning a file/dir: +```shell +pacman -Qo /path/to/file +``` + List orphan packages (installed as dependencies and not required anymore): ```shell pacman -Qdt From c1d6c28dff78582fac7496996f0534a9e03461dc Mon Sep 17 00:00:00 2001 From: JMARyA Date: Wed, 8 Jan 2025 13:11:28 +0100 Subject: [PATCH 09/74] add xdg-user-dirs --- technology/linux/XDG.md | 74 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 technology/linux/XDG.md diff --git a/technology/linux/XDG.md b/technology/linux/XDG.md new file mode 100644 index 0000000..b00eebc --- /dev/null +++ b/technology/linux/XDG.md @@ -0,0 +1,74 @@ +--- +obj: concept +arch-wiki: https://wiki.archlinux.org/title/XDG_user_directories +rev: 2025-01-08 +--- + +# XDG Directories +The XDG User Directories are a standardized way to define and access common user directories in Unix-like operating systems, primarily defined by the XDG Base Directory Specification from the FreeDesktop.org project. + +These directories provide users and applications with predefined paths for storing specific types of files, such as documents, downloads, music, and more. By using these directories, applications can integrate better with the operating system's file structure and provide a consistent experience for users. + +## Creating default directories +Creating a full suite of localized default user directories within the `$HOME` directory can be done automatically by running: + +```sh +xdg-user-dirs-update +``` + +> **Tip**: To force the creation of English-named directories, `LC_ALL=C.UTF-8 xdg-user-dirs-update --force` can be used. + +When executed, it will also automatically: +- Create a local `~/.config/user-dirs.dirs` configuration file: used by applications to find and use home directories specific to an account. +- Create a local `~/.config/user-dirs.locale` configuration file: used to set the language according to the locale in use. + +The user service `xdg-user-dirs-update.service` will also be installed and enabled by default, in order to keep your directories up to date by running this command at the beginning of each login session. + +## Creating custom directories +Both the local `~/.config/user-dirs.dirs` and global `/etc/xdg/user-dirs.defaults` configuration files use the following environmental variable format to point to user directories: `XDG_DIRNAME_DIR="$HOME/directory_name"` An example configuration file may likely look like this (these are all the template directories): + +```sh +# ~/.config/user-dirs.dirs + +XDG_DESKTOP_DIR="$HOME/Desktop" +XDG_DOCUMENTS_DIR="$HOME/Documents" +XDG_DOWNLOAD_DIR="$HOME/Downloads" +XDG_MUSIC_DIR="$HOME/Music" +XDG_PICTURES_DIR="$HOME/Pictures" +XDG_PUBLICSHARE_DIR="$HOME/Public" +XDG_TEMPLATES_DIR="$HOME/Templates" +XDG_VIDEOS_DIR="$HOME/Videos" +``` + +As xdg-user-dirs will source the local configuration file to point to the appropriate user directories, it is therefore possible to specify custom folders. For example, if a custom folder for the `XDG_DOWNLOAD_DIR` variable has named `$HOME/Internet` in `~/.config/user-dirs.dirs` any application that uses this variable will use this directory. + +> **Note**: Like with many configuration files, local settings override global settings. It will also be necessary to create any new custom directories. + +Alternatively, it is also possible to specify custom folders using the command line. For example, the following command will produce the same results as the above configuration file edit: + +```sh +xdg-user-dirs-update --set DOWNLOAD ~/Internet +``` + +## Querying configured directories +Once set, any user directory can be viewed with xdg-user-dirs. For example, the following command will show the location of the Templates directory, which of course corresponds to the `XDG_TEMPLATES_DIR` variable in the local configuration file: + +```sh +xdg-user-dir TEMPLATES +``` + +## Specification +Please read the full specification. This section will attempt to break down the essence of what it tries to achieve. + +Only `XDG_RUNTIME_DIR` is set by default through `pam_systemd`. It is up to the user to explicitly define the other variables according to the specification. + +### User directories +- `XDG_CONFIG_HOME`: Where user-specific configurations should be written (analogous to `/etc`). Should default to `$HOME/.config`. +- `XDG_CACHE_HOME`: Where user-specific non-essential (cached) data should be written (analogous to `/var/cache`). Should default to `$HOME/.cache`. +- `XDG_DATA_HOME`: Where user-specific data files should be written (analogous to `/usr/share`). Should default to `$HOME/.local/share`. +- `XDG_STATE_HOME`: Where user-specific state files should be written (analogous to `/var/lib`). Should default to `$HOME/.local/state`. +- `XDG_RUNTIME_DIR`: Used for non-essential, user-specific data files such as sockets, named pipes, etc. Not required to have a default value; warnings should be issued if not set or equivalents provided. Must be owned by the user with an access mode of `0700`. Filesystem fully featured by standards of OS. Must be on the local filesystem. May be subject to periodic cleanup. Modified every 6 hours or set sticky bit if persistence is desired. Can only exist for the duration of the user's login. Should not store large files as it may be mounted as a tmpfs.`pam_systemd` sets this to `/run/user/$UID`. + +### System directories +- `XDG_DATA_DIRS`: List of directories separated by `:` (analogous to `PATH`). Should default to `/usr/local/share:/usr/share`. +- `XDG_CONFIG_DIRS`: List of directories separated by `:` (analogous to `PATH`). Should default to `/etc/xdg`. From 323d59d281b6ae6ea5fa02d3b1a538f752fc0f9d Mon Sep 17 00:00:00 2001 From: JMARyA Date: Thu, 9 Jan 2025 10:52:16 +0100 Subject: [PATCH 10/74] add bwrap + age --- technology/applications/Applications.md | 4 +- .../applications/utilities/bubblewrap.md | 103 +++++++++++++++ technology/cryptography/age.md | 123 ++++++++++++++++++ 3 files changed, 229 insertions(+), 1 deletion(-) create mode 100644 technology/applications/utilities/bubblewrap.md create mode 100644 technology/cryptography/age.md diff --git a/technology/applications/Applications.md b/technology/applications/Applications.md index 010685c..99fa36d 100644 --- a/technology/applications/Applications.md +++ b/technology/applications/Applications.md @@ -1,6 +1,6 @@ --- obj: meta/collection -rev: 2024-12-10 +rev: 2025-01-09 --- # Applications @@ -233,6 +233,7 @@ rev: 2024-12-10 - [yazi](./cli/yazi.md) - [GPG](../cryptography/GPG.md) - [OpenSSL](../cryptography/OpenSSL.md) +- [age](../cryptography/age.md) - [tomb](./cli/tomb.md) - [dysk](./cli/dysk.md) - [pass](./cli/pass.md) @@ -252,6 +253,7 @@ rev: 2024-12-10 - [wine](../windows/Wine.md) - [sbctl](../linux/sbctl.md) - [systemd-cryptenroll](../linux/systemd/systemd-cryptenroll.md) +- [bubblewrap](./utilities/bubblewrap.md) ## Development - [act](./development/act.md) diff --git a/technology/applications/utilities/bubblewrap.md b/technology/applications/utilities/bubblewrap.md new file mode 100644 index 0000000..0d726d9 --- /dev/null +++ b/technology/applications/utilities/bubblewrap.md @@ -0,0 +1,103 @@ +--- +obj: application +repo: https://github.com/containers/bubblewrap +arch-wiki: https://wiki.archlinux.org//title/Bubblewrap +rev: 2025-01-09 +--- + +# Bubblewrap +Bubblewrap is a lightweight sandbox application used by Flatpak and other container tools. It has a small installation footprint and minimal resource requirements. Notable features include support for cgroup/IPC/mount/network/PID/user/UTS namespaces and seccomp filtering. Note that bubblewrap drops all capabilities within a sandbox and that child tasks cannot gain greater privileges than its parent. + +## Configuration +Bubblewrap can be called directly from the command-line and/or within shell scripts as part of a complex wrapper. + +A no-op bubblewrap invocation is as follows: + +```sh +bwrap --dev-bind / / bash +``` + +This will spawn a Bash process which should behave exactly as outside a sandbox in most cases. If a sandboxed program misbehaves, you may want to start from the above no-op invocation, and work your way towards a more secure configuration step-by-step. + +### Desktop entries +Leverage Bubblewrap within desktop entries: +- Bind as read-write the entire host `/` directory to `/` in the sandbox +- Re-bind as read-only the `/var` and `/etc` directories in the sandbox +- Mount a new devtmpfs filesystem to `/dev` in the sandbox +- Create a tmpfs filesystem over the sandboxed `/run` directory +- Disable network access by creating new network namespace + +```ini +[Desktop Entry] +Name=nano Editor +Exec=bwrap --bind / / --dev /dev --tmpfs /run --unshare-net st -e nano -o . %f +Type=Application +MimeType=text/plain; +``` + +> **Note**: `--dev /dev` is required to write to `/dev/pty` + +## Options +Usage: `bwrap [optiosn] [command]` + +| Option | Description | +| ------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `--args FD` | Parse nul-separated arguments from the given file descriptor. This option can be used multiple times to parse options from multiple sources. | +| `--argv0 VALUE` | Set `argv[0]` to the value VALUE before running the program | +| `--unshare-user` | Create a new user namespace | +| `--unshare-user-try` | Create a new user namespace if possible else skip it | +| `--unshare-ipc` | Create a new ipc namespace | +| `--unshare-pid` | Create a new pid namespace | +| `--unshare-net` | Create a new network namespace | +| `--unshare-uts` | Create a new uts namespace | +| `--unshare-cgroup` | Create a new cgroup namespace | +| `--unshare-cgroup-try` | Create a new cgroup namespace if possible else skip it | +| `--unshare-all` | Unshare all possible namespaces. Currently equivalent with: `--unshare-user-try --unshare-ipc --unshare-pid --unshare-net --unshare-uts --unshare-cgroup-try` | +| `--share-net` | Retain the network namespace, overriding an earlier `--unshare-all` or `--unshare-net` | +| `--userns FD` | Use an existing user namespace instead of creating a new one. The namespace must fulfil the permission requirements for `setns()`, which generally means that it must be a descendant of the currently active user namespace, owned by the same user. | +| `--disable-userns` | Prevent the process in the sandbox from creating further user namespaces, so that it cannot rearrange the filesystem namespace or do other more complex namespace modification. | +| `--assert-userns-disabled` | Confirm that the process in the sandbox has been prevented from creating further user namespaces, but without taking any particular action to prevent that. For example, this can be combined with --userns to check that the given user namespace has already been set up to prevent the creation of further user namespaces. | +| `--pidns FD` | Use an existing pid namespace instead of creating one. This is often used with `--userns`, because the pid namespace must be owned by the same user namespace that bwrap uses. | +| `--uid UID` | Use a custom user id in the sandbox (requires `--unshare-user`) | +| `--gid GID` | Use a custom group id in the sandbox (requires `--unshare-user`) | +| `--hostname HOSTNAME` | Use a custom hostname in the sandbox (requires `--unshare-uts`) | +| `--chdir DIR` | Change directory to DIR | +| `--setenv VAR VALUE` | Set an environment variable | +| `--unsetenv VAR` | Unset an environment variable | +| `--clearenv` | Unset all environment variables, except for PWD and any that are subsequently set by `--setenv` | +| `--lock-file DEST` | Take a lock on DEST while the sandbox is running. This option can be used multiple times to take locks on multiple files. | +| `--sync-fd FD` | Keep this file descriptor open while the sandbox is running | +| `--perms OCTAL` | This option does nothing on its own, and must be followed by one of the options that it affects. It sets the permissions for the next operation to OCTAL. Subsequent operations are not affected: for example, `--perms 0700 --tmpfs /a --tmpfs /b` will mount `/a` with permissions `0700`, then return to the default permissions for `/b`. Note that `--perms` and `--size` can be combined: `--perms 0700 --size 10485760 --tmpfs /s` will apply permissions as well as a maximum size to the created tmpfs. | +| `--size BYTES` | This option does nothing on its own, and must be followed by `--tmpfs`. It sets the size in bytes for the next tmpfs. For example, `--size 10485760 --tmpfs /tmp` will create a tmpfs at `/tmp` of size 10MiB. Subsequent operations are not affected. | +| `--bind SRC DEST` | Bind mount the host path SRC on DEST | +| `--bind-try SRC DEST` | Equal to `--bind` but ignores non-existent SRC | +| `--dev-bind SRC DEST` | Bind mount the host path SRC on DEST, allowing device access | +| `--dev-bind-try SRC DEST` | Equal to `--dev-bind` but ignores non-existent SRC | +| `--ro-bind SRC DEST` | Bind mount the host path SRC readonly on DEST | +| `--ro-bind-try SRC DEST` | Equal to `--ro-bind` but ignores non-existent SRC | +| `--remount-ro DEST` | Remount the path DEST as readonly. It works only on the specified mount point, without changing any other mount point under the specified path | +| `--overlay-src SRC` | This option does nothing on its own, and must be followed by one of the other overlay options. It specifies a host path from which files should be read if they aren't present in a higher layer. | +| `--overlay RWSRC WORKDIR DEST`, `--tmp-overlay DEST`, `--ro-overlay DEST` | Use overlayfs to mount the host paths specified by `RWSRC` and all immediately preceding `--overlay-src` on `DEST`. `DEST` will contain the union of all the files in all the layers. With `--overlay` all writes will go to `RWSRC`. Reads will come preferentially from `RWSRC`, and then from any `--overlay-src` paths. `WORKDIR` must be an empty directory on the same filesystem as `RWSRC`, and is used internally by the kernel. With `--tmp-overlay` all writes will go to the tmpfs that hosts the sandbox root, in a location not accessible from either the host or the child process. Writes will therefore not be persisted across multiple runs. With `--ro-overlay` the filesystem will be mounted read-only. This option requires at least two `--overlay-src` to precede it. | +| `--proc DEST` | Mount procfs on DEST | +| `--dev DEST` | Mount new devtmpfs on DEST | +| `--tmpfs DEST` | Mount new tmpfs on DEST. If the previous option was `--perms`, it sets the mode of the tmpfs. Otherwise, the tmpfs has mode `0755`. If the previous option was `--size`, it sets the size in bytes of the tmpfs. Otherwise, the tmpfs has the default size. | +| `--mqueue DEST` | Mount new mqueue on DEST | +| `--dir DEST` | Create a directory at DEST. If the directory already exists, its permissions are unmodified, ignoring `--perms` (use `--chmod` if the permissions of an existing directory need to be changed). If the directory is newly created and the previous option was `--perms`, it sets the mode of the directory. Otherwise, newly-created directories have mode `0755`. | +| `--file FD DEST` | Copy from the file descriptor FD to DEST. If the previous option was `--perms`, it sets the mode of the new file. Otherwise, the file has mode `0666` (note that this is not the same as `--bind-data`). | +| `--bind-data FD DEST` | Copy from the file descriptor FD to a file which is bind-mounted on DEST. If the previous option was `--perms`, it sets the mode of the new file. Otherwise, the file has mode `0600` (note that this is not the same as `--file`). | +| `--ro-bind-data FD DEST` | Copy from the file descriptor FD to a file which is bind-mounted read-only on DEST. If the previous option was `--perms`, it sets the mode of the new file. Otherwise, the file has mode `0600` (note that this is not the same as `--file`). | +| `--symlink SRC DEST` | Create a symlink at DEST with target SRC. | +| `--chmod OCTAL PATH` | Set the permissions of PATH, which must already exist, to OCTAL. | +| `--seccomp FD` | Load and use seccomp rules from FD. The rules need to be in the form of a compiled cBPF program, as generated by seccomp_export_bpf. If this option is given more than once, only the last one is used. Use `--add-seccomp-fd` if multiple seccomp programs are needed. | +| `--add-seccomp-fd FD` | Load and use seccomp rules from FD. The rules need to be in the form of a compiled cBPF program, as generated by seccomp_export_bpf. This option can be repeated, in which case all the seccomp programs will be loaded in the order given (note that the kernel will evaluate them in reverse order, so the last program on the bwrap command-line is evaluated first). All of them, except possibly the last, must allow use of the PR_SET_SECCOMP prctl. This option cannot be combined with `--seccomp`. | +| `--exec-label LABEL` | Exec Label from the sandbox. On an SELinux system you can specify the SELinux context for the sandbox process(s). | +| `--file-label LABEL` | File label for temporary sandbox content. On an SELinux system you can specify the SELinux context for the sandbox content. | +| `--block-fd FD` | Block the sandbox on reading from FD until some data is available. | +| `--userns-block-fd FD` | Do not initialize the user namespace but wait on FD until it is ready. This allow external processes (like newuidmap/newgidmap) to setup the user namespace before it is used by the sandbox process. | +| `--info-fd FD` | Write information in JSON format about the sandbox to FD. | +| `--json-status-fd FD` | Multiple JSON documents are written to FD, one per line. | +| `--new-session` | Create a new terminal session for the sandbox (calls `setsid()`). This disconnects the sandbox from the controlling terminal which means the sandbox can't for instance inject input into the terminal. Note: In a general sandbox, if you don't use `--new-session`, it is recommended to use seccomp to disallow the `TIOCSTI` ioctl, otherwise the application can feed keyboard input to the terminal which can e.g. lead to out-of-sandbox command execution. | +| `--die-with-parent` | Ensures child process (COMMAND) dies when bwrap's parent dies. Kills (SIGKILL) all bwrap sandbox processes in sequence from parent to child including COMMAND process when bwrap or bwrap's parent dies. | +| `--as-pid-1` | Do not create a process with PID=1 in the sandbox to reap child processes. | +| `--cap-add CAP` | Add the specified capability CAP, e.g. `CAP_DAC_READ_SEARCH`, when running as privileged user. It accepts the special value `ALL` to add all the permitted caps. | +| `--cap-drop CAP` | Drop the specified capability when running as privileged user. It accepts the special value `ALL` to drop all the caps. By default no caps are left in the sandboxed process. The `--cap-add` and `--cap-drop` options are processed in the order they are specified on the command line. Please be careful to the order they are specified. | diff --git a/technology/cryptography/age.md b/technology/cryptography/age.md new file mode 100644 index 0000000..d8d7a6f --- /dev/null +++ b/technology/cryptography/age.md @@ -0,0 +1,123 @@ +--- +obj: application +repo: https://github.com/FiloSottile/age +source: https://age-encryption.org/v1 +rev: 2025-01-09 +--- + +# age +age is a simple, modern and secure file encryption tool, format, and Go library. + +It features small explicit keys, no config options, and UNIX-style composability. + +```sh +$ age-keygen -o key.txt +Public key: age1ql3z7hjy54pw3hyww5ayyfg7zqgvc7w3j2elw8zmrj2kg5sfn9aqmcac8p +$ PUBLIC_KEY=$(age-keygen -y key.txt) +$ tar cvz ~/data | age -r $PUBLIC_KEY > data.tar.gz.age +$ age --decrypt -i key.txt data.tar.gz.age > data.tar.gz +``` + +## Usage +For the full documentation, read [the age(1) man page](https://filippo.io/age/age.1). + +``` +Usage: + age [--encrypt] (-r RECIPIENT | -R PATH)... [--armor] [-o OUTPUT] [INPUT] + age [--encrypt] --passphrase [--armor] [-o OUTPUT] [INPUT] + age --decrypt [-i PATH]... [-o OUTPUT] [INPUT] + +Options: + -e, --encrypt Encrypt the input to the output. Default if omitted. + -d, --decrypt Decrypt the input to the output. + -o, --output OUTPUT Write the result to the file at path OUTPUT. + -a, --armor Encrypt to a PEM encoded format. + -p, --passphrase Encrypt with a passphrase. + -r, --recipient RECIPIENT Encrypt to the specified RECIPIENT. Can be repeated. + -R, --recipients-file PATH Encrypt to recipients listed at PATH. Can be repeated. + -i, --identity PATH Use the identity file at PATH. Can be repeated. + +INPUT defaults to standard input, and OUTPUT defaults to standard output. +If OUTPUT exists, it will be overwritten. + +RECIPIENT can be an age public key generated by age-keygen ("age1...") +or an SSH public key ("ssh-ed25519 AAAA...", "ssh-rsa AAAA..."). + +Recipient files contain one or more recipients, one per line. Empty lines +and lines starting with "#" are ignored as comments. "-" may be used to +read recipients from standard input. + +Identity files contain one or more secret keys ("AGE-SECRET-KEY-1..."), +one per line, or an SSH key. Empty lines and lines starting with "#" are +ignored as comments. Passphrase encrypted age files can be used as +identity files. Multiple key files can be provided, and any unused ones +will be ignored. "-" may be used to read identities from standard input. + +When --encrypt is specified explicitly, -i can also be used to encrypt to an +identity file symmetrically, instead or in addition to normal recipients. +``` + +### Multiple recipients +Files can be encrypted to multiple recipients by repeating `-r/--recipient`. Every recipient will be able to decrypt the file. + +``` +$ age -o example.jpg.age -r age1ql3z7hjy54pw3hyww5ayyfg7zqgvc7w3j2elw8zmrj2kg5sfn9aqmcac8p \ + -r age1lggyhqrw2nlhcxprm67z43rta597azn8gknawjehu9d9dl0jq3yqqvfafg example.jpg +``` + +#### Recipient files +Multiple recipients can also be listed one per line in one or more files passed with the `-R/--recipients-file` flag. + +``` +$ cat recipients.txt +# Alice +age1ql3z7hjy54pw3hyww5ayyfg7zqgvc7w3j2elw8zmrj2kg5sfn9aqmcac8p +# Bob +age1lggyhqrw2nlhcxprm67z43rta597azn8gknawjehu9d9dl0jq3yqqvfafg +$ age -R recipients.txt example.jpg > example.jpg.age +``` + +If the argument to `-R` (or `-i`) is `-`, the file is read from standard input. + +### Passphrases +Files can be encrypted with a passphrase by using `-p/--passphrase`. By default age will automatically generate a secure passphrase. Passphrase protected files are automatically detected at decrypt time. + +``` +$ age -p secrets.txt > secrets.txt.age +Enter passphrase (leave empty to autogenerate a secure one): +Using the autogenerated passphrase "release-response-step-brand-wrap-ankle-pair-unusual-sword-train". +$ age -d secrets.txt.age > secrets.txt +Enter passphrase: +``` + +### Passphrase-protected key files +If an identity file passed to `-i` is a passphrase encrypted age file, it will be automatically decrypted. + +``` +$ age-keygen | age -p > key.age +Public key: age1yhm4gctwfmrpz87tdslm550wrx6m79y9f2hdzt0lndjnehwj0ukqrjpyx5 +Enter passphrase (leave empty to autogenerate a secure one): +Using the autogenerated passphrase "hip-roast-boring-snake-mention-east-wasp-honey-input-actress". +$ age -r age1yhm4gctwfmrpz87tdslm550wrx6m79y9f2hdzt0lndjnehwj0ukqrjpyx5 secrets.txt > secrets.txt.age +$ age -d -i key.age secrets.txt.age > secrets.txt +Enter passphrase for identity file "key.age": +``` + +Passphrase-protected identity files are not necessary for most use cases, where access to the encrypted identity file implies access to the whole system. However, they can be useful if the identity file is stored remotely. + +### SSH keys +As a convenience feature, age also supports encrypting to `ssh-rsa` and `ssh-ed25519` SSH public keys, and decrypting with the respective private key file. (`ssh-agent` is not supported.) + +``` +$ age -R ~/.ssh/id_ed25519.pub example.jpg > example.jpg.age +$ age -d -i ~/.ssh/id_ed25519 example.jpg.age > example.jpg +``` + +Note that SSH key support employs more complex cryptography, and embeds a public key tag in the encrypted file, making it possible to track files that are encrypted to a specific public key. + +#### Encrypting to a GitHub user +Combining SSH key support and `-R`, you can easily encrypt a file to the SSH keys listed on a GitHub profile. + +``` +$ curl https://github.com/benjojo.keys | age -R - example.jpg > example.jpg.age +``` From 28933b6af81d01e6fb0b96cd682e015e8a34b05e Mon Sep 17 00:00:00 2001 From: JMARyA Date: Tue, 28 Jan 2025 10:31:34 +0100 Subject: [PATCH 11/74] update --- technology/applications/cli/intermodal.md | 57 +++++++++++++++----- technology/dev/programming/languages/Dart.md | 4 +- 2 files changed, 47 insertions(+), 14 deletions(-) diff --git a/technology/applications/cli/intermodal.md b/technology/applications/cli/intermodal.md index 8230bb5..d322d70 100644 --- a/technology/applications/cli/intermodal.md +++ b/technology/applications/cli/intermodal.md @@ -1,38 +1,71 @@ --- obj: application repo: https://github.com/casey/intermodal +website: imdl.io +rev: 2025-01-28 --- # Intermodal -[Repo](https://github.com/casey/intermodal) Intermodal is a user-friendly and featureful command-line [BitTorrent](../../internet/BitTorrent.md) metainfo utility. The binary is called `imdl` and runs on [Linux](../../linux/Linux.md), [Windows](../../windows/Windows.md), and [macOS](../../macos/macOS.md). ## Usage ### Create torrent file: ```shell -imdl torrent create file +imdl torrent create [OPTIONS] ``` -Flags: -```shell --N, --name Set name of torrent --i, --input Torrent Files --c, --comment Torrent Comment --a, --announce Torrent Tracker -``` +| Option | Description | +| -------------------------------- | ----------------------------------------------------------------------------------------------------------- | +| `-F, --follow-symlinks` | Follow symlinks in torrent input (default: no) | +| `-f, --force` | Overwrite destination `.torrent` file if it exists | +| `--ignore` | Skip files listed in `.gitignore`, `.ignore`, `.git/info/exclude`, and `git config --get core.excludesFile` | +| `-h, --include-hidden` | Include hidden files that would otherwise be skipped | +| `-j, --include-junk` | Include junk files that would otherwise be skipped | +| `-M, --md5` | Include MD5 checksum of each file in the torrent ( warning: MD5 is broken) | +| `--no-created-by` | Do not populate `created by` key with imdl version information | +| `--no-creation-date` | Do not populate `creation date` key with current time | +| `-O, --open` | Open `.torrent` file after creation (uses platform-specific opener) | +| `--link` | Print created torrent `magnet:` URL to standard output | +| `-P, --private` | Set private flag, restricting peer discovery | +| `-S, --show` | Display information about the created torrent file | +| `-V, --version` | Print version number | +| `-A, --allow ` | Allow specific lint (e.g., `small-piece-length`, `private-trackerless`) | +| `-a, --announce ` | Use primary tracker announce URL for the torrent | +| `-t, --announce-tier ` | Add tiered tracker announce URLs to the torrent metadata, separate their announce URLs with commas. | +| `-c, --comment ` | Set comment text in the generated `.torrent` file | +| `--node ` | Add DHT bootstrap node to the torrent for peer discovery | +| `-g, --glob ` | Include or exclude files matching specific glob patterns | +| `-i, --input ` | Read contents from input source (file, dir, or standard input) | +| `-N, --name ` | Set name of the encoded magnet link to specific text | +| `-o, --output ` | Save `.torrent` file to specified target or print to output | +| `--peer ` | Add peer specification to the generated magnet link | +| `-p, --piece-length ` | Set piece length for encoding torrent metadata | +| `--sort-by ` | Determine order of files within the encoded torrent (path, size, or both) | +| `-s, --source ` | Set source field in encoded torrent metadata to specific text | +| `--update-url ` | Set URL where revised version of metainfo can be downloaded | ### Show torrent information ```shell imdl torrent show ``` +You can output the information as JSON using `--json`. + ### Verify torrent ```shell imdl torrent verify imdl torrent verify --input torr.torrent --content file ``` -### Generate magnet link +### Magnet Links ```shell -imdl torrent link -``` \ No newline at end of file +# Get magnet link from torrent file +imdl torrent link [-s, --select-only ...] +# Select files to download. Values are indices into the `info.files` list, e.g. `--select-only 1,2,3`. + +# Get torrent file from magnet link +imdl torrent from-link [-o, --output ] + +# Announce a torrent +imdl torrent announce +``` diff --git a/technology/dev/programming/languages/Dart.md b/technology/dev/programming/languages/Dart.md index 45d9586..2a3a183 100644 --- a/technology/dev/programming/languages/Dart.md +++ b/technology/dev/programming/languages/Dart.md @@ -401,11 +401,11 @@ You've seen most of the remaining operators in other examples: ### Comments Dart supports single-line comments, multi-line comments, and documentation comments. -####Single-line comments +#### Single-line comments A single-line comment begins with `//`. Everything between `//` and the end of line is ignored by the Dart compiler. ```dart void main() { - // TODO: refactor into an AbstractLlamaGreetingFactory? + // refactor into an AbstractLlamaGreetingFactory? print('Welcome to my Llama farm!'); } ``` From ee55a0b016eb5c08fa18279f1ed25b7d2ee9a7a0 Mon Sep 17 00:00:00 2001 From: JMARyA Date: Thu, 30 Jan 2025 16:17:23 +0100 Subject: [PATCH 12/74] update --- technology/applications/Applications.md | 13 +- technology/applications/cli/kondo.md | 29 ++ technology/applications/cli/mhost.md | 122 +++++ technology/applications/cli/names.md | 17 + technology/applications/cli/qrtool.md | 31 ++ technology/applications/cli/refold.md | 23 + technology/applications/cli/rexturl.md | 45 ++ technology/applications/cli/tagctl.md | 54 +++ technology/applications/cli/unionfarm.md | 54 +++ technology/applications/cli/xt.md | 22 + .../applications/utilities/retry-cli.md | 19 + technology/applications/web/bitmagnet.md | 457 ++++++++++++++++++ 12 files changed, 885 insertions(+), 1 deletion(-) create mode 100644 technology/applications/cli/kondo.md create mode 100644 technology/applications/cli/mhost.md create mode 100644 technology/applications/cli/names.md create mode 100644 technology/applications/cli/qrtool.md create mode 100644 technology/applications/cli/refold.md create mode 100644 technology/applications/cli/rexturl.md create mode 100644 technology/applications/cli/tagctl.md create mode 100644 technology/applications/cli/unionfarm.md create mode 100644 technology/applications/cli/xt.md create mode 100644 technology/applications/utilities/retry-cli.md create mode 100644 technology/applications/web/bitmagnet.md diff --git a/technology/applications/Applications.md b/technology/applications/Applications.md index 99fa36d..398209b 100644 --- a/technology/applications/Applications.md +++ b/technology/applications/Applications.md @@ -1,6 +1,6 @@ --- obj: meta/collection -rev: 2025-01-09 +rev: 2025-01-30 --- # Applications @@ -105,6 +105,7 @@ rev: 2025-01-09 - [SnapDrop](./network/SnapDrop.md) - [OnionShare](./network/OnionShare.md) - [qBittorrent](./network/qBittorrent.md) +- [bitmagnet](./web/bitmagnet.md) ## Utilities - [Bottles](./utilities/Bottles.md) @@ -239,6 +240,14 @@ rev: 2025-01-09 - [pass](./cli/pass.md) - [ocrs](./cli/ocrs.md) - [stew](./cli/stew.md) +- [names](./cli/names.md) +- [qrtool](./cli/qrtool.md) +- [tagctl](./cli/tagctl.md) +- [unionfarm](./cli/unionfarm.md) +- [xt](./cli/xt.md) +- [refold](./cli/refold.md) +- [rexturl](./cli/rexturl.md) +- [mhost](./cli/mhost.md) ## System - [Core Utils](./cli/system/Core%20Utils.md) @@ -254,6 +263,7 @@ rev: 2025-01-09 - [sbctl](../linux/sbctl.md) - [systemd-cryptenroll](../linux/systemd/systemd-cryptenroll.md) - [bubblewrap](./utilities/bubblewrap.md) +- [retry-cli](./utilities/retry-cli.md) ## Development - [act](./development/act.md) @@ -268,6 +278,7 @@ rev: 2025-01-09 - [Podman](../tools/Podman.md) - [serie](./cli/serie.md) - [usql](./cli/usql.md) +- [kondo](./cli/kondo.md) ## Media - [yt-dlp](./media/yt-dlp.md) diff --git a/technology/applications/cli/kondo.md b/technology/applications/cli/kondo.md new file mode 100644 index 0000000..0bcf5ab --- /dev/null +++ b/technology/applications/cli/kondo.md @@ -0,0 +1,29 @@ +--- +obj: application +repo: https://github.com/tbillington/kondo +rev: 2025-01-28 +--- + +# Kondo 🧹 +Cleans `node_modules`, `target`, `build`, and friends from your projects. + +Excellent if +- 💾 You want to back up your code but don't want to include GBs of dependencies +- 🧑‍🎨 You try out lots of projects but hate how much space they occupy +- ⚡️ You like keeping your disks lean and zippy + +## Usage +Kondo recursively cleans project directories. + +Supported project types: Cargo, Node, Unity, SBT, Haskell Stack, Maven, Unreal Engine, Jupyter Notebook, Python, Jupyter Notebooks, CMake, Composer, Pub, Elixir, Swift, Gradle, and .NET projects. + +Usage: `kondo [OPTIONS] [DIRS]...` + +| Option | Description | +| ----------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `-I, --ignored-dirs ` | Directories to ignore. Will also prevent recursive traversal within | +| `-q, --quiet...` | Quiet mode. Won't output to the terminal. `-qq` prevents all output | +| `-a, --all` | Clean all found projects without confirmation | +| `-L, --follow-symlinks` | Follow symbolic links | +| `-s, --same-filesystem` | Restrict directory traversal to the root filesystem | +| `-o, --older ` | Only directories with a file last modified n units of time ago will be looked at. Ex: 20d. Units are m: minutes, h: hours, d: days, w: weeks, M: months and y: years | diff --git a/technology/applications/cli/mhost.md b/technology/applications/cli/mhost.md new file mode 100644 index 0000000..a070292 --- /dev/null +++ b/technology/applications/cli/mhost.md @@ -0,0 +1,122 @@ +--- +obj: application +repo: https://github.com/lukaspustina/mhost +website: https://mhost.pustina.de +rev: 2025-01-30 +--- + +# mhost +A modern take on the classic host DNS lookup utility including an easy to use and very fast Rust lookup library. + +## Use Cases +### Just lookup an IP address +```shell +$ mhost l github.com +``` + +### Just lookup an IP address, using even more than just your local name servers +```shell +$ mhost server-lists public-dns -o servers.txt +$ mhost --limit 6000 --max-concurrent-servers 1000 --timeout 1 -f servers.txt l www.github.com +``` + +The first command downloads a list of public available name servers that are maintained by the Public DNS community. Usually only a subset of these are reachable, but it still a large set of active name servers. + +The second command uses the name servers list from before and queries all of them concurrently. These settings are very aggressive and highly stresses your internet connection. mhost default settings are set much more cautiously. + +### Just lookup an IP address, using UDP, TCP, DoT, and DoH +```shell +$ mhost -s 1.1.1.1 -s tcp:1.1.1.1 -s tls:1.1.1.1:853,tls_auth_name=cloudflare-dns.com -s https:1.1.1.1:443,tls_auth_name=cloudflare-dns.com,name=Cloudflare -p l github.com +``` + +As already mentioned before, mhost supports DNS queries over UDP, TCP, DNS over TLS (DoT), as well as DNS over HTTPS (DoH). In the above example, mhost uses all four protocols to query Cloudflare’s name servers. + +This command also shows the syntax for name server specification, which in general is `protocol::port,tls_auth_name=hostname,name=human-readable-name`. + +### Discover a domain +Sometimes you want to know which host names and subdomains a domain has. mhost offers a simple command to help you find these. Please mind, that mhost only uses DNS specific discovery methods. If you want even deeper discoveries using Google, Shodan etc. there are other tools available. + +```shell +$ mhost -p d github.com -p +``` + +This command uses the predefined name servers to discover the GitHub domain. The `-s` reduces all discovered names to real subdomains of github.com.. + +### You can go one more step and explore the autonomous systems GitHub uses. In order to discover those, you can use the following commands: + +```shell +$ mhost -p l --all -w github.com +$ mhost -p l --all 140.82.121.0/24 +``` + +### Check your name server configuration +```shell +$ mhost -p c github.com -p +``` + +## Usage +mhost has three main commands: `lookup`, `discover`, and `check`. `lookup` lookups up arbitrary DNS records of a domain name. `discover` tries various methods to discover host names and subdomains of a domain. `check` uses lints to check if all records of a domain name adhere to the DNS RFC. + +### General Options + +| Option | Description | +| ------------------------------------------ | -------------------------------------------------------------------------------------------------- | +| `-use-system-resolv-opt` | Uses options set in `/etc/resolv.conf` | +| `-no-system-nameservers` | Ignores nameservers from `/etc/resolv.conf` | +| `-S, --no-system-lookups` | Ignores system nameservers for lookups | +| `--resolv-conf ` | Uses alternative resolv.conf file | +| `--ndots ` | Sets number of dots to qualify domain name as FQDN [default: 1] | +| `--search-domain ` | Sets the search domain to append if HOSTNAME has less than `ndots` dots | +| `--system-nameserver ...` | Adds system nameserver for system lookups; only IP addresses allowed | +| `-s, --nameserver ...` | Adds nameserver for lookups | +| `-p, --predefined` | Adds predefined nameservers for lookups | +| `--predefined-filter ` | Filters predefined nameservers by protocol [default: udp] [possible values: udp, tcp, https, tls] | +| `--list-predefined` | Lists all predefined nameservers | +| `-f, --nameservers-from-file ` | Adds nameservers from file | +| `--limit ` | Sets max. number of nameservers to query [default: 100] | +| `--max-concurrent-servers ` | Sets max. concurrent nameservers [default: 10] | +| `--max-concurrent-requests ` | Sets max. concurrent requests per nameserver [default: 5] | +| `--retries ` | Sets number of retries if first lookup to nameserver fails [default: 0] | +| `--timeout ` | Sets timeout in seconds for responses [default: 5] | +| `-m, --resolvers-mode ` | Sets resolvers lookup mode [default: multi] [possible values: multi, uni] | +| `--wait-multiple-responses` | Waits until timeout for additional responses from nameservers | +| `--no-abort-on-error` | Sets do-not-ignore errors from nameservers | +| `--no-abort-on-timeout` | Sets do-not-ignore timeouts from nameservers | +| `--no-aborts` | Sets do-not-ignore errors and timeouts from nameservers | +| `-o, --output ` | Sets the output format for result presentation [default: summary] [possible values: json, summary] | +| `--output-options ` | Sets output options | +| `--show-errors` | Shows error counts | +| `-q, --quiet` | Does not print anything but results | +| `--no-color` | Disables colorful output | +| `--ascii` | Uses only ASCII compatible characters for output | + +### Lookup Options + +| Option | Description | +| -------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `--all` | Enables lookups for all record types | +| `-s`, `--service` | Parses ARG as service spec and set record type to SRV | +| `-w`, `--whois` | Retrieves Whois information about A, AAAA, and PTR records | +| `-h`, `--help` | Prints help information | +| `-t`, `--record-type ...` | Sets record type to lookup, will be ignored in case of IP address lookup [default: A,AAAA,CNAME,MX] [possible values: A, AAAA, ANAME, ANY, CNAME, MX, NULL, NS, PTR, SOA, SRV, TXT] | + +### Discover Options + +```markdown +| Option | Description | +| ----------------------------------- | ------------------------------------------------------------------------------------------ | +| `-p`, `--show-partial-results` | Shows results after each lookup step | +| `-w`, `--wordlist-from-file ` | Uses wordlist from file | +| `--rnd-names-number ` | Sets number of random domain names to generate for wildcard resolution check [default: 3] | +| `--rnd-names-len ` | Sets length of random domain names to generate for wildcard resolution check [default: 32] | +| `-s`, `--subdomains-only` | Shows subdomains only omitting all other discovered names | + +### Check Options + +| Option | Description | +| ----------------------------- | ------------------------------------------- | +| `--show-partial-results` | Shows results after each check step | +| `--show-intermediate-lookups` | Shows all lookups made during by all checks | +| `--no-cnames` | Does not run cname lints | +| `--no-soa` | Does not run SOA check | +| `--no-spf` | Does not run SPF check | diff --git a/technology/applications/cli/names.md b/technology/applications/cli/names.md new file mode 100644 index 0000000..9270ae2 --- /dev/null +++ b/technology/applications/cli/names.md @@ -0,0 +1,17 @@ +--- +obj: application +repo: https://github.com/fnichol/names +rev: 2025-01-28 +--- + +# names +Random name generator for Rust + +## Usage + +``` +> names +selfish-change +``` + +Usage: `names [-n, --number] ` diff --git a/technology/applications/cli/qrtool.md b/technology/applications/cli/qrtool.md new file mode 100644 index 0000000..3ed9b6f --- /dev/null +++ b/technology/applications/cli/qrtool.md @@ -0,0 +1,31 @@ +--- +obj: application +repo: https://github.com/sorairolake/qrtool +rev: 2025-01-30 +--- + +# qrtool +qrtool is a command-line utility for encoding or decoding QR code. + +## Usage +### Encode +Usage: `qrtool encode [OPTION]…​ [STRING]` + +| Option | Description | +| ------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `-o, --output FILE` | Output the result to a file. | +| `-r, --read-from FILE` | Read input data from a file. This option conflicts with `[STRING]`. | +| `-s, --size NUMBER` | The module size in pixels. If this option is not specified, the module size is 8 when the output format is PNG or SVG, and 1 otherwise. | +| `-l, --error-correction-level LEVEL` | Error correction level. The possible values are: Level `L`. 7% of codewords can be restored. Level `M`. 15% of codewords can be restored. This is the default value. Level `Q`. 25% of codewords can be restored. Level `H`. 30% of codewords can be restored. | +| `--level LEVEL` | Alias for `-l, --error-correction-level`. | +| `-m, --margin NUMBER` | The width of margin. If this option is not specified, the margin will be 4 for normal QR code and 2 for Micro QR code. | +| `-t, --type FORMAT` | The format of the output. The possible values are: `png`, `svg`, `pic`, `ansi256`, `ansi-true-color`, `ascii`, `ascii-invert`, `unicode`, `unicode-invert` | +| `--foreground COLOR` | Foreground color. COLOR takes a CSS color string. Colored output is only available when the output format is PNG, SVG or any ANSI escape sequences. Note that lossy conversion may be performed depending on the color space supported by the method to specify a color, the color depth supported by the output format, etc. Default is black. | +| `--background COLOR` | Background color. COLOR takes a CSS color string. Colored output is only available when the output format is PNG, SVG or any ANSI escape sequences. Note that lossy conversion may be performed depending on the color space supported by the method to specify a color, the color depth supported by the output format, etc. Default is white. | + +### Decode +Usage: `qrtool decode [OPTION]…​ [IMAGE]` + +| Option | Description | +| ------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `-t, --type FORMAT` | The format of the input. If FORMAT is not specified, the format is determined based on the extension or the magic number. The possible values are: `bmp`, `dds`, `farbfeld`, `gif`, `hdr`, `ico`, `jpeg`, `openexr`, `png`, `pnm`, `qoi`, `svg`, `tga`, `tiff`, `webp`, `xbm` | diff --git a/technology/applications/cli/refold.md b/technology/applications/cli/refold.md new file mode 100644 index 0000000..862ffaa --- /dev/null +++ b/technology/applications/cli/refold.md @@ -0,0 +1,23 @@ +--- +obj: application +repo: https://github.com/wr7/refold +rev: 2025-01-30 +--- + +# refold +refold is a commandline tool for performing text-wrapping, similar to unix `fold`. Unlike `fold`, refold will recombine lines before performing line-wrapping, and it will automatically detect line prefixes. + +## Usage +Usage: `refold [FLAGS...]` + +refold reads from stdin and writes to stdout + +### Options + +| Option | Description | +| ------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------- | +| `--width, -w ` | Sets the width to wrap at (default 80). | +| `--prefix, -p ` | Sets the prefix for each line (default: auto detect). Set to an empty string to disable prefixing entirely. | +| `--boundaries, -b, --unicode-boundaries` | Sets the split mode to "boundaries" mode (default). In boundaries mode, line wrapping may occur in-between unicode breakable characters. | +| `--spaces, -s` | Sets the split mode to "space" mode. In space mode, line wrapping may occur in-between words separated by ASCII spaces. | +| `--characters, -c, --break-words, --break` | Sets the split mode to "character" mode. In character mode, line wrapping may occur in-between any two characters. | diff --git a/technology/applications/cli/rexturl.md b/technology/applications/cli/rexturl.md new file mode 100644 index 0000000..60112a7 --- /dev/null +++ b/technology/applications/cli/rexturl.md @@ -0,0 +1,45 @@ +--- +obj: application +repo: https://github.com/vschwaberow/rexturl +rev: 2025-01-30 +--- + +# rexturl +A versatile command-line tool for parsing and manipulating URLs. + +## Usage +Usage: `rexturl [OPTIONS] [URLS...]` + +If no URLs are provided, rexturl will read from stdin. + +### Options + +| Option | Description | +| ------------------- | --------------------------------------------------------- | +| `--urls ` | Input URLs to process | +| `--scheme` | Extract and display the URL scheme | +| `--username` | Extract and display the username from the URL | +| `--host` | Extract and display the hostname | +| `--port` | Extract and display the port number | +| `--path` | Extract and display the URL path | +| `--query` | Extract and display the query string | +| `--fragment` | Extract and display the URL fragment | +| `--sort` | Sort the output | +| `--unique` | Remove duplicate entries from the output | +| `--json` | Output results in JSON format | +| `--all` | Display all URL components | +| `--custom` | Enable custom output mode | +| `--format ` | Custom output format [default: `{scheme}://{host}{path}`] | +| '--domain' | Extract and display the domain | + + +### Custom Output Format +When using `--custom` and `--format`, you can use the following placeholders: +- `{scheme}` +- `{username}` +- `{host}` +- `{domain}` +- `{port}` +- `{path}` +- `{query}` +- `{fragment}` diff --git a/technology/applications/cli/tagctl.md b/technology/applications/cli/tagctl.md new file mode 100644 index 0000000..d18c7e4 --- /dev/null +++ b/technology/applications/cli/tagctl.md @@ -0,0 +1,54 @@ +--- +obj: application +repo: https://gitlab.com/KodyVB/tagctl +rev: 2025-01-30 +--- + +# tagctl +Tagctl is a command line program which can add or remove tags to files. +The tags can either be in the name or under `user.xdg.tags` in the extended attributes. + +## Usage +Usage: `tagctl [OPTIONS] [FILES]...` + +| Option | Description | +| ----------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `-t, --tag ` | Tag to add/remove to selected files. `%p` uses the parent directory name, `%y` uses the modified year, `%m` uses modified month, `%d` uses modified day, and `%w` uses modified weekday | +| `-d, --delimiter ` | Separator for multiple tags (default: `,`) | +| `-i, --input` | Accepts input from stdin | +| `-x, --xattr` | Adds/removes tags via xattr under `user.xdg.tags` | +| `-r, --remove` | Removes tag instead of adding | +| `-R, --remove_all` | Removes all tags | +| `-v, --verbose` | Increases verbosity of output | +| `-g, --generate_autocomplete ` | The shell to generate auto-completion for `bash`, `elvish`, `fish`, `zsh` | + + +## Examples +**Add tag `example` to current directory using file names:** +```shell +tagctl -t example "$(ls)" +ls | tagctl --input --tag example +``` + +**Remove tag `example` from current directory using file names:** +```shell +tagctl -r --tag=example "$(ls)" +ls | tagctl --remove -it example +``` + +**Add tag `example` to current directory using extended attributes:** +```shell +tagctl -xt example "$(ls)" +ls | tagctl --xattr --input --tag example +``` + +**Remove tag `example` from current directory using extended attributes:** +```shell +tagctl -xr --tag=example "$(ls)" +ls | tagctl --xattr --remove -it example +``` + +**Add tag `example` to two sets of inputs using file names:** +```shell +find /home/user/Documents | tagctl -it "example" "$(ls)" +``` diff --git a/technology/applications/cli/unionfarm.md b/technology/applications/cli/unionfarm.md new file mode 100644 index 0000000..9ec3858 --- /dev/null +++ b/technology/applications/cli/unionfarm.md @@ -0,0 +1,54 @@ +--- +obj: application +repo: https://codeberg.org/chrysn/unionfarm +rev: 2025-01-30 +--- + +# unionfarm +This is a small utility for managing symlink farms. It takes a "farm" directory and any number of "data" directories, and creates (or updates) the union (or overlay) of the data directories in the farm directory by placing symlinks to data directories. + +It is similar to +- union mounts (overlay/overlayfs) -- but works without system privileges; it is not live, but can then again err out on duplicate files rather than picking the highest ranking + +Usage: `unionfarm [DATA]...` + +## Example + +``` +$ tree my-photos +my-photos +├── 2018/ +│ └── Rome/ +│ └── ... +└── 2019/ + └── Helsinki/ + └── DSCN2305.jpg +``` + +Assume you have a collection of photos as above, and want to see them overlaid with a friend's photos: + +``` +$ tree ~friend/photos +/home/friend/photos +├── 2018/ +│ └── Amsterdam/ +│ └── ... +└── 2019/ + └── Helsinki/ + └── DSC_0815.jpg +``` + +With unionfarm, you can create a shared view on them: + +``` +$ unionfarm all-photos my-photos ~friend/photos +$ tree all-photos +all-photos +├── 2018/ +│ ├── Amsterdam -> /home/friend/photos/2018/Amsterdam/ +│ └── Rome -> ../../my-photos/2018/Rome/ +└── 2019/ + └── Helsinki/ + ├── DSC_0815.jpg -> /home/friend/photos/2019/Helsinki/DSC_0815.jpg + └── DSCN2305.jpg -> ../../../my-photos/2019/Helsinki/DSCN2305.jpg +``` diff --git a/technology/applications/cli/xt.md b/technology/applications/cli/xt.md new file mode 100644 index 0000000..f92cc07 --- /dev/null +++ b/technology/applications/cli/xt.md @@ -0,0 +1,22 @@ +--- +obj: application +repo: https://github.com/ahamlinman/xt +rev: 2025-01-30 +--- + +# xt +xt is a cross-format translator for JSON, MessagePack, TOML, and YAML. + +## Usage +Usage: `xt [-f format] [-t format] [file ...]` + +| Option | Description | +|---|---| +| `-f format` | Skip detection and convert every input from the given format | +| `-t format` | Convert to the given format (default: `json`) | + +## Formats +- `json`, `j`: +- `msgpack`, `m` +- `toml`, `t` +- `yaml`, `y` diff --git a/technology/applications/utilities/retry-cli.md b/technology/applications/utilities/retry-cli.md new file mode 100644 index 0000000..7cd9c98 --- /dev/null +++ b/technology/applications/utilities/retry-cli.md @@ -0,0 +1,19 @@ +--- +obj: application +repo: https://github.com/demoray/retry-cli +rev: 2025-01-28 +--- + +# retry-cli +retry is a command line tool written in Rust intended to automatically re-run failed commands with a user configurable delay between tries. + +## Usage +Usage: `retry [OPTIONS] ...` + +| Option | Description | +| ------------------------------- | -------------------------------------------------------------- | +| `--attempts ` | Amount of retries (default: `3`) | +| `--min-duration ` | minimum duration (default: `10ms`) | +| `--max-duration ` | maximum duration | +| `--jitter ` | amount of randomization to add to the backoff (default: `0.3`) | +| `--factor ` | backoff factor (default: `2`) | diff --git a/technology/applications/web/bitmagnet.md b/technology/applications/web/bitmagnet.md new file mode 100644 index 0000000..6787ecb --- /dev/null +++ b/technology/applications/web/bitmagnet.md @@ -0,0 +1,457 @@ +--- +obj: application +website: https://bitmagnet.io +--- + +# bitmagnet +A self-hosted BitTorrent indexer, DHT crawler, content classifier and torrent search engine with web UI, GraphQL API and Servarr stack integration. + +## Docker Compose + +```yml +services: + bitmagnet: + image: ghcr.io/bitmagnet-io/bitmagnet:latest + container_name: bitmagnet + ports: + # API and WebUI port: + - "3333:3333" + # BitTorrent ports: + - "3334:3334/tcp" + - "3334:3334/udp" + restart: unless-stopped + environment: + - POSTGRES_HOST=postgres + - POSTGRES_PASSWORD=postgres + # - TMDB_API_KEY=your_api_key + command: + - worker + - run + - --keys=http_server + - --keys=queue_server + # disable the next line to run without DHT crawler + - --keys=dht_crawler + depends_on: + postgres: + condition: service_healthy + + postgres: + image: postgres:16-alpine + container_name: bitmagnet-postgres + volumes: + - ./data/postgres:/var/lib/postgresql/data + # ports: + # - "5432:5432" Expose this port if you'd like to dig around in the database + restart: unless-stopped + environment: + - POSTGRES_PASSWORD=postgres + - POSTGRES_DB=bitmagnet + - PGUSER=postgres + shm_size: 1g + healthcheck: + test: + - CMD-SHELL + - pg_isready + start_period: 20s + interval: 10s +``` + +After running `docker compose up -d` you should be able to access the web interface at http://localhost:3333. The DHT crawler should have started and you should see items appear in the web UI within around a minute. + +To run the bitmagnet CLI, use `docker compose run bitmagnet bitmagnet command...` + +## Configuration + +- `postgres.host`, `postgres.name`, `postgres.user`, `postgres.password` (default: `localhost`, `bitmagnet`, `postgres`, `empty`): Set these values to configure connection to your Postgres database. +- `tmdb.api_key`: TMDB API Key. +- `tmdb.enabled` (default: `true`): Specify false to disable the TMDB API integration. +- `dht_crawler.save_files_threshold` (default: `100`): Some torrents contain many thousands of files, which impacts performance and uses a lot of database disk space. This parameter sets a maximum limit for the number of files saved by the crawler with each torrent. +- `dht_crawler.save_pieces` (default: `false`): If true, the DHT crawler will save the pieces bytes from the torrent metadata. The pieces take up quite a lot of space, and aren’t currently very useful, but they may be used by future features. +- `log.level` (default: `info`): Logging +- `log.json` (default: `false`): By default logs are output in a pretty format with colors; enable this flag if you’d prefer plain JSON. + +To see a full list of available configuration options using the CLI, run: + +```sh +bitmagnet config show +``` + +### Specifying configuration values +Configuration paths are delimited by dots. If you’re specifying configuration in a YAML file then each dot represents a nesting level, for example to configure `log.json`, `tmdb.api_key` and `http_server.cors.allowed_origins`: + +```yml +log: + json: true +tmdb: + api_key: my-api-key +http_server: + cors: + allowed_origins: + - https://example1.com + - https://example2.com +``` + +This is not a suggested configuration file, it’s just an example of how to specify configuration values. + +To configure these same values with environment variables, upper-case the path and replace all dots with underscores, for example: + +```sh +LOG_JSON=true \ +TMDB_API_KEY=my-api-key \ +HTTP_SERVER_CORS_ALLOWED_ORIGINS=https://example1.com,https://example2.com \ + bitmagnet config show +``` + +### Configuration precedence +In order of precedence, configuration values will be read from: +- Environment variables +- `config.yml` in the current working directory +- `config.yml` in the XDG-compliant config location for the current user (for example on MacOS this is `~/Library/Application Support/bitmagnet/config.yml`) +- Default values + +Environment variables can be used to configure simple scalar types (strings, numbers, booleans) and slice types (arrays). For more complex configuration types such as maps you’ll have to use YAML configuration. bitmagnet will exit with an error if it’s unable to parse a provided configuration value. + +### VPN configuration +It’s recommended that you run bitmagnet behind a VPN. If you’re using Docker then `gluetun` is a good solution for this, although the networking settings can be tricky. + +### Classifier +The classifier can be configured and customized to do things like: +- automatically delete torrents you don’t want in your index +- add custom tags to torrents you’re interested in +- customize the keywords and file extensions used for determining a torrent’s content type +- specify completely custom logic to classify and perform other actions on torrents + +#### Background +After a torrent is crawled or imported, some further processing must be done to gather metadata, have a guess at the torrent’s contents and finally index it in the database, allowing it to be searched and displayed in the UI/API. + +bitmagnet’s classifier is powered by a Domain Specific Language. The aim of this is to provide a high level of customisability, along with transparency into the classification process which will hopefully aid collaboration on improvements to the core classifier logic. + +The classifier is declared in YAML format. The application includes a core classifier that can be configured, extended or completely replaced with a custom classifier. This page documents the required format. + +#### Source precedence +bitmagnet will attempt to load classifier source code from all the following locations. Any discovered classifier source will be merged with other sources in the following order of precedence: + +- the core classifier +- `classifier.yml` in the XDG-compliant config location for the current user (for example on MacOS this is `~/Library/Application Support/bitmagnet/classifier.yml`) +- `classifier.yml` in the current working directory +- Classifier configuration + +Note that multiple sources will be merged, not replaced. For example, keywords added to the classifier configuration will be merged with the core keywords. + +The merged classifier source can be viewed with the CLI command `bitmagnet classifier show`. + +#### Schema +A JSON schema for the classifier is available; some editors and IDEs will be able to validate the structure of your classifier document by specifying the `$schema` attribute: + +```yml +$schema: bitmagnet.io/schemas/classifier-0.1.json +``` + +The classifier schema can also be viewed by running the cli command `bitmagnet classifier schema`. + + +The classifier declaration comprises the following components: +- **Workflows** +A workflow is a list of actions that will be executed on all torrents when they are classified. When no custom configuration is provided, the default workflow will be run. To use a different workflow instead, specify the classifier.workflow configuration option with the name of your custom workflow. + +- **Actions** +An action is a piece of workflow to be executed. All actions either return an updated classification result or an error. +For example, the following action will set the content type of the current torrent to audiobook: + +```yml +set_content_type: audiobook +``` + +The following action will return an unmatched error: +```yml +unmatched +``` + +And the following action will delete the current torrent being classified (returning a delete error): +```yml +delete +``` + +These actions aren’t much use on their own - we’d want to check some conditions are satisfied before setting a content type or deleting a torrent, and for this we’d use the if_else action. For example, the following action will set the content type to audiobook if the torrent name contains audiobook-related keywords, and will otherwise return an unmatched error: +```yml +if_else: + condition: "torrent.baseName.matches(keywords.audiobook)" + if_action: + set_content_type: audiobook + else_action: unmatched +``` + +The following action will delete a torrent if its name matches the list ofbanned keywords: +```yml +if_else: + condition: "torrent.baseName.matches(keywords.banned)" + if_action: delete +``` + +Actions may return the following types of error: +- An unmatched error indicates that the current action did not match for the current torrent +- A delete error indicates that the torrent should be deleted +- An unhandled error may occur, for example if the TMDB API was unreachable + +Whenever an error is returned, the current classification will be terminated. + +Note that a workflow should never return an unmatched error. We expect to iterate through a series of checks corresponding to each content type. If the current torrent does not match the content type being checked, we’ll proceed to the next check until we find a match; if no match can be found, the content type will be unknown. To facilitate this, we can use the find_match action. + +The find_match action is a bit like a try/catch block in some programming languages; it will try to match a particular content type, and if an unmatched error is returned, it will catch the unmatched error proceed to the next check. For example, the following action will attempt to classify a torrent as an audiobook, and then as an ebook. If both checks fail, the content type will be unknown: +```yml +find_match: + # match audiobooks: + - if_else: + condition: "torrent.baseName.matches(keywords.audiobook)" + if_action: + set_content_type: audiobook + else_action: unmatched + # match ebooks: + - if_else: + condition: "torrent.files.map(f, f.extension in extensions.ebook ? f.size : - f.size).sum() > 0" + if_action: + set_content_type: ebook + else_action: unmatched +``` + +For a full list of available actions, please refer to the JSON schema. + +#### Conditions +Conditions are used in conjunction with the `if_else` action, in order to execute an action if a particular condition is satisfied. + +The conditions in the examples above use CEL (Common Expression Language) expressions. + +##### The CEL environment +CEL is already a well-documented language, so this page won’t go into detail about the CEL syntax. In the context of the bitmagnet classifier, the CEL environment exposes a number of variables: + +- `torrent`: The current torrent being classified (protobuf type: `bitmagnet.Torrent`) +- `result`: The current classification result (protobuf type: `bitmagnet.Classification`) +- `keywords`: A map of strings to regular expressions, representing named lists of keywords +- `extensions`: A map of strings to string lists, representing named lists of extensions +- `contentType`: A map of strings to enum values representing content types (e.g. `contentType.movie`, `contentType.music`) +- `fileType`: A map of strings to enum values representing file types (e.g. `fileType.video`, `fileType.audio`) +- `flags`: A map of strings to the configured values of flags +- `kb`, `mb`, `gb`: Variables defined for convenience, equal to the number of bytes in a kilobyte, megabyte and gigabyte respectively + +For more details on the protocol buffer types, please refer to the protobuf schema. + +##### Boolean logic (`or`, `and` & `not`) +In addition to CEL expressions, conditions may be declared using the boolean logic operators or, and and not. For example, the following condition evaluates to true, if either the torrent consists mostly of file extensions very commonly used for music (e.g. `flac`), OR if the torrent both has a name that includes music-related keywords, and consists mostly of audio files: + +or: + - "torrent.files.map(f, f.extension in extensions.music ? f.size : - f.size).sum() > 0" + - and: + - "torrent.baseName.matches(keywords.music)" + - "torrent.files.map(f, f.fileType == fileType.audio ? f.size : - f.size).sum() > 0" + +> Note that we could also have specified the above condition using just one CEL expression, but breaking up complex conditions like this is more readable. + +#### Keywords +The classifier includes lists of keywords associated with different types of torrents. These aim to provide a simpler alternative to regular expressions, and the classifier will compile all keyword lists to regular expressions that can be used within CEL expressions. In order for a keyword to match, it must appear as an isolated token in the test string - that is, it must be either at the beginning or preceded by a non-word character, and either at the end or followed by a non-word character. + +Reserved characters in the syntax are: + +parentheses `(` and `)` enclose a group +`|` is an `OR` operator +`*` is a wildcard operator +`?` makes the previous character or group optional +`+` specifies one or more of the previous character +`#` specifies any number +` ` specifies any non-word or non-number character + +For example, to define some music- and audiobook-related keywords: +```yml +keywords: + music: # define music-related keywords + - music # all letters are case-insensitive, and must be defined in lowercase unless escaped + - discography + - album + - \V.?\A # escaped letters are case-sensitive; matches "VA", "V.A" and "V.A.", but not "va" + - various artists # matches "various artists" and "Various.Artists" + audiobook: # define audiobook-related keywords + - (audio)?books? + - (un)?abridged + - narrated + - novels? + - (auto)?biograph(y|ies) # matches "biography", "autobiographies" etc. +``` + +If you’d rather use plain old regular expressions, the CEL syntax supports that too, for example `torrent.baseName.matches("^myregex$")`. + +#### Extensions +The classifier includes lists of file extensions associated with different types of content. For example, to identify torrents of type comic by their file extensions, the extensions are first declared: + +```yml +extensions: + comic: + - cb7 + - cba + - cbr + - cbt + - cbz +``` + +The extensions can now be used as part of a condition within an `if_else` action: +```yml +if_else: + condition: "torrent.files.map(f, f.extension in extensions.comic ? f.size : - f.size).sum() > 0" + if_action: + set_content_type: comic + else_action: unmatched +``` + +#### Flags +Flags can be used to configure workflows. In order to use a flag in a workflow, it must first be defined. For example, the core classifier defines the following flags that are used in the default workflow: +```yml +flag_definitions: + tmdb_enabled: bool + delete_content_types: content_type_list + delete_xxx: bool +``` + +These flags can be referenced within CEL expressions, for example to delete adult content if the `delete_xxx` flag is set to true: +```yml +if_else: + condition: "flags.delete_xxx && result.contentType == contentType.xxx" + if_action: delete +``` + +#### Configuration +The classifier can be customized by providing a `classifier.yml` file in a supported location as described above. If you only want to make some minor modifications, it may be convenient to specify these using the main application configuration instead, by providing values in either `config.yml` or as environment variables. The application configuration exposes some but not all properties of the classifier. + +For example, in your `config.yml` you could specify: +```yml +classifier: + # specify a custom workflow to be used: + workflow: custom + # add to the core list of music keywords: + keywords: + music: + - my-custom-music-keyword + # add a file extension to the list of audiobook-related extensions: + extensions: + audiobook: + - abc + # auto-delete all comics + flags: + delete_content_types: + - comics +``` + +Or as environment variables you could specify: +```shell +TMDB_ENABLED=false \ # disable the TMDB API integration +CLASSIFIER_WORKFLOW=custom \ # specify a custom workflow to be used +CLASSIFIER_DELETE_XXX=true \ # auto-delete all adult content +bitmagnet worker run --all +``` + +#### Validation +The classifier source is compiled on initial load, and all structural and syntax errors should be caught at compile time. If there are errors in your classifier source, bitmagnet should exit with an error message indicating the location of the problem. + +#### Testing on individual torrents +You can test the classifier on an individual torrent or torrents using the bitmagnet process CLI command: +```shell +bitmagnet process --infoHash=aaaaaaaaaaaaaaaaaaaa --infoHash=bbbbbbbbbbbbbbbbbbbb +``` + +#### Reclassify all torrents +The classifier is being updated regularly, and to reclassify already-crawled torrents you’ll need to run the CLI and queue them for reprocessing. + +For context: after torrents are crawled or imported, they won’t show up in the UI straight away. They must first be “processed” by the job queue. This involves a few steps: +- The classifier attempts to classify the torrent (determine its content type, and match it to a known piece of content) +- The search index for the torrent is built +- The torrent content record is saved to the database + +The reprocess command will re-queue torrents to allow the latest updates to be applied to their content records. + +To reprocess all torrents in your index, simply run `bitmagnet reprocess`. If you’ve indexed a lot of torrents, this will take a while, so there are a few options available to control exactly what gets reprocessed: +- `apisDisabled`: Disable API calls during classification. This makes the classifier run a lot faster, but disables identification with external services such as TMDB (metadata already gathered from external APIs is not lost). +- `contentType`: Only reprocess torrents of a certain content type. For example, `bitmagnet reprocess --contentType movie` will only reprocess movies. Multiple content types can be comma separated, and `null` refers to torrents of unknown content type. +- `orphans`: Only reprocess torrents that have no content record. +- `classifyMode`: This controls how already matched torrents are handled. + - `default`: Only attempt to match previously unmatched torrents + - `rematch`: Ignore any pre-existing match and always classify from scratch (A torrent is “matched” if it’s associated with a specific piece of content from one of the API integrations, currently only TMDB) + +#### Practical use cases and examples +##### Auto-delete specific content types +The default workflow provides a flag that allows for automatically deleting specific content types. For example, to delete all comic, software and xxx torrents: +```yml +flags: + delete_content_types: + - comic + - software + - xxx +``` + +Auto-deleting adult content has been one of the most requested features. For convenience, this is exposed as the configuration option `classifier.delete_xxx`, and can be specified with the environment variable `CLASSIFIER_DELETE_XXX=true`. + +##### Auto-delete torrents containing specific keywords +Any torrents containing keywords in the banned list will be automatically deleted. This is primarily used for deleting CSAM content, but the list can be extended to auto-delete any other keywords: + +```yml +keywords: + banned: + - my-hated-keyword +``` + +##### Disable the TMDB API integration +The `tmdb_enabled` flag can be used to disable the TMDB API integration: +```yml +flags: + tmdb_enabled: false +``` + +For convenience, this is also exposed as the configuration option `tmdb.enabled`, and can be specified with the environment variable `$TMDB_ENABLED=false`. + +The `apis_enabled` flag has the same effect, disabling TMDB and any future API integrations: + +```yml +flags: + apis_enabled: false +``` + +API integrations can also be disabled for individual classifier runs, without disabling them globally, by passing the `--apisDisabled` flag to the reprocess command. + +##### Extend the default workflow with custom logic +Custom workflows can be added in the workflows section of the classifier document. It is possible to extend the default workflow by using the `run_workflow` action within your custom workflow, for example: +```yml +workflows: + custom: + - + - run_workflow: default + - +``` + +A concrete example of this is adding tags to torrents based on custom criteria. + +##### Use tags to create custom torrent categories +Is there a category of torrent you’re interested in that isn’t captured by one of the core content types? Torrent tags are intended to capture custom categories and content types. + +Let’s imagine you’d like to surface torrents containing interesting documents. The interesting documents have specific file extensions, and their filenames contain specific keywords. Let’s create a custom action to tag torrents containing interesting documents: + +```yml +# define file extensions for the documents we're interested in: +extensions: + interesting_documents: + - doc + - docx + - pdf +# define keywords that must be present in the filenames of the interesting documents: +keywords: + interesting_documents: + - interesting + - fascinating +# extend the default workflow with a custom workflow to tag torrents containing interesting documents: +workflows: + custom: + # first run the default workflow: + - run_workflow: default + # then add the tag to any torrents containing interesting documents: + - if_else: + condition: "torrent.files.filter(f, f.extension in extensions.interesting_documents && f.basePath.matches(keywords.interesting_documents)).size() > 0" + if_action: + add_tag: interesting-documents +``` + +To specify that the custom workflow should be used, remember to specify the `classifier.workflow` configuration option, e.g. `CLASSIFIER_WORKFLOW=custom bitmagnet worker run --all`. From 1c7eea08e30fd7295de85a4b3966fef651c00b9b Mon Sep 17 00:00:00 2001 From: JMARyA Date: Fri, 31 Jan 2025 20:10:15 +0100 Subject: [PATCH 13/74] update --- technology/applications/Applications.md | 3 + technology/applications/cli/csvlens.md | 80 +++++++++++++++++++ technology/applications/cli/timr-tui.md | 23 ++++++ .../applications/development/licensit.md | 66 +++++++++++++++ 4 files changed, 172 insertions(+) create mode 100644 technology/applications/cli/csvlens.md create mode 100644 technology/applications/cli/timr-tui.md create mode 100644 technology/applications/development/licensit.md diff --git a/technology/applications/Applications.md b/technology/applications/Applications.md index 398209b..5ac52a2 100644 --- a/technology/applications/Applications.md +++ b/technology/applications/Applications.md @@ -199,6 +199,7 @@ rev: 2025-01-30 - [bat](./cli/bat.md) - [glow](./cli/glow.md) - [tailspin](./cli/tailspin.md) +- [csvlens](./cli/csvlens.md) ### Editor - [nano](./cli/nano.md) @@ -248,6 +249,7 @@ rev: 2025-01-30 - [refold](./cli/refold.md) - [rexturl](./cli/rexturl.md) - [mhost](./cli/mhost.md) +- [timr-tui](./cli/timr-tui.md) ## System - [Core Utils](./cli/system/Core%20Utils.md) @@ -279,6 +281,7 @@ rev: 2025-01-30 - [serie](./cli/serie.md) - [usql](./cli/usql.md) - [kondo](./cli/kondo.md) +- [licensit](./development/licensit.md) ## Media - [yt-dlp](./media/yt-dlp.md) diff --git a/technology/applications/cli/csvlens.md b/technology/applications/cli/csvlens.md new file mode 100644 index 0000000..4ebb5be --- /dev/null +++ b/technology/applications/cli/csvlens.md @@ -0,0 +1,80 @@ +--- +obj: application +repo: https://github.com/ys-l/csvlens +rev: 2025-01-31 +--- + +# csvlens +`csvlens` is a command line CSV file viewer. It is like `less` but made +for CSV. + +## Usage +Run `csvlens` by providing the CSV filename: + +``` +csvlens +``` + +Pipe CSV data directly to `csvlens`: + +``` + | csvlens +``` + +### Key bindings + +| Key | Action | +| ---------------------------- | ------------------------------------------------------------------ | +| `hjkl` (or `← ↓ ↑→ `) | Scroll one row or column in the given direction | +| `Ctrl + f` (or `Page Down`) | Scroll one window down | +| `Ctrl + b` (or `Page Up`) | Scroll one window up | +| `Ctrl + d` (or `d`) | Scroll half a window down | +| `Ctrl + u` (or `u`) | Scroll half a window up | +| `Ctrl + h` | Scroll one window left | +| `Ctrl + l` | Scroll one window right | +| `Ctrl + ←` | Scroll left to first column | +| `Ctrl + →` | Scroll right to last column | +| `G` (or `End`) | Go to bottom | +| `g` (or `Home`) | Go to top | +| `G` | Go to line `n` | +| `/` | Find content matching regex and highlight matches | +| `n` (in Find mode) | Jump to next result | +| `N` (in Find mode) | Jump to previous result | +| `&` | Filter rows using regex (show only matches) | +| `*` | Filter columns using regex (show only matches) | +| `TAB` | Toggle between row, column or cell selection modes | +| `>` | Increase selected column's width | +| `<` | Decrease selected column's width | +| `Shift + ↓` (or `Shift + j`) | Sort rows or toggle sort direction by the selected column | +| `#` (in Cell mode) | Find and highlight rows like the selected cell | +| `@` (in Cell mode) | Filter rows like the selected cell | +| `y` | Copy the selected row or cell to clipboard | +| `Enter` (in Cell mode) | Print the selected cell to stdout and exit | +| `-S` | Toggle line wrapping | +| `-W` | Toggle line wrapping by words | +| `r` | Reset to default view (clear all filters and custom column widths) | +| `H` (or `?`) | Display help | +| `q` | Exit | + +### Optional parameters + +* `-d `: Use this delimiter when parsing the CSV + (e.g. `csvlens file.csv -d '\t'`). + + Specify `-d auto` to auto-detect the delimiter. + +* `-t`, `--tab-separated`: Use tab as the delimiter (when specified, `-d` is ignored). + +* `-i`, `--ignore-case`: Ignore case when searching. This flag is ignored if any + uppercase letters are present in the search string. + +* `--no-headers`: Do not interpret the first row as headers. + +* `--columns `: Use this regex to select columns to display by default. + +* `--filter `: Use this regex to filter rows to display by default. + +* `--find `: Use this regex to find and highlight matches by default. + +* `--echo-column `: Print the value of this column at the selected + row to stdout on `Enter` key and then exit. diff --git a/technology/applications/cli/timr-tui.md b/technology/applications/cli/timr-tui.md new file mode 100644 index 0000000..a4d4acc --- /dev/null +++ b/technology/applications/cli/timr-tui.md @@ -0,0 +1,23 @@ +--- +obj: application +repo: https://github.com/sectore/timr-tui +rev: 2025-01-31 +--- + +# timr-tui +TUI to organize your time: Pomodoro, Countdown, Timer. + +## CLI +Usage: `timr-tui [OPTIONS]` + +| Option | Description | +| -------- | ----------------------------------------------------------------------------------------------- | +| `–c` | Countdown time to start from. Formats: 'ss', 'mm:ss', or 'hh:mm:ss' | +| `–w` | Work time to count down from. Formats: 'ss', 'm:ss', or 'h:mm:s' | +| `–p` | Pause time to count down from. Formats: 'ss', 'm:ss', or 'h:m:s' | +| `–d` | Show deciseconds | +| `–m` | Mode to start with. [possible values: countdown, timer, pomodoro] | +| `–s` | Style to display time with. [possible values: full, light, medium, dark, thick, cross, braille] | +| `--menu` | Open the menu | +| `–r` | Reset stored values to default values. | +| `–n` | Toggle desktop notifications on or off. Experimental. [possible values: on, off] | diff --git a/technology/applications/development/licensit.md b/technology/applications/development/licensit.md new file mode 100644 index 0000000..3dab595 --- /dev/null +++ b/technology/applications/development/licensit.md @@ -0,0 +1,66 @@ +--- +obj: application +repo: https://github.com/neuromeow/licensit +rev: 2025-01-31 +--- + +# licensit +`licensit` is a command-line tool to create LICENSE files. + +### Supported licenses + +- GNU Affero General Public License v3.0 (AGPL-3.0) +- Apache License 2.0 (Apache-2.0) +- BSD 2-Clause “Simplified” License (BSD-2-Clause) +- BSD 3-Clause “New” or “Revised” License (BSD-3-Clause) +- Boost Software License 1.0 (BSL-1.0) +- Creative Commons Zero v1.0 Universal (CC0-1.0) +- Eclipse Public License 2.0 (EPL-2.0) +- GNU General Public License v2.0 (GPL-2.0) +- GNU General Public License v3.0 (GPL-3.0) +- GNU Lesser General Public License v2.1 (LGPL-2.1) +- MIT License (MIT) +- Mozilla Public License 2.0 (MPL-2.0) +- The Unlicense (Unlicense) + +## Usage +`licensit` simplifies the process of creating and managing license files for your projects. + +### Listing Available Licenses +``` +licensit list +``` + +Shows all supported licenses. + +### Showing License Content +To view the content of a specific license with the author and year filled in: + +``` +licensit show [LICENSE] [--user USER] [--year YEAR] +``` + +- `[LICENSE]`: The ID of the license you want to display (for example, `mit`, `apache-2.0`) +- `--user [USER]`: Specifies the license holder's name. If not provided, `licensit` will use the following sources in order to determine the user name: + - `LICENSE_AUTHOR` environment variable + - `user.name` entry in the `$HOME/.gitconfig` file + - Username associated with the current effective user ID +- `--year [YEAR]`: Sets the year during which the license is effective. Defaults to the current year if not specified + +To display just the template of a license (without any specific user or year information): + +``` +licensit show [LICENSE] --template +``` + +- `[LICENSE]`: The ID of the license whose template you want to display (for example, `mit`, `apache-2.0`) +- `--template`: Displays the license template with placeholders for the user and year. This option cannot be used with `--user` or `--year` + +### Adding a License to Your Project +To add a license file to your current directory: + +``` +licensit add [LICENSE] [--user USER] [--year YEAR] +``` + +Creates a `LICENSE` file in the current directory with the specified details. From 9dbc181f90837a79d0207c37aebf2289b13d4660 Mon Sep 17 00:00:00 2001 From: JMARyA Date: Mon, 7 Apr 2025 16:19:55 +0200 Subject: [PATCH 14/74] update rust crates --- technology/dev/programming/languages/Rust.md | 468 ++++++++++++++++++- 1 file changed, 453 insertions(+), 15 deletions(-) diff --git a/technology/dev/programming/languages/Rust.md b/technology/dev/programming/languages/Rust.md index 4d0e802..108a840 100644 --- a/technology/dev/programming/languages/Rust.md +++ b/technology/dev/programming/languages/Rust.md @@ -941,35 +941,147 @@ The exact assembly code syntax is target-specific and opaque to the compiler exc Currently, all supported targets follow the assembly code syntax used by LLVM's internal assembler which usually corresponds to that of the GNU assembler (GAS). On x86, the .intel_syntax noprefix mode of GAS is used by default. On ARM, the .syntax unified mode is used. These targets impose an additional restriction on the assembly code: any assembler state (e.g. the current section which can be changed with `.section`) must be restored to its original value at the end of the asm string. Assembly code that does not conform to the GAS syntax will result in assembler-specific behavior. Further constraints on the directives used by inline assembly are indicated by Directives Support. ## [Crates](https://lib.rs) -- [itertools](https://lib.rs/crates/itertools): Extra iterator adaptors, iterator methods, free functions, and macros -- [num_enum](https://lib.rs/crates/num_enum): Procedural macros to make inter-operation between primitives and enums easier -- [cached](https://crates.io/crates/cached): Caching Crate +### Filesystem - [tempfile](https://lib.rs/crates/tempfile): Temporary files and directories +- [temp-dir](https://lib.rs/crates/temp-dir): Simple temporary directory with cleanup - [walkdir](https://crates.io/crates/walkdir): recursively scan directories +- [jwalk](https://lib.rs/crates/jwalk): Filesystem walk performed in parallel with streamed and sorted results +- [glob](https://lib.rs/crates/glob): Support for matching file paths against Unix shell style patterns - [notify](https://lib.rs/crates/notify): filesystem watcher +- [camino](https://lib.rs/crates/camino): UTF-8 paths +- [sugar_path](https://lib.rs/crates/sugar_path): Sugar functions for manipulating paths +- [path-absolutize](https://lib.rs/crates/path-absolutize): A library for extending Path and PathBuf in order to get an absolute path and remove the containing dots +- [fs_extra](https://lib.rs/crates/fs_extra): Expanding std::fs and std::io. Recursively copy folders with information about process and much more. +- [vfs](https://lib.rs/crates/vfs): A virtual filesystem for Rust +- [fuser](https://lib.rs/crates/fuser): Filesystem in Userspace (FUSE) for Rust +- [directories](https://lib.rs/crates/directories): A tiny mid-level library that provides platform-specific standard locations of directories for config, cache and other data on Linux, Windows and macOS +- [xattr](https://lib.rs/crates/xattr): unix extended filesystem attributes +- [open](https://lib.rs/crates/open): Open a path or URL using the program configured on the system +- [infer](https://lib.rs/crates/infer): Small crate to infer file type based on magic number signatures ### Error Handling - [anyhow](https://lib.rs/crates/anyhow): Flexible concrete Error type built on `std::error::Error` -- [color-eyre](https://lib.rs/crates/color-eyre): Styled error messages - [thiserror](https://lib.rs/crates/thiserror): macros for creating error types +- [user-error](https://lib.rs/crates/user-error): Pretty printed errors for your CLI application. +- [eyre](https://lib.rs/crates/eyre): Flexible concrete Error Reporting type built on `std::error::Error` with customizable Reports +- [color-eyre](https://lib.rs/crates/color-eyre): An error report handler for panics and `eyre::Reports` for colorful, consistent, and well formatted error reports for all kinds of errors -### Encoding -- [bincode](https://lib.rs/crates/bincode): A binary serialization / deserialization strategy for transforming structs into bytes and vice versa! +### Data Structures +- [hashbrown](https://lib.rs/crates/hashbrown): A Rust port of Google's SwissTable hash map +- [bitvec](https://lib.rs/crates/bitvec): Addresses memory by bits, for packed collections and bitfields +- [bitflags](https://lib.rs/crates/bitflags): A macro to generate structures which behave like bitflags +- [smallvec](https://lib.rs/crates/smallvec): 'Small vector' optimization: store up to a small number of items on the stack +- [ndarray](https://lib.rs/crates/ndarray): An n-dimensional array for general elements and for numerics. Lightweight array views and slicing; views support chunking and splitting. +- [zerovec](https://lib.rs/crates/zerovec): Zero-copy vector backed by a byte array +- [priority-queue](https://lib.rs/crates/priority-queue): A Priority Queue implemented as a heap with a function to efficiently change the priority of an item +- [histogram](https://lib.rs/crates/histogram): A collection of histogram data structures +- [fraction](https://lib.rs/crates/fraction): Lossless fractions and decimals; drop-in float replacement +- [ringbuffer](https://lib.rs/crates/ringbuffer): A fixed-size circular buffer +- [grid](https://lib.rs/crates/grid): Dynamic generic 2D data structure +- [datas](https://lib.rs/crates/datas): A library for data structures and algorithms and data analisys +- [trees](https://lib.rs/crates/trees): General purpose tree data structures +- [either](https://lib.rs/crates/either): The enum Either with variants Left and Right is a general purpose sum type with two cases +- [either_of](https://lib.rs/crates/either_of): Utilities for working with enumerated types that contain one of 2..n other types +- [petgraph](https://lib.rs/crates/petgraph): Graph data structure library. Provides graph types and graph algorithms. +- [hypergraph](https://lib.rs/crates/hypergraph): Hypergraph is data structure library to create a directed hypergraph in which an hyperedge can join any number of vertices +- [gix](https://crates.io/crates/gix): Interact with git repositories just like git would +- [git2](https://lib.rs/crates/git2): Bindings to libgit2 for interoperating with git repositories. + +### Parser +- [nom](https://lib.rs/crates/nom): A byte-oriented, zero-copy, parser combinators library +- [pest](https://lib.rs/crates/pest): pest is a general purpose parser written in Rust +- [keepass](https://lib.rs/crates/keepass): KeePass .kdbx database file parser +- [html5ever](https://lib.rs/crates/html5ever): High-performance browser-grade HTML5 parser +- [comrak](https://lib.rs/crates/comrak): A 100% CommonMark-compatible GitHub Flavored Markdown parser and formatter +- [uriparse](https://lib.rs/crates/uriparse): A URI parser including relative references +- [markdown](https://lib.rs/crates/markdown): CommonMark compliant markdown parser in Rust with ASTs and extensions +- [evalexpr](https://lib.rs/crates/evalexpr): A powerful arithmetic and boolean expression evaluator +- [uuid](https://lib.rs/crates/uuid): A library to generate and parse UUIDs +- [semver](https://lib.rs/crates/semver): Parser and evaluator for Cargo's flavor of Semantic Versioning +- [url](https://lib.rs/crates/url): URL library for Rust, based on the WHATWG URL Standard +- [httparse](https://lib.rs/crates/httparse): A tiny, safe, speedy, zero-copy HTTP/1.x parser +- [syntect](https://lib.rs/crates/syntect): library for high quality syntax highlighting and code intelligence using Sublime Text's grammars + +### Serialization - [serde](https://lib.rs/crates/serde): A generic serialization/deserialization framework +- [serde_with](https://lib.rs/crates/serde_with): Custom de/serialization functions for Rust's serde +- [bincode](https://lib.rs/crates/bincode): A binary serialization / deserialization strategy for transforming structs into bytes and vice versa! - [serde_json](https://lib.rs/crates/serde_json): A [JSON](../../../files/JSON.md) serialization file format +- [serde_jsonc](https://lib.rs/crates/serde_jsonc): A JSON serialization file format - [serde_yaml](https://lib.rs/crates/serde_yaml): [YAML](../../../files/YAML.md) data format for Serde - [bson](https://lib.rs/crates/bson): Encoding and decoding support for [BSON](../../../files/BSON.md) in Rust -- [hex](https://lib.rs/crates/hex): Encoding and decoding data into/from hexadecimal representation - [toml](https://lib.rs/crates/toml): A native Rust encoder and decoder of [TOML](../../../files/TOML.md)-formatted files and streams. +- [gray_matter](https://lib.rs/crates/gray_matter): Smart front matter parser. An implementation of gray-matter in rust. Parses YAML, JSON, TOML and support for custom parsers. +- [schemars](https://lib.rs/crates/schemars): Generate JSON Schemas from Rust code +- [jsonschema](https://lib.rs/crates/jsonschema): JSON schema validaton library +- [json-patch](https://lib.rs/crates/json-patch): RFC 6902, JavaScript Object Notation (JSON) Patch +- [rss](https://lib.rs/crates/rss): Library for serializing the RSS web content syndication format +- [postcard](https://lib.rs/crates/postcard): A no_std + serde compatible message library for Rust + +### Encoding +- [hex](https://lib.rs/crates/hex): Encoding and decoding data into/from hexadecimal representation +- [base62](https://lib.rs/crates/base62): A Base62 encoding/decoding library - [base64](https://lib.rs/crates/base64): encodes and decodes [base64](../../../files/Base64.md) as bytes or utf8 +- [base64-url](https://lib.rs/crates/base64-url): Base64 encode, decode, escape and unescape for URL applications +- [encoding_rs](https://lib.rs/crates/encoding_rs): A Gecko-oriented implementation of the Encoding Standard +- [data-encoding](https://lib.rs/crates/data-encoding): Efficient and customizable data-encoding functions like base64, base32, and hex +- [shell-quote](https://lib.rs/crates/shell-quote): A Rust library for shell-quoting strings, e.g. for interpolating into a Bash script. +- [urlencoding](https://lib.rs/crates/urlencoding): A Rust library for doing URL percentage encoding +- [bytesize](https://lib.rs/crates/bytesize): Semantic wrapper for byte count representations +- [hex-literal](https://lib.rs/crates/hex-literal): Macro for converting hexadecimal string to a byte array at compile time +- [byte-unit](https://lib.rs/crates/byte-unit): A library for interacting with units of bytes +- [bytes](https://lib.rs/crates/bytes): Types and traits for working with bytes ### Algorithms - [rand](https://lib.rs/crates/rand): Random number generators and other randomness functionality +- [bonsai-bt](https://lib.rs/crates/bonsai-bt): Behaviour trees +- [pathfinding](https://lib.rs/crates/pathfinding): Pathfinding, flow, and graph algorithms +- [treediff](https://lib.rs/crates/treediff): Find the difference between arbitrary data structures +- [raft](https://lib.rs/crates/raft): The rust language implementation of Raft algorithm + +### Crypto +- [rustls](https://lib.rs/crates/rustls): Rustls is a modern TLS library written in Rust +- [rustls-pemfile](https://lib.rs/crates/rustls-pemfile): Basic .pem file parser for keys and certificates +- [pem](https://lib.rs/crates/pem): Parse and encode PEM-encoded data +- [x509-parser](https://lib.rs/crates/x509-parser): Parser for the X.509 v3 format (RFC 5280 certificates) +- [openssl](https://lib.rs/crates/openssl): OpenSSL bindings +- [hkdf](https://lib.rs/crates/hkdf): HMAC-based Extract-and-Expand Key Derivation Function (HKDF) +- [ed25519-compact](https://lib.rs/crates/ed25519-compact): A small, self-contained, wasm-friendly Ed25519 implementation +- [snow](https://lib.rs/crates/snow): A pure-rust implementation of the Noise Protocol Framework +- [keyring](https://lib.rs/crates/keyring): Cross-platform library for managing passwords/credentials +- [scrypt](https://lib.rs/crates/scrypt): Scrypt password-based key derivation function +- [totp-rs](https://lib.rs/crates/totp-rs): RFC-compliant TOTP implementation with ease of use as a goal and additionnal QoL features +- [mnemonic](https://lib.rs/crates/mnemonic): Encode any data into a sequence of English words +- [jwt](https://lib.rs/crates/jwt): JSON Web Token library +- [secrets](https://lib.rs/crates/secrets): Protected-access memory for cryptographic secrets +- [redact](https://lib.rs/crates/redact): A simple library for keeping secrets out of logs +- [noise](https://lib.rs/crates/noise): Procedural noise generation library +- [ulid](https://lib.rs/crates/ulid): a Universally Unique Lexicographically Sortable Identifier implementation + +#### Hashes +- [digest](https://lib.rs/crates/digest): Traits for cryptographic hash functions and message authentication codes +- [seahash](https://lib.rs/crates/seahash): A blazingly fast, portable hash function with proven statistical guarantees +- [highway](https://lib.rs/crates/highway): Native Rust port of Google's HighwayHash, which makes use of SIMD instructions for a fast and strong hash function +- [md5](https://lib.rs/crates/md5): The package provides the MD5 hash function +- [crc32c](https://lib.rs/crates/crc32c): Safe implementation for hardware accelerated CRC32C instructions with software fallback +- [blake3](https://lib.rs/crates/blake3): the BLAKE3 hash function +- [siphasher](https://lib.rs/crates/siphasher): SipHash-2-4, SipHash-1-3 and 128-bit variants in pure Rust +- [bcrypt](https://lib.rs/crates/bcrypt): Easily hash and verify passwords using bcrypt +- [sha1](https://lib.rs/crates/sha1): SHA-1 hash function +- [sha2](https://lib.rs/crates/sha2): Pure Rust implementation of the SHA-2 hash function family including SHA-224, SHA-256, SHA-384, and SHA-512 +- [sha3](https://lib.rs/crates/sha3): Pure Rust implementation of SHA-3, a family of Keccak-based hash functions including the SHAKE family of eXtendable-Output Functions (XOFs), as well as the accelerated variant TurboSHAKE ### Logging - [log](https://lib.rs/crates/log): A lightweight logging facade for Rust -- [tracing](https://lib.rs/crates/tracing): advanced logger - [env_logger](https://lib.rs/crates/env_logger): A logging implementation for `log` which is configured via an environment variable +- [prometheus](https://lib.rs/crates/prometheus): Prometheus instrumentation library for Rust applications +- [opentelemetry](https://lib.rs/crates/opentelemetry): OpenTelemetry API for Rust +- [sentry-core](https://lib.rs/crates/sentry-core): Core sentry library used for instrumentation and integration development +- [logging_timer](https://lib.rs/crates/logging_timer): Simple timers that log the elapsed time when dropped +- [dioxus-logger](https://lib.rs/crates/dioxus-logger): A logging utility to provide a standard interface whether you're targeting web desktop, fullstack, and more in Dioxus +- [tracing](https://lib.rs/crates/tracing): advanced logger +- [tracing-appender](https://lib.rs/crates/tracing-appender): Provides utilities for file appenders and making non-blocking writers +- [tracing-loki](https://lib.rs/crates/tracing-loki): A tracing layer for shipping logs to Grafana Loki ### Mail - [lettre](https://lib.rs/crates/lettre): [Email](../../../internet/eMail.md) client @@ -982,24 +1094,93 @@ Currently, all supported targets follow the assembly code syntax used by LLVM's ### Templates - [maud](https://lib.rs/crates/maud): Compile-time [HTML](../../../internet/HTML.md) templates - [tera](https://lib.rs/crates/tera): Template engine based on [Jinja](../../../tools/Jinja.md) templates +- [subst](https://lib.rs/crates/subst): shell-like variable substitution +- [minijinja](https://lib.rs/crates/minijinja): a powerful template engine for Rust with minimal dependencies +- [handlebars](https://lib.rs/crates/handlebars): Handlebars templating implemented in Rust ### Media +#### Images - [image](https://lib.rs/crates/image): Imaging library. Provides basic image processing and encoders/decoders for common image formats. +- [rgb](https://lib.rs/crates/rgb): Pixel types for Rust +- [qrcode](https://lib.rs/crates/qrcode): QR code encoder in Rust +- [gif](https://lib.rs/crates/gif): GIF de- and encoder +- [opencv](https://lib.rs/crates/opencv): Rust bindings for OpenCV +- [imgref](https://lib.rs/crates/imgref): A basic 2-dimensional slice for safe and convenient handling of pixel buffers with width, height & stride +- [palette](https://lib.rs/crates/palette): Convert and manage colors with a focus on correctness, flexibility and ease of use +- [imageproc](https://lib.rs/crates/imageproc): Image processing operations +- [resvg](https://lib.rs/crates/resvg): An SVG rendering library +- [png](https://lib.rs/crates/png): PNG decoding and encoding library in pure Rust +- [webp](https://lib.rs/crates/webp): WebP conversion library +- [image_hasher](https://lib.rs/crates/image_hasher): A simple library that provides perceptual hashing and difference calculation for images +- [dify](https://lib.rs/crates/dify): A fast pixel-by-pixel image comparison tool in Rust +- [qoi](https://lib.rs/crates/qoi): VERY fast encoder/decoder for QOI (Quite Okay Image) format +- [auto-palette](https://lib.rs/crates/auto-palette): 🎨 A Rust library that extracts prominent color palettes from images automatically +- [blockhash](https://lib.rs/crates/blockhash): A perceptual hashing algorithm for detecting similar images + +#### Video +- [ffmpeg-next](https://lib.rs/crates/ffmpeg-next): Safe FFmpeg wrapper +- [video-rs](https://lib.rs/crates/video-rs): High-level video toolkit based on ffmpeg +- [ffprobe](https://lib.rs/crates/ffprobe): Typed wrapper for the ffprobe CLI + +#### Audio +- [symphonia](https://lib.rs/crates/symphonia): Pure Rust media container and audio decoding library +- [hound](https://lib.rs/crates/hound): A wav encoding and decoding library +- [id3](https://lib.rs/crates/id3): A library for reading and writing ID3 metadata +- [metaflac](https://lib.rs/crates/metaflac): A library for reading and writing FLAC metadata +- [bliss-audio](https://lib.rs/crates/bliss-audio): A song analysis library for making playlists + +### 3D +- [glam](https://lib.rs/crates/glam): A simple and fast 3D math library for games and graphics +- [tobj](https://lib.rs/crates/tobj): A lightweight OBJ loader in the spirit of tinyobjloader +- [obj-rs](https://lib.rs/crates/obj-rs): Wavefront obj parser for Rust. It handles both 'obj' and 'mtl' formats. ### CLI -- [rustyline](https://lib.rs/crates/rustyline): Rustyline, a readline implementation based on Antirez's Linenoise -- [clap](https://lib.rs/crates/clap): A simple to use, efficient, and full-featured Command Line Argument Parser -- [crossterm](https://lib.rs/crates/crossterm): A crossplatform terminal library for manipulating terminals -- [indicatif](https://lib.rs/crates/indicatif): A progress bar and cli reporting library for Rust - [argh](https://lib.rs/crates/argh): Derive-based argument parser optimized for code size -- [owo-colors](https://lib.rs/crates/owo-colors): Zero-allocation terminal colors that'll make people go owo +- [clap](https://lib.rs/crates/clap): A simple to use, efficient, and full-featured Command Line Argument Parser - [yansi](https://lib.rs/crates/yansi): A dead simple ANSI terminal color painting library +- [owo-colors](https://lib.rs/crates/owo-colors): Zero-allocation terminal colors that'll make people go owo +- [named-colour](https://lib.rs/crates/named-colour): named-colour provides Hex Codes for popular colour names +- [colored](https://lib.rs/crates/colored): The most simple way to add colors in your terminal +- [crossterm](https://lib.rs/crates/crossterm): A crossplatform terminal library for manipulating terminals +- [trauma](https://lib.rs/crates/trauma): Simplify and prettify HTTP downloads +- [comfy-table](https://lib.rs/crates/comfy-table): An easy to use library for building beautiful tables with automatic content wrapping +- [tabled](https://lib.rs/crates/tabled): An easy to use library for pretty print tables of Rust structs and enums +- [tabular](https://lib.rs/crates/tabular): Plain text tables, aligned automatically +- [rustyline](https://lib.rs/crates/rustyline): Rustyline, a readline implementation based on Antirez's Linenoise +- [rpassword](https://lib.rs/crates/rpassword): Read passwords in console applications +- [inquire](https://lib.rs/crates/inquire): inquire is a library for building interactive prompts on terminals +- [indicatif](https://lib.rs/crates/indicatif): A progress bar and cli reporting library for Rust +- [spinners](https://lib.rs/crates/spinners): Elegant terminal spinners for Rust +- [is-terminal](https://lib.rs/crates/is-terminal): Test whether a given stream is a terminal +- [bishop](https://lib.rs/crates/bishop): Library for visualizing keys and hashes using OpenSSH's Drunken Bishop algorithm +- [termimad](https://lib.rs/crates/termimad): Markdown Renderer for the Terminal +- [rust-script](https://lib.rs/crates/rust-script): Command-line tool to run Rust "scripts" which can make use of crates +- [sysinfo](https://lib.rs/crates/sysinfo): Library to get system information such as processes, CPUs, disks, components and networks +- [which](https://lib.rs/crates/which): A Rust equivalent of Unix command "which". Locate installed executable in cross platforms. +- [ctrlc](https://lib.rs/crates/ctrlc): Easy Ctrl-C handler for Rust projects +- [subprocess](https://lib.rs/crates/subprocess): Execution of child processes and pipelines, inspired by Python's subprocess module, with Rust-specific extensions +- [cmd_lib](https://lib.rs/crates/cmd_lib): Common rust commandline macros and utils, to write shell script like tasks easily ### Compression - [flate2](https://lib.rs/crates/flate2): DEFLATE compression and decompression exposed as Read/BufRead/Write streams. Supports miniz_oxide and multiple zlib implementations. Supports zlib, gzip, and raw deflate streams. - [tar](https://lib.rs/crates/tar): A Rust implementation of a [TAR](../../../applications/cli/compression/tar.md) file reader and writer. - [zstd](https://lib.rs/crates/zstd): Binding for the [zstd compression](../../../files/Zstd%20Compression.md) library - [unrar](https://lib.rs/crates/unrar): list and extract RAR archives +- [zip](https://lib.rs/crates/zip): Library to support the reading and writing of zip files +- [brotli](https://lib.rs/crates/brotli): A brotli compressor and decompressor +- [huffman-compress2](https://lib.rs/crates/huffman-compress2): Huffman compression given a probability distribution over arbitrary symbols +- [arithmetic-coding](https://lib.rs/crates/arithmetic-coding): fast and flexible arithmetic coding library + +### Cache +- [lru](https://lib.rs/crates/lru): A LRU cache implementation +- [moka](https://lib.rs/crates/moka): A fast and concurrent cache library inspired by Java Caffeine +- [ustr](https://lib.rs/crates/ustr): Fast, FFI-friendly string interning +- [cacache](https://lib.rs/crates/cacache): Content-addressable, key-value, high-performance, on-disk cache +- [cached](https://crates.io/crates/cached): Caching Crate +- [memoize](https://lib.rs/crates/memoize): Attribute macro for auto-memoizing functions with somewhat-simple signatures +- [internment](https://lib.rs/crates/internment): Easy interning of data +- [http-cache-semantics](https://lib.rs/crates/http-cache-semantics): RFC 7234. Parses HTTP headers to correctly compute cacheability of responses, even in complex cases +- [assets_manager](https://lib.rs/crates/assets_manager): Conveniently load, cache, and reload external resources ### Databases - [rusqlite](https://lib.rs/crates/rusqlite): Ergonomic wrapper for [SQLite](../SQLite.md) @@ -1008,34 +1189,291 @@ Currently, all supported targets follow the assembly code syntax used by LLVM's - [rocksdb](https://lib.rs/crates/rocksdb): embedded database - [uuid](https://lib.rs/crates/uuid): UUID Generation - [polars](https://lib.rs/crates/polars): Dataframes computation +- [surrealdb](https://crates.io/crates/surrealdb): A scalable, distributed, collaborative, document-graph database, for the realtime web +- [sql-builder](https://lib.rs/crates/sql-builder): Simple SQL code generator +- [pgvector](https://lib.rs/crates/pgvector): pgvector support for Rust +- [sea-orm](https://lib.rs/crates/sea-orm): 🐚 An async & dynamic ORM for Rust +- [sled](https://lib.rs/crates/sled): Lightweight high-performance pure-rust transactional embedded database ### Date and Time - [chrono](https://lib.rs/crates/chrono): Date and time library for Rust +- [chrono-tz](https://lib.rs/crates/chrono-tz): TimeZone implementations for chrono from the IANA database - [humantime](https://lib.rs/crates/humantime): A parser and formatter for `std::time::{Duration, SystemTime}` +- [duration-str](https://lib.rs/crates/duration-str): duration string parser +- [cron](https://lib.rs/crates/cron): A cron expression parser and schedule explorer +- [dateparser](https://lib.rs/crates/dateparser): Parse dates in string formats that are commonly used +- [icalendar](https://lib.rs/crates/icalendar): Strongly typed iCalendar builder and parser + +### Network +- [tower](https://lib.rs/crates/tower): Tower is a library of modular and reusable components for building robust clients and servers +- [tungstenite](https://lib.rs/crates/tungstenite): Lightweight stream-based WebSocket implementation +- [tokio-websockets](http://ocean.hydrar.de/s/lib.rs/crates/tokio-websockets): High performance, strict, tokio-util based WebSockets implementation +- [message-io](https://lib.rs/crates/message-io): Fast and easy-to-use event-driven network library +- [ipnet](https://lib.rs/crates/ipnet): Provides types and useful methods for working with IPv4 and IPv6 network addresses +- [object_store](https://lib.rs/crates/object_store): A generic object store interface for uniformly interacting with AWS S3, Google Cloud Storage, Azure Blob Storage and local files +- [matchit](https://lib.rs/crates/matchit): A high performance, zero-copy URL router +- [tun](https://lib.rs/crates/tun): TUN device creation and handling +- [quiche](https://lib.rs/crates/quiche): 🥧 Savoury implementation of the QUIC transport protocol and HTTP/3 +- [arti-client](https://lib.rs/crates/arti-client): Library for connecting to the Tor network as an anonymous client +- [etherparse](https://lib.rs/crates/etherparse): A library for parsing & writing a bunch of packet based protocols (EthernetII, IPv4, IPv6, UDP, TCP ...) +- [ldap3](https://lib.rs/crates/ldap3): Pure-Rust LDAP Client +- [hyperlocal](https://lib.rs/crates/hyperlocal): Hyper bindings for Unix domain sockets +- [openssh-sftp-client](https://lib.rs/crates/openssh-sftp-client): Highlevel API used to communicate with openssh sftp server +- [swarm-discovery](https://lib.rs/crates/swarm-discovery): Discovery service for IP-based swarms +- [libmdns](https://lib.rs/crates/libmdns): mDNS Responder library for building discoverable LAN services in Rust +- [networkmanager](https://lib.rs/crates/networkmanager): Bindings for the Linux NetworkManager +- [renet](https://lib.rs/crates/renet): Server/Client network library for multiplayer games with authentication and connection management +- [dhcproto](https://lib.rs/crates/dhcproto): A DHCP parser and encoder for DHCPv4/DHCPv6. dhcproto aims to be a functionally complete DHCP implementation. +- [irc](https://lib.rs/crates/irc): the irc crate – usable, async IRC for Rust +- [ssh2](https://lib.rs/crates/ssh2): Bindings to libssh2 for interacting with SSH servers and executing remote commands, forwarding local ports, etc +- [openssh](https://lib.rs/crates/openssh): SSH through OpenSSH +- [amqprs](https://lib.rs/crates/amqprs): AMQP 0-9-1 client implementation for RabbitMQ +- [wyoming](https://lib.rs/crates/wyoming): Abstractions over the Wyoming protocol ### HTTP - [hyper](https://lib.rs/crates/hyper): A fast and correct [HTTP](../../../internet/HTTP.md) library - [reqwest](https://lib.rs/crates/reqwest): higher level [HTTP](../../../internet/HTTP.md) client library +- [ureq](https://lib.rs/crates/ureq): Simple, safe HTTP client +- [curl](https://lib.rs/crates/curl): Rust bindings to libcurl for making HTTP requests - [actix-web](https://lib.rs/crates/actix-web): Actix Web is a powerful, pragmatic, and extremely fast web framework for Rust - [rocket](https://lib.rs/crates/rocket): web server framework for Rust +- [thirtyfour](https://lib.rs/crates/thirtyfour): Thirtyfour is a Selenium / WebDriver library for Rust, for automated website UI testing +- [http-types](https://lib.rs/crates/http-types): Common types for HTTP operations +- [headers](https://lib.rs/crates/headers): typed HTTP headers +- [cookie](https://lib.rs/crates/cookie): HTTP cookie parsing and cookie jar management. Supports signed and private (encrypted, authenticated) jars. +- [http](https://lib.rs/crates/http): A set of types for representing HTTP requests and responses +- [h2](https://lib.rs/crates/h2): An HTTP/2 client and server +- [h3](https://lib.rs/crates/h3): An async HTTP/3 implementation +- [mime](https://lib.rs/crates/mime): Strongly Typed Mimes +- [scraper](https://lib.rs/crates/scraper): HTML parsing and querying with CSS selectors +- [selectors](https://lib.rs/crates/selectors): CSS Selectors matching for Rust +- [spider](https://lib.rs/crates/spider): A web crawler and scraper, building blocks for data curation workloads +- [htmlize](https://lib.rs/crates/htmlize): Encode and decode HTML entities in UTF-8 according to the standard +- [ammonia](https://lib.rs/crates/ammonia): HTML Sanitization +- [rookie](https://lib.rs/crates/rookie): Load cookie from your web browsers +- [tonic](https://lib.rs/crates/tonic): A gRPC over HTTP/2 implementation focused on high performance, interoperability, and flexibility +- [web-sys](https://lib.rs/crates/web-sys): Bindings for all Web APIs, a procedurally generated crate from WebIDL +- [jsonwebtoken](https://lib.rs/crates/jsonwebtoken): Create and decode JWTs in a strongly typed way +- [http-range-header](https://lib.rs/crates/http-range-header): No-dep range header parser + +#### Axum +- [axum](https://lib.rs/crates/axum): Web framework that focuses on ergonomics and modularity +- [axum-valid](https://crates.io/crates/axum-valid): Provides validation extractors for your Axum application, allowing you to validate data using validator, garde, validify or all of them. +- [axum-prometheus](https://crates.io/crates/axum-prometheus): A tower middleware to collect and export HTTP metrics for Axum +- [axum-htmx](https://crates.io/crates/axum-htmx): A set of htmx extractors, responders, and request guards for axum. +- [axum_session](https://crates.io/crates/axum_session): 📝 Session management layer for axum that supports HTTP and Rest. +- [axum_csrf](https://crates.io/crates/axum_csrf): Library to Provide a CSRF (Cross-Site Request Forgery) protection layer. ### Text - [regex](https://lib.rs/crates/regex): An implementation of [regular expressions](../../../tools/Regex.md) for Rust. This implementation uses finite automata and guarantees linear time matching on all inputs. -- [comfy-table](https://lib.rs/crates/comfy-table): An easy to use library for building beautiful tables with automatic content wrapping +- [fancy-regex](https://lib.rs/crates/fancy-regex): An implementation of regexes, supporting a relatively rich set of features, including backreferences and look-around +- [pretty_regex](https://lib.rs/crates/pretty_regex): 🧶 Elegant and readable way of writing regular expressions - [similar](https://lib.rs/crates/similar): A diff library for Rust +- [dissimilar](https://lib.rs/crates/dissimilar): Diff library with semantic cleanup, based on Google's diff-match-patch +- [strsim](https://lib.rs/crates/strsim): Implementations of string similarity metrics. Includes Hamming, Levenshtein, OSA, Damerau-Levenshtein, Jaro, Jaro-Winkler, and Sørensen-Dice. +- [enquote](https://lib.rs/crates/enquote): Quotes and unquotes strings +- [emojis](https://lib.rs/crates/emojis): ✨ Lookup emoji in *O(1)* time, access metadata and GitHub shortcodes, iterate over all emoji, and more! +- [text-splitter](https://lib.rs/crates/text-splitter): Split text into semantic chunks, up to a desired chunk size. Supports calculating length by characters and tokens, and is callable from Rust and Python. +- [wildcard](https://lib.rs/crates/wildcard): Wildcard matching +- [wildmatch](https://lib.rs/crates/wildmatch): Simple string matching with single- and multi-character wildcard operator +- [textwrap](https://lib.rs/crates/textwrap): Library for word wrapping, indenting, and dedenting strings. Has optional support for Unicode and emojis as well as machine hyphenation. +- [pad](https://lib.rs/crates/pad): Library for padding strings at runtime +- [const-str](https://lib.rs/crates/const-str): compile-time string operations +- [const_format](https://lib.rs/crates/const_format): Compile-time string formatting +- [convert_case](https://lib.rs/crates/convert_case): Convert strings into any case +- [heck](https://lib.rs/crates/heck): heck is a case conversion library +- [html2md](https://lib.rs/crates/html2md): Library to convert simple html documents into markdown + +### AI +- [safetensors](https://lib.rs/crates/safetensors): Provides functions to read and write safetensors which aim to be safer than their PyTorch counterpart. +- [burn](https://lib.rs/crates/burn): Flexible and Comprehensive Deep Learning Framework in Rust +- [ollama-rs](https://lib.rs/crates/ollama-rs): A Rust library for interacting with the Ollama API +- [linfa](https://lib.rs/crates/linfa): A Machine Learning framework for Rust +- [neurons](https://lib.rs/crates/neurons): Neural networks from scratch, in Rust ### Concurrency - [parking_lot](https://lib.rs/crates/parking_lot): More compact and efficient implementations of the standard synchronization primitives - [crossbeam](https://lib.rs/crates/crossbeam): Tools for concurrent programming - [rayon](https://lib.rs/crates/rayon): Simple work-stealing parallelism for Rust - [dashmap](https://lib.rs/crates/dashmap): fast hashmap +- [spin](https://lib.rs/crates/spin): Spin-based synchronization primitives +- [flume](https://lib.rs/crates/flume): A blazingly fast multi-producer channel +- [state](https://lib.rs/crates/state): A library for safe and effortless global and thread-local state management +- [atomic](https://lib.rs/crates/atomic): Generic `Atomic` wrapper type +- [yaque](https://lib.rs/crates/yaque): Yaque is yet another disk-backed persistent queue for Rust +- [kanal](https://lib.rs/crates/kanal): The fast sync and async channel that Rust deserves + +### Memory Management +- [jemallocator](https://lib.rs/crates/jemallocator): jemalloc allocator +- [memmap2](https://lib.rs/crates/memmap2): Map something to memory +- [sharded-slab](https://lib.rs/crates/sharded-slab): lock free concurrent slab allocation +- [heapless](https://lib.rs/crates/heapless): static friendly data structures without heap allocation +- [bumpalo](https://lib.rs/crates/bumpalo): bump allocation arena +- [singlyton](https://lib.rs/crates/singlyton): [Singleton](../patterns/creational/Singleton%20Pattern.md) for Rust +- [pipe](https://lib.rs/crates/pipe): Synchronous Read/Write memory pipe +- [memory_storage](https://lib.rs/crates/memory_storage): Vec like data structure with constant index +- [effective-limits](https://lib.rs/crates/effective-limits): Estimate effective resource limits for a process +- [iter-chunks](https://lib.rs/crates/iter-chunks): Extend Iterator with chunks +- [shared_vector](https://lib.rs/crates/shared_vector): Reference counted vector data structure +- [census](https://lib.rs/crates/census): Keeps an inventory of living objects +- [static_cell](https://lib.rs/crates/static_cell): Statically allocated, initialized at runtime cell +- [arcstr](https://lib.rs/crates/arcstr): A better reference-counted string type, with zero-cost (allocation-free) support for string literals, and reference counted substrings +- [bytebuffer](https://lib.rs/crates/bytebuffer): A bytebuffer for networking and binary protocols + +### Science +- [syunit](https://lib.rs/crates/syunit): SI Units +- [uom](https://lib.rs/crates/uom): Units of measurement +- [measurements](https://lib.rs/crates/measurements): Handle metric, imperial, and other measurements with ease! Types: Length, Temperature, Weight, Volume, Pressure +- [t4t](https://lib.rs/crates/t4t): game theory toolbox + +### Hardware / Embedded +- [virt](https://lib.rs/crates/virt): Rust bindings to the libvirt C library +- [qapi](https://lib.rs/crates/qapi): QEMU QMP and Guest Agent API +- [bootloader](https://lib.rs/crates/bootloader): An experimental x86_64 bootloader that works on both BIOS and UEFI systems +- [embedded-graphics](https://lib.rs/crates/embedded-graphics): Embedded graphics library for small hardware displays +- [riscv](https://lib.rs/crates/riscv): Low level access to RISC-V processors +- [aarch64-cpu](https://lib.rs/crates/aarch64-cpu): Low level access to processors using the AArch64 execution state +- [uefi](https://lib.rs/crates/uefi): safe UEFI wrapper +- [elf](https://lib.rs/crates/elf): A pure-rust library for parsing ELF files +- [smoltcp](https://lib.rs/crates/smoltcp): A TCP/IP stack designed for bare-metal, real-time systems without a heap +- [fatfs](https://lib.rs/crates/fatfs): FAT filesystem library + +### Metrics +- [criterion2](https://lib.rs/crates/criterion2): Statistics-driven micro-benchmarking library +- [inferno](https://lib.rs/crates/inferno): Rust port of the FlameGraph performance profiling tool suite +- [divan](https://lib.rs/crates/divan): Statistically-comfy benchmarking library + +### Testing +- [test-log](https://lib.rs/crates/test-log): A replacement of the `#[test]` attribute that initializes logging and/or tracing infrastructure before running tests +- [googletest](https://lib.rs/crates/googletest): A rich assertion and matcher library inspired by GoogleTest for C++ +- [predicates](https://lib.rs/crates/predicates): An implementation of boolean-valued predicate functions +- [validator](https://lib.rs/crates/validator): Common validation functions (email, url, length, …) and trait - to be used with validator_derive +- [garde](https://lib.rs/crates/garde): Validation library +- [fake](https://lib.rs/crates/fake): An easy to use library and command line for generating fake data like name, number, address, lorem, dates, etc +- [static_assertions](https://lib.rs/crates/static_assertions): Compile-time assertions to ensure that invariants are met + +### i18n +- [iso_currency](https://lib.rs/crates/iso_currency): ISO 4217 currency codes +- [iso_country](https://lib.rs/crates/iso_country): ISO3166-1 countries +- [sys-locale](https://lib.rs/crates/sys-locale): Small and lightweight library to obtain the active system locale ### Async - [tokio](https://lib.rs/crates/tokio): An event-driven, non-blocking I/O platform for writing asynchronous I/O backed applications - [futures](https://lib.rs/crates/futures): An implementation of futures and streams featuring zero allocations, composability, and iterator-like interfaces -- [once_cell](https://lib.rs/crates/once_cell): Lazy values +- [mio](https://lib.rs/crates/mio): Lightweight non-blocking I/O +- [deadpool](https://lib.rs/crates/deadpool): Dead simple async pool +- [blocking](https://lib.rs/crates/blocking): A thread pool for isolating blocking I/O in async programs +- [pollster](https://lib.rs/crates/pollster): Synchronously block the thread until a future completes +- [smol](https://lib.rs/crates/smol): A small and fast async runtime +- [async-stream](https://lib.rs/crates/async-stream): Asynchronous streams using async & await notation +- [async-trait](https://lib.rs/crates/async-trait): Type erasure for async trait methods ### Macros +- [proc-macro2](https://lib.rs/crates/proc-macro2): A substitute implementation of the compiler’s proc_macro API to decouple token-based libraries from the procedural macro use case - [syn](https://lib.rs/crates/syn): Parse Rust syntax into AST - [quote](https://lib.rs/crates/quote): Turn Rust syntax into TokenStream - [paste](https://lib.rs/crates/paste): Concat Rust idents + +### Build Tools +- [flamegraph](https://lib.rs/crates/flamegraph): A simple cargo subcommand for generating flamegraphs, using inferno under the hood +- [cargo-hack](https://lib.rs/crates/cargo-hack): Cargo subcommand to provide various options useful for testing and continuous integration +- [cargo-outdated](https://lib.rs/crates/cargo-outdated): Cargo subcommand for displaying when dependencies are out of date +- [cargo-binstall](https://lib.rs/crates/cargo-binstall): Binary installation for rust projects +- [cargo-cache](https://lib.rs/crates/cargo-cache): Manage cargo cache, show sizes and remove directories selectively +- [cargo-watch](https://lib.rs/crates/cargo-watch): Watches over your Cargo project’s source +- [cargo-expand](https://lib.rs/crates/cargo-expand): Wrapper around `rustc -Zunpretty=expanded`. Shows the result of macro expansion and `#[derive]` expansion. +- [cargo-audit](https://lib.rs/crates/cargo-audit): Audit Cargo.lock for crates with security vulnerabilities +- [cargo-aur](https://lib.rs/crates/cargo-aur): Prepare Rust projects to be released on the Arch Linux User Repository +- [cargo-bom](https://lib.rs/crates/cargo-bom): Bill of Materials for Rust Crates +- [cc](https://lib.rs/crates/cc): A build-time dependency for Cargo build scripts to assist in invoking the native C compiler to compile native C code into a static archive to be linked into Rust code +- [cmake](https://lib.rs/crates/cmake): A build dependency for running cmake to build a native library +- [cross](https://lib.rs/crates/cross): Zero setup cross compilation and cross testing +- [wasm-bindgen](https://lib.rs/crates/wasm-bindgen): Easy support for interacting between JS and Rust + +### Math +- [num](https://lib.rs/crates/num): A collection of numeric types and traits for Rust, including bigint, complex, rational, range iterators, generic integers, and more! +- [num-format](https://lib.rs/crates/num-format): A Rust crate for producing string-representations of numbers, formatted according to international standards +- [num-rational](https://lib.rs/crates/num-rational): Rational numbers implementation for Rust +- [num-complex](https://lib.rs/crates/num-complex): Complex numbers implementation for Rust +- [statrs](https://lib.rs/crates/statrs): Statistical computing library for Rust +- [bigdecimal](https://lib.rs/crates/bigdecimal): Arbitrary precision decimal numbers +- [nalgebra](https://lib.rs/crates/nalgebra): General-purpose linear algebra library with transformations and statically-sized or dynamically-sized matrices +- [euclid](https://lib.rs/crates/euclid): Geometry primitives +- [ultraviolet](https://lib.rs/crates/ultraviolet): A crate to do linear algebra, fast +- [peroxide](https://lib.rs/crates/peroxide): Rust comprehensive scientific computation library contains linear algebra, numerical analysis, statistics and machine learning tools with farmiliar syntax + +### Desktop +- [notify-rust](https://lib.rs/crates/notify-rust): Show desktop notifications (linux, bsd, mac). Pure Rust dbus client and server. +- [arboard](https://lib.rs/crates/arboard): Image and text handling for the OS clipboard + +### Configuration +- [config](https://lib.rs/crates/config): Layered configuration system for Rust applications +- [envy](https://lib.rs/crates/envy): deserialize env vars into typesafe structs + +### Language Extensions +#### Enums +- [strum](https://lib.rs/crates/strum): Helpful macros for working with enums and strings +- [enum_dispatch](https://lib.rs/crates/enum_dispatch): Near drop-in replacement for dynamic-dispatched method calls with up to 10x the speed +- [num_enum](https://lib.rs/crates/num_enum): Procedural macros to make inter-operation between primitives and enums easier +- [enum-display](https://lib.rs/crates/enum-display): A macro to derive Display for enums + +#### Memory +- [smol_str](https://lib.rs/crates/smol_str): small-string optimized string type with O(1) clone +- [beef](https://lib.rs/crates/beef): More compact Cow +- [dyn-clone](https://lib.rs/crates/dyn-clone): Clone trait that is dyn-compatible +- [memoffset](https://lib.rs/crates/memoffset): offset_of functionality for Rust structs +- [az](https://lib.rs/crates/az): Casts and checked casts +- [zerocopy](https://lib.rs/crates/zerocopy): Zerocopy makes zero-cost memory manipulation effortless. We write "unsafe" so you don't have to. +- [once_cell](https://lib.rs/crates/once_cell): Single assignment cells and lazy values +- [lazy_static](https://lib.rs/crates/lazy_static): A macro for declaring lazily evaluated statics in Rust +- [globals](https://lib.rs/crates/globals): Painless global variables in Rust +- [lazy_format](https://lib.rs/crates/lazy_format): A utility crate for lazily formatting values for later +- [fragile](https://lib.rs/crates/fragile): Provides wrapper types for sending non-send values to other threads + +#### Syntax +- [tap](https://lib.rs/crates/tap): Generic extensions for tapping values in Rust +- [option_trait](https://lib.rs/crates/option_trait): Helper traits for more generalized options +- [cascade](https://lib.rs/crates/cascade): Dart-like cascade macro for Rust +- [enclose](https://lib.rs/crates/enclose): A convenient macro, for cloning values into a closure +- [extend](https://lib.rs/crates/extend): Create extensions for types you don't own with extension traits but without the boilerplate +- [hex_lit](https://lib.rs/crates/hex_lit): Hex macro literals without use of hex macros +- [replace_with](https://lib.rs/crates/replace_with): Temporarily take ownership of a value at a mutable location, and replace it with a new value based on the old one +- [scopeguard](https://lib.rs/crates/scopeguard): A RAII scope guard that will run a given closure when it goes out of scope, even if the code between panics (assuming unwinding panic). +- [backon](https://lib.rs/crates/backon): Make retry like a built-in feature provided by Rust +- [tryhard](https://lib.rs/crates/tryhard): Easily retry futures +- [retry](https://lib.rs/crates/retry): Utilities for retrying operations that can fail +- [statum](https://lib.rs/crates/statum): Compile-time state machine magic for Rust: Zero-boilerplate typestate patterns with automatic transition validation +- [formatx](https://lib.rs/crates/formatx): A macro for formatting non literal strings at runtime +- [erased](https://lib.rs/crates/erased): Erase the type of a reference or box, retaining the lifetime +- [include_dir](https://lib.rs/crates/include_dir): Embed the contents of a directory in your binary +- [stacker](https://lib.rs/crates/stacker): A stack growth library useful when implementing deeply recursive algorithms that may accidentally blow the stack +- [recursive](https://lib.rs/crates/recursive): Easy recursion without stack overflows + +#### Type Extensions +- [itertools](https://lib.rs/crates/itertools): Extra iterator adaptors, iterator methods, free functions, and macros +- [itermore](https://lib.rs/crates/itermore): 🤸‍♀️ More iterator adaptors +- [derive_more](https://lib.rs/crates/derive_more): Adds #[derive(x)] macros for more traits +- [derive_builder](https://lib.rs/crates/derive_builder): Rust macro to automatically implement the builder pattern for arbitrary structs +- [ordered-float](https://lib.rs/crates/ordered-float): Wrappers for total ordering on floats +- [stdext](https://lib.rs/crates/stdext): Extensions for the Rust standard library structures +- [bounded-integer](https://lib.rs/crates/bounded-integer): Bounded integers +- [tuples](https://lib.rs/crates/tuples): Provides many useful tools related to tuples +- [fallible-iterator](https://lib.rs/crates/fallible-iterator): Fallible iterator traits +- [sequential](https://lib.rs/crates/sequential): A configurable sequential number generator + +#### Compilation +- [cfg-if](https://lib.rs/crates/cfg-if): A macro to ergonomically define an item depending on a large number of #[cfg] parameters. Structured like an if-else chain, the first matching branch is the item that gets emitted. +- [cfg_aliases](https://lib.rs/crates/cfg_aliases): A tiny utility to help save you a lot of effort with long winded #[cfg()] checks +- [nameof](https://lib.rs/crates/nameof): Provides a Rust macro to determine the string name of a binding, type, const, or function +- [tynm](https://lib.rs/crates/tynm): Returns type names in shorter form + +#### Const +- [constcat](https://lib.rs/crates/constcat): concat! with support for const variables and expressions +- [konst](https://lib.rs/crates/konst): Const equivalents of std functions, compile-time comparison, and parsing + +### Geo +- [geo](https://lib.rs/crates/geo): Geospatial primitives and algorithms +- [geojson](https://lib.rs/crates/geojson): Read and write GeoJSON vector geographic data +- [geozero](https://lib.rs/crates/geozero): Zero-Copy reading and writing of geospatial data in WKT/WKB, GeoJSON, MVT, GDAL, and other formats +- [versatiles](https://lib.rs/crates/versatiles): A toolbox for converting, checking and serving map tiles in various formats +- [ipcap](https://lib.rs/crates/ipcap): 🌍 A CLI & library for decoding IP addresses into state, postal code, country, coordinates, etc without internet access From 61b65a08296888c1aa2ab3b2d278faaa003c1ad5 Mon Sep 17 00:00:00 2001 From: JMARyA Date: Tue, 8 Apr 2025 11:07:33 +0200 Subject: [PATCH 15/74] =?UTF-8?q?=E2=9C=A8=20add=20ulid?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- technology/dev/ULID.md | 126 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 126 insertions(+) create mode 100644 technology/dev/ULID.md diff --git a/technology/dev/ULID.md b/technology/dev/ULID.md new file mode 100644 index 0000000..259e509 --- /dev/null +++ b/technology/dev/ULID.md @@ -0,0 +1,126 @@ +--- +obj: concept +repo: https://github.com/ulid/spec +aliases: ["Universally Unique Lexicographically Sortable Identifier"] +--- + +# ULID (Universally Unique Lexicographically Sortable Identifier) +UUID can be suboptimal for many use-cases because: + +- It isn't the most character efficient way of encoding 128 bits of randomness +- UUID v1/v2 is impractical in many environments, as it requires access to a unique, stable MAC address +- UUID v3/v5 requires a unique seed and produces randomly distributed IDs, which can cause fragmentation in many data structures +- UUID v4 provides no other information than randomness which can cause fragmentation in many data structures + +Instead, herein is proposed ULID: + +```javascript +ulid() // 01ARZ3NDEKTSV4RRFFQ69G5FAV +``` + +- 128-bit compatibility with UUID +- 1.21e+24 unique ULIDs per millisecond +- Lexicographically sortable! +- Canonically encoded as a 26 character string, as opposed to the 36 character UUID +- Uses Crockford's base32 for better efficiency and readability (5 bits per character) +- Case insensitive +- No special characters (URL safe) +- Monotonic sort order (correctly detects and handles the same millisecond) + +## Specification +Below is the current specification of ULID as implemented in [ulid/javascript](https://github.com/ulid/javascript). + +*Note: the binary format has not been implemented in JavaScript as of yet.* + +``` + 01AN4Z07BY 79KA1307SR9X4MV3 + +|----------| |----------------| + Timestamp Randomness + 48bits 80bits +``` + +### Components + +**Timestamp** +- 48 bit integer +- UNIX-time in milliseconds +- Won't run out of space 'til the year 10889 AD. + +**Randomness** +- 80 bits +- Cryptographically secure source of randomness, if possible + +### Sorting +The left-most character must be sorted first, and the right-most character sorted last (lexical order). The default ASCII character set must be used. Within the same millisecond, sort order is not guaranteed + +### Canonical String Representation + +``` +ttttttttttrrrrrrrrrrrrrrrr + +where +t is Timestamp (10 characters) +r is Randomness (16 characters) +``` + +#### Encoding +Crockford's Base32 is used as shown. This alphabet excludes the letters I, L, O, and U to avoid confusion and abuse. + +``` +0123456789ABCDEFGHJKMNPQRSTVWXYZ +``` + +### Monotonicity +When generating a ULID within the same millisecond, we can provide some guarantees regarding sort order. Namely, if the same millisecond is detected, the `random` component is incremented by 1 bit in the least significant bit position (with carrying). For example: + +```javascript +import { monotonicFactory } from 'ulid' + +const ulid = monotonicFactory() + +// Assume that these calls occur within the same millisecond +ulid() // 01BX5ZZKBKACTAV9WEVGEMMVRZ +ulid() // 01BX5ZZKBKACTAV9WEVGEMMVS0 +``` + +If, in the extremely unlikely event that, you manage to generate more than $2^{80}$ ULIDs within the same millisecond, or cause the random component to overflow with less, the generation will fail. + +```javascript +import { monotonicFactory } from 'ulid' + +const ulid = monotonicFactory() + +// Assume that these calls occur within the same millisecond +ulid() // 01BX5ZZKBKACTAV9WEVGEMMVRY +ulid() // 01BX5ZZKBKACTAV9WEVGEMMVRZ +ulid() // 01BX5ZZKBKACTAV9WEVGEMMVS0 +ulid() // 01BX5ZZKBKACTAV9WEVGEMMVS1 +... +ulid() // 01BX5ZZKBKZZZZZZZZZZZZZZZX +ulid() // 01BX5ZZKBKZZZZZZZZZZZZZZZY +ulid() // 01BX5ZZKBKZZZZZZZZZZZZZZZZ +ulid() // throw new Error()! +``` + +#### Overflow Errors when Parsing Base32 Strings +Technically, a 26-character Base32 encoded string can contain 130 bits of information, whereas a ULID must only contain 128 bits. Therefore, the largest valid ULID encoded in Base32 is `7ZZZZZZZZZZZZZZZZZZZZZZZZZ`, which corresponds to an epoch time of `281474976710655` or $2^{48}-1$. + +Any attempt to decode or encode a ULID larger than this should be rejected by all implementations, to prevent overflow bugs. + +### Binary Layout and Byte Order +The components are encoded as 16 octets. Each component is encoded with the Most Significant Byte first (network byte order). + +``` +0 1 2 3 + 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +| 32_bit_uint_time_high | ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +| 16_bit_uint_time_low | 16_bit_uint_random | ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +| 32_bit_uint_random | ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +| 32_bit_uint_random | ++-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ +``` From 4406c980852842cdf5793c82095f70094905e89c Mon Sep 17 00:00:00 2001 From: JMARyA Date: Tue, 8 Apr 2025 11:08:57 +0200 Subject: [PATCH 16/74] =?UTF-8?q?=E2=9C=A8=20add=20rustscript?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../applications/development/rust-script.md | 127 ++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 technology/applications/development/rust-script.md diff --git a/technology/applications/development/rust-script.md b/technology/applications/development/rust-script.md new file mode 100644 index 0000000..245b24f --- /dev/null +++ b/technology/applications/development/rust-script.md @@ -0,0 +1,127 @@ +--- +obj: application +repo: https://github.com/fornwall/rust-script +website: https://rust-script.org +--- + +# RustScript +With rust-script Rust files and expressions can be executed just like a shell or Python script. Features include: +- Caching compiled artifacts for speed. +- Reading Cargo manifests embedded in Rust scripts. +- Supporting executable Rust scripts via Unix shebangs and Windows file associations. +- Using expressions as stream filters (i.e. for use in command pipelines). +- Running unit tests and benchmarks from scripts. + +## Scripts +The primary use for rust-script is for running Rust source files as scripts. For example: + +``` +$ echo 'println!("Hello, World!");' > hello.rs +$ rust-script hello.rs +Hello, World! +``` + +Under the hood, a Cargo project will be generated and built (with the Cargo output hidden unless compilation fails or the `-c/--cargo-output` option is used). The first invocation of the script will be slower as the script is compiled - subsequent invocations of unmodified scripts will be fast as the built executable is cached. + +As seen from the above example, using a `fn main() {}` function is not required. If not present, the script file will be wrapped in a `fn main() { ... }` block. + +rust-script will look for embedded dependency and manifest information in the script as shown by the below two equivalent `now.rs` variants: + +```rust +#!/usr/bin/env rust-script +//! This is a regular crate doc comment, but it also contains a partial +//! Cargo manifest. Note the use of a *fenced* code block, and the +//! `cargo` "language". +//! +//! ```cargo +//! [dependencies] +//! time = "0.1.25" +//! ``` +fn main() { + println!("{}", time::now().rfc822z()); +} +``` + +```rust +// cargo-deps: time="0.1.25" +// You can also leave off the version number, in which case, it's assumed +// to be "*". Also, the `cargo-deps` comment *must* be a single-line +// comment, and it *must* be the first thing in the file, after the +// shebang. +// Multiple dependencies should be separated by commas: +// cargo-deps: time="0.1.25", libc="0.2.5" +fn main() { + println!("{}", time::now().rfc822z()); +} +``` + +The output from running one of the above scripts may look something like: + +``` +$ rust-script now +Wed, 28 Oct 2020 00:38:45 +0100 +``` + +## Useful command-line arguments: + +- `--bench`: Compile and run benchmarks. Requires a nightly toolchain. +- `--debug`: Build a debug executable, not an optimised one. +- `--force`: Force the script to be rebuilt. Useful if you want to force a recompile with a different toolchain. +- `--package`: Generate the Cargo package and print the path to it - but don’t compile or run it. Effectively “unpacks” the script into a Cargo package. +- `--test`: Compile and run tests. +- `--wrapper`: Add a wrapper around the executable. Can be used to run debugging with e.g. `rust-script --debug --wrapper rust-lldb my-script.rs` or benchmarking with `rust-script --wrapper "hyperfine --runs 100" my-script.rs` + +## Executable Scripts +On Unix systems, you can use `#!/usr/bin/env rust-script` as a shebang line in a Rust script. This will allow you to execute a script files (which don’t need to have the `.rs` file extension) directly. + +If you are using Windows, you can associate the `.ers` extension (executable Rust - a renamed `.rs` file) with rust-script. This allows you to execute Rust scripts simply by naming them like any other executable or script. + +This can be done using the `rust-script --install-file-association` command. Uninstall the file association with `rust-script --uninstall-file-association`. + +If you want to make a script usable across platforms, use both a shebang line and give the file a `.ers` file extension. + +## Expressions +Using the `-e/--expr` option a Rust expression can be evaluated directly, with dependencies (if any) added using `-d/--dep`: + +``` +$ rust-script -e '1+2' +3 +$ rust-script --dep time --expr "time::OffsetDateTime::now_utc().format(time::Format::Rfc3339).to_string()"` +"2020-10-28T11:42:10+00:00" +$ # Use a specific version of the time crate (instead of default latest): +$ rust-script --dep time=0.1.38 -e "time::now().rfc822z().to_string()" +"2020-10-28T11:42:10+00:00" +``` + +The code given is embedded into a block expression, evaluated, and printed out using the Debug formatter (i.e. `{:?}`). + +## Filters +You can use rust-script to write a quick filter, by specifying a closure to be called for each line read from stdin, like so: + +``` +$ cat now.ers | rust-script --loop \ + "let mut n=0; move |l| {n+=1; println!(\"{:>6}: {}\",n,l.trim_end())}" + 1: // cargo-deps: time="0.1.25" + 3: fn main() { + 4: println!("{}", time::now().rfc822z()); + 5: } +``` + +You can achieve a similar effect to the above by using the `--count` flag, which causes the line number to be passed as a second argument to your closure: + +``` +$ cat now.ers | rust-script --count --loop \ + "|l,n| println!(\"{:>6}: {}\", n, l.trim_end())" + 1: // cargo-deps: time="0.1.25" + 2: fn main() { + 3: println!("{}", time::now().rfc822z()); + 4: } +``` + +## Environment Variables +The following environment variables are provided to scripts by rust-script: + +- `$RUST_SCRIPT_BASE_PATH`: the base path used by rust-script to resolve relative dependency paths. Note that this is not necessarily the same as either the working directory, or the directory in which the script is being compiled. +- `$RUST_SCRIPT_PKG_NAME`: the generated package name of the script. +- `$RUST_SCRIPT_SAFE_NAME`: the file name of the script (sans file extension) being run. For scripts, this is derived from the script’s filename. May also be `expr` or `loop` for those invocations. +- `$RUST_SCRIPT_PATH`: absolute path to the script being run, assuming one exists. Set to the empty string for expressions. From b45b4f651985ea0ca781cb3b4bd10616cb3a4cec Mon Sep 17 00:00:00 2001 From: JMARyA Date: Tue, 8 Apr 2025 19:01:28 +0200 Subject: [PATCH 17/74] fix --- technology/applications/cli/intermodal.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/technology/applications/cli/intermodal.md b/technology/applications/cli/intermodal.md index d322d70..14dc5b8 100644 --- a/technology/applications/cli/intermodal.md +++ b/technology/applications/cli/intermodal.md @@ -1,7 +1,7 @@ --- obj: application repo: https://github.com/casey/intermodal -website: imdl.io +website: https://imdl.io rev: 2025-01-28 --- From 104e3ba3f385b244de4fd2872a5161bb4025bfe8 Mon Sep 17 00:00:00 2001 From: JMARyA Date: Thu, 24 Apr 2025 13:50:34 +0200 Subject: [PATCH 18/74] update rust --- technology/dev/programming/languages/Rust.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/technology/dev/programming/languages/Rust.md b/technology/dev/programming/languages/Rust.md index 108a840..d48ac54 100644 --- a/technology/dev/programming/languages/Rust.md +++ b/technology/dev/programming/languages/Rust.md @@ -231,6 +231,8 @@ fn do_something() { } ``` +> **Note**: If you ever need to guard your code from an overly aggressive `cargo fmt`, you can annotate it with `#[rustfmt::skip]` + ### Modules You can split your code up into multiple modules for better organization. ```rust @@ -1009,6 +1011,9 @@ Currently, all supported targets follow the assembly code syntax used by LLVM's - [serde_json](https://lib.rs/crates/serde_json): A [JSON](../../../files/JSON.md) serialization file format - [serde_jsonc](https://lib.rs/crates/serde_jsonc): A JSON serialization file format - [serde_yaml](https://lib.rs/crates/serde_yaml): [YAML](../../../files/YAML.md) data format for Serde +- [rmp_serde](https://lib.rs/crates/rmp-serde): MsgPack format for serde +- [rmpv](https://lib.rs/crates/rmpv): MsgPack value variants (`serde_json::Value` for MsgPack) +- [rmp](https://lib.rs/crates/rmp): low level msgpack implementation - [bson](https://lib.rs/crates/bson): Encoding and decoding support for [BSON](../../../files/BSON.md) in Rust - [toml](https://lib.rs/crates/toml): A native Rust encoder and decoder of [TOML](../../../files/TOML.md)-formatted files and streams. - [gray_matter](https://lib.rs/crates/gray_matter): Smart front matter parser. An implementation of gray-matter in rust. Parses YAML, JSON, TOML and support for custom parsers. From c9d9127160adc53453f891d4573a3574b2c4d222 Mon Sep 17 00:00:00 2001 From: JMARyA Date: Thu, 24 Apr 2025 14:14:10 +0200 Subject: [PATCH 19/74] add dualsensectl --- .../applications/gaming/dualsensectl.md | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 technology/applications/gaming/dualsensectl.md diff --git a/technology/applications/gaming/dualsensectl.md b/technology/applications/gaming/dualsensectl.md new file mode 100644 index 0000000..b6ed5d8 --- /dev/null +++ b/technology/applications/gaming/dualsensectl.md @@ -0,0 +1,47 @@ +--- +obj: application +repo: https://github.com/nowrep/dualsensectl +--- + +# dualsensectl + +Linux tool for controlling Sony PlayStation 5 DualSense controller. + +## Usage + +Usage: `dualsensectl [options] command [ARGS]` + +### Options + +| Option | Description | +| ----------- | ------------------------------------------------- | +| `-l` | List available devices | +| `-d DEVICE` | Specify which device to use | +| `-w` | Wait for shell command to complete (monitor only) | + +### Commands + +Available Commands: + +- `power-off`: Turn off the controller (BT only), +- `battery`: Get the controller battery level, +- `info`: Get the controller firmware info, +- `lightbar STATE`: Enable (on) or disable (off) lightbar, +- `lightbar RED GREEN BLUE [BRIGHTNESS]`: Set lightbar color and brightness (0-255), +- `player-leds NUMBER`: Set player LEDs (1-5) or disabled (0), +- `microphone STATE`: Enable (on) or disable (off) microphone, +- `microphone-led STATE`: Enable (on) or disable (off) microphone LED, +- `speaker STATE`: Toggle to `internal` speaker, `headphone` or both, +- `volume VOLUME`: Set audio volume (0-255) of internal speaker and headphone, +- `attenuation RUMBLE TRIGGER`: Set the attenuation (0-7) of rumble/haptic motors and trigger vibration, +- `trigger TRIGGER off`: Remove all effects, +- `trigger TRIGGER feedback POSITION STRENGTH`: Set a resistance starting at position with a defined strength, +- `trigger TRIGGER weapon START STOP STRENGTH`: Emulate weapon like gun trigger, +- `trigger TRIGGER bow START STOP STRENGTH SNAPFORCE`: Emulate weapon like bow, +- `trigger TRIGGER galloping START STOP FIRST_FOOT SECOND_FOOT FREQUENCY`: Emulate a galloping, +- `trigger TRIGGER machine START STOP STRENGTH_A STRENGTH_B FREQUENCY PERIOD`: Switch vibration between two strengths at a specified period, +- `trigger TRIGGER vibration POSITION AMPLITUDE FREQUENCY`: Vibrates motor arm around specified position, +- `trigger TRIGGER feedback-raw STRENGTH[10]`: Set a resistance starting using an array of strength, +- `trigger TRIGGER vibration-raw AMPLITUDE[10] FREQUENCY`: Vibrates motor arm at position and strength specified by an array of amplitude, +- `trigger TRIGGER MODE [PARAMS]`: Set the trigger (left, right or both) mode with parameters (up to 9), +- `monitor [add COMMAND] [remove COMMAND]`: Run shell command COMMAND on add/remove events. From 915644451b3e03bfaab18706f55cb876ae3effbb Mon Sep 17 00:00:00 2001 From: JMARyA Date: Thu, 24 Apr 2025 14:14:45 +0200 Subject: [PATCH 20/74] update pacman --- .../applications/package managers/arch-linux/Pacman.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/technology/applications/package managers/arch-linux/Pacman.md b/technology/applications/package managers/arch-linux/Pacman.md index bbaa46e..8795451 100644 --- a/technology/applications/package managers/arch-linux/Pacman.md +++ b/technology/applications/package managers/arch-linux/Pacman.md @@ -36,6 +36,14 @@ pacman -Rcs ... Get information about package: ```shell pacman -Si ... + +# Local +pacman -Qi ... +``` + +List all packages from a reposity: +```shell +pacman -Sl ``` Install a package from local package file (.[tar](../../cli/compression/tar.md).[xz](../../../files/XZ%20Compression.md)): From 1cd71457dd7391231b65e7efa51a9da4ab1a5f56 Mon Sep 17 00:00:00 2001 From: JMARyA Date: Thu, 24 Apr 2025 14:15:55 +0200 Subject: [PATCH 21/74] update ha --- technology/applications/web/Home Assistant.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/technology/applications/web/Home Assistant.md b/technology/applications/web/Home Assistant.md index 92eb884..bc90bec 100644 --- a/technology/applications/web/Home Assistant.md +++ b/technology/applications/web/Home Assistant.md @@ -54,3 +54,6 @@ services: restart: always network_mode: host ``` + +## Extensions +- [Mushroom Cards](https://github.com/piitaya/lovelace-mushroom) From 09ace3edede211dc73e44bcc3de59885ebecc59f Mon Sep 17 00:00:00 2001 From: JMARyA Date: Thu, 24 Apr 2025 14:16:58 +0200 Subject: [PATCH 22/74] add systeroid --- .../applications/utilities/systeroid.md | 357 ++++++++++++++++++ 1 file changed, 357 insertions(+) create mode 100644 technology/applications/utilities/systeroid.md diff --git a/technology/applications/utilities/systeroid.md b/technology/applications/utilities/systeroid.md new file mode 100644 index 0000000..b0d9d39 --- /dev/null +++ b/technology/applications/utilities/systeroid.md @@ -0,0 +1,357 @@ +--- +obj: application +repo: https://github.com/orhun/systeroid +rev: 2025-02-07 +--- + +# systeroid +`sysctl` is a utility on Unix-like operating systems that is used to read and modify the attributes of the kernel such as its version number, maximum limits, and security settings. **systeroid** is "_sysctl on steroids_". It can do everything that sysctl does and even more. It provides a safer, more performant, and user-friendly CLI/TUI for managing the kernel parameters at runtime. + +Although **systeroid** does not need the parameter section to be specified explicitly, it is important to know the sections and their areas of impact. Here are the available kernel sections according to the [Linux kernel documentation](https://www.kernel.org/doc/html/latest/admin-guide/sysctl/index.html): + +| Section | Path | Description | +| ---------- | ------------------- | ------------------------------------------------------------- | +| **abi** | `/proc/sys/abi/` | execution domains & personalities | +| **fs** | `/proc/sys/fs/` | filesystem settings | +| **kernel** | `/proc/sys/kernel/` | global kernel information / miscellaneous settings | +| **net** | `/proc/sys/net/` | networking settings | +| **sunrpc** | `/proc/sys/sunrpc/` | SUN Remote Procedure Call settings | +| **user** | `/proc/sys/user/` | user namespace limits | +| **vm** | `/proc/sys/vm/` | memory management tuning buffer and cache management settings | +| **dev** | `/proc/sys/dev/` | device specific information | +| **debug** | `/proc/sys/debug/` | - | + + +## Usage +``` +systeroid [options] [variable[=value] ...] --load[=] +``` + +### Options +| Option | Description | +| ---------------------- | -------------------------------------------- | +| `-a, --all` | display all variables | +| `-T, --tree` | display the variables in a tree-like format | +| `-J, --json` | display the variables in JSON format | +| `--deprecated` | include deprecated variables while listing | +| `-e, --ignore` | ignore unknown variable errors | +| `-N, --names` | print only variable names | +| `-n, --values` | print only variable values | +| `-b, --binary` | print only variable values without new line | +| `-p, --load` | read values from file | +| `-S, --system` | read values from all system directories | +| `-r, --pattern ` | use a regex for matching variable names | +| `-q, --quiet` | do not print variable after the value is set | +| `-w, --write` | only enable writing a value to variable | +| `-E, --explain` | provide a detailed explanation for variable | +| `-D, --docs ` | set the path of the kernel documentation | +| `-P, --no-pager` | do not pipe output into a pager | +| `-v, --verbose` | enable verbose logging | +| `--tui` | show terminal user interface | +| `-c, --config ` | set the path of the configuration file | + +Most of the arguments/flags are inherited from `sysctl` so they have the same functionality. + +### Examples + +#### Listing parameters + +```sh +# list all parameters +systeroid -A + +# list parameters in a tree-like format +systeroid -T + +# list parameters in JSON format +systeroid -J +``` + +#### Filtering by section + +```sh +# only list parameters in the "kernel" section +systeroid kernel + +# only list parameters in the "vm" and "user" sections +systeroid vm user +``` + +#### Displaying values + +```sh +# print the name and value of a parameter (in "name=value" format) +systeroid kernel.hostname + +# print only the value of a parameter +systeroid -n kernel.hostname + +# print the name and values of the multiple parameters +systeroid kernel.hostname user.max_user_namespaces +``` + +#### Setting values + +```sh +# set the value of a parameter +systeroid kernel.domainname="example.com" + +# set the values of multiple parameters and ignore errors +systeroid -e kernel.dmesg_restrict=0 vm.panic_on_oom=1 unknown_param="test" + +# set the values of multiple parameters and enforce the "name=value" format +systeroid -w fs.dir-notify-enable=1 net.mptcp.enabled=1 vm.oom_kill_allocating_task +``` + +#### Loading values from a file +Parameter values can be set from an [INI file](https://en.wikipedia.org/wiki/INI_file). + +`sysctl.conf`: + +```ini +# Use kernel.sysrq = 1 to allow all keys. +# See https://www.kernel.org/doc/html/latest/admin-guide/sysrq.html for a list +# of values and keys. +kernel.sysrq = 16 + +# Append the PID to the core filename +kernel.core_uses_pid = 1 + +; Enable hard and soft link protection +; (If a line begins with a single '-', any attempts to set the value that fail will be ignored.) +-fs.protected_hardlinks = 1 +fs.protected_symlinks = 1 +``` + +To load it: + +```sh +systeroid --load sysctl.conf +``` + +If no file is given, values are loaded from `/etc/sysctl.conf` as default: + +```sh +systeroid --load +``` + +Specifying "-" as file name means reading data from standard input: + +```sh +systeroid --load - +``` + +#### Loading values from the system directories + +The list of default system directories are the following: + +- `/etc/sysctl.d` +- `/run/sysctl.d` +- `/usr/local/lib/sysctl.d` +- `/usr/lib/sysctl.d` +- `/lib/sysctl.d` +- `/etc/sysctl.conf` + +Use `--system` flag to load the files with `.conf` extension in these directories: + +```sh +systeroid --system +``` + +#### Searching parameters + +```sh +# search parameters using regex patterns +systeroid -r 'net.ipv4.conf.(eth|wlan)0.arp' +systeroid -r '^net.ipv6' +``` + +Example output of combining search with listing: + +```sh +$ systeroid --names --pattern 'kernel.*_max$' --tree + +kernel +├── ngroups_max +├── pid_max +└── sched_util_clamp_max +``` + +#### Showing information about parameters + +**systeroid** can dump the parameter information from the kernel documentation. This is useful if you don't know what a parameter is used for. + +```sh +# show information about a parameter +systeroid --explain oom_dump_tasks +``` + +Kernel documentation should be present in one of the following paths for parsing upon first launch: + +- `/usr/share/doc/linux` +- `/usr/share/doc/linux-doc` +- `/usr/share/doc/linux-docs` +- `/usr/share/doc/kernel-doc-*/Documentation` + +Then the parsed data is cached in `$HOME/.cache/systeroid-core` and used from there as long as the documentation is not updated. The caching mechanism can be disabled via setting the `NO_CACHE` environment variable. + +This is a design choice due to the fact that different versions of kernels might be installed on different systems so the documentation might be too new or old if **systeroid** was to be shipped with a fixed set of parameter descriptions bundled in. With the parsing approach, documentation is always kept up-to-date. + +However, this means you need to: + +- either install the kernel documentation package (based on your distribution) + - on Arch Linux: `pacman -S linux-docs` + - on Debian/Ubuntu: `apt-get install linux-doc` + - on Fedora: `dnf install kernel-doc` +- or explicitly specify the path of the [kernel documentation](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/admin-guide). + +```sh +# specify the kernel documentation path explicitly +# (not needed if you have the kernel documentation installed as a package) +systeroid -E user.max_user_namespaces --docs /usr/share/doc/linux +``` + +To change the default pager (`less(1)`), you can use the `PAGER` environment variable. Also, you can simply use `--no-pager` flag to disable it. + +```sh +systeroid -E kernel.ctrl-alt-del --no-pager +``` + +It is also possible to retrieve information about multiple parameters: + +```sh +systeroid -E --pattern '.*ipv4.*' --no-pager +``` + +#### Verbose logging + +`--verbose` flag can be used to enable verbose logging: + +```sh +systeroid --verbose +``` + +Also, `RUST_LOG` environment variable can be set accordingly to filter based on different log levels. + +```sh +RUST_LOG=trace systeroid +``` + +## TUI + +### Usage + +``` +systeroid-tui [options] +``` + +### Key Bindings + +| Key | Action | +| ---------------------------------------------------------- | ---------------------------- | +| ?, f1 | show help | +| up/down, k/j, pgup/pgdown | scroll list | +| t/b | scroll to top/bottom | +| left/right, h/l | scroll documentation | +| tab, ` | next/previous section | +| : | command | +| / | search | +| enter | select / set parameter value | +| s | save parameter value | +| c | copy to clipboard | +| ctrl-l, f2 | show logs | +| r, f5 | refresh | +| esc | cancel / exit | +| q, ctrl-c/ctrl-d | exit | + +## Configuration +**systeroid** can be configured with a configuration file that uses the [INI format](https://en.wikipedia.org/wiki/INI_file). It can be specified via `--config` or `SYSTEROID_CONFIG` environment variable. It can also be placed in one of the following global locations: + +- `$HOME/.config/systeroid/systeroid.conf` +- `$HOME/.systeroid/systeroid.conf` + +```sh +# set the config path via argument +systeroid --config config/systeroid.conf + +# set the config path via env +SYSTEROID_CONFIG=config/systeroid.conf systeroid + +# use a global path +mkdir -p "$HOME/.config/systeroid" +cp config/systeroid.conf "$HOME/.config/systeroid" +systeroid +``` + +See the example systeroid.conf for the configuration options: + +```ini +; systeroid ~ configuration file +; https://github.com/orhun/systeroid +; +; Each line either contains a comment or a command line argument grouped under a section. +; Run "systeroid --help" or "systeroid-tui --help" to get a list of all possible configuration options. + +[general] +; display the deprecated parameters such as base_reachable_time and retrans_time while listing +; See https://bugzilla.redhat.com/show_bug.cgi?id=152435 +display_deprecated = false +; path of the Linux kernel documentation +; this is distro dependent, systeroid checks the following locations as default: +; - /usr/share/doc/linux/ +; - /usr/share/doc/linux-doc/ +; - /usr/share/doc/linux-docs/ +; - /usr/share/doc/kernel-doc-*/Documentation/ +kernel_docs = "/usr/share/doc/linux" + +[cli] +; ignore unknown variable errors +ignore_errors = true +; do not print variable after the value is set +quiet = false +; do not pipe output into a pager +; note that the default pager is less(1) and you can change it by using `PAGER` environment variable +no_pager = false +; display type for the parameter, available options are: +; - default: print the parameter name along with its value +; - name: print only the name of the parameter +; - value: print only the value of the parameter +; - binary: print only the value of the parameter without new line +display_type = "default" +; output type for the list, available options are: +; - default: print the output as is +; - tree: print the output in a tree-like format +; - json: print the output in JSON format +output_type = "default" + +[cli.colors] +; available colors are defined in https://docs.rs/owo-colors/latest/owo_colors/colored/enum.Color.html +; default color for the symbols +default_color = "bright black" +; section colors +section_abi = "red" +section_fs = "green" +section_kernel = "magenta" +section_net = "blue" +section_sunrpc = "yellow" +section_user = "cyan" +section_vm = "bright red" +section_unknown = "white" + +[tui] +; tick rate of the terminal +tick_rate = 250 +; disable showing the parameter documentation +no_docs = true +; path for saving the changed kernel parameters +save_path = "/etc/sysctl.conf" +; file to save the logs +;log_file = "systeroid.log" + +[tui.colors] +; available colors are defined in https://docs.rs/tui/latest/tui/style/enum.Color.html +; terminal foreground color +fg_color = "white" +; terminal background color +bg_color = "black" +``` From 9639ae7add6c969de043a790b3d2dc7ba06517ff Mon Sep 17 00:00:00 2001 From: JMARyA Date: Fri, 25 Apr 2025 14:17:09 +0200 Subject: [PATCH 23/74] add onefetch --- .../applications/development/onefetch.md | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 technology/applications/development/onefetch.md diff --git a/technology/applications/development/onefetch.md b/technology/applications/development/onefetch.md new file mode 100644 index 0000000..9e68d43 --- /dev/null +++ b/technology/applications/development/onefetch.md @@ -0,0 +1,52 @@ +--- +obj: application +repo: https://github.com/o2sh/onefetch +rev: 2025-02-07 +--- + +# onefetch +Onefetch is a command-line Git information tool written in Rust that displays project information and code statistics for a local Git repository directly to your terminal. The tool is completely offline - no network access is required. + +By default, the repo's information is displayed alongside the dominant language's logo, but you can further configure onefetch to instead use an image - on supported terminals -, a text input or nothing at all. + +It automatically detects open source licenses from texts and provides the user with valuable information like code distribution, pending changes, number of dependencies (by package manager), top contributors (by number of commits), size on disk, creation date, LOC (lines of code), etc. + +Onefetch can be configured via command-line flags to display exactly what you want, the way you want it to: you can customize ASCII/Text formatting, disable info lines, ignore files & directories, output in multiple formats, etc. + +## Usage +Usage: `onefetch [OPTIONS] [INPUT]` + +| Option | Description | +| ------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `-d`, `--disabled-fields ...` | Allows you to disable FIELD(s) from appearing in the output | +| `--no-title` | Hides the title | +| `--number-of-authors ` | Maximum NUM of authors to be shown [default: 3] | +| `--number-of-languages ` | Maximum NUM of languages to be shown [default: 6] | +| `--number-of-file-churns ` | Maximum NUM of file churns to be shown [default: 3] | +| `--churn-pool-size ` | Minimum NUM of commits from HEAD used to compute the churn summary. By default, the value is non-deterministic due to time-based computation and will be displayed under the info title "Churn (NUM)" | +| `-e`, `--exclude ...` | Ignore all files & directories matching EXCLUDE | +| `--no-bots[=]` | Exclude bot commits. Use `` to override the default pattern | +| `--no-merges` | Ignores merge commits | +| `-E`, `--email` | Show the email address of each author | +| `--http-url` | Display repository URL as HTTP | +| `--hide-token` | Hide token in repository URL | +| `--include-hidden` | Count hidden files and directories | +| `-T`, `--type ...` | Filters output by language type [default: programming markup] [possible values: programming, markup, prose, data] | +| `-t`, `--text-colors ...` | Changes the text colors (X X X...). Goes in order of title, ~, underline, subtitle, colon, and info | +| `-z`, `--iso-time` | Use ISO 8601 formatted timestamps | +| `--number-separator ` | Which thousands SEPARATOR to use [default: plain] [possible values: plain, comma, space, underscore] | +| `--no-bold` | Turns off bold formatting | +| `--ascii-input ` | Takes a non-empty STRING as input to replace the ASCII logo | +| `-c`, `--ascii-colors ...` | Colors (X X X...) to print the ascii art | +| `-a`, `--ascii-language ` | Which LANGUAGE's ascii art to print | +| `--true-color ` | Specify when to use true color [default: auto] [possible values: auto, never, always] | +| `-i`, `--image ` | Path to the IMAGE file | +| `--image-protocol ` | Which image PROTOCOL to use [possible values: kitty, sixel, iterm] | +| `--color-resolution ` | VALUE of color resolution to use with SIXEL backend [default: 16] [possible values: 16, 32, 64, 128, 256] | +| `--no-color-palette` | Hides the color palette | +| `--no-art` | Hides the ascii art or image if provided | +| `--nerd-fonts` | Use Nerd Font icons. Replaces language chips with Nerd Font icons | +| `-o`, `--output ` | Outputs Onefetch in a specific format [possible values: json, yaml] | +| `--generate ` | If provided, outputs the completion file for given SHELL [possible values: bash, elvish, fish, powershell, zsh] | +| `-l`, `--languages` | Prints out supported languages | +| `-p`, `--package-managers` | Prints out supported package managers | From 8212f6595725c4786afca5afc21de048f1033e2b Mon Sep 17 00:00:00 2001 From: JMARyA Date: Fri, 2 May 2025 13:21:07 +0200 Subject: [PATCH 24/74] update rust crypto crates --- technology/dev/programming/languages/Rust.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/technology/dev/programming/languages/Rust.md b/technology/dev/programming/languages/Rust.md index d48ac54..27ed117 100644 --- a/technology/dev/programming/languages/Rust.md +++ b/technology/dev/programming/languages/Rust.md @@ -1062,6 +1062,8 @@ Currently, all supported targets follow the assembly code syntax used by LLVM's - [redact](https://lib.rs/crates/redact): A simple library for keeping secrets out of logs - [noise](https://lib.rs/crates/noise): Procedural noise generation library - [ulid](https://lib.rs/crates/ulid): a Universally Unique Lexicographically Sortable Identifier implementation +- [age](https://crates.io/crates/age): A simple, secure, and modern encryption library. +- [minisign](https://crates.io/crates/minisign): A crate to sign files and verify signatures. #### Hashes - [digest](https://lib.rs/crates/digest): Traits for cryptographic hash functions and message authentication codes From 8386d56c383ce2e827e098bf728c01b40f757ef0 Mon Sep 17 00:00:00 2001 From: JMARyA Date: Fri, 2 May 2025 13:21:30 +0200 Subject: [PATCH 25/74] add minisign --- technology/cryptography/minisign.md | 139 ++++++++++++++++++++++++++++ 1 file changed, 139 insertions(+) create mode 100644 technology/cryptography/minisign.md diff --git a/technology/cryptography/minisign.md b/technology/cryptography/minisign.md new file mode 100644 index 0000000..9d3ff90 --- /dev/null +++ b/technology/cryptography/minisign.md @@ -0,0 +1,139 @@ +--- +obj: application +website: https://jedisct1.github.io/minisign +repo: https://github.com/jedisct1/minisign +--- + +# minisign +Minisign is a dead simple tool to sign files and verify signatures. There is also an [implementation in Rust](https://github.com/jedisct1/rsign2). +It is portable, lightweight, and uses the highly secure Ed25519 public-key signature system. + +## Creating a key pair +```shell +$ minisign -G +``` + +The public key is printed and put into the `minisign.pub` file. The secret key is encrypted and saved as a file named `~/.minisign/minisign.key`. + +## Signing a file +```shell +$ minisign -Sm myfile.txt +``` + +Or to include a comment in the signature, that will be verified and displayed when verifying the file: +```shell +$ minisign -Sm myfile.txt -t 'This comment will be signed as well' +``` + +The signature is put into `myfile.txt.minisig`. + +Multiple files can also be signed at once: +```shell +$ minisign -Sm file1.txt file2.txt *.jpg +``` + +## Verifying a file +```shell +$ minisign -Vm myfile.txt -P RWQf6LRCGA9i53mlYecO4IzT51TGPpvWucNSCh1CBM0QTaLn73Y7GFO3 +``` + +or + +```shell +$ minisign -Vm myfile.txt -p signature.pub +``` + +This requires the signature `myfile.txt.minisig` to be present in the same directory. + +The public key can either reside in a file (`./minisign.pub` by default) or be directly specified on the command line. + +## Usage +``` +Usage: +minisign -G [-f] [-p pubkey_file] [-s seckey_file] [-W] +minisign -R [-s seckey_file] [-p pubkey_file] +minisign -C [-s seckey_file] [-W] +minisign -S [-l] [-x sig_file] [-s seckey_file] [-c untrusted_comment] [-t trusted_comment] -m file [file ...] +minisign -V [-H] [-x sig_file] [-p pubkey_file | -P pubkey] [-o] [-q] -m file +``` + +| Option | Description | +|--------------|-----------------------------------------------------------------------| +| `-G` | Generate a new key pair | +| `-R` | Recreate a public key file from a secret key file | +| `-C` | Change/remove the password of the secret key | +| `-S` | Sign files | +| `-V` | Verify that a signature is valid for a given file | +| `-H` | Require input to be prehashed | +| `-l` | Sign using the legacy format | +| `-m ` | File to sign/verify | +| `-o` | Combined with `-V`, output the file content after verification | +| `-p ` | Public key file (default: `./minisign.pub`) | +| `-P `| Public key, as a base64 string | +| `-s ` | Secret key file (default: `~/.minisign/minisign.key`) | +| `-W` | Do not encrypt/decrypt the secret key with a password | +| `-x `| Signature file (default: `.minisig`) | +| `-c `| Add a one-line untrusted comment | +| `-t `| Add a one-line trusted comment | +| `-q` | Quiet mode, suppress output | +| `-Q` | Pretty quiet mode, only print the trusted comment | +| `-f` | Force. Combined with `-G`, overwrite a previous key pair | +| `-v` | Display version number | + +### Trusted comments +Signature files include an untrusted comment line that can be freely modified even after the signature is created. + +They also include a second comment line that cannot be modified without the secret key. + +Trusted comments can be used to add instructions or application-specific metadata such as the intended file name, timestamps, resource identifiers, or version numbers to prevent downgrade attacks. + +OpenBSD's signify is conceptually similar to Minisign. + +Minisign creates signatures that can be verified by signify; however, signatures created by signify cannot be verified with Minisign because Minisign expects a trusted comment section to be present. +Trusted comments are crucial for describing what has been signed, in addition to merely confirming that a signature exists. + +## Signature format +``` +untrusted comment: +base64( || || ) +trusted_comment: +base64() +``` + +- `signature_algorithm`: `Ed` (legacy) or `ED` (hashed) +- `key_id`: 8 random bytes, matching the public key +- `signature` (legacy): `ed25519()` +- `signature` (prehashed): `ed25519(Blake2b-512())` +- `global_signature`: `ed25519( || )` + +New implementations must use the hashed signature format; support for the legacy one is optional and should not be done by default. + +## Public key format +``` +untrusted comment: +base64( || || ) +``` + +- `signature_algorithm`: `Ed` +- `key_id`: 8 random bytes +- `public_key`: Ed25519 public key + + +## Secret key format +``` +untrusted comment: +base64( || || || + || || || ) +``` + +- `signature_algorithm`: `Ed` +- `kdf_algorithm`: `Sc` +- `cksum_algorithm`: `B2` +- `kdf_salt`: 32 random bytes +- `kdf_opslimit`: `crypto_pwhash_scryptsalsa208sha256_OPSLIMIT_SENSITIVE` +- `kdf_memlimit`: `crypto_pwhash_scryptsalsa208sha256_MEMLIMIT_SENSITIVE` +- `keynum_sk`: ` ^ ( || || || )`, 104 bytes +- `key_id`: 8 random bytes +- `secret_key`: Ed25519 secret key +- `public_key`: Ed25519 public key +- `checksum`: `Blake2b-256( || || || )`, 32 bytes From 9a062cbfed2ec792392f6052d1a3df273b5e16b1 Mon Sep 17 00:00:00 2001 From: JMARyA Date: Fri, 2 May 2025 13:25:35 +0200 Subject: [PATCH 26/74] add panamax --- technology/applications/web/panamax.md | 136 +++++++++++++++++++++++++ 1 file changed, 136 insertions(+) create mode 100644 technology/applications/web/panamax.md diff --git a/technology/applications/web/panamax.md b/technology/applications/web/panamax.md new file mode 100644 index 0000000..021be1e --- /dev/null +++ b/technology/applications/web/panamax.md @@ -0,0 +1,136 @@ +--- +obj: application +repo: https://github.com/panamax-rs/panamax +--- + +# Panamax +Panamax is a tool to mirror the Rust and crates.io repositories, for offline usage of `rustup` and `cargo`. + +## Usage +## Docker +Panamax is available as a docker image, so you can run: + +``` +$ docker run --rm -it -v /path/to/mirror/:/mirror --user $(id -u) panamaxrs/panamax init /mirror +(Modify /path/to/mirror/mirror.toml as needed) +$ docker run --rm -it -v /path/to/mirror/:/mirror --user $(id -u) panamaxrs/panamax sync /mirror +(Once synced, serve the mirror) +$ docker run --rm -it -v /path/to/mirror/:/mirror --user $(id -u) -p8080:8080 panamaxrs/panamax serve /mirror +``` + +Alternatively, you can run panamax in a bare-metal environment like below. + +### Init +In Panamax, mirrors consist of self-contained directories. To create a mirror directory `my-mirror`: + +``` +$ panamax init my-mirror +Successfully created mirror base at `my-mirror`. +Make any desired changes to my-mirror/mirror.toml, then run panamax sync my-mirror. +``` + +There will now be a `my-mirror` directory in your current directory. + +### Modify mirror.toml +Within the directory, you'll find a `mirror.toml` file. This file contains the full configuration of the mirror, and while it has sane defaults, you should ensure the values are set to what you want. + +The other important parameter to set is the `base_url` within the `[crates]` section. After `cargo` fetches the index, it will try to use this URL to actually download the crates. It's important this value is accurate, or `cargo` may not work with the mirror. + +You can modify `mirror.toml` at any point in time, even after the mirror is synchronized. + +### Sync +Once you have made the changes to `mirror.toml`, it is time to synchronize your mirror! + +``` +$ panamax sync my-mirror +Syncing Rustup repositories... +[1/5] Syncing rustup-init files... ██████████████████████████████████████████████████████████████ 27/27 [00:00:06] +[2/5] Syncing latest stable... ████████████████████████████████████████████████████████████ 602/602 [00:09:02] +[3/5] Syncing latest beta... ████████████████████████████████████████████████████████████ 524/524 [00:07:29] +[4/5] Syncing latest nightly... ████████████████████████████████████████████████████████████ 546/546 [00:08:56] +[5/5] Cleaning old files... ████████████████████████████████████████████████████████████ 546/546 [00:00:00] +Syncing Rustup repositories complete! +Syncing Crates repositories... +[1/3] Fetching crates.io-index... ██████████████████████████████████████████████████████████ 1615/1615 [00:00:02] +[2/3] Syncing crates files... ██████████████████████████████████████████████████████████ 6357/6357 [00:00:05] +[3/3] Syncing index and config... +Syncing Crates repositories complete! +Sync complete. +``` + +Once this is step completes (without download errors), you will now have a full, synchronized copy of all the files needed to use `rustup` and `cargo` to their full potential! + +This directory can now be copied to a USB or rsync'd somewhere else, or even used in place - perfect for long plane trips! + +Additionally, this mirror can continually by synchronized in the future - one recommendation is to run this command in a cronjob once each night, to keep the mirror reasonably up to date. + +### Sync Select Dependencies +Optionally, panamax can be told to only grab crates needed to build a singular project. +`cargo vendor` is used to create a folder with all needed dependencies, +then a panamax command can parse the created directory and only grab those crates and versions. +``` +# Only grab crates needed for panamax, as an example +$ cargo vendor +$ panamax sync my-mirror vendor +``` + +## Server +Panamax provides a warp-based HTTP(S) server that can handle serving a Rust mirror fast and at scale. This is the recommended way to serve the mirror. + +``` +$ panamax serve my-mirror +Running HTTP on [::]:8080 +``` + +The server's index page provides all the instructions needed on how to set up a Rust client that uses this mirror. + +If you would prefer having these instructions elsewhere, the rest of this README will describe the setup process in more detail. + +Additionally, if you would prefer hosting a server with nginx, there is a sample nginx configuration in the repository, at `nginx.sample.conf`. + +## Configuring `rustup` and `cargo` +Once you have a mirror server set up and running, it's time to tell your Rust components to use it. + +### Setting environment variables +In order to ensure `rustup` knows where to look for the Rust components, we need to set some environment variables. Assuming the mirror is hosted at http://panamax.internal/: + +``` +export RUSTUP_DIST_SERVER=http://panamax.internal +export RUSTUP_UPDATE_ROOT=http://panamax.internal/rustup +``` + +These need to be set whenever `rustup` is used, so these should be added to your `.bashrc` file (or equivalent). + +### Installing `rustup` +If you already have `rustup` installed, this step isn't necessary, however if you don't have access to https://rustup.rs, the mirror also contains the `rustup-init` files needed to install `rustup`. + +Assuming the mirror is hosted at http://panamax.internal/, you will find the `rustup-init` files at http://panamax.internal/rustup/dist/. The `rustup-init` file you want depends on your architecture. Assuming you're running desktop Linux on a 64-bit machine: + +``` +wget http://panamax.internal/rustup/dist/x86_64-unknown-linux-gnu/rustup-init +chmod +x rustup-init +./rustup-init +``` + +This will let you install `rustup` the similarly following the steps from https://rustup.rs. This will also let you use `rustup` to keep your Rust installation updated in the future. + +### Configuring `cargo` +`Cargo` also needs to be configured to point to the mirror. This can be done by adding the following lines to `~/.cargo/config` (creating the file if it doesn't exist): + +``` +[source.my-mirror] +registry = "http://panamax.internal/crates.io-index" +[source.crates-io] +replace-with = "my-mirror" +``` + +`Cargo` should now be pointing to the correct location to use the mirror. + +### Testing configuration +You've now set up a Rust mirror! In order to make sure everything is set up properly, you can run a simple test: + +``` +$ cargo install ripgrep +``` + +This will install the grep-like `rg` tool (which is a great tool - props to burntsushi!). If `cargo` successfully downloads and builds everything, you have yourself a working mirror. Congratulations! From 8801263318f739ef6d1a85876b01a4be04b3e3b2 Mon Sep 17 00:00:00 2001 From: JMARyA Date: Fri, 2 May 2025 13:32:04 +0200 Subject: [PATCH 27/74] add metadata-cli --- technology/applications/media/metadata-cli.md | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 technology/applications/media/metadata-cli.md diff --git a/technology/applications/media/metadata-cli.md b/technology/applications/media/metadata-cli.md new file mode 100644 index 0000000..e599b26 --- /dev/null +++ b/technology/applications/media/metadata-cli.md @@ -0,0 +1,53 @@ +--- +obj: application +repo: https://github.com/zmwangx/metadata +--- + +# metadata +`metadata` is a media metadata parser and formatter designed for human consumption. Powered by FFmpeg. + +Example: + +``` +$ metadata '20160907 Apple Special Event.m4v' +Title: Apple Special Event, September 2016 (1080p) +Filename: 20160907 Apple Special Event.m4v +File size: 6825755188 (6.83GB, 6.36GiB) +Container format: MPEG-4 Part 14 (M4V) +Duration: 01:59:15.88 +Pixel dimensions: 1920x800 +Sample aspect ratio: 1:1 +Display aspect ratio: 12:5 +Scan type: Progressive scan* +Frame rate: 29.97 fps +Bit rate: 7631 kb/s + #0: Video, H.264 (High Profile level 4), yuv420p, 1920x800 (SAR 1:1, DAR 12:5), 29.97 fps, 7500 kb/s + #1: Audio (und), AAC (LC), 48000 Hz, stereo, 125 kb/s + #2: Subtitle (eng), EIA-608 closed captions + +``` + +Compare this to `ffprobe` or `mediainfo` (both great tools, just not so human-readable): + +## Usage +``` +$ metadata -h +metadata 0.1.4 +Zhiming Wang +Media file metadata for human consumption. + +USAGE: + metadata [FLAGS] ... + +FLAGS: + -A, --all-tags Print all metadata tags + -c, --checksum Include file checksum(s) + -h, --help Prints help information + -s, --scan Decode frames to determine scan type (slower, but determines interlaced more accurately; see man + page for details) + -t, --tags Print metadata tags, except mundane ones + -V, --version Prints version information + +ARGS: + ... Media file(s) +``` From 42f42773f8d63d3d29aca2db7b08a566fc0caba6 Mon Sep 17 00:00:00 2001 From: JMARyA Date: Fri, 2 May 2025 13:48:31 +0200 Subject: [PATCH 28/74] add delta --- technology/applications/development/delta.md | 151 +++++++++++++++++++ 1 file changed, 151 insertions(+) create mode 100644 technology/applications/development/delta.md diff --git a/technology/applications/development/delta.md b/technology/applications/development/delta.md new file mode 100644 index 0000000..220e571 --- /dev/null +++ b/technology/applications/development/delta.md @@ -0,0 +1,151 @@ +--- +obj: application +website: https://dandavison.github.io/delta/ +repo: https://github.com/dandavison/delta +--- + +# Delta +A syntax-highlighting pager for git, diff, grep, and blame output + +## Get started +Install delta and add this to your `~/.gitconfig`: + +```ini +[core] + pager = delta + +[interactive] + diffFilter = delta --color-only + +[delta] + navigate = true # use n and N to move between diff sections + + # delta detects terminal colors automatically; set one of these to disable auto-detection + # dark = true + # light = true + +[merge] + conflictstyle = zdiff3 +``` + +### Configuration +Delta uses git config (`~/.gitconfig`) for its configuration. + +You do not even need to use git -- delta accepts git diff and unified diff formats and hence works with e.g. mercurial and jujutsu -- but you do need to use the git config format. + +Use `delta --help` to see all the available options. + +To change your delta options in a one-off git command, use `git -c`. For example + +```shell +git -c delta.line-numbers=false show +``` + +## Usage +The main way to use delta is to configure it as the pager for git. + +Delta can also be used as a shorthand for diffing two files, even if they are not in a git repo: the following two commands do the same thing: + +```shell +delta /somewhere/a.txt /somewhere/else/b.txt + +git diff /somewhere/a.txt /somewhere/else/b.txt +``` + +You can also use process substitution shell syntax with delta, e.g. + +```bash +delta <(sort file1) <(sort file2) +``` + +In addition to git output, delta handles standard unified diff format, e.g. `diff -u a.txt b.txt | delta`. + +For Mercurial, you can add delta, with its command line options, to the `[pager]` section of `.hgrc`. + +### Choosing colors (styles) +Delta detects your terminal background color automatically and chooses appropriate default colors. To override automatic detection use dark or light, e.g. + +```ini +[delta] + dark = true +``` + +This is necessary when running delta in some contexts such as lazygit or zellij. + +### Line numbers + +```ini +[delta] + line-numbers = true +``` + +The numbers are displayed in two columns and there are several configuration options: see the `LINE NUMBERS` section in `delta --help` for details. + +### Hyperlinks +Delta uses terminal hyperlinks to turn line numbers, file paths, commit hashes, etc into clickable links, as long as your terminal emulator supports it. Enable the feature with + +```ini +[delta] + hyperlinks = true +``` + +Commit hashes link to GitHub/GitLab/Bitbucket (use `hyperlinks-commit-link-format` for full control). + +The links on line numbers (in grep output, as well as diffs) are particularly interesting: with a little bit of effort, they can be made to open your editor or IDE at the correct line. Use `hyperlinks-file-link-format` to construct the correct URL for your system. For VSCode and JetBrains IDEs this is easy, since they support their own special URL protocols. Here are examples: + +```ini +[delta] + hyperlinks = true + hyperlinks-file-link-format = "vscode://file/{path}:{line}" + # hyperlinks-file-link-format = "idea://open?file={path}&line={line}" + # hyperlinks-file-link-format = "pycharm://open?file={path}&line={line}" +``` + +Zed also supports its own URL protocol, and probably others. + +If your editor does not have its own URL protocol, then there are still many possibilities, although they may be more work. + +The easiest is probably to write a toy HTTP server (e.g. in Python) that opens the links in the way that you need. Then your delta config would look something like + +```ini +[delta] +hyperlinks = true +hyperlinks-file-link-format = "http://localhost:8000/open-in-editor?path={path}&line={line}" +# Now write an HTTP server that handles those requests by opening your editor at the file and line +``` + +### Side-by-side view + +```ini +[delta] + side-by-side = true +``` + +By default, side-by-side view has line-numbers activated, and has syntax highlighting in both the left and right panels. + +### Grep +Delta applies syntax-highlighting and other enhancements to standard grep output such as from ripgrep (aka rg), git grep, grep, etc. If you don't need special features of git grep, then for best results pipe `rg --json` output to delta: this avoids parsing ambiguities that are inevitable with the output of git grep and grep. To customize the colors and syntax highlighting, see the `grep-*` options in `delta --help`. + +Note that git grep can display the "function context" for matches and that delta handles this output specially: see the `-p` and `-W` options of git grep. + +```shell +rg --json -C 2 handle | delta +``` + +With hyperlinks enabled, the line numbers in the grep output will be clickable links. See hyperlinks. + +### Navigation keybindings for large diffs +Use the `navigate` feature to activate navigation keybindings. In this mode, pressing `n` will jump forward to the next file in the diff, and `N` will jump backwards. If you are viewing multiple commits (e.g. via `git log -p`) then navigation will also visit commit boundaries. + +### Merge conflicts +Consider setting `merge.conflictStyle` to `zdiff3`: + +```ini +[merge] + conflictStyle = zdiff3 +``` + +With that setting, when a merge conflict is encountered, Git will display merge conflicts with the contents of the merge base as well. delta will then display this as two diffs, from the ancestor to each side of the conflict: + +### Git blame +Set delta as the pager for blame in the `[pager]` section of your gitconfig. If hyperlinks is enabled in the `[delta]` section then each blame commit will link to the commit on GitHub/GitLab/Bitbucket/etc. From c9491ca90e1899829c693683bbf54b524e08d991 Mon Sep 17 00:00:00 2001 From: JMARyA Date: Fri, 2 May 2025 13:54:21 +0200 Subject: [PATCH 29/74] add lrclib --- technology/internet/websites/Links.md | 1 + technology/internet/websites/clearnet/lrclib.net.md | 8 ++++++++ 2 files changed, 9 insertions(+) create mode 100644 technology/internet/websites/clearnet/lrclib.net.md diff --git a/technology/internet/websites/Links.md b/technology/internet/websites/Links.md index d64b7f9..995860f 100644 --- a/technology/internet/websites/Links.md +++ b/technology/internet/websites/Links.md @@ -50,6 +50,7 @@ rev: 2024-03-07 - [SoundCloud](clearnet/SoundCloud.md) - [Nyaa](clearnet/Nyaa.md) - [BS.to](clearnet/BS.to.md) +- [lrclib](clearnet/lrclib.net.md) ## images - [SteamGridDB](clearnet/SteamGridDB.md) diff --git a/technology/internet/websites/clearnet/lrclib.net.md b/technology/internet/websites/clearnet/lrclib.net.md new file mode 100644 index 0000000..feac9bc --- /dev/null +++ b/technology/internet/websites/clearnet/lrclib.net.md @@ -0,0 +1,8 @@ +--- +obj: website +website: https://lrclib.net +category: content +--- + +# lrclib +lrclib.net is a website and API hosting `.lrc` lyric files. From 4c694d4500ea8d9d9fe0be7a37d71c6d8a898a3a Mon Sep 17 00:00:00 2001 From: JMARyA Date: Sun, 11 May 2025 08:22:39 +0200 Subject: [PATCH 30/74] add stalwart --- technology/applications/web/stalwart.md | 28 +++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 technology/applications/web/stalwart.md diff --git a/technology/applications/web/stalwart.md b/technology/applications/web/stalwart.md new file mode 100644 index 0000000..51b5284 --- /dev/null +++ b/technology/applications/web/stalwart.md @@ -0,0 +1,28 @@ +--- +obj: application +website: https://stalw.art +repo: https://github.com/stalwartlabs/mail-server +--- + +# Stalwart Mail +Stalwart Mail Server is an open-source mail server solution with JMAP, IMAP4, POP3, and SMTP support and a wide range of modern features. It is written in Rust and designed to be secure, fast, robust and scalable. + +## Compose +```yml +services: + mail-server: + ports: + - 443:443 + - 9683:8080 + - 25:25 + - 587:587 + - 465:465 + - 143:143 + - 993:993 + - 4190:4190 + - 110:110 + - 995:995 + volumes: + - /nvme/docker/system/stalwart/data:/opt/stalwart-mail + image: stalwartlabs/mail-server:latest +``` From 78bec898a1a02a5823b29a972114bb4e02e7b7db Mon Sep 17 00:00:00 2001 From: JMARyA Date: Sun, 11 May 2025 09:04:59 +0200 Subject: [PATCH 31/74] add spectacle --- technology/applications/desktops/spectacle.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 technology/applications/desktops/spectacle.md diff --git a/technology/applications/desktops/spectacle.md b/technology/applications/desktops/spectacle.md new file mode 100644 index 0000000..06d8b88 --- /dev/null +++ b/technology/applications/desktops/spectacle.md @@ -0,0 +1,12 @@ +--- +obj: application +repo: https://invent.kde.org/graphics/spectacle +website: https://apps.kde.org/de/spectacle +--- + +# Spectacle +Spectacle is a screenshot taking utility for the KDE desktop. + +## Features +- Screenshot region, windows, displays +- Screenrecord From 1a66742bb4bab90f3b2ea1c2bd88826f6c48aa77 Mon Sep 17 00:00:00 2001 From: JMARyA Date: Mon, 12 May 2025 09:17:07 +0200 Subject: [PATCH 32/74] add skate --- technology/applications/cli/skate.md | 58 ++++++++++++++++++++++++++ technology/applications/cli/skate.png | Bin 0 -> 246858 bytes 2 files changed, 58 insertions(+) create mode 100644 technology/applications/cli/skate.md create mode 100644 technology/applications/cli/skate.png diff --git a/technology/applications/cli/skate.md b/technology/applications/cli/skate.md new file mode 100644 index 0000000..5720389 --- /dev/null +++ b/technology/applications/cli/skate.md @@ -0,0 +1,58 @@ +--- +obj: application +repo: https://github.com/charmbracelet/skate +--- + +# 🛼 skate +A personal key-value store. + +![Image](./skate.png) + +## Usage +Usage: `skate [command]` + +### KeyValues +Set a value for a key with an optional `@` db. If `VALUE` is omitted, read value from the standard input: +```sh +# Usage: skate set KEY[@DB] [VALUE] [flags] + +skate set foo@mydb bar +skate set foo < ./bar.txt +``` + +Get a value for a key with an optional `@` db: +```shell +# Usage: skate get KEY[@DB] +skate get foo@mydb +``` + +Delete a key with an optional `@` db: +```shell +# Usage: skate delete KEY[@DB] +skate delete foo@mydb +``` + +List key value pairs with an optional `@` db: +```shell +# Usage: skate list [@DB] [flags] + +# Options: +# -d, --delimiter string delimiter to separate keys and values (default "\t") +# -k, --keys-only only print keys and don't fetch values from the db +# -r, --reverse list in reverse lexicographic order +# -b, --show-binary print binary values +# -v, --values-only only print values + +skate list @mydb +``` + +### Databases +List databases: +```shell +skate list-dbs +``` + +Delete a database: +```shell +skate delete-db @mydb +``` diff --git a/technology/applications/cli/skate.png b/technology/applications/cli/skate.png new file mode 100644 index 0000000000000000000000000000000000000000..04996a933134e7a0f5665ac84bbf2e7f2b64da78 GIT binary patch literal 246858 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 Date: Tue, 13 May 2025 10:13:05 +0200 Subject: [PATCH 33/74] add auto-palette --- .../applications/media/auto-palette-cli.md | 96 +++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 technology/applications/media/auto-palette-cli.md diff --git a/technology/applications/media/auto-palette-cli.md b/technology/applications/media/auto-palette-cli.md new file mode 100644 index 0000000..5286d6f --- /dev/null +++ b/technology/applications/media/auto-palette-cli.md @@ -0,0 +1,96 @@ +--- +obj: application +repo: https://github.com/t28hub/auto-palette +--- + +# auto-palette +🎨 `auto-palette` is a library that automatically extracts prominent color palettes from images, available as Rust library, WebAssembly and CLI tool. + +## Overview +`auto-palette` is a Rust project that offers color palette extraction from images. It consists of the following components: + +* `auto-palette`: Core library for programmatic usage. +* `auto-palette-cli`: Command-line interface for easy usage. +* `auto-palette-wasm`: WebAssembly version for browser usage. + +Perfect for developers, designers and anyone needing efficient color palette extraction. + +## Features +* Automatically extracts prominent color palettes from images. +* Provides detailed color swatch information (color, position, population) +* Supports multiple extraction algorithms: `DBSCAN`, `DBSCAN++`, and `KMeans++`. +* Supports numerous color spaces: `RGB`, `HSL`, `LAB`, `LCHuv`, `ANSI256` and more. +* Theme-based swatch selection: `Colorful`, `Vivid`, `Muted`, `Light`, and `Dark`. +* Available as a Rust library, Wasm, and a CLI tool. + +## Installation +### Rust Library +To use `auto-palette` in your Rust project, add it to your `Cargo.toml`. + +```toml +[dependencies] +auto-palette = "0.8.0" +``` + +### CLI Tool +To use command-line interface, install the `auto-palette-cli` crate. + +```sh +cargo install auto-palette-cli +``` + +## Usage +### Rust Example +Here is an example of extracting the color palette from an image using the Rust library. + +```rust +use auto_palette::{ImageData, Palette}; + +fn main() { + // Load the image data from the file + let image_data = ImageData::load("tests/assets/holly-booth-hLZWGXy5akM-unsplash.jpg").unwrap(); + + // Extract the color palette from the image data + let palette: Palette = Palette::extract(&image_data).unwrap(); + println!("Extracted {} swatches", palette.len()); + + // Find the 5 dominant colors in the palette and print their information + let swatches = palette.find_swatches(5).unwrap(); + for swatch in swatches { + println!("Color: {}", swatch.color().to_hex_string()); + println!("Position: {:?}", swatch.position()); + println!("Population: {}", swatch.population()); + println!("Ratio: {}", swatch.ratio()); + } +} +``` + +### CLI Example +Here is an example of extracting the color palette from an image using the CLI tool. + +```sh +# Usage: auto-palette [OPTIONS] [PATH] +$ auto-palette path/to/your_image.jpg -n 6 -c rgb -o table ++---+--------------------+------------+------------+ +| # | Color | Position | Population | ++---+--------------------+------------+------------+ +| 1 | RGB(221, 226, 222) | (104, 96) | 6778 | +| 2 | RGB(3, 144, 149) | (114, 201) | 5476 | +| 3 | RGB(23, 37, 36) | (120, 300) | 4300 | +| 4 | RGB(36, 88, 131) | (183, 145) | 1348 | +| 5 | RGB(254, 29, 44) | (183, 190) | 779 | +| 6 | RGB(253, 213, 116) | (25, 158) | 567 | ++---+--------------------+------------+------------+ +``` + +#### Options + +| Option | Description | +| ------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `-a, --algorithm ` | Algorithm for extracting the color palette.

**Default:** `dbscan`

**Possible values:**
- `dbscan`: High accuracy but slower speed. Ideal for precision over performance.
- `dbscan++`: A balanced algorithm with faster speed and good accuracy.
- `kmeans`: Fast speed but potentially less accurate. Ideal for performance over precision. | +| `-t, --theme ` | Theme for selecting the swatches.

**Possible values:**
- `colorful`: Prioritize colorful colors.
- `vivid`: Prioritize saturated colors.
- `muted`: Prioritize desaturated colors.
- `light`: Prioritize light colors.
- `dark`: Prioritize dark colors. | +| `-n, --count ` | Number of colors to extract.

**Default:** `5` | +| `-c, --color ` | Output color format.

**Default:** `hex`

**Possible values:**
- `hex`, `rgb`, `cmyk`, `hsl`, `hsv`, `lab`, `luv`, `lchab`, `lchuv`, `oklab`, `oklch`, `xyz` | +| `-o, --output ` | Output format.

**Default:** `text`

**Possible values:**
- `json`, `text`, `table` | +| `--no-resize` | Disable image resizing before extracting the color palette. May improve accuracy by preserving original image resolution. | +| `--clipboard` | Get image from system clipboard. | From dc924e9c1dd0320f4115cbc2f656d86bffd07191 Mon Sep 17 00:00:00 2001 From: JMARyA Date: Mon, 19 May 2025 13:49:17 +0200 Subject: [PATCH 34/74] add lemmy --- technology/applications/web/lemmy.md | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 technology/applications/web/lemmy.md diff --git a/technology/applications/web/lemmy.md b/technology/applications/web/lemmy.md new file mode 100644 index 0000000..686f365 --- /dev/null +++ b/technology/applications/web/lemmy.md @@ -0,0 +1,9 @@ +--- +obj: application +repo: https://github.com/LemmyNet/lemmy +website: https://join-lemmy.org +rev: 2025-05-19 +--- + +# Lemmy +**Lemmy** is an open-source, decentralized, and federated alternative to platforms like Reddit. It allows users to create, share, and discuss content in community-based forums called *communities*. Unlike Reddit, Lemmy is part of the **Fediverse**—a network of interconnected servers (also known as *instances*) that communicate using the **ActivityPub** protocol. From 01ef9a0b18705b415a1ab49acba5889b76f7ff62 Mon Sep 17 00:00:00 2001 From: JMARyA Date: Mon, 19 May 2025 13:52:03 +0200 Subject: [PATCH 35/74] add stump --- technology/applications/web/stump.md | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 technology/applications/web/stump.md diff --git a/technology/applications/web/stump.md b/technology/applications/web/stump.md new file mode 100644 index 0000000..672ac13 --- /dev/null +++ b/technology/applications/web/stump.md @@ -0,0 +1,8 @@ +--- +obj: application +website: https://www.stumpapp.dev +repo: https://github.com/stumpapp/stump +--- + +# Stump +Stump is a free and open source comics, manga and digital book server with OPDS support. From bff33f063b5f94730c0dc2744cb8649b44585139 Mon Sep 17 00:00:00 2001 From: JMARyA Date: Mon, 19 May 2025 13:54:21 +0200 Subject: [PATCH 36/74] add octopi --- technology/applications/utilities/octopi.md | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 technology/applications/utilities/octopi.md diff --git a/technology/applications/utilities/octopi.md b/technology/applications/utilities/octopi.md new file mode 100644 index 0000000..79608ff --- /dev/null +++ b/technology/applications/utilities/octopi.md @@ -0,0 +1,8 @@ +--- +obj: application +repo: https://github.com/aarnt/octopi +--- + +# Octopi +Octopi is a graphical user interface for the Arch Linux pacman package management tool. +It consists of a package browser, sudo helper, notifier, cache cleaner and repository editor. From 1bef285a760e32e6ffd9ca44cf1f48a6d5ee9ed0 Mon Sep 17 00:00:00 2001 From: JMARyA Date: Mon, 19 May 2025 14:08:57 +0200 Subject: [PATCH 37/74] add material icons --- technology/dev/Material Icons.md | 74 ++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 technology/dev/Material Icons.md diff --git a/technology/dev/Material Icons.md b/technology/dev/Material Icons.md new file mode 100644 index 0000000..c44bee3 --- /dev/null +++ b/technology/dev/Material Icons.md @@ -0,0 +1,74 @@ +--- +obj: concept +website: https://fonts.google.com/icons +repo: https://github.com/google/material-design-icons +--- + +# Material Icons +[Material Icons](https://fonts.google.com/icons) are a comprehensive set of visual symbols designed by Google. These icons follow the [Material Design](https://m3.material.io/) guidelines and are widely used across Android, web, and other platforms to provide a consistent, clean, and intuitive UI experience. + +## Features +* Over 2,000 icons +* Available in multiple styles (Filled, Outlined, Rounded, Sharp, Two-tone) +* Free and open-source under the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0) +* Easily customizable (size, color, weight) +* Supported via web fonts, SVGs, and icon components + +## Icon Styles +| Style | Description | +| -------- | ----------------------------------------- | +| Filled | Default solid icons | +| Outlined | Icons with a thin, outlined design | +| Rounded | Icons with rounded corners | +| Sharp | Icons with sharp, angular edges | +| Two-tone | Icons with dual-tone for visual hierarchy | + +## Installation + +### Web Font +Add the following `` tag to your HTML ``: + +```html + +``` + +Then use an icon like this: +```html +home +``` + +To use other styles (e.g., Outlined, Rounded), change the font family: +```html + +``` + +Use it like: +```html +home +``` + +## SVG +You can download individual icons as SVGs from [Material Icons](https://fonts.google.com/icons) or use them programmatically. + +Example: +```html +home icon +``` + +## Customization + +### Size +Use CSS to change the size: +```html +home +``` + +Or use utility classes in frameworks like Tailwind: +```html +home +``` + +### Color +```html +home +``` From a0179e824ee2abe7c4b2eb8ad6cbfbd40fd0c606 Mon Sep 17 00:00:00 2001 From: JMARyA Date: Mon, 19 May 2025 15:40:41 +0200 Subject: [PATCH 38/74] update rnr --- technology/applications/cli/rnr.md | 105 +++++++++++++++++++++++++---- 1 file changed, 93 insertions(+), 12 deletions(-) diff --git a/technology/applications/cli/rnr.md b/technology/applications/cli/rnr.md index b457b68..6b91c67 100644 --- a/technology/applications/cli/rnr.md +++ b/technology/applications/cli/rnr.md @@ -1,20 +1,101 @@ --- obj: application repo: https://github.com/ismaelgv/rnr +rev: 2025-05-19 --- # rnr -[Repo](https://github.com/ismaelgv/rnr) -**RnR** is a command-line tool to **securely rename** multiple files and directories that supports regular expressions. +RnR is a command-line tool to rename multiple files and directories that supports regular expressions. ## Usage -Flags -```shell --n, --dry-run Only show what would be done (default mode) --f, --force Make actual changes to files --x, --hidden Include hidden files and directories --D, --include-dirs Rename matching directories --r, --recursive Recursive mode --s, --silent Do not print any information ---no-dump Do not dump operations into a file -``` \ No newline at end of file +Usage: `rnr ` + +Commands: +- `regex`: Rename files and directories using a regular expression +- `from-file`: Read operations from a dump file +- `to-ascii`: Replace file name UTF-8 chars with ASCII chars representation + +### regex +``` +Rename files and directories using a regular expression + +Usage: rnr regex [OPTIONS] ... + +Arguments: + Expression to match (can be a regex) + Expression replacement (use single quotes for capture groups) + ... Target paths + +Options: + -n, --dry-run + Only show what would be done (default mode) + -f, --force + Make actual changes to files + -b, --backup + Generate file backups before renaming + -s, --silent + Do not print any information + --color + Set color output mode [default: auto] [possible values: always, never, auto] + --dump + Force dumping operations into a file even in dry-run mode + --dump-prefix + Set the dump file prefix [default: rnr-] + --no-dump + Do not dump operations into a file + -l, --replace-limit + Limit of replacements, all matches if set to 0 + -t, --replace-transform + Apply a transformation to replacements including captured groups [possible values: upper, lower, ascii] + -D, --include-dirs + Rename matching directories + -r, --recursive + Recursive mode + -d, --max-depth + Set max depth in recursive mode + -x, --hidden + Include hidden files and directories +``` + +### from-file +``` +Read operations from a dump file + +Usage: rnr from-file [OPTIONS] + +Arguments: + + +Options: + -n, --dry-run Only show what would be done (default mode) + -f, --force Make actual changes to files + -b, --backup Generate file backups before renaming + -s, --silent Do not print any information + --color Set color output mode [default: auto] [possible values: always, never, auto] + --dump Force dumping operations into a file even in dry-run mode + --dump-prefix Set the dump file prefix [default: rnr-] + --no-dump Do not dump operations into a file + -u, --undo Undo the operations from the dump file +``` + +### to-ascii +``` +Usage: rnr to-ascii [OPTIONS] ... + +Arguments: + ... Target paths + +Options: + -n, --dry-run Only show what would be done (default mode) + -f, --force Make actual changes to files + -b, --backup Generate file backups before renaming + -s, --silent Do not print any information + --color Set color output mode [default: auto] [possible values: always, never, auto] + --dump Force dumping operations into a file even in dry-run mode + --dump-prefix Set the dump file prefix [default: rnr-] + --no-dump Do not dump operations into a file + -D, --include-dirs Rename matching directories + -r, --recursive Recursive mode + -d, --max-depth Set max depth in recursive mode + -x, --hidden Include hidden files and directories +``` From a97795fd6d68de9c8cc7592c9cc881af0275425b Mon Sep 17 00:00:00 2001 From: JMARyA Date: Mon, 19 May 2025 15:47:54 +0200 Subject: [PATCH 39/74] add opengist --- technology/applications/web/opengist.md | 208 ++++++++++++++++++++++++ 1 file changed, 208 insertions(+) create mode 100644 technology/applications/web/opengist.md diff --git a/technology/applications/web/opengist.md b/technology/applications/web/opengist.md new file mode 100644 index 0000000..046b906 --- /dev/null +++ b/technology/applications/web/opengist.md @@ -0,0 +1,208 @@ +--- +obj: application +website: https://opengist.io +repo: https://github.com/thomiceli/opengist +rev: 2025-05-19 +--- + +# OpenGist +Opengist is a self-hosted pastebin powered by Git. All snippets are stored in a Git repository and can be read and/or modified using standard Git commands, or with the web interface. It is similiar to GitHub Gist, but open-source and could be self-hosted. + +## Features +- Create public, unlisted or private snippets +- Init / Clone / Pull / Push snippets via Git over HTTP or SSH +- Syntax highlighting ; markdown & CSV support +- Search code in snippets ; browse users snippets, likes and forks +- Add topics to snippets +- Embed snippets in other websites +- Revisions history +- Like / Fork snippets +- Editor with indentation mode & size ; drag and drop files +- Download raw files or as a ZIP archive +- Retrieve snippet data/metadata via a JSON API +- OAuth2 login with GitHub, GitLab, Gitea, and OpenID Connect +- Avatars via Gravatar or OAuth2 providers +- Light/Dark mode +- Responsive UI +- Enable or disable signups +- Restrict or unrestrict snippets visibility to anonymous users + +## Compose +```yml +services: + opengist: + image: ghcr.io/thomiceli/opengist:1 + container_name: opengist + restart: unless-stopped + ports: + - "6157:6157" # HTTP port + - "2222:2222" # SSH port, can be removed if you don't use SSH + volumes: + - "$HOME/.opengist:/opengist" + environment: + # OG_LOG_LEVEL: info + # other configuration options +``` + +## Configuration + +| YAML Config Key | Environment Variable | Default value | Description | +| --------------------- | ----------------------------------- | --------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| log-level | OG_LOG_LEVEL | `warn` | Set the log level to one of the following: `debug`, `info`, `warn`, `error`, `fatal`. | +| log-output | OG_LOG_OUTPUT | `stdout,file` | Set the log output to one or more of the following: `stdout`, `file`. | +| external-url | OG_EXTERNAL_URL | none | Public URL to access to Opengist. | +| opengist-home | OG_OPENGIST_HOME | home directory | Path to the directory where Opengist stores its data. | +| secret-key | OG_SECRET_KEY | randomized 32 bytes | Secret key used for session store & encrypt MFA data on database. | +| db-uri | OG_DB_URI | `opengist.db` | URI of the database. | +| index | OG_INDEX | `bleve` | Define the code indexer (either `bleve`, `meilisearch`, or empty for no index). | +| index.meili.host | OG_MEILI_HOST | none | Set the host for the Meiliseach server. | +| index.meili.api-key | OG_MEILI_API_KEY | none | Set the API key for the Meiliseach server. | +| git.default-branch | OG_GIT_DEFAULT_BRANCH | none | Default branch name used by Opengist when initializing Git repositories. If not set, uses the Git default branch name. More info [here](https://git-scm.com/book/en/v2/Getting-Started-First-Time-Git-Setup#_new_default_branch) | +| sqlite.journal-mode | OG_SQLITE_JOURNAL_MODE | `WAL` | Set the journal mode for SQLite. More info [here](https://www.sqlite.org/pragma.html#pragma_journal_mode) | +| http.host | OG_HTTP_HOST | `0.0.0.0` | The host on which the HTTP server should bind. | +| http.port | OG_HTTP_PORT | `6157` | The port on which the HTTP server should listen. | +| http.git-enabled | OG_HTTP_GIT_ENABLED | `true` | Enable or disable git operations (clone, pull, push) via HTTP. (`true` or `false`) | +| metrics.enabled | OG_METRICS_ENABLED | `false` | Enable or disable Prometheus metrics endpoint at `/metrics` (`true` or `false`) | +| ssh.git-enabled | OG_SSH_GIT_ENABLED | `true` | Enable or disable git operations (clone, pull, push) via SSH. (`true` or `false`) | +| ssh.host | OG_SSH_HOST | `0.0.0.0` | The host on which the SSH server should bind. | +| ssh.port | OG_SSH_PORT | `2222` | The port on which the SSH server should listen. | +| ssh.external-domain | OG_SSH_EXTERNAL_DOMAIN | none | Public domain for the Git SSH connection, if it has to be different from the HTTP one. If not set, uses the URL from the request. | +| ssh.keygen-executable | OG_SSH_KEYGEN_EXECUTABLE | `ssh-keygen` | Path to the SSH key generation executable. | +| github.client-key | OG_GITHUB_CLIENT_KEY | none | The client key for the GitHub OAuth application. | +| github.secret | OG_GITHUB_SECRET | none | The secret for the GitHub OAuth application. | +| gitlab.client-key | OG_GITLAB_CLIENT_KEY | none | The client key for the GitLab OAuth application. | +| gitlab.secret | OG_GITLAB_SECRET | none | The secret for the GitLab OAuth application. | +| gitlab.url | OG_GITLAB_URL | `https://gitlab.com/` | The URL of the GitLab instance. | +| gitlab.name | OG_GITLAB_NAME | `GitLab` | The name of the GitLab instance. It is displayed in the OAuth login button. | +| gitea.client-key | OG_GITEA_CLIENT_KEY | none | The client key for the Gitea OAuth application. | +| gitea.secret | OG_GITEA_SECRET | none | The secret for the Gitea OAuth application. | +| gitea.url | OG_GITEA_URL | `https://gitea.com/` | The URL of the Gitea instance. | +| gitea.name | OG_GITEA_NAME | `Gitea` | The name of the Gitea instance. It is displayed in the OAuth login button. | +| oidc.provider-name | OG_OIDC_PROVIDER_NAME | none | The name of the OIDC provider | +| oidc.client-key | OG_OIDC_CLIENT_KEY | none | The client key for the OpenID application. | +| oidc.secret | OG_OIDC_SECRET | none | The secret for the OpenID application. | +| oidc.discovery-url | OG_OIDC_DISCOVERY_URL | none | Discovery endpoint of the OpenID provider. | +| ldap.url | OG_LDAP_URL | none | URL of the LDAP instance; if not set, LDAP authentication is disabled | +| ldap.bind-dn | OG_LDAP_BIND_DN | none | Bind DN to authenticate against the LDAP. e.g: cn=read-only-admin,dc=example,dc=com | +| ldap.bind-credentials | OG_LDAP_BIND_CREDENTIALS | none | The password for the Bind DN. | +| ldap.search-base | OG_LDAP_SEARCH_BASE | none | The Base DN to start search from. e.g: ou=People,dc=example,dc=com | +| ldap.search-filter | OG_LDAP_SEARCH_FILTER | none | The filter to search against (the format string %s will be replaced with the username). e.g: (uid=%s) | +| custom.name | OG_CUSTOM_NAME | none | The name of your instance, to be displayed in the tab title | +| custom.logo | OG_CUSTOM_LOGO | none | Path to an image, relative to $opengist-home/custom. | +| custom.favicon | OG_CUSTOM_FAVICON | none | Path to an image, relative to $opengist-home/custom. | +| custom.static-links | OG_CUSTOM_STATIC_LINK_#_(PATH,NAME) | none | Path and name to custom links, more info [here](custom-links.md). | + +## Usage +### Init Gists via Git +Opengist allows you to create new snippets via Git over HTTP. + +Simply init a new Git repository where your file(s) is/are located: + +```shell +git init +git add . +git commit -m "My cool snippet" +``` + +Then add this Opengist special remote URL and push your changes: + +```shell +git remote add origin http://localhost:6157/init + +git push -u origin master +``` + +Log in with your Opengist account credentials, and your snippet will be created at the specified URL: + +```shell +Username for 'http://localhost:6157': thomas +Password for 'http://thomas@localhost:6157': +Enumerating objects: 3, done. +Counting objects: 100% (3/3), done. +Delta compression using up to 8 threads +Compressing objects: 100% (2/2), done. +Writing objects: 100% (3/3), 416 bytes | 416.00 KiB/s, done. +Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 +remote: +remote: Your new repository has been created here: http://localhost:6157/thomas/6051e930f140429f9a2f3bb1fa101066 +remote: +remote: If you want to keep working with your gist, you could set the remote URL via: +remote: git remote set-url origin http://localhost:6157/thomas/6051e930f140429f9a2f3bb1fa101066 +remote: +To http://localhost:6157/init + * [new branch] master -> master +``` + +### Embed a Gist to your webpage +To embed a Gist to your webpage, you can add a script tag with the URL of your gist followed by `.js` to your HTML page: + +```html + + + + +``` + +### Retrieve Gist as JSON +To retrieve a Gist as JSON, you can add `.json` to the end of the URL of your gist: + +```shell +curl http://opengist.url/thomas/my-gist.json | jq '.' +``` + +It returns a JSON object with the following structure similar to this one: +```json +{ + "created_at": "2023-04-12T13:15:20+02:00", + "description": "", + "embed": { + "css": "http://localhost:6157/assets/embed-94abc261.css", + "html": "
\n
\n \n
\n \n \n \n \n

Welcome to Opengist

\n
\n \n\n
\n \n
\n
\n", + "js": "http://localhost:6157/thomas/my-gist.js", + "js_dark": "http://localhost:6157/thomas/my-gist.js?dark" + }, + "files": [ + { + "filename": "hello.md", + "size": 21, + "human_size": "21 B", + "content": "# Welcome to Opengist", + "truncated": false, + "type": "Markdown" + } + ], + "id": "my-gist", + "owner": "thomas", + "title": "hello.md", + "uuid": "8622b297bce54b408e36d546cef8019d", + "visibility": "public" +} +``` + +### Push Options +Opengist has support for a few [Git push options](https://git-scm.com/docs/git-push#Documentation/git-push.txt--oltoptiongt). + +These options are passed to `git push` command and can be used to change the metadata of a gist. + +#### Set URL +```shell +git push -o url=mygist # Will set the URL to https://opengist.example.com/user/mygist +``` + +#### Change title +```shell +git push -o title=Gist123 +git push -o title="My Gist 123" +``` + +#### Change description +```shell +git push -o description="This is my gist description" +``` + +#### Change visibility +```shell +git push -o visibility=public +git push -o visibility=unlisted +git push -o visibility=private +``` From 576421a6be2a23a111b2399a5e08d6032f45c3c1 Mon Sep 17 00:00:00 2001 From: JMARyA Date: Mon, 19 May 2025 15:57:29 +0200 Subject: [PATCH 40/74] add ruff --- technology/applications/development/ruff.md | 41 +++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 technology/applications/development/ruff.md diff --git a/technology/applications/development/ruff.md b/technology/applications/development/ruff.md new file mode 100644 index 0000000..05596c9 --- /dev/null +++ b/technology/applications/development/ruff.md @@ -0,0 +1,41 @@ +--- +obj: application +repo: https://github.com/astral-sh/ruff +website: https://docs.astral.sh/ruff +rev: 2025-05-19 +--- + +# ruff +An extremely fast Python linter and code formatter, written in Rust. + +## The Ruff Linter +The Ruff Linter is an extremely fast Python linter designed as a drop-in replacement for [Flake8](https://pypi.org/project/flake8/) (plus dozens of plugins), [isort](https://pypi.org/project/isort/), [pydocstyle](https://pypi.org/project/pydocstyle/), [pyupgrade](https://pypi.org/project/pyupgrade/), [autoflake](https://pypi.org/project/autoflake/), and more. + +### `ruff check` +`ruff check` is the primary entrypoint to the Ruff linter. It accepts a list of files or directories, and lints all discovered Python files, optionally fixing any fixable errors. When linting a directory, Ruff searches for Python files recursively in that directory and all its subdirectories: + +```console +$ ruff check # Lint files in the current directory. +$ ruff check --fix # Lint files in the current directory and fix any fixable errors. +$ ruff check --watch # Lint files in the current directory and re-lint on change. +$ ruff check path/to/code/ # Lint files in `path/to/code`. +``` + +## The Ruff Formatter +The Ruff formatter is an extremely fast Python code formatter designed as a drop-in replacement for [Black](https://pypi.org/project/black/), available as part of the `ruff` CLI via `ruff format`. + +### `ruff format` +`ruff format` is the primary entrypoint to the formatter. It accepts a list of files or directories, and formats all discovered Python files: + +```shell +ruff format # Format all files in the current directory. +ruff format path/to/code/ # Format all files in `path/to/code` (and any subdirectories). +ruff format path/to/file.py # Format a single file. +``` + +Similar to Black, running `ruff format /path/to/file.py` will format the given file or directory in-place, while `ruff format --check /path/to/file.py` will avoid writing any formatted files back, and instead exit with a non-zero status code upon detecting any unformatted files. + +For the full list of supported options, run `ruff format --help`. + +## Configuration +ruff can be configured via `ruff.toml` config file. See [here](https://docs.astral.sh/ruff/settings/) for a reference of all config parameters. From 9f6a31e8ef28d05e64037de1a780c90980b63c3a Mon Sep 17 00:00:00 2001 From: JMARyA Date: Wed, 21 May 2025 13:10:23 +0200 Subject: [PATCH 41/74] add artem --- technology/applications/media/artem.md | 30 ++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 technology/applications/media/artem.md diff --git a/technology/applications/media/artem.md b/technology/applications/media/artem.md new file mode 100644 index 0000000..f258c38 --- /dev/null +++ b/technology/applications/media/artem.md @@ -0,0 +1,30 @@ +--- +obj: application +repo: https://github.com/FineFindus/artem +--- + +# artem +Artem is a small cli program, written in rust, to easily convert images to ascii art, named after the latin word for art. By default it tries to use truecolor, if the terminal does not support truecolor, it falls back to 16 Color ANSI. When the ascii image is written to a file, the image will not use colors. It supports .jpeg, .png, .gif, .webp and many more. + +## Usage +Usage: `artem [options] [image]` + +| `Option` | `Description` | +| ------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `-c, --characters ` | Change the characters used to display the image. The first character should have the highest 'darkness' and the last should have the least (recommended to be a space ' '). A lower detail map is recommended for smaller images. | +| `-s, --size ` | Change the size of the output image. The minimum size is 20. Lower values will be ignored and changed to 20. Conflicts with `--width` and `--height`. \[default: 80] | +| `--height` | Use the terminal maximum height to display the image. Conflicts with `--size` and `--width`. | +| `-w, --width` | Use the terminal maximum width to display the image. Conflicts with `--size` and `--height`. | +| `--ratio ` | Change the ratio between height and width. The value must be between 0.1 and 1.0. It is not recommended to change this setting. \[default: 0.42] | +| `--flipX` | Flip the image along the X-Axis/horizontally. | +| `--flipY` | Flip the image along the Y-Axis/vertically. | +| `--centerX` | Center the image along the X-Axis/horizontally in the terminal. | +| `--centerY` | Center the image along the Y-Axis/vertically in the terminal. | +| `-o, --output ` | Output file for non-colored ASCII. For color, use a file with .ansi, .svg, or .html extension. .ansi files will consider environment variables when creating colored output. | +| `--invert` | Inverts the characters used for the image, so light characters will be dark. Useful if the image has a dark background. | +| `--background` | Sets the background of the ASCII as the color. Ignored if the terminal does not support truecolor. Mutually exclusive with `--no-color`. | +| `--border` | Adds a decorative border surrounding the ASCII image, making the image slightly smaller as it respects the given size. | +| `--no-color` | Do not use color when printing the image to the terminal. | +| `--outline` | Only create an outline of the image. Uses filters and may take more resources/time, especially on larger images. Best used on images with clear foreground/background distinction. | +| `--hysteresis` | When creating the outline, use the hysteresis method to remove imperfections, but might not look as good in ASCII form. Requires `--outline` to be present. | +| `--verbose ` | Choose the verbosity of the logging level. \[default: warn] Possible values: off, error, warn, info, debug, trace. | From 502dfdebdc6843b3d27692d96901bd8bd1add99e Mon Sep 17 00:00:00 2001 From: JMARyA Date: Wed, 21 May 2025 13:42:18 +0200 Subject: [PATCH 42/74] add distrobox --- .../applications/utilities/distrobox.md | 112 ++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 technology/applications/utilities/distrobox.md diff --git a/technology/applications/utilities/distrobox.md b/technology/applications/utilities/distrobox.md new file mode 100644 index 0000000..346dd40 --- /dev/null +++ b/technology/applications/utilities/distrobox.md @@ -0,0 +1,112 @@ +--- +obj: application +website: https://distrobox.it +arch-wiki: https://wiki.archlinux.org/title/Distrobox +repo: https://github.com/89luca89/distrobox +--- + +# DistroBox +Use any Linux distribution inside your terminal. Enable both backward and forward compatibility with software and freedom to use whatever distribution you’re more comfortable with. Distrobox uses podman, docker or lilipod to create containers using the Linux distribution of your choice. The created container will be tightly integrated with the host, allowing sharing of the HOME directory of the user, external storage, external USB devices and graphical apps (X11/Wayland), and audio. + +## Usage +To create a new container run the following: +``` +$ distrobox create -n name +``` + +To list installed containers run the following: +``` +$ distrobox list +``` + +To interact with an installed container run the following: +``` +$ distrobox enter name +``` + +or you can send a command directly to a container with: +``` +$ distrobox enter name -- command-to-execute +``` + +To stop a running container run the following: +``` +$ distrobox stop name +``` + +To delete a container run the following: +``` +$ distrobox rm name +``` + +To install a specific distro into a container run the following (in this example it is Ubuntu): +``` +$ distrobox create --image ubuntu:22.04 +``` + +Installations can be fully customised as follows (in this example it is a container called test running Gentoo with root access): +``` +$ distrobox create -i docker.io/gentoo/stage3:latest -n test --root +``` + +If you need your container to have root access to the host then it is recommended that you use the `--root` flag over `sudo distrobox`. + +### Unsharing mode +Distrobox allows users to partially isolate certain system aspects through its unshare feature. By default, the following components are shared between host and container: + +`devsysfs`, `ipc`, `netns`, `process`, `$HOME` and Application access. + +You can choose to unshare some of these components by using the commands listed below when creating a new container: + +#### Shares + +| Share | Command | Usage | +| ---------- | -------------------- | --------------------------------------------------- | +| `devsysfs` | `--unshare-devsysfs` | Do not share host devices and sysfs dirs from host. | +| `ipc` | `--unshare-ipc` | Do not share the ipc namespace with host. | +| `netns` | `--unshare-netns` | Do not share the network namespace with host. | +| `process` | `--unshare-process` | Do not share the process namespace with host. | +| All | `--unshare-all` | Activate all unshare flags. | + +Note that unsharing `$HOME` and Application access is not possible, as these are mandatory for Distrobox's core functionality. + +> Warning: While the unsharing feature provides some isolation between container and host, it does not constitute a full security sandbox. You should not rely on it for complete security isolation. + +## Configuration +It is possible to configure Distrobox in two ways, either with a configuration file or by using environment variables. + +### Configuration file +Distrobox checks the following locations for config files, from least important to most important: + +- `/usr/share/distrobox/distrobox.conf` +- `/usr/etc/distrobox/distrobox.conf` +- `/etc/distrobox/distrobox.conf` +- `~/.config/distrobox/distrobox.conf` +- `~/.distroboxrc` + +An example config file is as follows: +``` +container_always_pull="1" +container_generate_entry=0 +container_manager="docker" +container_image_default="registry.opensuse.org/opensuse/toolbox:latest" +container_name_default="test-name-1" +container_user_custom_home="$HOME/.local/share/container-home-test" +container_init_hook="~/.local/distrobox/a_custom_default_init_hook.sh" +container_pre_init_hook="~/a_custom_default_pre_init_hook.sh" +non_interactive="1" +skip_workdir="0" +``` + +### Environment variables +The following variables are available and should be set using per user variables: +``` +DBX_CONTAINER_ALWAYS_PULL +DBX_CONTAINER_CUSTOM_HOME +DBX_CONTAINER_IMAGE +DBX_CONTAINER_MANAGER +DBX_CONTAINER_NAME +DBX_CONTAINER_ENTRY +DBX_NON_INTERACTIVE +DBX_SKIP_WORKDIR +``` From 6869f6eca58365d4a3b57412b6078217ca447985 Mon Sep 17 00:00:00 2001 From: JMARyA Date: Wed, 21 May 2025 16:52:05 +0200 Subject: [PATCH 43/74] add mdbook --- technology/applications/office/mdbook.md | 530 +++++++++++++++++++++++ 1 file changed, 530 insertions(+) create mode 100644 technology/applications/office/mdbook.md diff --git a/technology/applications/office/mdbook.md b/technology/applications/office/mdbook.md new file mode 100644 index 0000000..421e816 --- /dev/null +++ b/technology/applications/office/mdbook.md @@ -0,0 +1,530 @@ +--- +obj: application +website: https://rust-lang.github.io/mdBook/ +repo: https://github.com/rust-lang/mdBook +rev: 2025-05-21 +--- + +# mdbook +`mdBook` is a command-line tool for creating books from Markdown files. It is designed to generate a static website based on Markdown content, perfect for creating online documentation, tutorials, and books. It is similar to GitBook but is written in Rust and is fully open-source. + +## Usage +The basic command for `mdBook` is as follows: + +```bash +mdbook [options] +``` + +### Available Commands + +* `init`: Creates a new book in the current directory. +* `build`: Builds the book (default). +* `serve`: Serves the book locally with hot reloading. +* `test`: Runs tests on the book. +* `clean`: Cleans the book’s build artifacts. +* `watch`: Watches for file changes and rebuilds the book. + +### Examples + +1. **Building the book**: + + ```bash + mdbook build + ``` + +2. **Serving the book locally**: + + ```bash + mdbook serve + ``` + +3. **Initializing a new book**: + + ```bash + mdbook init my-book + ``` + + This creates a new directory called `my-book` and sets up a template for your book. + +## Book Format +The structure of the book’s source directory typically looks like this: + +``` +my-book/ +├── src/ +│ ├── SUMMARY.md +│ ├── chapter_1.md +│ ├── chapter_2.md +│ └── ... +├── book.toml +└── README.md +``` + +### Key Files and Directories +* `src/`: Contains the Markdown files for your book. This is where the content resides. + * `SUMMARY.md`: This file defines the table of contents and chapter structure of your book. It lists all of the sections and their hierarchical order. + * Other `.md` files: The content for each chapter or section of the book. +* `book.toml`: The configuration file that defines the metadata and settings for the book (e.g., title, author, theme). +* `README.md`: This file is optional and provides a description of your book. + +### Configuration File (`book.toml`) +The `book.toml` file contains configuration settings for the book. Below is an example configuration: + +```toml +[book] +title = "Example book" +authors = ["John Doe"] +description = "The example book covers examples." + +[rust] +edition = "2018" + +[build] +build-dir = "my-example-book" +create-missing = false + +[preprocessor.index] + +[preprocessor.links] + +[output.html] +additional-css = ["custom.css"] + +[output.html.search] +limit-results = 15 +``` + +### `SUMMARY.md` file +The summary file is used by mdBook to know what chapters to include, in what order they should appear, what their hierarchy is and where the source files are. Without this file, there is no book. + +This markdown file must be named `SUMMARY.md`. Its formatting is very strict and must follow the structure outlined below to allow for easy parsing. Any element not specified below, be it formatting or textual, is likely to be ignored at best, or may cause an error when attempting to build the book. + +#### Structure +- `Title` - While optional, it’s common practice to begin with a title, generally `# Summary`. This is ignored by the parser however, and can be omitted. +```md +# Summary +``` + +- `Prefix Chapter` - Before the main numbered chapters, prefix chapters can be added that will not be numbered. This is useful for forewords, introductions, etc. There are, however, some constraints. Prefix chapters cannot be nested; they should all be on the root level. And you cannot add prefix chapters once you have added numbered chapters. +```md +[A Prefix Chapter](relative/path/to/markdown.md) + +- [First Chapter](relative/path/to/markdown2.md) +``` + +- `Part Title` - Level 1 headers can be used as a title for the following numbered chapters. This can be used to logically separate different sections of the book. The title is rendered as unclickable text. Titles are optional, and the numbered chapters can be broken into as many parts as desired. Part titles must be h1 headers (one `#`), other heading levels are ignored. +```md +# My Part Title + +- [First Chapter](relative/path/to/markdown.md) +``` + +- `Numbered Chapter` - Numbered chapters outline the main content of the book and can be nested, resulting in a nice hierarchy (chapters, sub-chapters, etc.). +```md +# Title of Part + +- [First Chapter](relative/path/to/markdown.md) +- [Second Chapter](relative/path/to/markdown2.md) + - [Sub Chapter](relative/path/to/markdown3.md) + +# Title of Another Part + +- [Another Chapter](relative/path/to/markdown4.md) +``` + +Numbered chapters can be denoted with either - or * (do not mix delimiters). + +- `Suffix Chapter` - Like prefix chapters, suffix chapters are unnumbered, but they come after numbered chapters. +```md +- [Last Chapter](relative/path/to/markdown.md) + +[Title of Suffix Chapter](relative/path/to/markdown2.md) +``` + +- `Draft chapters` - Draft chapters are chapters without a file and thus content. The purpose of a draft chapter is to signal future chapters still to be written. Or when still laying out the structure of the book to avoid creating the files while you are still changing the structure of the book a lot. Draft chapters will be rendered in the HTML renderer as disabled links in the table of contents, as you can see for the next chapter in the table of contents on the left. Draft chapters are written like normal chapters but without writing the path to the file. +```md +- [Draft Chapter]() +``` + +- `Separators` - Separators can be added before, in between, and after any other element. They result in an HTML rendered line in the built table of contents. A separator is a line containing exclusively dashes and at least three of them: ---. +```md +# My Part Title + +[A Prefix Chapter](relative/path/to/markdown.md) + +--- + +- [First Chapter](relative/path/to/markdown2.md) +``` + +#### Example +Below is a full example `SUMMARY.md`: + +```md +# Summary + +[Introduction](README.md) + +# User Guide + +- [Installation](guide/installation.md) +- [Reading Books](guide/reading.md) +- [Creating a Book](guide/creating.md) + +# Reference Guide + +- [Command Line Tool](cli/README.md) + - [init](cli/init.md) + - [build](cli/build.md) + - [watch](cli/watch.md) + - [serve](cli/serve.md) + - [test](cli/test.md) + - [clean](cli/clean.md) + - [completions](cli/completions.md) +- [Format](format/README.md) + - [SUMMARY.md](format/summary.md) + - [Draft chapter]() + - [Configuration](format/configuration/README.md) + - [General](format/configuration/general.md) + - [Preprocessors](format/configuration/preprocessors.md) + - [Renderers](format/configuration/renderers.md) + - [Environment Variables](format/configuration/environment-variables.md) + - [Theme](format/theme/README.md) + - [index.hbs](format/theme/index-hbs.md) + - [Syntax highlighting](format/theme/syntax-highlighting.md) + - [Editor](format/theme/editor.md) + - [MathJax Support](format/mathjax.md) + - [mdBook-specific features](format/mdbook.md) + - [Markdown](format/markdown.md) +- [Continuous Integration](continuous-integration.md) +- [For Developers](for_developers/README.md) + - [Preprocessors](for_developers/preprocessors.md) + - [Alternative Backends](for_developers/backends.md) + +----------- + +[Contributors](misc/contributors.md) +``` + +### Preprocessors +Preprocessors are extensions that can modify the raw Markdown source before it gets sent to the renderer. + +The following preprocessors are built-in and included by default: +- links: Expands the `{{ #playground }}`, `{{ #include }}`, and `{{ #rustdoc_include }}` handlebars helpers in a chapter to include the contents of a file. +- index: Convert all chapter files named `README.md` into `index.md`. That is to say, all `README.md` would be rendered to an index file `index.html` in the rendered book. + +The built-in preprocessors can be disabled with the `build.use-default-preprocessors` config option. + +The community has developed several preprocessors. See the [Third Party Plugins wiki page](https://github.com/rust-lang/mdBook/wiki/Third-party-plugins) for a list of available preprocessors. + +#### Custom Preprocessor Configuration +Preprocessors can be added by including a `preprocessor` table in `book.toml` with the name of the preprocessor. For example, if you have a preprocessor called `mdbook-example`, then you can include it with: +```toml +[preprocessor.example] +``` + +With this table, mdBook will execute the mdbook-example preprocessor. + +This table can include additional key-value pairs that are specific to the preprocessor. For example, if our example preprocessor needed some extra configuration options: +```toml +[preprocessor.example] +some-extra-feature = true +``` + +#### Locking a Preprocessor dependency to a renderer +You can explicitly specify that a preprocessor should run for a renderer by binding the two together. +```toml +[preprocessor.example] +renderers = ["html"] # example preprocessor only runs with the HTML renderer +``` + +#### Provide Your Own Command +By default when you add a `[preprocessor.foo]` table to your `book.toml` file, mdbook will try to invoke the `mdbook-foo` executable. If you want to use a different program name or pass in command-line arguments, this behaviour can be overridden by adding a command field. +```toml +[preprocessor.random] +command = "python random.py" +``` + +#### Require A Certain Order +The order in which preprocessors are run can be controlled with the before and after fields. For example, suppose you want your linenos preprocessor to process lines that may have been `{{#include}}`d; then you want it to run after the built-in links preprocessor, which you can require using either the before or after field: +```toml +[preprocessor.linenos] +after = [ "links" ] +``` + +or + +``` +[preprocessor.links] +before = [ "linenos" ] +``` + +It would also be possible, though redundant, to specify both of the above in the same config file. + +Preprocessors having the same priority specified through before and after are sorted by name. Any infinite loops will be detected and produce an error. + +## Features +### Hiding code lines +There is a feature in mdBook that lets you hide code lines by prepending them with a specific prefix. + +For the Rust language, you can prefix lines with `# ` (# followed by a space) to hide them like you would with Rustdoc. This prefix can be escaped with `##` to prevent the hiding of a line that should begin with the literal string `#` (see Rustdoc’s docs for more details) +``` +# fn main() { + let x = 5; + let y = 6; + + println!("{}", x + y); +# } +``` + +Will render as +``` + let x = 5; + let y = 6; + + println!("{}", x + y); +``` + +When you tap or hover the mouse over the code block, there will be an eyeball icon which will toggle the visibility of the hidden lines. + +By default, this only works for code examples that are annotated with rust. However, you can define custom prefixes for other languages by adding a new line-hiding prefix in your `book.toml` with the language name and prefix character(s): + +```toml +[output.html.code.hidelines] +python = "~" +``` + +The prefix will hide any lines that begin with the given prefix. With the python prefix shown above, this: + +``` +~hidden() +nothidden(): +~ hidden() + ~hidden() + nothidden() +``` + +will render as +```python +nothidden(): + nothidden() +``` + +This behavior can be overridden locally with a different prefix. This has the same effect as above: + +``` +\```python,hidelines=!!! +!!!hidden() +nothidden(): +!!! hidden() + !!!hidden() + nothidden() +\``` +``` + +### Rust Playground +Rust language code blocks will automatically get a play button which will execute the code and display the output just below the code block. This works by sending the code to the Rust Playground. + +If there is no main function, then the code is automatically wrapped inside one. + +If you wish to disable the play button for a code block, you can include the `noplayground` option on the code block like this: + +``` +\```rust,noplayground +let mut name = String::new(); +std::io::stdin().read_line(&mut name).expect("failed to read line"); +println!("Hello {}!", name); +\``` +``` + +Or, if you wish to disable the play button for all code blocks in your book, you can write the config to the `book.toml` like this. + +```toml +[output.html.playground] +runnable = false +``` + +### Rust code block attributes +Additional attributes can be included in Rust code blocks with comma, space, or tab-separated terms just after the language term. For example: + +``` +\```rust,ignore +# This example won't be tested. +panic!("oops!"); +\``` +``` + +These are particularly important when using mdbook test to test Rust examples. These use the same attributes as rustdoc attributes, with a few additions: + +- `editable` — Enables the editor. +- `noplayground` — Removes the play button, but will still be tested. +- `mdbook-runnable` — Forces the play button to be displayed. This is intended to be combined with the ignore attribute for examples that should not be tested, but you want to allow the reader to run. +- `ignore` — Will not be tested and no play button is shown, but it is still highlighted as Rust syntax. +- `should_panic` — When executed, it should produce a panic. +- `no_run` — The code is compiled when tested, but it is not run. The play button is also not shown. +- `compile_fail` — The code should fail to compile. +- `edition2015`, `edition2018`, `edition2021` — Forces the use of a specific Rust edition. See rust.edition to set this globally. + +### Including files +With the following syntax, you can include files into your book: +``` +{{#include file.rs}} +``` + +The path to the file has to be relative from the current source file. + +mdBook will interpret included files as Markdown. Since the include command is usually used for inserting code snippets and examples, you will often wrap the command with ``` to display the file contents without interpreting them. + +``` +\``` +{{#include file.rs}} +\``` +``` + +### Including portions of a file +Often you only need a specific part of the file, e.g. relevant lines for an example. We support four different modes of partial includes: + +``` +{{#include file.rs:2}} +{{#include file.rs::10}} +{{#include file.rs:2:}} +{{#include file.rs:2:10}} +``` + +The first command only includes the second line from file `file.rs`. The second command includes all lines up to line 10, i.e. the lines from 11 till the end of the file are omitted. The third command includes all lines from line 2, i.e. the first line is omitted. The last command includes the excerpt of `file.rs` consisting of lines 2 to 10. + +To avoid breaking your book when modifying included files, you can also include a specific section using anchors instead of line numbers. An anchor is a pair of matching lines. The line beginning an anchor must match the regex `ANCHOR:\s*[\w_-]+` and similarly the ending line must match the regex `ANCHOR_END:\s*[\w_-]+`. This allows you to put anchors in any kind of commented line. + +Consider the following file to include: + +``` +/* ANCHOR: all */ + +// ANCHOR: component +struct Paddle { + hello: f32, +} +// ANCHOR_END: component + +////////// ANCHOR: system +impl System for MySystem { ... } +////////// ANCHOR_END: system + +/* ANCHOR_END: all */ +``` + +Then in the book, all you have to do is: + +``` +Here is a component: +\```rust,no_run,noplayground +{{#include file.rs:component}} +\``` + +Here is a system: +\```rust,no_run,noplayground +{{#include file.rs:system}} +\``` + +This is the full file. +\```rust,no_run,noplayground +{{#include file.rs:all}} +\``` +``` + +Lines containing anchor patterns inside the included anchor are ignored. + +### Including a file but initially hiding all except specified lines +The `rustdoc_include` helper is for including code from external Rust files that contain complete examples, but only initially showing particular lines specified with line numbers or anchors in the same way as with include. + +The lines not in the line number range or between the anchors will still be included, but they will be prefaced with `#`. This way, a reader can expand the snippet to see the complete example, and Rustdoc will use the complete example when you run mdbook test. + +For example, consider a file named `file.rs` that contains this Rust program: + +```rust +fn main() { + let x = add_one(2); + assert_eq!(x, 3); +} + +fn add_one(num: i32) -> i32 { + num + 1 +} +``` + +We can include a snippet that initially shows only line 2 by using this syntax: + +``` +To call the `add_one` function, we pass it an `i32` and bind the returned value to `x`: + +\```rust +{{#rustdoc_include file.rs:2}} +\``` +``` + +This would have the same effect as if we had manually inserted the code and hidden all but line 2 using `#`: + +### Inserting runnable Rust files +With the following syntax, you can insert runnable Rust files into your book: +``` +{{#playground file.rs}} +``` + +The path to the Rust file has to be relative from the current source file. + +When play is clicked, the code snippet will be sent to the Rust Playground to be compiled and run. The result is sent back and displayed directly underneath the code. + +### Controlling page `` +A chapter can set a `<title>` that is different from its entry in the table of contents (sidebar) by including a `{{#title ...}}` near the top of the page. + +``` +{{#title My Title}} +``` + +### HTML classes provided by mdBook +#### class="left" and "right" +These classes are provided by default, for inline HTML to float images. + +```html +<img class="right" src="images/rust-logo-blk.svg" alt="The Rust logo"> +``` + +#### class="hidden" +HTML tags with class hidden will not be shown. + +```html +<div class="hidden">This will not be seen.</div> +``` + +#### class="warning" +To make a warning or similar note stand out, wrap it in a warning div. + +```html +<div class="warning"> +``` + +### Math Support +mdBook has optional support for math equations through MathJax. + +To enable MathJax, you need to add the `mathjax-support` key to your `book.toml` under the `output.html` section. + +```toml +[output.html] +mathjax-support = true +``` + +> **Note**: The usual delimiters MathJax uses are not yet supported. You can’t currently use `$$ ... $$` as delimiters and the `\[ ... \]` delimiters need an extra backslash to work. + +#### Inline equations +Inline equations are delimited by `\\(` and `\\)`. So for example, to render the following inline equation you would write the following: + +``` +\\( \int x dx = \frac{x^2}{2} + C \\) +``` + +#### Block equations +Block equations are delimited by `\\[` and `\\]`. To render the following equation + +``` +\\[ \mu = \frac{1}{N} \sum_{i=0} x_i \\] +``` From 56399a5fc093a169c1e63e7a522c190bb4b3ed3e Mon Sep 17 00:00:00 2001 From: JMARyA <jmarya@hydrar.de> Date: Tue, 27 May 2025 08:47:41 +0200 Subject: [PATCH 44/74] add starship --- technology/applications/cli/starship.md | 26 +++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 technology/applications/cli/starship.md diff --git a/technology/applications/cli/starship.md b/technology/applications/cli/starship.md new file mode 100644 index 0000000..281f43d --- /dev/null +++ b/technology/applications/cli/starship.md @@ -0,0 +1,26 @@ +--- +obj: application +website: https://starship.rs +repo: https://github.com/starship/starship +rev: 2025-05-27 +--- + +# 🚀 Starship +The minimal, blazing-fast, and infinitely customizable prompt for any shell! + +## Setup +Install starship and add the following to your shells configuration: + +```sh +# For bash +eval "$(starship init bash)" +# For zsh +eval "$(starship init zsh)" +# For fish +starship init fish | source +``` + +## Configuration +Your shell prompt is build using modules showing relevant information. +You can customize these at `~/.config/starship.toml`. All configuration for starship is done in this TOML file. +See [this page](https://starship.rs/config/) for an overview of every configurable module. From 5005d3b7d1225c83311754a0d474f421ed122d2e Mon Sep 17 00:00:00 2001 From: JMARyA <jmarya@hydrar.de> Date: Tue, 27 May 2025 13:46:57 +0200 Subject: [PATCH 45/74] add sftpgo --- technology/applications/web/sftpgo.md | 90 +++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 technology/applications/web/sftpgo.md diff --git a/technology/applications/web/sftpgo.md b/technology/applications/web/sftpgo.md new file mode 100644 index 0000000..cf629f5 --- /dev/null +++ b/technology/applications/web/sftpgo.md @@ -0,0 +1,90 @@ +--- +obj: application +website: https://sftpgo.com +repo: https://github.com/drakkan/sftpgo +source: https://docs.sftpgo.com/latest +--- + +# SFTPGo +SFTPGo is an event-driven file transfer solution. It support multiple protocols (SFTP, SCP, FTP/S, WebDAV, HTTP/S) and multiple storage backends. +With SFTPGo you can leverage local and cloud storage backends for exchanging and storing files internally or with business partners using the same tools and processes you are already familiar with. +The WebAdmin UI allows to easily create and manage your users, folders, groups and other resources. + +## Features +- Support for serving local filesystem, encrypted local filesystem, S3 Compatible Object Storage, Google Cloud Storage, Azure Blob Storage or other SFTP accounts over SFTP/SCP/FTP/WebDAV. +- Virtual folders are supported: a virtual folder can use any of the supported storage backends. So you can have, for example, a user with the S3 backend mapping a GCS bucket (or part of it) on a specified path and an encrypted local filesystem on another one. Virtual folders can be private or shared among multiple users, for shared virtual folders you can define different quota limits for each user. +- Configurable custom commands and/or HTTP hooks on upload, pre-upload, download, pre-download, delete, pre-delete, rename, mkdir, rmdir on SSH commands and on user add, update and delete. +- Virtual accounts stored within a "data provider". +- SQLite, MySQL, PostgreSQL, CockroachDB, Bolt (key/value store in pure Go) and in-memory data providers are supported. +- Chroot isolation for local accounts. Cloud-based accounts can be restricted to a certain base path. +- Per-user and per-directory virtual permissions, for each path you can allow or deny: directory listing, upload, overwrite, download, delete, rename, create directories, create symlinks, change owner/group/file mode and modification time. +- REST API for users and folders management, data retention, backup, restore and real time reports of the active connections with possibility of forcibly closing a connection. +- The Event Manager allows to define custom workflows based on server events or schedules. +- Web based administration interface to easily manage users, folders and connections. +- Web client interface so that end users can change their credentials, manage and share their files in the browser. +- Public key and password authentication. Multiple public keys per-user are supported. +- SSH user certificate authentication. +- Keyboard interactive authentication. You can easily setup a customizable multi-factor authentication. +- Partial authentication. You can configure multi-step authentication requiring, for example, the user password after successful public key authentication. +- Per-user authentication methods. +- Two-factor authentication based on time-based one time passwords (RFC 6238) which works with Google Authenticator, Microsoft Authenticator, Authy and other compatible apps. +- LDAP/Active Directory authentication using a plugin. +- Simplified user administrations using groups. +- Roles allow to create limited administrators who can only create and manage users with their role. +- Custom authentication via external programs/HTTP API. +- Web Client and Web Admin user interfaces support OpenID Connect authentication and so they can be integrated with identity providers such as Keycloak. You can find more details here. +- Data At Rest Encryption. +- Dynamic user modification before login via external programs/HTTP API. +- Quota support: accounts can have individual disk quota expressed as max total size and/or max number of files. +- Bandwidth throttling, with separate settings for upload and download and overrides based on the client's IP address. +- Data transfer bandwidth limits, with total limit or separate settings for uploads and downloads and overrides based on the client's IP address. Limits can be reset using the REST API. +- Per-protocol rate limiting is supported and can be optionally connected to the built-in defender to automatically block hosts that repeatedly exceed the configured limit. +- Per-user maximum concurrent sessions. +- Per-user and global IP filters: login can be restricted to specific ranges of IP addresses or to a specific IP address. +- Per-user and per-directory shell like patterns filters: files can be allowed, denied and optionally hidden based on shell like patterns. +- Automatically terminating idle connections. +- Automatic blocklist management using the built-in defender. +- Geo-IP filtering using a plugin. +- Atomic uploads are configurable. +- Per-user files/folders ownership mapping: you can map all the users to the system account that runs SFTPGo (all platforms are supported) or you can run SFTPGo as root user and map each user or group of users to a different system account (*NIX only). +- Support for Git repositories over SSH. +- SCP and rsync are supported. +- FTP/S is supported. You can configure the FTP service to require TLS for both control and data connections. +WebDAV is supported. +- ACME protocol is supported. SFTPGo can obtain and automatically renew TLS certificates for HTTPS, WebDAV and FTPS from Let's Encrypt or other ACME compliant certificate authorities, using the HTTP-01 or TLS-ALPN-01 challenge types. +- Two-Way TLS authentication, aka TLS with client certificate authentication, is supported for REST API/Web Admin, FTPS and WebDAV over HTTPS. +- Per-user protocols restrictions. You can configure the allowed protocols (SSH/HTTP/FTP/WebDAV) for each user. +- Prometheus metrics are supported. +- Support for HAProxy PROXY protocol: you can proxy and/or load balance the SFTP/SCP/FTP service without losing the information about the client's address. +- Easy migration from Linux system user accounts. +- Portable mode: a convenient way to share a single directory on demand. +- SFTP subsystem mode: you can use SFTPGo as OpenSSH's SFTP subsystem. +- Performance analysis using built-in profiler. +- Configuration format is at your choice: JSON, TOML, YAML, envfile are supported. +- Log files are accurate and they are saved in the easily parsable JSON format (more information). +- SFTPGo supports a plugin system and therefore can be extended using external plugins. +- Infrastructure as Code (IaC) support using the Terraform provider. +- Partial (experimental) support for internationalization for WebAdmin and WebClient user interfaces. + +## Compose +```yml +services: + sftpgo: + user: 1001:1001 # User + ports: + - 5927:5927 # Telemetry + - 5929:5929 # WebDAV + - 5928:8080 # HTTP UI + - 2222:2022 # SFTP + volumes: + - "./data:/srv/sftpgo" + - "./config:/var/lib/sftpgo" + environment: + # Telemetry + - "SFTPGO_TELEMETRY__BIND_PORT=5927" + - "SFTPGO_TELEMETRY__BIND_ADDRESS=0.0.0.0" + # WebDAV + - "SFTPGO_WEBDAVD__BINDINGS__0__PORT=5929" + - "SFTPGO_WEBDAVD__BINDINGS__0__ADDRESS=0.0.0.0" + image: drakkan/sftpgo:distroless-slim +``` From 494dd082bc432d3643de336d645886fb78044cca Mon Sep 17 00:00:00 2001 From: JMARyA <jmarya@hydrar.de> Date: Wed, 28 May 2025 09:16:07 +0200 Subject: [PATCH 46/74] add wallust --- technology/applications/media/wallust.md | 392 +++++++++++++++++++++++ 1 file changed, 392 insertions(+) create mode 100644 technology/applications/media/wallust.md diff --git a/technology/applications/media/wallust.md b/technology/applications/media/wallust.md new file mode 100644 index 0000000..de84216 --- /dev/null +++ b/technology/applications/media/wallust.md @@ -0,0 +1,392 @@ +--- +obj: application +website: https://explosion-mental.codeberg.page/wallust +repo: https://codeberg.org/explosion-mental/wallust +rev: 2025-05-28 +--- + +# wallust +wallust is a command line tool for creating 16 color palettes, since it was the original intent of pywal, the tool that inspired the creation of wallust. + +## Parameters +### Alpha +Alpha value for templating (default: `100`). + +This value doesn't do anything other than represent the variable called `alpha` in templates. This is simply a left over of niche use cases. + +To edit this value: + +Config file: `alpha = 50` +Cli: `wallust run image.png --alpha 50` + +### Backend +Allows you to choose which method to use in order to parse the image. + +| Backends | Description | +| ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Full | Read and return the whole image pixels (more precision, slower) | +| Resized | Resizes the image before parsing, mantaining it's aspect ratio | +| Wal | Uses image magick convert to generate the colors, like pywal | +| Thumb | Faster algo hardcoded to 512x512 (no ratio respected) | +| FastResize | A much faster resize algo that uses SIMD. For some reason it fails on some images where resized doesn't, for this reason it doesn't replace but rather it's a new option. | +| Kmeans | Kmeans is an algo that divides and picks pixels all around the image, giving a more diverse look. | + +To edit this value: + +Config file: `backend = "full"` +Cli: `wallust run image.png --backend full` + +### Check Constrast +Ensures a "readable contrast". Should only be enabled when you notice an unreadable contrast frequently happening with your images. The reference color for the contrast is the background color. (default: `disabled`) + +To edit this value: + +Config file: `check_contrast = true` +Cli: `wallust run image.png --check-contrast` + +### color_space +What colorspace to use to gather the most prominent colors. + +| Name | Description | +| ---- | --------------------------------------------------------------------------------------------------------------------------- | +| lab | Uses Cie L a b color space. (mixed and ansi) | +| lch | CIE Lch, you can understand this color space like LAB but with chrome and hue added, which Could help when sorting. (mixed) | + +There are two variants: + +- mixed, which mixes colors when collecting them into a histogram. +- ansi, Tries to get a full color pallete similar to the one of a tty, this works best with ansidark palette. + +Below, is a complete overview of all colorspaces variations: + +| Color Space | Description | +| ----------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Lab | Uses Cie Lab color space | +| LabMixed | Variant of lab that mixes the colors gathered, if not enough colors it fallbacks to usual lab (not recommended in small images) | +| Lch | CIE Lch, you can understand this color space like LAB but with chrome and hue added. Could help when sorting. | +| LchMixed | CIE Lch, you can understand this color space like LAB but with chrome and hue added. Could help when sorting. | +| LchAnsi | Variant of Lch which preserves 8 colors: black, red, green, yellow, blue, magenta, cyan and gray. This works best with 'darkansi' palette, allowing a constant color order. | + +To edit this value: + +Config file: `color_space = "lchmixed"` +Cli: `wallust run image.png --colorspace lchmixed` + +### Enviromental Variables in templates/targets paths +Allows you to have shell variables in your paths. For example: +```toml +# using XDG var +pywal = { src = "pywal", dst = "${XDG_HOME_CONFIG}/templates/pywal-result/", pywal = true } +``` + +To avoid possible security issues, this flag is disabled by default. + +To edit this value: + +Config file: `env_vars = true` + +### Fallback Generator +This field chooses a method to use when the gathered colors aren't enough: + +| Name | Description | +| --------------- | ------------------------------------------------------------------------- | +| `interpolation` | (default) Tries to pick two colors and built gradients over them | +| `complementary` | Uses the complementary colors of two colors, or more (if needed), colors. | + +To edit this value: + +Config file: `fallback_generator = "complementary"` +Cli: `wallust run image.png --fallback-generator complementary` + +### Palette +Uses the colors gathered from `color_space` in a way that makes sense, resulting in a scheme palette. + +| Name | Description | +| --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| ansidark | Dark ansi colors, works best with lchansi and orders it's colors to preserve a constant tty like order: color0 -> black, color1 -> redish, color2 -> greenish, and so on. | +| dark | Dark colors dark background and light contrast. (16, comp, comp16) | +| harddark | Same as dark with hard hue colors. (16, comp, comp16) | +| light | Light bg dark fg. (16, comp, comp16) | +| softdark | Variant of softlight uses the lightest colors and a dark background could be interpreted as dark inversed. (16, comp, comp16) | +| softlight | Light with soft pastel colors counterpart of harddark. (16, comp, comp16) | + +**Palette Variations**: +There are some variants to the principal palettes schemes which you can use by appending the variant to the name e.g. 'dark16', 'lightcomp', 'harddarkcomp16' and so on, each palette indicates, in parenthesis, which variants are avaliable. + +| Name | Description | +| ------ | --------------------------------------------------------------------------------------------- | +| 16 | Makes shades of colors, creating the ilusion of 16 different colors. | +| comp | Stands for Complementary and completly changes the palette to it's complementary counterpart. | +| comp16 | Complementary palette with 16 shades, basically a combination of the above. | + +To edit this value: + +Config file: `palette = darkcomp16` +Cli: `wallust run image.png --palette darkcomp16` + +### Saturation +Color saturation, usually something higher than 50 increases the saturation and below decreases it (on a scheme with strong and vivid colors). + +Possible values: 1 - 100 (default: disabled) + +To edit this value: + +Config file: `saturate = 20` +Cli: `wallust run image.png --saturation 20` + +### Threshold +Wallust automatically uses the best threshold, heuristically, if this variable isn't defined (default behaviour). + +If you really want to define this variable, keep in mind the following. Thershold is the difference between similar colors , used inside the colorspace. + +Each colorspace may have different results with different thresholds, meaning you should try which one works for you best. + +An overall table looks like this: + +| Number | Description | +| ------- | -------------------------------------- | +| 1 | Not Perceptible by human eyes. | +| 1 - 2 | Perceptible through close observation. | +| 2 - 10 | Perceptible at a glance. | +| 11 - 49 | Colors are more similar than opposite. | +| 100 | Colors are exact opposite. | + +To edit this value: + +Config file: `threshold = 10` +Cli: `wallust run image.png --threshold 18` + +## Configuration +While wallust can work out without a config file, it results useful to define constant options in a file than giving them each time as a cli flag. This is why all parameters are optional. + +Without a config file, wallust will choose to default implementations. That being said, you can start editing your config file. + +The config file is divided into two parts: +- global space +- templates space +- +Inside the global space you can define any parameter that you want. + +To enter the templates space, however, requires a `[templates]` header. Below this, you can only define templates. + +### Defining a template in the config file +Templates are optional and defined inside the `[templates]` header. Here it's recommended to use single quotes (`'`) instead of double quotes (`"`) since the first one, by the toml format, ignores backslashes (`\`) as escape codes, allowing you to define Widows like paths, e.g. `C:\Users\Desktop\`. + +Template definitions have the following fields: +- `template` : A relative path that points to a file where wallust.toml is located, usually at ~/.config/wallust/templates. This file can also be a directory, which will be templated non-recursively (only the first recursion, like `du ... --max-depth 1`) +- `target` : Absolute path in which to place a file with generated templated values. This field CAN expand the ~ as the $HOME enviromental variable. If template is a directory, this must correspond and be one. + +Example: +```toml +# Let's keep good old pywal look and feel +backend = "wal" +#color_space = "lch" # idc about this one.. +#threshold = "20" # neither about this, since I read wallust does it automagically.. +# classic look +palette = "dark16" +# let's keep the contrast very very very clear. +check_contrast = true + +[templates] +# dunst templates +dunst.template = "dunstrc.monitor" +dunst.target = "~/.config/dunst/dunstrc" + +# one liner for zathura +zathura = { template = 'zath', target = '~/.config/zathura/zathurarc' } + +# even a shorter way +glava = { src = 'glava.glsl', dst = '~/.config/glava/rc.glsl' } + +# or splited in the dotted syntax +res.src = "xres" +res.dst = "~/.config/Xresources" + +# old times, good times. Here I put old pywal templates. +# NOTE THAT BOTH scr AND dst ARE DIRECTORIES! +pywal = { src = "templates/", dst = '~/.cache/wal/', pywal = true } +``` + +## Templates +A template is simply a file that has placeholders in order to replace them with values. In wallust case, these values can range from either the colors generated, the image/theme served or the backend used. These values are represented by variables, which you can look up inside placeholders. + +By using templates you can apply the colors to every program that uses a config file. + +There are some templates for some known programs [here](https://codeberg.org/explosion-mental/wallust-templates). If you have a template you want to share, that is the place. + +### Template Syntax +Here is an overview of the general syntax of a template. + +You reference variables in the following syntax: +``` +{{color0}} +``` + +For applying a filter you use the pipe character (`|`) like this: + +``` +{{background | strip}} +``` + +And if the filter requires an argument: + +``` +{{background | lighten(0.3)}} +``` + +Remember that filters require a valid type to apply to in these examples we are using colors, which can even be defined literally: + +``` +{{ "#4ff4ff" | lighten(0.3)}} +``` + +For both, being applied to or as an argument of a filter: + +``` +{{ color2 | blend("4ff4ff")}} +``` + +You can chain multiple filters, this is why the return type of the filter is important. + +``` +{# This will get a color without the initial '#', + 0.5 lighter than before and it's complementary variant. } +{{ color2 | strip | lighten(0.5) | complementary}} +``` + +If you need to write a literal `{{`, that doesn't references any variable, you can write literals inside the delimiters: + +``` +{{ "{{" }} {{ "}}" }} +``` + +You can also use control flow expressions with `{% %}` delimiters: + +``` +{% if backend == "wal" %} +I am using the '{{backend}}' backend, getting a pywal like scheme. +{% elif backend == "fastresize" %} +This backend is called "{{palette}}" and, uses SIMD optimizations and is so fast! +{% else %} +I don't care about any other backends. Be happy! +{% endif %} +``` + +Or inline them: + +``` +{{ "I'm using the kmeans algo!" if backend == "kmeans" else "Some backend is in use" }} +``` + +And yes, you can comment inside your template, the comments won't be rendered in the final target file: + +``` +{# This won't be visible! #} +``` + +There are more control flow instructions, like the for loop: + +``` +{# This will generate color0 = .. to color18, +since `colors` contains background, foreground and cursor variables #} +{% for c in colors %} +color{{- loop.index }} = {{c-}} +{% endfor %} +``` + +You can add a minus sign (`-`) at the start or the end of the delimiters to supress vertical spacing. + +The syntax comes from the library being used, which is minijinja, a subset of the template engine 'Jinja2'. + +### Template Variables +The color types are formated like HEX rgb (e.g. `#0A0B0C`) by default. However a color literal can be represented in multiple ways, like HEXA rgba (e.g. `#0A0B0CFF`, where `FF` is the transparency value) or HEX rgb without the leading `#` (`0a0b0c`). + +Avaliable values: + +- `color0` +- `color1` +- `color2` +- `color3` +- `color4` +- `color5` +- `color6` +- `color7` +- `color8` +- `color9` +- `color10` +- `color11` +- `color12` +- `color13` +- `color14` +- `color15` +- `background` +- `foreground` +- `cursor` +- `colors` + +Additionally, this variable `colors` returns a vector of all the presented colors in the following order: + +Starts with `color0` to `color15`, `background`, `foreground` and at the end, (index 18 if starting from 0), `cursor`. + +**Other avaliable variables:** + +- `wallpaper` : The full path to the current wallpaper, colorscheme file or the name of the theme in use. +- `backend` : Current backend being used. +- `colorspace` : Current colorspace being used. +- `palette` : Current palette being used. +- `alpha` : Default to 100, can be modified in the config file or with `--alpha/-a`. +- `alpha_dec` : Instead of 0 to 100, displays it from 0.00 to 1.00. + +### Template Filters +The Jinja2 format calls them 'filters', making a distincion from 'functions'. + +- `hexa` : Outputs the color in hexa format: e.g `#0A0B0CFF`, where `FF` is the alpha value. + +Example: + +``` +{{ color5 | hexa }} +``` + +- `rgb` : Output the color in rgb, separated by comas. (e.g. `10,11,12`) +- `xrgb` : Output the color in xrgb, separated by slashes. (e.g `0A/0B/0C`) +- `strip` : Output the color in hex, just like by default, but removes the leading #. (e.g. `0A0B0C`) +- `red` : Outputs only the red value. (e.g. `10`) +- `green` : Outputs only the green value. (e.g. `11`) +- `blue` : Outputs only the blue value. (e.g. `12`) +- `complementary` : Returns the respective complementary color. +- `blend` : Takes another color as input, to blend it for the filtered color. + +Example: + +``` +{{ color2 | blend(color0) | blend("#EEDDFF") }} +``` + +- `lighten` : Takes a float (decimal value) as input, from 0.1 to 1.0, that corresponds to the amount to lighten the color by. +Example: + +``` +{{ color0 | lighten(0.2) }} +``` + +- `darken` : Takes a float (decimal value) as input, from 0.1 to 1.0, that corresponds to the amount to darken the color by. +- `saturate` : Takes a float (decimal value) as input, from 0.1 to 1.0, that corresponds to the amount to saturate the color by. + +### zathurarc config sample +``` +# colors +set default-bg "{{background}}" + +# complementary foreground, but keep it light +set default-fg "{{foreground | complementary | lighten(0.5)}}" + +# make it a bit lighter than background +set statusbar-bg "{{background | lighten(0.3)}}" + +# make it darken by blending to a darken color +set statusbar-fg "{{foreground | blend("#eeeeee")}}" + +# use it's complementary +set inputbar-bg "{{background | complementary}}" +``` From 754f1a96b970e2a54818bd8925a691e302c37cc0 Mon Sep 17 00:00:00 2001 From: JMARyA <jmarya@hydrar.de> Date: Wed, 28 May 2025 09:47:23 +0200 Subject: [PATCH 47/74] add glance --- technology/applications/web/glance.md | 112 ++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 technology/applications/web/glance.md diff --git a/technology/applications/web/glance.md b/technology/applications/web/glance.md new file mode 100644 index 0000000..37cab19 --- /dev/null +++ b/technology/applications/web/glance.md @@ -0,0 +1,112 @@ +--- +obj: application +repo: https://github.com/glanceapp/glance +rev: 2025-05-28 +--- + +# glance +A self-hosted dashboard that puts all your feeds in one place. +The dashboard can be customized with various widgets. + +## Configuration +Configuration is done through YAML files, to learn more about how the layout works, how to add more pages and how to configure widgets, visit the [configuration documentation](https://github.com/glanceapp/glance/blob/main/docs/configuration.md). + +**Example config**: +```yml +pages: + - name: Home + columns: + - size: small + widgets: + - type: calendar + first-day-of-week: monday + + - type: rss + limit: 10 + collapse-after: 3 + cache: 12h + feeds: + - url: https://selfh.st/rss/ + title: selfh.st + limit: 4 + - url: https://ciechanow.ski/atom.xml + - url: https://www.joshwcomeau.com/rss.xml + title: Josh Comeau + - url: https://samwho.dev/rss.xml + - url: https://ishadeed.com/feed.xml + title: Ahmad Shadeed + + - type: twitch-channels + channels: + - theprimeagen + - j_blow + - piratesoftware + - cohhcarnage + - christitustech + - EJ_SA + + - size: full + widgets: + - type: group + widgets: + - type: hacker-news + - type: lobsters + + - type: videos + channels: + - UCXuqSBlHAE6Xw-yeJA0Tunw # Linus Tech Tips + - UCR-DXc1voovS8nhAvccRZhg # Jeff Geerling + - UCsBjURrPoezykLs9EqgamOA # Fireship + - UCBJycsmduvYEL83R_U4JriQ # Marques Brownlee + - UCHnyfMqiRRG1u-2MsSQLbXA # Veritasium + + - type: group + widgets: + - type: reddit + subreddit: technology + show-thumbnails: true + - type: reddit + subreddit: selfhosted + show-thumbnails: true + + - size: small + widgets: + - type: weather + location: London, United Kingdom + units: metric + hour-format: 12h + + - type: markets + markets: + - symbol: SPY + name: S&P 500 + - symbol: BTC-USD + name: Bitcoin + - symbol: NVDA + name: NVIDIA + - symbol: AAPL + name: Apple + - symbol: MSFT + name: Microsoft + + - type: releases + cache: 1d + repositories: + - glanceapp/glance + - go-gitea/gitea + - immich-app/immich + - syncthing/syncthing +``` + +## Compose +```yml +services: + glance: + container_name: glance + image: glanceapp/glance + restart: unless-stopped + volumes: + - ./glance.yml:/app/config/glance.yml + ports: + - 8080:8080 +``` From 0680af41e76d7358203269f0849859528fe43a47 Mon Sep 17 00:00:00 2001 From: JMARyA <jmarya@hydrar.de> Date: Mon, 2 Jun 2025 09:02:41 +0200 Subject: [PATCH 48/74] add sops --- technology/tools/sops.md | 123 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 123 insertions(+) create mode 100644 technology/tools/sops.md diff --git a/technology/tools/sops.md b/technology/tools/sops.md new file mode 100644 index 0000000..4aa5000 --- /dev/null +++ b/technology/tools/sops.md @@ -0,0 +1,123 @@ +--- +obj: application +repo: https://github.com/getsops/sops +website: https://getsops.io +rev: 2025-06-02 +--- + +# SOPS: Secrets OPerationS +SOPS is an editor of encrypted files that supports YAML, JSON, ENV, INI and BINARY formats and encrypts with AWS KMS, GCP KMS, Azure Key Vault, age, and PGP. + +## Usage +```sh +# Edit a file +sops <file> + +# Decrypt a file +sops -d <file> + +# Example: kubectl +sops -d <file> | kubectl apply -f - +``` + +## Configuration +It is often tedious to specify the `--kms` `--gcp-kms` `--pgp` and `--age` parameters for creation of all new files. If your secrets are stored under a specific directory, like a git repository, you can create a `.sops.yaml` configuration file at the root directory to define which keys are used for which filename. + +> **Note**: The file needs to be named `.sops.yaml`. Other names (i.e. `.sops.yml`) won’t be automatically discovered by sops. You’ll need to pass the `--config .sops.yml` option for it to be picked up. + +When creating any file in the repository, whether at the root or under a subdirectory, SOPS will recursively look for a `.sops.yaml` file. If one is found, the filename of the file being created is compared with the filename regexes of the configuration file. The first regex that matches is selected, and its KMS and PGP keys are used to encrypt the file. It should be noted that the looking up of `.sops.yaml` is from the working directory (CWD) instead of the directory of the encrypting file. + +The `path_regex` checks the path of the encrypting file relative to the `.sops.yaml` config file. Here is an example: + +```yml +creation_rules: + # upon creation of a file under development, + # KMS set A is used + - path_regex: .*/development/.* + kms: 'arn:aws:kms:us-west-2:927034868273:key/fe86dd69-4132-404c-ab86-4269956b4500,arn:aws:kms:us-west-2:361527076523:key/5052f06a-5d3f-489e-b86c-57201e06f31e+arn:aws:iam::361527076523:role/hiera-sops-prod' + pgp: 'FBC7B9E2A4F9289AC0C1D4843D16CEE4A27381B4' + + # prod files use KMS set B in the PROD IAM + - path_regex: .*/production/.* + kms: 'arn:aws:kms:us-west-2:361527076523:key/5052f06a-5d3f-489e-b86c-57201e06f31e+arn:aws:iam::361527076523:role/hiera-sops-prod,arn:aws:kms:eu-central-1:361527076523:key/cb1fab90-8d17-42a1-a9d8-334968904f94+arn:aws:iam::361527076523:role/hiera-sops-prod' + pgp: 'FBC7B9E2A4F9289AC0C1D4843D16CEE4A27381B4' + + # other files use KMS set C + - kms: 'arn:aws:kms:us-west-2:927034868273:key/fe86dd69-4132-404c-ab86-4269956b4500,arn:aws:kms:us-west-2:142069644989:key/846cfb17-373d-49b9-8baf-f36b04512e47,arn:aws:kms:us-west-2:361527076523:key/5052f06a-5d3f-489e-b86c-57201e06f31e' + pgp: 'FBC7B9E2A4F9289AC0C1D4843D16CEE4A27381B4' +``` + +Example to encrypt all `secrets.yml`: +```yml +creation_rules: + - path_regex: secrets.yml + encrypted_regex: '^(data|stringData)$' + age: <age_key> +``` + +## Encrypting using age +age is a simple, modern, and secure tool for encrypting files. It's recommended to use age over PGP, if possible. + +You can encrypt a file for one or more age recipients (comma separated) using the `--age` option or the `$SOPS_AGE_RECIPIENTS` environment variable: + +``` +$ sops encrypt --age age1yt3tfqlfrwdwx0z0ynwplcr6qxcxfaqycuprpmy89nr83ltx74tqdpszlw test.yaml > test.enc.yaml +``` + +When decrypting a file with the corresponding identity, SOPS will look for a text file name `keys.txt` located in a sops subdirectory of your user configuration directory. On Linux, this would be `$XDG_CONFIG_HOME/sops/age/keys.txt`. On macOS, this would be `$HOME/Library/Application Support/sops/age/keys.txt`. On Windows, this would be `%AppData%\sops\age\keys.txt`. You can specify the location of this file manually by setting the environment variable `$SOPS_AGE_KEY_FILE`. Alternatively, you can provide the key(s) directly by setting the `$SOPS_AGE_KEY` environment variable. + +The contents of this key file should be a list of age X25519 identities, one per line. Lines beginning with `#` are considered comments and ignored. Each identity will be tried in sequence until one is able to decrypt the data. + +Encrypting with SSH keys via age is not yet supported by SOPS. + +## Showing diffs in cleartext in git +You most likely want to store encrypted files in a version controlled repository. SOPS can be used with git to decrypt files when showing diffs between versions. This is very handy for reviewing changes or visualizing history. + +To configure SOPS to decrypt files during diff, create a `.gitattributes` file at the root of your repository that contains a filter and a command. + +``` +*.yaml diff=sopsdiffer +``` + +Here we only care about YAML files. `sopsdiffer` is an arbitrary name that we map to a SOPS command in the git configuration file of the repository. + +``` +$ git config diff.sopsdiffer.textconv "sops decrypt" + +$ grep -A 1 sopsdiffer .git/config +[diff "sopsdiffer"] + textconv = "sops decrypt" +``` + +With this in place, calls to git diff will decrypt both previous and current versions of the target file prior to displaying the diff. And it even works with git client interfaces, because they call git diff under the hood! + +## Encrypting only parts of a file +> **Note**: this only works on YAML and JSON files, not on BINARY files. + +By default, SOPS encrypts all the values of a YAML or JSON file and leaves the keys in cleartext. In some instances, you may want to exclude some values from being encrypted. This can be accomplished by adding the suffix `_unencrypted` to any key of a file. When set, all values underneath the key that set the `_unencrypted` suffix will be left in cleartext. + +Note that, while in cleartext, unencrypted content is still added to the checksum of the file, and thus cannot be modified outside of SOPS without breaking the file integrity check. This behavior can be modified using `--mac-only-encrypted` flag or `.sops.yaml` config file which makes SOPS compute a MAC only over values it encrypted and not all values. + +The unencrypted suffix can be set to a different value using the `--unencrypted-suffix` option. + +Conversely, you can opt in to only encrypt some values in a YAML or JSON file, by adding a chosen suffix to those keys and passing it to the `--encrypted-suffix` option. + +A third method is to use the `--encrypted-regex` which will only encrypt values under keys that match the supplied regular expression. For example, this command: + +``` +$ sops encrypt --encrypted-regex '^(data|stringData)$' k8s-secrets.yaml +``` + +will encrypt the values under the `data` and `stringData` keys in a YAML file containing kubernetes secrets. It will not encrypt other values that help you to navigate the file, like metadata which contains the secrets' names. + +Conversely, you can opt in to only leave certain keys without encrypting by using the `--unencrypted-regex` option, which will leave the values unencrypted of those keys that match the supplied regular expression. For example, this command: + +``` +$ sops encrypt --unencrypted-regex '^(description|metadata)$' k8s-secrets.yaml +``` + +will not encrypt the values under the description and metadata keys in a YAML file containing kubernetes secrets, while encrypting everything else. + +For YAML files, another method is to use `--encrypted-comment-regex` which will only encrypt comments and values which have a preceding comment matching the supplied regular expression. + +Conversely, you can opt in to only left certain keys without encrypting by using the `--unencrypted-comment-regex` option, which will leave the values and comments unencrypted when they have a preeceding comment, or a trailing comment on the same line, that matches the supplied regular expression. From 16fc862ddba22e869ecc998768383a6ae5b96835 Mon Sep 17 00:00:00 2001 From: JMARyA <jmarya@hydrar.de> Date: Wed, 4 Jun 2025 21:41:59 +0200 Subject: [PATCH 49/74] add mangohud --- technology/applications/gaming/MangoHUD.md | 79 ++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 technology/applications/gaming/MangoHUD.md diff --git a/technology/applications/gaming/MangoHUD.md b/technology/applications/gaming/MangoHUD.md new file mode 100644 index 0000000..2a6a7f4 --- /dev/null +++ b/technology/applications/gaming/MangoHUD.md @@ -0,0 +1,79 @@ +--- +obj: application +repo: https://github.com/flightlessmango/MangoHud +arch-wiki: https://wiki.archlinux.org/title/MangoHud +--- + +# MangoHUD +MangoHud is a Vulkan and OpenGL overlay for monitoring system performance while inside applications and to record metrics for benchmarking. + +## Configuration +MangoHud is configured via the following files, which are read in the following order: + +- `$XDG_CONFIG_HOME/MangoHud/MangoHud.conf` +- `$XDG_CONFIG_HOME/MangoHud/APPLICATION-NAME.conf` (case-sensitive) +- `$XDG_CONFIG_HOME/MangoHud/wine-APPLICATION-NAME.conf` (for Wine applications, case-sensitive, without the .exe extension) +- `./MangoHud.conf` +- `$MANGOHUD_CONFIGFILE` (via environment variables) + +> Tip: An example configuration file with comments can be found in the project's repository. + +## Usage +### Keyboard commands +- `RShift+F12` – Toggle overlay +- `RShift+F11` – Change overlay position +- `RShift+F10` – Toggle preset +- `LShift+F2` – Toggle logging +- `LShift+F4` – Reload config + +### Test configuration +Verify if the program has been setup correctly: + +``` +$ mangohud glxgears +$ mangohud vkcube +``` + +### Run a single game +To run a game with MangoHud start it like this: + +``` +$ mangohud game +``` + +### Dynamic hooking +Certain applications may require a special type of hooking, which can be specified via the `--dlsym` parameter or the `MANGOHUD_DLSYM` environment variable: + +``` +$ mangohud --dlsym game +``` + +### Use with GameMode +To launch a game with both MangoHud and GameMode, chain the two commands into a single one, like this: + +``` +$ mangohud gamemoderun game +``` + +### Run a single steam game +To make Steam start a game with MangoHud, right click the game in the Library, select Properties..., then in the Launch Options text box enter: + +``` +mangohud %command% +``` + +### Run Steam with MangoHud +To avoid having to change launch options for all games, you may launch Steam directly with MangoHud: + +``` +$ mangohud steam-runtime +``` + +MangoHud will detect Steam and will avoid loading itself until a game is launched. + +### Enable for all Vulkan games +To make MangoHud automatically launch with all Vulkan games, it is possible to set the following environment variable: + +``` +MANGOHUD=1 +``` From c12fdfc9d516b7e7f1c75c018cc943f7efdb4a48 Mon Sep 17 00:00:00 2001 From: JMARyA <jmarya@hydrar.de> Date: Thu, 5 Jun 2025 10:56:23 +0200 Subject: [PATCH 50/74] add uv --- technology/applications/development/uv.md | 238 ++++++++++++++++++++++ 1 file changed, 238 insertions(+) create mode 100644 technology/applications/development/uv.md diff --git a/technology/applications/development/uv.md b/technology/applications/development/uv.md new file mode 100644 index 0000000..d197432 --- /dev/null +++ b/technology/applications/development/uv.md @@ -0,0 +1,238 @@ +--- +obj: application +repo: https://github.com/astral-sh/uv +website: https://docs.astral.sh/uv +rev: 2025-06-05 +--- + +# 🚀 `uv` – Python Package and Project Manager +`uv` is a high-performance Python package manager and project toolchain, written in Rust. It consolidates functionalities from multiple tools into a single, fast, and efficient interface, aiming to replace `pip`, `pipx`, `poetry`, `pyenv`, `virtualenv`, `pip-tools`, `twine`, and more. + +## 🔧 Key Features + +* **Unified Tooling:** Combines functionalities of multiple tools into one. +* **Blazing Fast:** 10–100x faster than `pip`. +* **Cross-Platform:** Supports macOS, Linux, and Windows. +* **Minimal Dependencies:** Single binary with no external dependencies. +* **Comprehensive Project Management:** Handles `pyproject.toml`, lockfiles, and more. +* **Python Version Management:** Install and manage multiple Python versions. +* **Tool Installation:** Install and run Python-based tools like `ruff`, `black`, etc. +* **Script Execution:** Run standalone Python scripts with inline dependencies. + +## ⚙️ Usage + +### Python Version Management + +* **Install Python Versions:** + + ```bash + uv python install 3.10.7 + ``` + +* **List Installed Versions:** + + ```bash + uv python list + ``` + +* **Pin Python Version for Project:** + + ```bash + uv python pin 3.10.7 + ``` + +* **Uninstall Python Version:** + + ```bash + uv python uninstall 3.10.7 + ``` + +### Virtual Environments + +* **Create a Virtual Environment:** + + ```bash + uv venv + ``` + +* **Create with Specific Python Version:** + + ```bash + uv venv --python 3.10 + ``` + +* **Activate the Environment:** + + ```bash + source .venv/bin/activate # macOS/Linux + .venv\Scripts\activate # Windows + ``` + +* **Install Dependencies:** + + ```bash + uv pip install -r requirements.txt + ``` + +* **Freeze Installed Packages:** + + ```bash + uv pip freeze > requirements.txt + ``` + +### Project Management + +* **Initialize a New Project:** + + ```bash + uv init my-project + ``` + +* **Add a Dependency:** + + ```bash + uv add requests + ``` + +* **Remove a Dependency:** + + ```bash + uv remove requests + ``` + +* **Sync Dependencies:** + + ```bash + uv sync + ``` + +* **Generate Lockfile:** + + ```bash + uv lock + ``` + +* **Run Project Scripts:** + + ```bash + uv run script.py + ``` + +* **Build Project:** + + ```bash + uv build + ``` + +* **Publish Project:** + + ```bash + uv publish + ``` + +### Tool Management + +* **Install a Tool:** + + ```bash + uv tool install black + ``` + +* **Uninstall a Tool:** + + ```bash + uv tool uninstall black + ``` + +* **Run a Tool:** + + ```bash + uv tool run black . + ``` + +* **List Installed Tools:** + + ```bash + uv tool list + ``` + + +### Running Python Scripts with Inline Dependencies +#### **Add Inline Metadata to Your Script** +To begin, you'll need to add metadata to your Python script to specify the required dependencies and Python version. This can be done using the `uv add --script` command: + +```bash +uv add --script your_script.py 'requests' 'numpy' +``` + +This command will modify your script to include a special comment block at the top, indicating the dependencies: + +```python +# /// script +# requires-python = ">=3.12" +# dependencies = [ +# "requests", +# "numpy", +# ] +# /// +``` + +#### **Make the Script Executable** +To run your script directly from the command line, add a shebang line at the very top of your script: + +```python +#!/usr/bin/env -S uv run --script +``` + +Ensure the script is executable: + +```bash +chmod +x your_script.py +``` + +#### **Run the Script** +Now, you can execute your script directly: +```bash +./your_script.py +``` + +The first time you run it, `uv` will create an isolated virtual environment, install the specified dependencies, and execute the script. On subsequent runs, the environment is cached, leading to near-instant execution times . + +## 📦 Compatibility with Existing Tools +`uv` is designed to be compatible with existing Python tools and workflows: + +* **`pyproject.toml` Support:** Fully supports PEP 621-compliant `pyproject.toml` files. +* **`requirements.txt` Compatibility:** Works seamlessly with `requirements.txt` files. +* **`pip` Interface:** Provides a familiar `pip`-like interface for package management. +* **`pipx` Replacement:** Can install and run Python-based tools globally, replacing `pipx`. +* **`pyenv` Alternative:** Manages multiple Python versions without the need for `pyenv`. + +## 🧪 Example +Here's a typical workflow using `uv`: + +```bash +# Initialize a new project +uv init my-project + +# Navigate into the project directory +cd my-project + +# Create a virtual environment +uv venv + +# Activate the environment +source .venv/bin/activate # macOS/Linux +.venv\Scripts\activate # Windows + +# Add dependencies +uv add requests + +# Generate lockfile +uv lock + +# Install dependencies +uv sync + +# Run the project script +uv run script.py +``` From ecb2d9b3198fe966c4432b9abcfde1137f13909f Mon Sep 17 00:00:00 2001 From: JMARyA <jmarya@hydrar.de> Date: Mon, 9 Jun 2025 00:39:02 +0200 Subject: [PATCH 51/74] fix --- technology/files/MIME.md | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/technology/files/MIME.md b/technology/files/MIME.md index 1364534..da46b57 100644 --- a/technology/files/MIME.md +++ b/technology/files/MIME.md @@ -3,6 +3,7 @@ obj: concept --- # MIME Type + A media type (also known as a MIME type) is a two-part identifier for file formats and format contents transmitted on the Internet. The Internet Assigned Numbers Authority (IANA) is the official authority for the standardization and publication of these classifications. Media types were originally defined in Request for Comments RFC 2045 (MIME) Part One: Format of Internet Message Bodies (Nov 1996) in November 1996 as a part of MIME (Multipurpose Internet Mail Extensions) specification, for denoting type of [email](../internet/eMail.md) message content and attachments; hence the original name, MIME type. Media types are also used by other internet protocols such as [HTTP](../internet/HTTP.md) and document file formats such as [HTML](../internet/HTML.md), for similar purposes. A list of supported MIME Types can be found at `/etc/mime.types` @@ -22,7 +23,9 @@ A subtype typically consists of a media format, but it may or must also contain Types, subtypes, and parameter names are case-insensitive. Parameter values are usually case-sensitive, but may be interpreted in a case-insensitive fashion depending on the intended use. ## Common MIME Types Files + ### Application + | MIME Type | Extensions | Description | | ------------------------------------------------- | -------------------------------------------------- | -------------------------------------------------------- | | `application/epub+zip` | `.epub` | Electronic Publication (eBook) | @@ -73,6 +76,7 @@ Types, subtypes, and parameter names are case-insensitive. Parameter values are | `application/yaml` | `.yaml`, `.yml` | [YAML](YAML.md) | ### Audio + | MIME Type | Extensions | Description | | ----------------- | --------------- | ----------------------------------- | | `audio/aac` | `.adts`, `.aac` | AAC Audio | @@ -89,6 +93,7 @@ Types, subtypes, and parameter names are case-insensitive. Parameter values are | `audio/x-mpegurl` | `.m3u`, `.m3u8` | [Playlist File](media/m3u.md) | ### Font + | MIME Type | Extensions | Description | | ----------- | ---------- | -------------------- | | `font/ttf` | `.ttf` | TrueType Font | @@ -96,6 +101,7 @@ Types, subtypes, and parameter names are case-insensitive. Parameter values are | `font/woff` | `.woff` | Web Open Font Format | ### Image + | MIME Type | Extensions | Description | | --------------- | --------------- | -------------------------------------------------------- | | `image/heif` | `.heif` | HEIF Image | @@ -112,6 +118,7 @@ Types, subtypes, and parameter names are case-insensitive. Parameter values are | `image/x-xcf` | `.xcf` | XCF Image ([GIMP](../applications/media/images/GIMP.md)) | ### Message + | MIME Type | Extensions | Description | | ------------------------- | ---------- | -------------------------------------------- | | `message/delivery-status` | - | - | @@ -120,12 +127,14 @@ Types, subtypes, and parameter names are case-insensitive. Parameter values are | `message/rfc822` | `.eml` | [eMail Message](Electronic%20Mail%20File.md) | ### Model + | MIME Type | Extensions | Description | | ------------ | ------------------------ | ----------- | | `model/mesh` | `.msh`, `.mesh`, `.silo` | 3D Mesh | | `model/obj` | `.obj` | 3D Object | ### Multipart + | MIME Type | Extensions | Description | | --------------------- | ---------- | ----------- | | `multipart/digest` | - | - | @@ -134,6 +143,7 @@ Types, subtypes, and parameter names are case-insensitive. Parameter values are | `multipart/parallel` | - | - | ### Text + | MIME Type | Extensions | Description | | ---------------- | ------------------------------------------------ | --------------------------------------------------------------------------------------- | | `text/calendar` | `.ics` | [Calendar](iCalendar.md) | @@ -145,7 +155,7 @@ Types, subtypes, and parameter names are case-insensitive. Parameter values are | `text/markdown` | `.markdown`, `.md` | [Markdown](Markdown.md) | | `text/plain` | `.txt`, `.text`, `.conf` | Plain Text | | `text/plain` | `.asc` | [ASCII](ASCII.md) (Armored) File | -| `text/plain` | `.log` | [Log Files](../dev/Log) | +| `text/plain` | `.log` | [Log Files](../dev/Log.md) | | `text/plain` | `.diff` | Diff File ([diff](../applications/cli/diff.md) / [patch](../applications/cli/patch.md)) | | `text/plain` | `.lrc` | [LRC](LRC.md) (Lyrics) File | | `text/plain` | `.nfo` | Information File | @@ -157,6 +167,7 @@ Types, subtypes, and parameter names are case-insensitive. Parameter values are | `text/uri-list` | `.uri`, `.uris`, `.urls` | List with [URLs](../internet/URL.md) | ### Video + | MIME Type | Extensions | Description | | ----------------- | -------------- | ----------------------------- | | `video/AV1` | - | [AV1](media/video/AV1.md) | From 0d26df997e4d1d28273a124faf9cc8de7120e034 Mon Sep 17 00:00:00 2001 From: JMARyA <jmarya@hydrar.de> Date: Wed, 11 Jun 2025 08:09:09 +0200 Subject: [PATCH 52/74] add surrealdb --- .../applications/development/SurrealDB.md | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 technology/applications/development/SurrealDB.md diff --git a/technology/applications/development/SurrealDB.md b/technology/applications/development/SurrealDB.md new file mode 100644 index 0000000..8606be9 --- /dev/null +++ b/technology/applications/development/SurrealDB.md @@ -0,0 +1,49 @@ +--- +obj: application +website: https://surrealdb.com +repo: https://github.com/surrealdb/surrealdb +--- + +# SurrealDB +SurrealDB is a powerful, cloud-native, multi-model database built for modern application development. It supports relational, document, graph, vector, and real-time data access, all via a unified SQL-like query language called SurrealQL. There is also a GUI called Surrealist. + +## Multi-Model Support +- **Relational**: Traditional table structure with foreign key-like linking. +- **Document**: JSON-based records with schema-less flexibility. +- **Graph**: Native support for linked data using edges and nodes. +- **Vector**: Built-in similarity search for AI/ML use cases. +- **Real-time**: Subscriptions and change feeds. +- **Time-Series & Search**: Native support for time-ordered and full-text queries. + +## SurrealQL +SurrealQL blends the familiarity of SQL with document/graph features. + +```sql +-- Create a user +CREATE user:john SET name = 'John Doe', email = 'john@example.com'; + +-- Read a record +SELECT * FROM user:john; + +-- Create a relationship (graph) +RELATE user:john->friend->user:jane; + +-- Search by text +SELECT * FROM article WHERE content CONTAINS 'database'; + +-- Vector similarity search +SELECT * FROM embeddings WHERE vector <-> [0.1, 0.2, 0.3] LIMIT 3; +``` + +## Compose + +```yml +services: + surrealdb: + ports: + - 80:8000 + volumes: + - /local-dir:/container-dir + image: surrealdb/surrealdb:latest + command: start --user root --pass root rocksdb:/container-dir/mydatabase.db +``` From 49156024e8104e68f6e2eb0ab40566f766093173 Mon Sep 17 00:00:00 2001 From: JMARyA <jmarya@hydrar.de> Date: Thu, 12 Jun 2025 22:55:59 +0200 Subject: [PATCH 53/74] update rust: add facet --- technology/dev/programming/languages/Rust.md | 1 + 1 file changed, 1 insertion(+) diff --git a/technology/dev/programming/languages/Rust.md b/technology/dev/programming/languages/Rust.md index 27ed117..5f83ce7 100644 --- a/technology/dev/programming/languages/Rust.md +++ b/technology/dev/programming/languages/Rust.md @@ -1022,6 +1022,7 @@ Currently, all supported targets follow the assembly code syntax used by LLVM's - [json-patch](https://lib.rs/crates/json-patch): RFC 6902, JavaScript Object Notation (JSON) Patch - [rss](https://lib.rs/crates/rss): Library for serializing the RSS web content syndication format - [postcard](https://lib.rs/crates/postcard): A no_std + serde compatible message library for Rust +- [facet](https://lib.rs/crates/facet): facet provides reflection for Rust: it gives types a SHAPE associated const with details on the layout, fields, doc comments, attributes, etc. It can be used for many things, from (de)serialization to pretty-printing, rich debuggers, CLI parsing, reflection in templating engines, code generation, etc. ### Encoding - [hex](https://lib.rs/crates/hex): Encoding and decoding data into/from hexadecimal representation From 67b453216b42c9f1968fefb2fe4149b7d5b08411 Mon Sep 17 00:00:00 2001 From: JMARyA <jmarya@hydrar.de> Date: Thu, 12 Jun 2025 23:13:11 +0200 Subject: [PATCH 54/74] add valkey --- technology/applications/development/valkey.md | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 technology/applications/development/valkey.md diff --git a/technology/applications/development/valkey.md b/technology/applications/development/valkey.md new file mode 100644 index 0000000..4cdae5c --- /dev/null +++ b/technology/applications/development/valkey.md @@ -0,0 +1,39 @@ +--- +obj: application +website: https://valkey.io +repo: https://github.com/valkey-io/valkey +--- + +# Valkey + +**Valkey** is a high-performance, in-memory key-value data store and cache that is fully open source and community-driven. It is a hard fork of Redis, created and maintained by the open-source community after concerns arose about Redis' license change (from BSD to SSPL). + +Valkey maintains full compatibility with Redis as of version 7.2 and continues to support core Redis features such as data structures, replication, persistence, clustering, and Lua scripting. Its primary goal is to offer a drop-in replacement with a transparent development process, ensuring long-term freedom and reliability for developers and organizations. + +## Key Features + +- ⚡ **In-Memory Speed**: Extremely fast data access due to in-memory storage. +- 🧱 **Rich Data Structures**: Strings, Lists, Sets, Sorted Sets, Hashes, Bitmaps, HyperLogLogs, Streams. +- 📜 **Lua Scripting**: Supports server-side scripting with Lua for atomic operations. +- 🧩 **Modules Support**: Supports Redis modules (as of 7.2 compatibility). +- 🔁 **Replication**: Built-in master-replica replication for high availability. +- 💾 **Persistence Options**: RDB snapshots and AOF (Append-Only File) for durability. +- 🔄 **Pub/Sub Messaging**: Lightweight publish/subscribe mechanism for message broadcasting. +- 📡 **Clustering**: Built-in support for sharded cluster mode. + +## Compose + +```yaml +version: '3.8' + +services: + valkey: + image: valkey/valkey:latest + container_name: valkey + ports: + - "6379:6379" + volumes: + - ./valkey_data:/data + restart: unless-stopped + command: valkey-server --appendonly yes +``` From 0de7c0c27c53d093c71bb51433fe37ffffb11ede Mon Sep 17 00:00:00 2001 From: JMARyA <jmarya@hydrar.de> Date: Thu, 12 Jun 2025 23:17:04 +0200 Subject: [PATCH 55/74] add owncast --- technology/applications/web/owncast.md | 64 ++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 technology/applications/web/owncast.md diff --git a/technology/applications/web/owncast.md b/technology/applications/web/owncast.md new file mode 100644 index 0000000..68aac29 --- /dev/null +++ b/technology/applications/web/owncast.md @@ -0,0 +1,64 @@ +--- +obj: application +website: https://owncast.online +repo: https://github.com/owncast/owncast +--- + +# ownCast + +**Owncast** is an open-source, self-hosted live video and web chat server. It allows anyone to run their own streaming platform similar to Twitch or YouTube Live — without relying on centralized services. Whether you're streaming games, music, art, or hosting online events, Owncast provides you with full control over your content and audience experience. + +## 🚀 Key Features + +* **Live Video Streaming** + Stream using standard broadcasting software like OBS Studio, directly to your Owncast server using RTMP. + +* **Integrated Web Chat** + Built-in, real-time chat with emoji, moderation tools, and custom branding options. + +* **Web Interface** + A responsive, customizable frontend for viewers, including live status, video, chat, and stream details. + +* **Federation** + Supports ActivityPub to interact with Fediverse platforms like Mastodon — followers can get stream notifications and interact directly from their accounts. + +* **Analytics Dashboard** + Provides stream statistics, viewer counts, and chat activity for monitoring performance and engagement. + +* **Custom Branding** + Modify logos, color themes, titles, descriptions, and more for a personalized experience. + +* **Plugins and Integrations** + Extend functionality using community-developed or custom plugins via [owncast/extensions](https://github.com/owncast/extensions). + +## 🎙 Broadcasting to Owncast + +To broadcast: + +1. Open your streaming software (OBS, etc.) +2. Set **Stream URL** to your Owncast server’s RTMP endpoint (e.g., `rtmp://yourdomain.com/live`) +3. Set **Stream Key** to the value configured in Owncast's admin panel +4. Start streaming! + +## ⚙ Configuration + +After setup, visit the **Admin Panel** at `http://yourdomain.com/admin`: + +* Change stream key, server name, description +* Manage chat settings and moderation tools +* Configure federation and stream notifications +* Customize branding and stream appearance + +## Compose + +```yml +version: "3" +services: + owncast: + image: owncast/owncast:latest + ports: + - "8080:8080" + - "1935:1935" + volumes: + - ./data:/app/data +``` From 4d96dd8987799a1a3e356755fc8a9399f5abc1ac Mon Sep 17 00:00:00 2001 From: JMARyA <jmarya@hydrar.de> Date: Fri, 13 Jun 2025 10:10:50 +0200 Subject: [PATCH 56/74] add dioxus --- .../dev/programming/frameworks/Dioxus.md | 229 ++++++++++++++++++ 1 file changed, 229 insertions(+) create mode 100644 technology/dev/programming/frameworks/Dioxus.md diff --git a/technology/dev/programming/frameworks/Dioxus.md b/technology/dev/programming/frameworks/Dioxus.md new file mode 100644 index 0000000..9f77faf --- /dev/null +++ b/technology/dev/programming/frameworks/Dioxus.md @@ -0,0 +1,229 @@ +--- +obj: concept +website: https://dioxuslabs.com +repo: https://github.com/dioxuslabs/dioxus +--- + +# Dioxus +Dioxus is a modern, ergonomic, and high-performance Rust framework for building user interfaces using a Virtual DOM (like React). It supports Web, Desktop, TUI, and Mobile targets using a unified component model. + +## Application +A dioxus app is just a normal rust application. To get started depend on `dioxus` and start with this `main.rs`: + +```rust +use dioxus::prelude::*; + +fn main() { + dioxus::launch(App); +} + +#[component] +pub fn App() -> Element { + rsx! { + p { "Hello World!" } + } +} +``` + +## Components (RSX) + +Dioxus components are Rust functions that return `Element` and use the `rsx!` macro (similar to JSX). The UI is made with HTML and CSS. + +```rust +use dioxus::prelude::*; + +#[component] +fn App() -> Element { + rsx! { + div { + h1 { "Hello, Dioxus!" } + } + } +} +``` + +You can define your own components and take values (Props): + +```rust + +#[component] +fn MyComp(value: String, myevent: EventHandler<MouseEvent>, children: Element) -> Element { + rsx! { + button { + onclick: myevent, + title: value, + {children} + } + } +} + +// Usage +#[component] +fn App() -> Element { + rsx! { + MyComp { + // Event Handler + onclick: move |_| { println!("Clicked"); }, + // Value + title: "my_title", + // children + p { + "Hello World" + } + } + } +} + +``` + +### Event Handler + +Event handling is done inline using closures: + +```rust +rsx!( + button { + onclick: move |_| println!("Button clicked"), + "Click me" + } +) +``` + +Each event handler receives an event struct (e.g., `MouseEvent`, `FormEvent`). + +## Hooks + +Dioxus has a powerful hook system that allows you to manage state, side effects, and asynchronous operations in your components. With these hooks the UI gets automatically reloaded when needed. + +> **Warning**: Always call the hooks in the same order or they will not work correctly. This means no hooks in loops or conditions. + +### `use_signal` + +Creates a reactive value that can be read and updated. When the value changes, the component re-renders. + +```rust +let count = use_signal(|| 0); +rsx! { + button { onclick: move |_| count.set(count() + 1), "Increment" } + p { "Value is {count}" } +} +``` + +### `use_memo` + +Computes a derived value that only re-evaluates when its dependencies change. + +```rust +let doubled = use_memo(|| count() * 2); +``` + +### `use_effect` + +Runs a side effect after the component renders. Useful for operations which should run beside the UI. + +```rust +use_effect(|| { + // Side effect code here +}); +``` + +### `use_resource` + +Manages an asynchronous resource, such as data fetched from an API. + +```rust +let resource = use_resource(|| fetch_data()); +``` + +### `use_drop` + +Registers a callback to be run before the component is removed. Useful for cleaning up side effects. + +```rust +use_drop(|| { + // Cleanup code here +}); +``` + +## Assets +To include assets (like CSS) in our app, you can use the `asset!()` macro. This macro ensures the asset will be included in the final app bundle. + +```rust +static MY_CSS: Asset = asset!("/assets/main.css"); + +fn App() -> Element { + rsx! { + document::Stylesheet { href: MY_CSS } + } +} +``` + +## Routing + +You can have different routes in your app using dioxus router. To use the router enable the `router` feature in the `dioxus` crate. + +**Define the routes**: + +```rust +// All of our routes will be a variant of this Route enum +#[derive(Routable, PartialEq, Clone)] +enum Route { + // if the current location is "/home", render the Home component + #[route("/home")] + Home {}, + // if the current location is "/blog", render the Blog component + #[route("/blog")] + Blog {}, +} + +fn Home() -> Element { + todo!() +} + +fn Blog() -> Element { + todo!() +} +``` + +To use the router and actually render the routes, add it to your main App component: +```rust +fn App() -> Element { + rsx! { + document::Stylesheet { href: asset!("/assets/main.css") } + + // Renders the current route + Router::<Route> {} + } +} +``` + +To move between routes you can either use a `Link` element or the `navigator`: + +```rust +// Link Element +rsx! { + Link { to: Route::Home {}, "Go home!" } +} + +// Navigator +rsx! { + button { + onclick: move |_| { + let nav = navigator(); + + // push + nav.push(Route::Blog {}); + + // replace + nav.replace(Route::Home {}); + + // go back + nav.go_back(); + + // go forward + nav.go_forward(); + }, + "Go somewhere" + } +} +``` From 683e17f76f3f96ac80e2c30b004bb7bb6c332e1b Mon Sep 17 00:00:00 2001 From: JMARyA <jmarya@hydrar.de> Date: Fri, 13 Jun 2025 11:32:52 +0200 Subject: [PATCH 57/74] add bevy --- technology/dev/programming/frameworks/Bevy.md | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 technology/dev/programming/frameworks/Bevy.md diff --git a/technology/dev/programming/frameworks/Bevy.md b/technology/dev/programming/frameworks/Bevy.md new file mode 100644 index 0000000..bc08d6b --- /dev/null +++ b/technology/dev/programming/frameworks/Bevy.md @@ -0,0 +1,42 @@ +--- +obj: concept +website: https://bevyengine.org +repo: https://github.com/bevyengine/bevy +--- + +# Bevy Engine +Bevy is a modern, open-source game engine built in **Rust**. It emphasizes simplicity, modularity, and performance, making it an attractive choice for game developers looking for a data-driven, Entity-Component-System (ECS) architecture combined with modern rendering capabilities. + +## Entity Component System (ECS) + +* **Entity:** Unique identifier representing a game object. +* **Component:** Plain data attached to entities. +* **System:** Logic operating on entities with matching components, executed in parallel where possible. + +This design promotes separation of data and logic, enabling highly efficient, cache-friendly processing. + +## Basic Example + +A simple example creating a window and spawning a 2D sprite: + +```rust +use bevy::prelude::*; + +fn main() { + App::new() + .add_plugins(DefaultPlugins) + .add_startup_system(setup) + .run(); +} + +fn setup(mut commands: Commands, asset_server: Res<AssetServer>) { + // Camera + commands.spawn(Camera2dBundle::default()); + + // Sprite + commands.spawn(SpriteBundle { + texture: asset_server.load("branding/icon.png"), + ..Default::default() + }); +} +``` From 5a461eb9be63e355a5e7fa69f662c63640d29949 Mon Sep 17 00:00:00 2001 From: JMARyA <jmarya@hydrar.de> Date: Fri, 13 Jun 2025 11:33:35 +0200 Subject: [PATCH 58/74] update development --- technology/dev/Development.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/technology/dev/Development.md b/technology/dev/Development.md index caf70f4..90eaa66 100644 --- a/technology/dev/Development.md +++ b/technology/dev/Development.md @@ -1,7 +1,7 @@ --- tags: ["meta"] obj: meta/collection -rev: 2024-06-19 +rev: 2025-06-10 --- # Development @@ -17,6 +17,12 @@ rev: 2024-06-19 - [Flutter](./programming/frameworks/Flutter.md) - [Godot Game Engine](./programming/Godot.md) - [Rocket](./programming/frameworks/Rocket.md) +- [Dioxus](./programming/frameworks/Dioxus.md) +- [Bevy](./programming/frameworks/Bevy.md) ## Tools -- [Git](Git.md) \ No newline at end of file +- [Git](Git.md) +- [Material Icons](./Material%20Icons.md) +- [sops](../tools/sops.md) +- [cargo](../applications/development/cargo.md) +- [uv](../applications/development/uv.md) From b64b47ebd58c8d719e56f6d0ec68a28861c80fc2 Mon Sep 17 00:00:00 2001 From: JMARyA <jmarya@hydrar.de> Date: Sat, 14 Jun 2025 01:51:25 +0200 Subject: [PATCH 59/74] add ntfy --- technology/applications/web/ntfy.md | 673 ++++++++++++++++++++++++++++ 1 file changed, 673 insertions(+) create mode 100644 technology/applications/web/ntfy.md diff --git a/technology/applications/web/ntfy.md b/technology/applications/web/ntfy.md new file mode 100644 index 0000000..381d0c1 --- /dev/null +++ b/technology/applications/web/ntfy.md @@ -0,0 +1,673 @@ +--- +obj: application +website: https://ntfy.sh +repo: https://github.com/binwiederhier/ntfy +--- + +# ntfy +ntfy (pronounced "notify") is a simple HTTP-based pub-sub notification service. With ntfy, you can send notifications to your phone or desktop via scripts from any computer. + +## Publishing +Publishing messages can be done via HTTP PUT/POST or via the ntfy CLI. Topics are created on the fly by subscribing or publishing to them. Because there is no sign-up, **the topic is essentially a password**, so pick something that's not easily guessable. + +Here's an example showing how to publish a simple message using a POST request: + +```sh +# Command line (curl): +curl -d "Backup successful 😀" ntfy.sh/mytopic + +# ntfy CLI +ntfy publish mytopic "Backup successful 😀" +``` + +### Message title +The notification title is typically set to the topic short URL (e.g. `ntfy.sh/mytopic`). To override the title, you can set the `X-Title` header (or any of its aliases: `Title`, `ti`, or `t`). + +```sh +curl -H "X-Title: Dogs are better than cats" -d "Oh my ..." ntfy.sh/controversial +curl -H "Title: Dogs are better than cats" -d "Oh my ..." ntfy.sh/controversial +curl -H "t: Dogs are better than cats" -d "Oh my ..." ntfy.sh/controversial + +ntfy publish \ + -t "Dogs are better than cats" \ + controversial "Oh my ..." +``` + +### Message priority +All messages have a priority, which defines how urgently your phone notifies you. On Android, you can set custom notification sounds and vibration patterns on your phone to map to these priorities. + +The following priorities exist: + +| Priority | ID | Name | Description | +| -------------------- | --- | -------------- | ------------------------------------------------------------------------------------------------------ | +| Max priority | `5` | `max`/`urgent` | Really long vibration bursts, default notification sound with a pop-over notification. | +| High priority | `4` | `high` | Long vibration burst, default notification sound with a pop-over notification. | +| **Default priority** | `3` | `default` | Short default vibration and sound. Default notification behavior. | +| Low priority | `2` | `low` | No vibration or sound. Notification will not visibly show up until notification drawer is pulled down. | +| Min priority | `1` | `min` | No vibration or sound. The notification will be under the fold in "Other notifications". | + +You can set the priority with the header `X-Priority` (or any of its aliases: `Priority`, `prio`, or `p`). + +``` +curl -H "X-Priority: 5" -d "An urgent message" ntfy.sh/phil_alerts +curl -H "Priority: low" -d "Low priority message" ntfy.sh/phil_alerts +curl -H p:4 -d "A high priority message" ntfy.sh/phil_alerts + +ntfy publish \ + -p 5 \ + phil_alerts An urgent message +``` + +## Tags & emojis 🥳 🎉 +You can tag messages with emojis and other relevant strings: + +* **Emojis**: If a tag matches an emoji short code, it'll be converted to an emoji and prepended to title or message. +* **Other tags:** If a tag doesn't match, it will be listed below the notification. + +This feature is useful for things like warnings (⚠️, ️🚨, or 🚩), but also to simply tag messages otherwise (e.g. script names, hostnames, etc.). Use the emoji short code list to figure out what tags can be converted to emojis. +Here's an **excerpt of emojis** I've found very useful in alert messages: + +<table class="remove-md-box"><tr> +<td> + <table><thead><tr><th>Tag</th><th>Emoji</th></tr></thead><tbody> + <tr><td><code>+1</code></td><td>👍</td></tr> + <tr><td><code>partying_face</code></td><td>🥳</td></tr> + <tr><td><code>tada</code></td><td>🎉</td></tr> + <tr><td><code>heavy_check_mark</code></td><td>✔️</td></tr> + <tr><td><code>loudspeaker</code></td><td>📢</td></tr> + <tr><td>...</td><td>...</td></tr> + </tbody></table> +</td> +<td> + <table><thead><tr><th>Tag</th><th>Emoji</th></tr></thead><tbody> + <tr><td><code>-1</code></td><td>👎️</td></tr> + <tr><td><code>warning</code></td><td>⚠️</td></tr> + <tr><td><code>rotating_light</code></td><td>️🚨</td></tr> + <tr><td><code>triangular_flag_on_post</code></td><td>🚩</td></tr> + <tr><td><code>skull</code></td><td>💀</td></tr> + <tr><td>...</td><td>...</td></tr> + </tbody></table> +</td> +<td> + <table><thead><tr><th>Tag</th><th>Emoji</th></tr></thead><tbody> + <tr><td><code>facepalm</code></td><td>🤦</td></tr> + <tr><td><code>no_entry</code></td><td>⛔</td></tr> + <tr><td><code>no_entry_sign</code></td><td>🚫</td></tr> + <tr><td><code>cd</code></td><td>💿</td></tr> + <tr><td><code>computer</code></td><td>💻</td></tr> + <tr><td>...</td><td>...</td></tr> + </tbody></table> +</td> +</tr></table> + +You can set tags with the `X-Tags` header (or any of its aliases: `Tags`, `tag`, or `ta`). Specify multiple tags by separating them with a comma, e.g. `tag1,tag2,tag3`. + +``` +curl -H "X-Tags: warning,mailsrv13,daily-backup" -d "Backup of mailsrv13 failed" ntfy.sh/backups +curl -H "Tags: horse,unicorn" -d "Unicorns are just horses with unique horns" ntfy.sh/backups +curl -H ta:dog -d "Dogs are awesome" ntfy.sh/backups + +ntfy publish \ + --tags=warning,mailsrv13,daily-backup \ + backups "Backup of mailsrv13 failed" +``` + +## Markdown formatting +You can format messages using [Markdown](https://www.markdownguide.org/basic-syntax/) 🤩. That means you can use **bold text**, *italicized text*, links, images, and more. Supported Markdown features (web app only for now): + +- [Emphasis](https://www.markdownguide.org/basic-syntax/#emphasis) such as **bold** (`**bold**`), *italics* (`*italics*`) +- [Links](https://www.markdownguide.org/basic-syntax/#links) (`[some tool](https://ntfy.sh)`) +- [Images](https://www.markdownguide.org/basic-syntax/#images) (`![some image](https://bing.com/logo.png)`) +- [Code blocks](https://www.markdownguide.org/basic-syntax/#code-blocks) (` ```code blocks``` `) and [inline code](https://www.markdownguide.org/basic-syntax/#inline-code) (`` `inline code` ``) +- [Headings](https://www.markdownguide.org/basic-syntax/#headings) (`# headings`, `## headings`, etc.) +- [Lists](https://www.markdownguide.org/basic-syntax/#lists) (`- lists`, `1. lists`, etc.) +- [Blockquotes](https://www.markdownguide.org/basic-syntax/#blockquotes) (`> blockquotes`) +- [Horizontal rules](https://www.markdownguide.org/basic-syntax/#horizontal-rules) (`---`) + +By default, messages sent to ntfy are rendered as plain text. To enable Markdown, set the `X-Markdown` header (or any of its aliases: `Markdown`, or `md`) to `true` (or `1` or `yes`), or set the `Content-Type` header to `text/markdown`. +As of today, **Markdown is only supported in the web app.** Here's an example of how to enable Markdown formatting: + +``` +curl \ + -d "Look ma, **bold text**, *italics*, ..." \ + -H "Markdown: yes" \ + ntfy.sh/mytopic + +ntfy publish \ + --markdown \ + mytopic \ + "Look ma, **bold text**, *italics*, ..." +``` + +## Scheduled delivery +You can delay the delivery of messages and let ntfy send them at a later date. This can be used to send yourself reminders or even to execute commands at a later date (if your subscriber acts on messages). + +Usage is pretty straight forward. You can set the delivery time using the `X-Delay` header (or any of its aliases: `Delay`, `X-At`, `At`, `X-In` or `In`), either by specifying a Unix timestamp (e.g. `1639194738`), a duration (e.g. `30m`, `3h`, `2 days`), or a natural language time string (e.g. `10am`, `8:30pm`, `tomorrow, 3pm`, `Tuesday, 7am`, [and more](https://github.com/olebedev/when)). + +As of today, the minimum delay you can set is **10 seconds** and the maximum delay is **3 days**. This can be configured with the `message-delay-limit` option. + +For the purposes of message caching, scheduled messages are kept in the cache until 12 hours after they were delivered (or whatever the server-side cache duration is set to). For instance, if a message is scheduled +to be delivered in 3 days, it'll remain in the cache for 3 days and 12 hours. Also note that naturally, turning off server-side caching is not possible in combination with this feature. + +``` +curl -H "At: tomorrow, 10am" -d "Good morning" ntfy.sh/hello +curl -H "In: 30min" -d "It's 30 minutes later now" ntfy.sh/reminder +curl -H "Delay: 1639194738" -d "Unix timestamps are awesome" ntfy.sh/itsaunixsystem + +ntfy publish \ + --at="tomorrow, 10am" \ + hello "Good morning" +``` + +Here are a few examples (assuming today's date is **12/10/2021, 9am, Eastern Time Zone**): + +<table class="remove-md-box"><tr> +<td> + <table><thead><tr><th><code>Delay/At/In</code> header</th><th>Message will be delivered at</th><th>Explanation</th></tr></thead><tbody> + <tr><td><code>30m</code></td><td>12/10/2021, 9:<b>30</b>am</td><td>30 minutes from now</td></tr> + <tr><td><code>2 hours</code></td><td>12/10/2021, <b>11:30</b>am</td><td>2 hours from now</td></tr> + <tr><td><code>1 day</code></td><td>12/<b>11</b>/2021, 9am</td><td>24 hours from now</td></tr> + <tr><td><code>10am</code></td><td>12/10/2021, <b>10am</b></td><td>Today at 10am (same day, because it's only 9am)</td></tr> + <tr><td><code>8am</code></td><td>12/<b>11</b>/2021, <b>8am</b></td><td>Tomorrow at 8am (because it's 9am already)</td></tr> + <tr><td><code>1639152000</code></td><td>12/10/2021, 11am (EST)</td><td> Today at 11am (EST)</td></tr> + </tbody></table> +</td> +</tr></table> + +## Webhooks (publish via GET) +In addition to using PUT/POST, you can also send to topics via simple HTTP GET requests. This makes it easy to use a ntfy topic as a [webhook](https://en.wikipedia.org/wiki/Webhook), or if your client has limited HTTP support. + +To send messages via HTTP GET, simply call the `/publish` endpoint (or its aliases `/send` and `/trigger`). Without any arguments, this will send the message `triggered` to the topic. However, you can provide all arguments that are also supported as HTTP headers as URL-encoded arguments. Be sure to check the list of all supported parameters and headers for details. + +For instance, assuming your topic is `mywebhook`, you can simply call `/mywebhook/trigger` to send a message (aka trigger the webhook): + +``` +curl ntfy.sh/mywebhook/trigger + +ntfy trigger mywebhook +``` + +To add a custom message, simply append the `message=` URL parameter. And of course you can set the [message priority](#message-priority), the [message title](#message-title), and [tags](#tags-emojis) as well. +For a full list of possible parameters, check the list of [supported parameters and headers](#list-of-all-parameters). + +Here's an example with a custom message, tags and a priority: + +``` +curl "ntfy.sh/mywebhook/publish?message=Webhook+triggered&priority=high&tags=warning,skull" + +ntfy publish \ + -p 5 --tags=warning,skull \ + mywebhook "Webhook triggered" +``` + +## Message templating +Templating lets you **format a JSON message body into human-friendly message and title text** using [Go templates](https://pkg.go.dev/text/template) (see tutorials [here](https://blog.gopheracademy.com/advent-2017/using-go-templates/), [here](https://www.digitalocean.com/community/tutorials/how-to-use-templates-in-go), and [here](https://developer.hashicorp.com/nomad/tutorials/templates/go-template-syntax)). This is specifically useful when **combined with webhooks** from services such as GitHub, Grafana, or other services that emit JSON webhooks. + +Instead of using a separate bridge program to parse the webhook body into the format ntfy expects, you can include a templated message and/or a templated title which will be populated based on the fields of the webhook body (so long as the webhook body is valid JSON). + +You can enable templating by setting the `X-Template` header (or its aliases `Template` or `tpl`) to `yes` or `1`, or (more appropriately for webhooks) by setting the `?template=yes` query parameter. Then, include templates in your `message` and/or `title`, using the following stanzas (see [Go docs](https://pkg.go.dev/text/template) for detailed syntax): + +* Variables,, e.g. `{{.alert.title}}` or `An error occurred: {{.error.desc}}` +* Conditionals (if/else, e.g. `{{if eq .action "opened"}}..{{else}}..{{end}}`) +* Loops (e.g. `{{range .errors}}..{{end}}`) + +> Info: Please note that the Go templating language is quite terrible. My apologies for using it for this feature. It is the best option for Go-based programs like ntfy. Stay calm and don't harm yourself or others in despair. **You can do it. I believe in you!** + +## Publish as JSON +For some integrations with other tools, adding custom headers to HTTP requests may be tricky or impossible, so ntfy also allows publishing the entire message as JSON in the request body. + +To publish as JSON, simple PUT/POST the JSON object directly to the ntfy root URL. The message format is described below the example. + +Here's an example using most supported parameters. Check the table below for a complete list. The `topic` parameter is the only required one: + +``` +curl ntfy.sh \ + -d '{ + "topic": "mytopic", + "message": "Disk space is low at 5.1 GB", + "title": "Low disk space alert", + "tags": ["warning","cd"], + "priority": 4, + "attach": "https://filesrv.lan/space.jpg", + "filename": "diskspace.jpg", + "click": "https://homecamera.lan/xasds1h2xsSsa/", + "actions": [{ "action": "view", "label": "Admin panel", "url": "https://filesrv.lan/admin" }] + }' +``` + +The JSON message format closely mirrors the format of the message you can consume when you subscribe via the API (see JSON message format for details), but is not exactly identical. +Here's an overview of all the supported fields: + +| Field | Required | Type | Example | Description | +| ---------- | -------- | -------------------------------- | ----------------------------------------- | --------------------------------------------------------------------- | +| `topic` | ✔️ | *string* | `topic1` | Target topic name | +| `message` | - | *string* | `Some message` | Message body; set to `triggered` if empty or not passed | +| `title` | - | *string* | `Some title` | Message title(#message-title) | +| `tags` | - | *string array* | `["tag1","tag2"]` | List of [tags](#tags-emojis) that may or not map to emojis | +| `priority` | - | *int (one of: 1, 2, 3, 4, or 5)* | `4` | Message [priority](#message-priority) with 1=min, 3=default and 5=max | +| `actions` | - | *JSON array* | *(see [action buttons](#action-buttons))* | Custom [user action buttons](#action-buttons) for notifications | +| `click` | - | *URL* | `https://example.com` | Website opened when notification is [clicked](#click-action) | +| `attach` | - | *URL* | `https://example.com/file.jpg` | URL of an attachment, see [attach via URL](#attach-file-from-url) | +| `markdown` | - | *bool* | `true` | Set to true if the `message` is Markdown-formatted | +| `icon` | - | *string* | `https://example.com/icon.png` | URL to use as notification [icon](#icons) | +| `filename` | - | *string* | `file.jpg` | File name of the attachment | +| `delay` | - | *string* | `30min`, `9am` | Timestamp or duration for delayed delivery | +| `email` | - | *e-mail address* | `phil@example.com` | E-mail address for e-mail notifications | +| `call` | - | *phone number or 'yes'* | `+1222334444` or `yes` | Phone number to use for [voice call](#phone-calls) | + +## Action buttons +You can add action buttons to notifications to allow yourself to react to a notification directly. This is incredibly useful and has countless applications. + +You can control your home appliances (open/close garage door, change temperature on thermostat, ...), react to common monitoring alerts (clear logs when disk is full, ...), and many other things. The sky is the limit. + +As of today, the following actions are supported: + +* [`view`](#open-websiteapp): Opens a website or app when the action button is tapped +* [`broadcast`](#send-android-broadcast): Sends an [Android broadcast](https://developer.android.com/guide/components/broadcasts) intent when the action button is tapped (only supported on Android) +* [`http`](#send-http-request): Sends HTTP POST/GET/PUT request when the action button is tapped + +### Defining actions +You can define **up to three user actions** in your notifications, using either of the following methods: + +* In the [`X-Actions` header](#using-a-header), using a simple comma-separated format +* As a [JSON array](#using-a-json-array) in the `actions` key, when [publishing as JSON](#publish-as-json) + +#### Using a header +To define actions using the `X-Actions` header (or any of its aliases: `Actions`, `Action`), use the following format: + +Header format (long) +``` +action=<action1>, label=<label1>, paramN=... [; action=<action2>, label=<label2>, ...] +``` + +Header format (short) +``` +<action1>, <label1>, paramN=... [; <action2>, <label2>, ...] +``` + +Multiple actions are separated by a semicolon (`;`), and key/value pairs are separated by commas (`,`). Values may be quoted with double quotes (`"`) or single quotes (`'`) if the value itself contains commas or semicolons. + +The `action=` and `label=` prefix are optional in all actions, and the `url=` prefix is optional in the `view` and `http` action. The only limitation of this format is that depending on your language/library, UTF-8 characters may not work. If they don't, use the [JSON array format](#using-a-json-array) instead. + +As an example, here's how you can create the above notification using this format. Refer to the [`view` action](#open-websiteapp) and [`http` action](#send-http-request) section for details on the specific actions: + +``` +body='{"temperature": 65}' +curl \ + -d "You left the house. Turn down the A/C?" \ + -H "Actions: view, Open portal, https://home.nest.com/, clear=true; \ + http, Turn down, https://api.nest.com/, body='$body'" \ + ntfy.sh/myhome + +body='{"temperature": 65}' +ntfy publish \ + --actions="view, Open portal, https://home.nest.com/, clear=true; \ + http, Turn down, https://api.nest.com/, body='$body'" \ + myhome \ + "You left the house. Turn down the A/C?" +``` + +#### Using a JSON array +Alternatively, the same actions can be defined as **JSON array**, if the notification is defined as part of the JSON body (see publish as JSON): + +``` +curl ntfy.sh \ + -d '{ + "topic": "myhome", + "message": "You left the house. Turn down the A/C?", + "actions": [ + { + "action": "view", + "label": "Open portal", + "url": "https://home.nest.com/", + "clear": true + }, + { + "action": "http", + "label": "Turn down", + "url": "https://api.nest.com/", + "body": "{\"temperature\": 65}" + } + ] + }' + +ntfy publish \ + --actions '[ + { + "action": "view", + "label": "Open portal", + "url": "https://home.nest.com/", + "clear": true + }, + { + "action": "http", + "label": "Turn down", + "url": "https://api.nest.com/", + "body": "{\"temperature\": 65}" + } + ]' \ + myhome \ + "You left the house. Turn down the A/C?" +``` + +The required/optional fields for each action depend on the type of the action itself. Please refer to [`view` action](#open-websiteapp), [`broadcast` action](#send-android-broadcast), and [`http` action](#send-http-request) for details. + +### Open website/app +The `view` action **opens a website or app when the action button is tapped**, e.g. a browser, a Google Maps location, or even a deep link into Twitter or a show ntfy topic. How exactly the action is handled depends on how Android and your desktop browser treat the links. Normally it'll just open a link in the browser. + +Examples: + +* `http://` or `https://` will open your browser (or an app if it registered for a URL) +* `mailto:` links will open your mail app, e.g. `mailto:phil@example.com` +* `geo:` links will open Google Maps, e.g. `geo:0,0?q=1600+Amphitheatre+Parkway,+Mountain+View,+CA` +* `ntfy://` links will open ntfy (see [ntfy:// links](subscribe/phone.md#ntfy-links)), e.g. `ntfy://ntfy.sh/stats` +* `twitter://` links will open Twitter, e.g. `twitter://user?screen_name=..` +* ... + +Here's an example using the [`X-Actions` header](#using-a-header): + +``` +curl \ + -d "Somebody retweeted your tweet." \ + -H "Actions: view, Open Twitter, https://twitter.com/binwiederhier/status/1467633927951163392" \ +ntfy.sh/myhome + +ntfy publish \ + --actions="view, Open Twitter, https://twitter.com/binwiederhier/status/1467633927951163392" \ + myhome \ + "Somebody retweeted your tweet." +``` + +And the same example using [JSON publishing](#publish-as-json): + +``` +curl ntfy.sh \ + -d '{ + "topic": "myhome", + "message": "Somebody retweeted your tweet.", + "actions": [ + { + "action": "view", + "label": "Open Twitter", + "url": "https://twitter.com/binwiederhier/status/1467633927951163392" + } + ] + }' + +ntfy publish \ + --actions '[ + { + "action": "view", + "label": "Open Twitter", + "url": "https://twitter.com/binwiederhier/status/1467633927951163392" + } + ]' \ + myhome \ + "Somebody retweeted your tweet." +``` + +The `view` action supports the following fields: + +| Field | Required | Type | Default | Example | Description | +| -------- | -------- | --------- | ------- | --------------------- | ------------------------------------------------ | +| `action` | ✔️ | *string* | - | `view` | Action type (**must be `view`**) | +| `label` | ✔️ | *string* | - | `Turn on light` | Label of the action button in the notification | +| `url` | ✔️ | *URL* | - | `https://example.com` | URL to open when action is tapped | +| `clear` | -️ | *boolean* | `false` | `true` | Clear notification after action button is tapped | + +### Send Android broadcast +The `broadcast` action **sends an [Android broadcast](https://developer.android.com/guide/components/broadcasts) intent when the action button is tapped**. This allows integration into automation apps such as [MacroDroid](https://play.google.com/store/apps/details?id=com.arlosoft.macrodroid) or [Tasker](https://play.google.com/store/apps/details?id=net.dinglisch.android.taskerm), which basically means you can do everything your phone is capable of. Examples include taking pictures, launching/killing apps, change device settings, write/read files, etc. + +By default, the intent action **`io.heckel.ntfy.USER_ACTION`** is broadcast, though this can be changed with the `intent` parameter (see below). +To send extras, use the `extras` parameter. Currently, **only string extras are supported**. + +Here's an example using the [`X-Actions` header](#using-a-header): + +``` +curl \ + -d "Your wife requested you send a picture of yourself." \ + -H "Actions: broadcast, Take picture, extras.cmd=pic, extras.camera=front" \ +ntfy.sh/wifey + +ntfy publish \ + --actions="broadcast, Take picture, extras.cmd=pic, extras.camera=front" \ + wifey \ + "Your wife requested you send a picture of yourself." +``` + +And the same example using [JSON publishing](#publish-as-json): + +``` +curl ntfy.sh \ + -d '{ + "topic": "wifey", + "message": "Your wife requested you send a picture of yourself.", + "actions": [ + { + "action": "broadcast", + "label": "Take picture", + "extras": { + "cmd": "pic", + "camera": "front" + } + } + ] + }' + +ntfy publish \ + --actions '[ + { + "action": "broadcast", + "label": "Take picture", + "extras": { + "cmd": "pic", + "camera": "front" + } + } + ]' \ + wifey \ + "Your wife requested you send a picture of yourself." +``` + +The `broadcast` action supports the following fields: + +| Field | Required | Type | Default | Example | Description | +| -------- | -------- | ---------------- | ---------------------------- | ----------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `action` | ✔️ | *string* | - | `broadcast` | Action type (**must be `broadcast`**) | +| `label` | ✔️ | *string* | - | `Turn on light` | Label of the action button in the notification | +| `intent` | -️ | *string* | `io.heckel.ntfy.USER_ACTION` | `com.example.AN_INTENT` | Android intent name, **default is `io.heckel.ntfy.USER_ACTION`** | +| `extras` | -️ | *map of strings* | - | *see above* | Android intent extras. Currently, only string extras are supported. When publishing as JSON, extras are passed as a map. When the simple format is used, use `extras.<param>=<value>`. | +| `clear` | -️ | *boolean* | `false` | `true` | Clear notification after action button is tapped | + +### Send HTTP request +The `http` action **sends a HTTP request when the action button is tapped**. You can use this to trigger REST APIs for whatever systems you have, e.g. opening the garage door, or turning on/off lights. + +By default, this action sends a **POST request** (not GET!), though this can be changed with the `method` parameter. The only required parameter is `url`. Headers can be passed along using the `headers` parameter. + +Here's an example using the [`X-Actions` header](#using-a-header): + +``` +curl \ + -d "Garage door has been open for 15 minutes. Close it?" \ + -H "Actions: http, Close door, https://api.mygarage.lan/, method=PUT, headers.Authorization=Bearer zAzsx1sk.., body={\"action\": \"close\"}" \ + ntfy.sh/myhome + +ntfy publish \ + --actions="http, Close door, https://api.mygarage.lan/, method=PUT, headers.Authorization=Bearer zAzsx1sk.., body={\"action\": \"close\"}" \ + myhome \ + "Garage door has been open for 15 minutes. Close it?" +``` + +And the same example using [JSON publishing](#publish-as-json): + +``` +curl ntfy.sh \ + -d '{ + "topic": "myhome", + "message": "Garage door has been open for 15 minutes. Close it?", + "actions": [ + { + "action": "http", + "label": "Close door", + "url": "https://api.mygarage.lan/", + "method": "PUT", + "headers": { + "Authorization": "Bearer zAzsx1sk.." + }, + "body": "{\"action\": \"close\"}" + } + ] + }' + +ntfy publish \ + --actions '[ + { + "action": "http", + "label": "Close door", + "url": "https://api.mygarage.lan/", + "method": "PUT", + "headers": { + "Authorization": "Bearer zAzsx1sk.." + }, + "body": "{\"action\": \"close\"}" + } + ]' \ + myhome \ + "Garage door has been open for 15 minutes. Close it?" +``` + +The `http` action supports the following fields: + +| Field | Required | Type | Default | Example | Description | +| --------- | -------- | ------------------ | -------- | ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `action` | ✔️ | *string* | - | `http` | Action type (**must be `http`**) | +| `label` | ✔️ | *string* | - | `Open garage door` | Label of the action button in the notification | +| `url` | ✔️ | *string* | - | `https://ntfy.sh/mytopic` | URL to which the HTTP request will be sent | +| `method` | -️ | *GET/POST/PUT/...* | `POST` ⚠️ | `GET` | HTTP method to use for request, **default is POST** ⚠️ | +| `headers` | -️ | *map of strings* | - | *see above* | HTTP headers to pass in request. When publishing as JSON, headers are passed as a map. When the simple format is used, use `headers.<header1>=<value>`. | +| `body` | -️ | *string* | *empty* | `some body, somebody?` | HTTP body | +| `clear` | -️ | *boolean* | `false` | `true` | Clear notification after HTTP request succeeds. If the request fails, the notification is not cleared. | + +## Click action +You can define which URL to open when a notification is clicked. This may be useful if your notification is related to a Zabbix alert or a transaction that you'd like to provide the deep-link for. Tapping the notification will open the web browser (or the app) and open the website. + +To define a click action for the notification, pass a URL as the value of the `X-Click` header (or its alias `Click`). +If you pass a website URL (`http://` or `https://`) the web browser will open. If you pass another URI that can be handled by another app, the responsible app may open. + +Examples: + +* `http://` or `https://` will open your browser (or an app if it registered for a URL) +* `mailto:` links will open your mail app, e.g. `mailto:phil@example.com` +* `geo:` links will open Google Maps, e.g. `geo:0,0?q=1600+Amphitheatre+Parkway,+Mountain+View,+CA` +* `ntfy://` links will open ntfy (see [ntfy:// links](subscribe/phone.md#ntfy-links)), e.g. `ntfy://ntfy.sh/stats` +* `twitter://` links will open Twitter, e.g. `twitter://user?screen_name=..` +* ... + +Here's an example that will open Reddit when the notification is clicked: + +``` +curl \ + -d "New messages on Reddit" \ + -H "Click: https://www.reddit.com/message/messages" \ + ntfy.sh/reddit_alerts + +ntfy publish \ + --click="https://www.reddit.com/message/messages" \ + reddit_alerts "New messages on Reddit" +``` + +## Attachments +You can **send images and other files to your phone** as attachments to a notification. The attachments are then downloaded onto your phone (depending on size and setting automatically), and can be used from the Downloads folder. + +There are two different ways to send attachments: + +* sending [a local file](#attach-local-file) via PUT, e.g. from `~/Flowers/flower.jpg` or `ringtone.mp3` +* or by [passing an external URL](#attach-file-from-a-url) as an attachment, e.g. `https://f-droid.org/F-Droid.apk` + +### Attach local file +To **send a file from your computer** as an attachment, you can send it as the PUT request body. If a message is greater than the maximum message size (4,096 bytes) or consists of non UTF-8 characters, the ntfy server will automatically +detect the mime type and size, and send the message as an attachment file. To send smaller text-only messages or files as attachments, you must pass a filename by passing the `X-Filename` header or query parameter (or any of its aliases `Filename`, `File` or `f`). + +By default, and how ntfy.sh is configured, the **max attachment size is 15 MB** (with 100 MB total per visitor). +Attachments **expire after 3 hours**, which typically is plenty of time for the user to download it, or for the Android app to auto-download it. Please also check out the [other limits below](#limitations). + +Here's an example showing how to upload an image: + +``` +curl \ + -T flower.jpg \ + -H "Filename: flower.jpg" \ + ntfy.sh/flowers + +ntfy publish \ + --file=flower.jpg \ + flowers +``` + +### Attach file from a URL +Instead of sending a local file to your phone, you can use **an external URL** to specify where the attachment is hosted. +This could be a Dropbox link, a file from social media, or any other publicly available URL. Since the files are externally hosted, the expiration or size limits from above do not apply here. + +To attach an external file, simple pass the `X-Attach` header or query parameter (or any of its aliases `Attach` or `a`) to specify the attachment URL. It can be any type of file. + +ntfy will automatically try to derive the file name from the URL (e.g `https://example.com/flower.jpg` will yield a filename `flower.jpg`). To override this filename, you may send the `X-Filename` header or query parameter (or any of its aliases `Filename`, `File` or `f`). + +Here's an example showing how to attach an APK file: + +``` +curl \ + -X POST \ + -H "Attach: https://f-droid.org/F-Droid.apk" \ + ntfy.sh/mydownloads + +ntfy publish \ + --attach="https://f-droid.org/F-Droid.apk" \ + mydownloads +``` + +## Icons +You can include an icon that will appear next to the text of the notification. Simply pass the `X-Icon` header or query parameter (or its alias `Icon`) to specify the URL that the icon is located at. The client will automatically download the icon (unless it is already cached locally, and less than 24 hours old), and show it in the notification. Icons are cached locally in the client until the notification is deleted. **Only JPEG and PNG images are supported at this time**. + +Here's an example showing how to include an icon: + +``` +curl \ + -H "Icon: https://styles.redditmedia.com/t5_32uhe/styles/communityIcon_xnt6chtnr2j21.png" \ + -H "Title: Kodi: Resuming Playback" \ + -H "Tags: arrow_forward" \ + -d "The Wire, S01E01" \ + ntfy.sh/tvshows + +ntfy publish \ + --icon="https://styles.redditmedia.com/t5_32uhe/styles/communityIcon_xnt6chtnr2j21.png" \ + --title="Kodi: Resuming Playback" \ + --tags="arrow_forward" \ + tvshows \ + "The Wire, S01E01" +``` + +## Compose + +```yml +services: + ntfy: + image: binwiederhier/ntfy + container_name: ntfy + command: + - serve + environment: + - TZ=UTC # optional: set desired timezone + user: UID:GID # optional: replace with your own user/group or uid/gid + volumes: + - /var/cache/ntfy:/var/cache/ntfy + - /etc/ntfy:/etc/ntfy + ports: + - 80:80 + healthcheck: # optional: remember to adapt the host:port to your environment + test: ["CMD-SHELL", "wget -q --tries=1 http://localhost:80/v1/health -O - | grep -Eo '\"healthy\"\\s*:\\s*true' || exit 1"] + interval: 60s + timeout: 10s + retries: 3 + start_period: 40s + restart: unless-stopped +``` From 478e1d55558601e17925e31d87074eb05ae70c1a Mon Sep 17 00:00:00 2001 From: JMARyA <jmarya@hydrar.de> Date: Fri, 20 Jun 2025 02:14:30 +0200 Subject: [PATCH 60/74] add fish --- technology/applications/cli/fish.md | 278 ++++++++++++++++++++++++++++ 1 file changed, 278 insertions(+) create mode 100644 technology/applications/cli/fish.md diff --git a/technology/applications/cli/fish.md b/technology/applications/cli/fish.md new file mode 100644 index 0000000..1202d9b --- /dev/null +++ b/technology/applications/cli/fish.md @@ -0,0 +1,278 @@ +--- +obj: application +website: https://fishshell.com +repo: https://github.com/fish-shell/fish-shell +--- + +# fish +fish is a smart and user-friendly command line shell for Linux, macOS, and the rest of the family. + +## Usage +### Abbreviations +To avoid needless typing, a frequently-run command like `git checkout` can be abbreviated to `gco` using the `abbr` command. + +``` +abbr -a gco git checkout +``` + +After entering `gco` and pressing space or enter, a `gco` in command position will turn into `git checkout` in the command line. If you want to use a literal `gco` sometimes, use `ctrl-space`. + +Abbreviations are a lot more powerful than just replacing literal strings. For example you can make going up a number of directories easier with this: + +```fish +function multicd + echo cd (string repeat -n (math (string length -- $argv[1]) - 1) ../) +end +abbr --add dotdot --regex '^\.\.+$' --function multicd +``` + +Now, `..` transforms to `cd ../`, while `...` turns into `cd ../../` and `....` expands to `cd ../../../`. + +The advantage over aliases is that you can see the actual command before using it, add to it or change it, and the actual command will be stored in history. + +### Custom bindings +In addition to the standard bindings listed here, you can also define your own with `bind`: + +``` +# Just clear the commandline on control-c +bind ctrl-c 'commandline -r ""' +``` + +Put `bind` statements into `config.fish` or a function called `fish_user_key_bindings`. + +If you change your mind on a binding and want to go back to fish’s default, you can simply erase it again: + +``` +bind --erase ctrl-c +``` + +### History +After a command has been executed, it is remembered in the history list. Any duplicate history items are automatically removed. By pressing the up and down keys, you can search forwards and backwards in the history. If the current command line is not empty when starting a history search, only the commands containing the string entered into the command line are shown. + +By pressing `alt-up` (`↑`) and `alt-down` (`↓`), a history search is also performed, but instead of searching for a complete commandline, each commandline is broken into separate elements just like it would be before execution, and the history is searched for an element matching that under the cursor. + +For more complicated searches, you can press `ctrl-r` to open a pager that allows you to search the history. It shows a limited number of entries in one page, press `ctrl-r` again to move to the next page and `ctrl-s` to move to the previous page. You can change the text to refine your search. + +History searches are case-insensitive unless the search string contains an uppercase character. You can stop a search to edit your search string by pressing `escape` or `pagedown`. + +Prefixing the commandline with a space will prevent the entire line from being stored in the history. It will still be available for recall until the next command is executed, but will not be stored on disk. This is to allow you to fix misspellings and such. + +The command history is stored in the file `~/.local/share/fish/fish_history` (or `$XDG_DATA_HOME/fish/fish_history` if that variable is set) by default. However, you can set the `fish_history` environment variable to change the name of the history session (resulting in a `<session>_history` file); both before starting the shell and while the shell is running. + +See the `history` command for other manipulations. + +#### Private mode +Fish has a private mode, in which command history will not be written to the history file on disk. To enable it, either set `$fish_private_mode` to a non-empty value, or launch with `fish --private` (or `fish -P` for short). + +If you launch fish with `-P`, it both hides old history and prevents writing history to disk. This is useful to avoid leaking personal information (e.g. for screencasts) or when dealing with sensitive information. + +You can query the variable `fish_private_mode (if test -n "$fish_private_mode" ...)` if you would like to respect the user’s wish for privacy and alter the behavior of your own fish scripts. + +### Directory History +Navigating directories is usually done with the `cd` command, but fish offers some advanced features as well. + +The current working directory can be displayed with the `pwd` command, or the `$PWD` special variable. Usually your prompt already does this. + +Fish automatically keeps a trail of the recent visited directories with `cd` by storing this history in the `dirprev` and `dirnext` variables. + +Several commands are provided to interact with this directory history: + +- `dirh` prints the history +- `cdh` displays a prompt to quickly navigate the history +- `prevd` moves backward through the history. It is bound to `alt-left` (`←`) +- `nextd` moves forward through the history. It is bound to `alt-right` (`→`) + +## Configuration +To store configuration write it to a file called `~/.config/fish/config.fish`. + +`.fish` scripts in `~/.config/fish/conf.d/` are also automatically executed before `config.fish`. + +These files are read on the startup of every shell, whether interactive and/or if they’re login shells. Use `status --is-interactive` and `status --is-login` to do things only in interactive/login shells, respectively. + +## Shell Scripting +### Shebang +Because shell scripts are written in many different languages, they need to carry information about which interpreter should be used to execute them. For this, they are expected to have a first line, the shebang line, which names the interpreter executable. + +A script written in **bash** would need a first line like this: + +``` +#!/bin/bash +``` + +When the shell tells the kernel to execute the file, it will use the interpreter `/bin/bash`. + +For a script written in another language, just replace `/bin/bash` with the interpreter for that language. For example: `/usr/bin/python` for a python script, or `/usr/local/bin/fish` for a fish script, if that is where you have them installed. + +If you want to share your script with others, you might want to use **env** to allow for the interpreter to be installed in other locations. For example: + +``` +#!/usr/bin/env fish +echo Hello from fish $version +``` + +This will call `env`, which then goes through [`PATH`](https://fishshell.com/docs/current/language.html#envvar-PATH) to find a program called “fish”. This makes it work, whether fish is installed in (for example) `/usr/local/bin/fish`, `/usr/bin/fish`, or `~/.local/bin/fish`, as long as that directory is in [`PATH`](https://fishshell.com/docs/current/language.html#envvar-PATH). + +The shebang line is only used when scripts are executed without specifying the interpreter. For functions inside fish or when executing a script with `fish /path/to/script`, a shebang is not required (but it doesn’t hurt!). + +When executing files without an interpreter, fish, like other shells, tries your system shell, typically `/bin/sh`. This is needed because some scripts are shipped without a shebang line. + +### Variables +In Fish, variables are assigned using the `set` command: + +```fish +set name "Alice" +set -g global_var "I'm global" +set -x PATH $PATH /custom/bin # export variable to child processes +``` + +* `-g`: Sets a global variable. +* `-x`: Exports the variable. +* Arrays are space-separated: + +```fish +set colors red green blue +echo $colors[1] # Outputs: red +``` + +### Conditionals + +Fish uses `if`, `else if`, and `else`: + +```fish +set age 20 + +if test $age -ge 18 + echo "You're an adult" +else if test $age -ge 13 + echo "You're a teenager" +else + echo "You're a child" +end +``` + +#### Switch Statements + +Use `switch` for cleaner branching with string values: + +```fish +set lang "rust" + +switch $lang + case rust + echo "You're using Rust!" + case python + echo "Python is cool too." + case '*' + echo "Unknown language" +end +``` + +### Loops + +#### `for` Loop + +```fish +for color in red green blue + echo $color +end +``` + +#### `while` Loop + +```fish +set count 1 +while test $count -le 3 + echo "Count: $count" + set count (math $count + 1) +end +``` + +### Functions + +Define reusable blocks of code with `function`: + +```fish +function greet + echo "Hello, $argv" +end + +greet "World" # Output: Hello, World +``` + +* `$argv` holds all passed arguments. +* `$argv[1]` is the first argument. + +#### Returning Values + +Functions can return more than just a status code. They can return actual output: + +```fish +function get_username + echo "alice" +end + +set user (get_username) +echo $user # Outputs: alice +``` + +For status codes, use `return`: + +```fish +function is_even + if test (math "$argv[1] % 2") -eq 0 + return 0 + else + return 1 + end +end +``` + +#### Events + +Fish supports event-driven scripting using `functions --on-event`: + +```fish +function notify_start --on-event fish_prompt + echo "Shell is ready!" +end +``` + +Events can be fired with the `emit` command, and do not have to be defined before. The names just need to match. For example: + +```fish +function handler --on-event imdone + echo generator is done $argv +end + +function generator + sleep 1 + # The "imdone" is the name of the event + # the rest is the arguments to pass to the handler + emit imdone with $argv +end +``` + +### Tools +Builtins to do a task, like + +- `cd` to change the current directory. +- `echo` or `printf` to produce output. +- `set_color` to colorize output. +- `set` to set, query or erase variables. +- `read` to read input. +- `string` for string manipulation. +- `path` for filtering paths and handling their components. +- `math` does arithmetic. +- `argparse` to make arguments easier to handle. +- `count` to count arguments. +- `type` to find out what sort of thing (command, builtin or function) fish would call, or if it exists at all. +- `test` checks conditions like if a file exists or a string is empty. +- `contains` to see if a list contains an entry. +- `eval` and `source` to run fish code from a string or file. +- `status` to get shell information, like whether it’s interactive or a login shell, or which file it is currently running. +- `abbr` manages Abbreviations. +- `bind` to change bindings. +- `complete` manages completions. +- `commandline` to get or change the commandline contents. +- `fish_config` to easily change fish’s configuration, like the prompt or colorscheme. +- `random` to generate random numbers or pick from a list. From c89e8a287cccadc716404d32e10ef3fadb523846 Mon Sep 17 00:00:00 2001 From: JMARyA <jmarya@hydrar.de> Date: Fri, 20 Jun 2025 02:15:50 +0200 Subject: [PATCH 61/74] update monero --- technology/tools/Monero.md | 123 ++++++++++++++++++++++++++++++++----- 1 file changed, 108 insertions(+), 15 deletions(-) diff --git a/technology/tools/Monero.md b/technology/tools/Monero.md index 9837f61..accfb02 100644 --- a/technology/tools/Monero.md +++ b/technology/tools/Monero.md @@ -1,5 +1,6 @@ --- -website: https://www.getmonero.org/ +website: https://www.getmonero.org +repo: https://github.com/monero-project/monero obj: concept --- @@ -18,19 +19,111 @@ RingCT further improves privacy by concealing transaction amounts. This is achie ### 5. **Dynamic Block Size and Fees** Monero dynamically adjusts block size and fees based on network demand, ensuring scalability and preventing congestion. -## How Monero Works -Monero's privacy features are implemented through a combination of cryptographic techniques. When a user initiates a transaction, the following process occurs: -1. **Ring Signature Generation:** - - The sender's public key is combined with several other public keys from the blockchain to create a ring signature. - - This signature authenticates the transaction without revealing the actual sender. -2. **Stealth Address Generation:** - - The recipient's public address is masked by a one-time stealth address created for the specific transaction. - - This ensures that the recipient's identity remains private. -3. **RingCT Implementation:** - - RingCT obscures the transaction amount, providing an additional layer of privacy. - - It allows for the verification of transaction validity without disclosing specific amounts. -4. **Dynamic Block Size and Fees:** - - Monero adjusts block size and fees dynamically, allowing for scalability and preventing congestion. +## Daemon +`monerod` connects to the Monero Network and acts as a node. + +### Configuration +By default Monero looks for `bitmonero.conf` in Monero data directory. + +To use a specific config file add `--config-file` option: `./monerod --config-file=/etc/monerod.conf` + +``` +# ~/.bitmonero/bitmonero.conf +# +# Configuration file for monerod. For all available options see the MoneroDocs: +# https://docs.getmonero.org/interacting/monerod-reference/ + +# Data directory (blockchain db and indices) +data-dir=~/.bitmonero # Blockchain storage location + +# Optional pruning +#prune-blockchain=1 # Pruning saves 2/3 of disk space w/o degrading functionality but contributes less to the network +#sync-pruned-blocks=1 # Allow downloading pruned blocks instead of prunning them yourself + +# Centralized services +check-updates=disabled # Do not check DNS TXT records for a new version +enable-dns-blocklist=1 # Block known malicious nodes + +# Banlist +#ban-list=/path/to/ban.txt # Local list of peers to ban + +# Log file +log-file=~/.bitmonero +log-level=0 # Minimal logs, WILL NOT log peers or wallets connecting + + +# P2P full node +#p2p-bind-ip=0.0.0.0 # Bind to all interfaces (the default) +#p2p-bind-port=18080 # Bind to default port +#no-igd=1 # Disable UPnP port mapping + +# RPC open node +#public-node=1 # Advertise to other users they can use this node for connecting their wallets +rpc-restricted-bind-ip=0.0.0.0 # Bind to all interfaces (the Open Node) +rpc-restricted-bind-port=18089 # Bind to a new RESTRICTED port (the Open Node) + +# RPC TLS +rpc-ssl=autodetect # Use TLS if client wallet supports it; [enabled|disabled|(default)autodetect] + +# ZMQ +#zmq-rpc-bind-ip=127.0.0.1 # Default 127.0.0.1 +#zmq-rpc-bind-port=18082 # Default 18082 +zmq-pub=tcp://127.0.0.1:18083 # ZMQ pub +#no-zmq=1 # Disable ZMQ RPC server + +# Mempool size +max-txpool-weight=2684354560 # Maximum unconfirmed transactions pool size in bytes (here ~2.5GB, default ~618MB) + +# Database sync mode +#db-sync-mode=safe:sync # Slow but reliable db writes + +# Network limits +out-peers=12 # Default 12 +in-peers=48 # The default is unlimited; we prefer to put a cap on this + +limit-rate-up=1048576 # 1048576 kB/s == 1GB/s; a raise from default 2048 kB/s; contribute more to p2p network +limit-rate-down=1048576 # 1048576 kB/s == 1GB/s; a raise from default 8192 kB/s; allow for faster initial sync + +# Tor/I2P: broadcast transactions originating from connected wallets over Tor/I2P (does not concern relayed transactions) +#tx-proxy=i2p,127.0.0.1:4447,12,disable_noise # I2P +#tx-proxy=tor,127.0.0.1:9050,12,disable_noise # Tor + +# Tor/I2P: tell monerod your onion address so it can be advertised on P2P network +#anonymous-inbound=PASTE_YOUR_I2P_HOSTNAME,127.0.0.1:18085,24 # I2P +#anonymous-inbound=PASTE_YOUR_ONION_HOSTNAME:18084,127.0.0.1:18084,24 # Tor + +# Tor: be forgiving to connecting wallets +disable-rpc-ban=1 +``` + +### i2p +Monero should be used via [i2p](../internet/I2P.md) in order to combat networking attacks. + +First setup two b32 addresses: + +```ini +[monero-node] +type = server +host = 127.0.0.1 +# Anonymous inbound port +port = 18085 +inport = 0 +keys = monero-mainnet.dat + +[monero-rpc] +type = server +host = 127.0.0.1 +# Restricted RPC port +port = 18089 +keys = monero-mainnet.dat +``` + +Then set these in the config: + +``` +anonymous-inbound=yourlongb32i2paddress.b32.i2p,127.0.0.1:18085 +tx-proxy=i2p,127.0.0.1:4447,disable_noise +``` ## monero-cli-wallet `monero-wallet-cli` is the wallet software shipped in the Monero archives. It is a console program, and manages an account. @@ -43,7 +136,7 @@ monero-wallet-cli --generate-new-wallet <file> Use existing wallet: ```shell monero-wallet-cli --wallet-file <file> --password-file <passwd> -```` +``` ### Commands | Command | Description | From cca25658e204d84cde6d8dc0f3c421c7f3a9140a Mon Sep 17 00:00:00 2001 From: JMARyA <jmarya@hydrar.de> Date: Sat, 21 Jun 2025 00:36:06 +0200 Subject: [PATCH 62/74] add restic --- technology/applications/backup/restic.md | 607 +++++++++++++++++++++++ 1 file changed, 607 insertions(+) create mode 100644 technology/applications/backup/restic.md diff --git a/technology/applications/backup/restic.md b/technology/applications/backup/restic.md new file mode 100644 index 0000000..929bcd5 --- /dev/null +++ b/technology/applications/backup/restic.md @@ -0,0 +1,607 @@ +--- +obj: application +website: https://restic.net +repo: https://github.com/restic/restic +--- + +# restic +restic is a backup program which allows saving multiple revisions of files and directories in an encrypted repository stored on different backends. + +## Usage +Usage: `restic [command] [options]` + +### Global Options + +| Option | Environment | Description | +| ---------------------------------- | -------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | +| `--cacert` file | `$RESTIC_CACERT` | file to load root certificates from (default: use system certificates or `$RESTIC_CACERT`) | +| `--cache-dir` directory | | set the cache directory. (default: use system default cache directory) | +| `--cleanup-cache` | | auto remove old cache directories | +| `--compression` mode | `$RESTIC_COMPRESSION` | compression mode (only available for repository format version 2), one of (auto/off/max) (default: `$RESTIC_COMPRESSION`) (default auto) | +| `-h`, `--help` | | help for restic | +| `--http-user-agent` string | | set a http user agent for outgoing http requests | +| `--insecure-no-password` | | use an empty password for the repository, must be passed to every restic command (insecure) | +| `--insecure-tls` | | skip TLS certificate verification when connecting to the repository (insecure) | +| `--json` | | set output mode to JSON for commands that support it | +| `--key-hint` key | `$RESTIC_KEY_HINT` | key ID of key to try decrypting first (default: `$RESTIC_KEY_HINT`) | +| `--limit-download` rate | | limits downloads to a maximum rate in KiB/s. (default: unlimited) | +| `--limit-upload` rate | | limits uploads to a maximum rate in KiB/s. (default: unlimited) | +| `--no-cache` | | do not use a local cache | +| `--no-extra-verify` | | skip additional verification of data before upload (see documentation) | +| `--no-lock` | | do not lock the repository, this allows some operations on read-only repositories | +| `-o`, `--option` key=value | | set extended option (key=value, can be specified multiple times) | +| `--pack-size` size | `$RESTIC_PACK_SIZE` | set target pack size in MiB, created pack files may be larger (default: `$RESTIC_PACK_SIZE`) | +| `--password-command` command | `$RESTIC_PASSWORD_COMMAND` | shell command to obtain the repository password from (default: `$RESTIC_PASSWORD_COMMAND`) | +| `-p`, `--password-file` file | `$RESTIC_PASSWORD_FILE` | file to read the repository password from (default: `$RESTIC_PASSWORD_FILE`) | +| `-q`, `--quiet` | | do not output comprehensive progress report | +| `-r`, `--repo` repository | `$RESTIC_REPOSITORY` | repository to backup to or restore from (default: `$RESTIC_REPOSITORY`) | +| `--repository-file` file | `$RESTIC_REPOSITORY_FILE` | file to read the repository location from (default: `$RESTIC_REPOSITORY_FILE`) | +| `--retry-lock` duration | | retry to lock the repository if it is already locked, takes a value like 5m or 2h (default: no retries) | +| `--stuck-request-timeout` duration | | duration after which to retry stuck requests (default 5m0s) | +| `--tls-client-cert` file | `$RESTIC_TLS_CLIENT_CERT` | path to a file containing PEM encoded TLS client certificate and private key (default: `$RESTIC_TLS_CLIENT_CERT`) | +| `-v`, `--verbose` | | be verbose (specify multiple times or a level using --verbose=n, max level/times is 2) | + + +### backup + +The "backup" command creates a new snapshot and saves the files and directories given as the arguments. + +Exit Codes: +- Exit status is 0 if the command was successful. +- Exit status is 1 if there was a fatal error (no snapshot created). +- Exit status is 3 if some source data could not be read (incomplete snapshot created). +- Exit status is 10 if the repository does not exist. +- Exit status is 11 if the repository is already locked. +- Exit status is 12 if the password is incorrect. + +Usage: `restic backup [flags] [FILE/DIR] ...` + +| Option | Environment | Description | +| ---------------------------------------- | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `-n`, `--dry-run` | | do not upload or write any data, just show what would be done | +| `-e`, `--exclude pattern` | | exclude a pattern (can be specified multiple times) | +| `--exclude-caches` | | excludes cache directories that are marked with a CACHEDIR.TAG file. See https://bford.info/cachedir/ for the Cache Directory Tagging Standard | +| `--exclude-file file` | | read exclude patterns from a file (can be specified multiple times) | +| `--exclude-if-present filename[:header]` | | takes `filename[:header]`, exclude contents of directories containing filename (except filename itself) if header of that file is as provided (can be specified multiple times) | +| `--exclude-larger-than size` | | max size of the files to be backed up (allowed suffixes: k/K, m/M, g/G, t/T) | +| `--files-from file` | | read the files to backup from file (can be combined with file args; can be specified multiple times) | +| `--files-from-raw file` | | read the files to backup from file (can be combined with file args; can be specified multiple times) | +| `--files-from-verbatim file` | | read the files to backup from file (can be combined with file args; can be specified multiple times) | +| `-f`, `--force` | | force re-reading the source files/directories (overrides the "parent" flag) | +| `-g`, `--group-by group` | | group snapshots by host, paths and/or tags, separated by comma (disable grouping with '') (default host,paths) | +| `-H`, `--host hostname` | `$RESTIC_HOST` | set the hostname for the snapshot manually. To prevent an expensive rescan use the "parent" flag | +| `--iexclude pattern` | | same as --exclude pattern but ignores the casing of filenames | +| `--iexclude-file file` | | same as --exclude-file but ignores casing of filenames in patterns | +| `--ignore-ctime` | | ignore ctime changes when checking for modified files | +| `--ignore-inode` | | ignore inode number and ctime changes when checking for modified files | +| `--no-scan` | | do not run scanner to estimate size of backup | +| `-x`, `--one-file-system` | | exclude other file systems, don't cross filesystem boundaries and subvolumes | +| `--parent snapshot` | | use this parent snapshot (default: latest snapshot in the group determined by --group-by and not newer than the timestamp determined by --time) | +| `--read-concurrency n` | `$RESTIC_READ_CONCURRENCY` | read n files concurrently (default: `$RESTIC_READ_CONCURRENCY` or 2) | +| `--skip-if-unchanged` | | skip snapshot creation if identical to parent snapshot | +| `--stdin` | | read backup from stdin | +| `--stdin-filename filename` | | filename to use when reading from stdin (default "stdin") | +| `--stdin-from-command` | | interpret arguments as command to execute and store its stdout | +| `--tag tags` | | add tags for the new snapshot in the format `tag[,tag,...]` (can be specified multiple times) (default []) | +| `--time time` | | time of the backup (ex. '2012-11-01 22:08:41') (default: now) | +| `--with-atime` | | store the atime for all files and directories | + +### cache + +The "cache" command allows listing and cleaning local cache directories. + +Exit Codes: +- Exit status is 0 if the command was successful. +- Exit status is 1 if there was any error. + +Usage: `restic cache [flags]` + +| Option | Environment | Description | +| ---------------- | ----------- | ----------------------------------------------------------------------- | +| `--cleanup` | | remove old cache directories | +| `--max-age days` | | max age in days for cache directories to be considered old (default 30) | +| `--no-size` | | do not output the size of the cache directories | + +### cat + +The "cat" command is used to print internal objects to stdout. + +Exit Codes: +- Exit status is 0 if the command was successful. +- Exit status is 1 if there was any error. +- Exit status is 10 if the repository does not exist. +- Exit status is 11 if the repository is already locked. +- Exit status is 12 if the password is incorrect. + +Usage: `restic cat [flags] [masterkey|config|pack ID|blob ID|snapshot ID|index ID|key ID|lock ID|tree snapshot:subfolder]` + +### check + +The "check" command tests the repository for errors and reports any errors it finds. It can also be used to read all data and therefore simulate a restore. + +By default, the "check" command will always load all data directly from the repository and not use a local cache. + +Exit Codes: +- Exit status is 0 if the command was successful. +- Exit status is 1 if there was any error. +- Exit status is 10 if the repository does not exist. +- Exit status is 11 if the repository is already locked. +- Exit status is 12 if the password is incorrect. + +Usage: `restic check [flags]` + +| Option | Description | +| --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `--read-data` | read all data blobs | +| `--read-data-subset subset` | read a subset of data packs, specified as 'n/t' for specific part, or either 'x%' or 'x.y%' or a size in bytes with suffixes k/K, m/M, g/G, t/T for a random subset | +| `--with-cache` | use existing cache, only read uncached data from repository | + + +### copy + +The "copy" command copies one or more snapshots from one repository to another. + +> **NOTE**: This process will have to both download (read) and upload (write) the entire snapshot(s) due to the different encryption keys used in the source and destination repositories. This *may incur higher bandwidth usage and costs* than expected during normal backup runs. + +> **NOTE**: The copying process does not re-chunk files, which may break deduplication between the files copied and files already stored in the destination repository. This means that copied files, which existed in both the source and destination repository, *may occupy up to twice their space* in the destination repository. This can be mitigated by the `--copy-chunker-params` option when initializing a new destination repository using the "init" command. + +Exit Codes: +- Exit status is 0 if the command was successful. +- Exit status is 1 if there was any error. +- Exit status is 10 if the repository does not exist. +- Exit status is 11 if the repository is already locked. +- Exit status is 12 if the password is incorrect. + +Usage: `restic copy [flags] [snapshotID ...]` + +| Option | Environment | Description | +| --------------------------------- | ------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ | +| `--from-insecure-no-password` | | use an empty password for the source repository (insecure) | +| `--from-key-hint string` | `$RESTIC_FROM_KEY_HINT` | key ID of key to try decrypting the source repository first (default: $RESTIC_FROM_KEY_HINT) | +| `--from-password-command command` | `$RESTIC_FROM_PASSWORD_COMMAND` | shell command to obtain the source repository password from (default: $RESTIC_FROM_PASSWORD_COMMAND) | +| `--from-password-file file` | `$RESTIC_FROM_PASSWORD_FILE` | file to read the source repository password from (default: $RESTIC_FROM_PASSWORD_FILE) | +| `--from-repo repository` | `$RESTIC_FROM_REPOSITORY` | source repository to copy snapshots from (default: $RESTIC_FROM_REPOSITORY) | +| `--from-repository-file file` | `$RESTIC_FROM_REPOSITORY_FILE` | file from which to read the source repository location to copy snapshots from (default: $RESTIC_FROM_REPOSITORY_FILE) | +| `-H`, `--host host` | `$RESTIC_HOST` | only consider snapshots for this host (can be specified multiple times) (default: $RESTIC_HOST) | +| `--path path` | | only consider snapshots including this (absolute) path (can be specified multiple times, snapshots must include all specified paths) | +| `--tag tag[,tag,...]` | | only consider snapshots including `tag[,tag,...]` (can be specified multiple times) (default []) | + + +### diff + +The "diff" command shows differences from the first to the second snapshot. The first characters in each line display what has happened to a particular file or directory: + +* `+` The item was added +* `-` The item was removed +* `U` The metadata (access mode, timestamps, ...) for the item was updated +* `M` The file's content was modified +* `T` The type was changed, e.g. a file was made a symlink +* `?` Bitrot detected: The file's content has changed but all metadata is the same + +Metadata comparison will likely not work if a backup was created using the `--ignore-inode` or `--ignore-ctime` option. + +To only compare files in specific subfolders, you can use the `snapshotID:subfolder` syntax, where `subfolder` is a path within the snapshot. + +Exit Codes: +- Exit status is 0 if the command was successful. +- Exit status is 1 if there was any error. +- Exit status is 10 if the repository does not exist. +- Exit status is 11 if the repository is already locked. +- Exit status is 12 if the password is incorrect. + +Usage: `restic diff [--metadata] snapshotID snapshotID` + +### dump + +The "dump" command extracts files from a snapshot from the repository. If a single file is selected, it prints its contents to stdout. Folders are output as a tar (default) or zip file containing the contents of the specified folder. +Pass "/" as file name to dump the whole snapshot as an archive file. + +The special snapshotID "latest" can be used to use the latest snapshot in the repository. + +To include the folder content at the root of the archive, you can use the `snapshotID:subfolder` syntax, where `subfolder` is a path within the snapshot. + +Exit Codes: +- Exit status is 0 if the command was successful. +- Exit status is 1 if there was any error. +- Exit status is 10 if the repository does not exist. +- Exit status is 11 if the repository is already locked. +- Exit status is 12 if the password is incorrect. + +Usage: `restic dump [flags] snapshotID file` + +| Option | Environment | Description | +| ------------------------ | -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `-a`, `--archive format` | | set archive format as "tar" or "zip" (default "tar") | +| `-H`, `--host host` | `$RESTIC_HOST` | only consider snapshots for this host, when snapshot ID "latest" is given (can be specified multiple times) (default: $RESTIC_HOST) | +| `--path path` | | only consider snapshots including this (absolute) path, when snapshot ID "latest" is given (can be specified multiple times, snapshots must include all specified paths) | +| `--tag tag[,tag,...]` | | only consider snapshots including `tag[,tag,...]`, when snapshot ID "latest" is given (can be specified multiple times) (default []) | +| `-t`, `--target path` | | write the output to target path | + +### find + +The "find" command searches for files or directories in snapshots stored in the repo. +It can also be used to search for restic blobs or trees for troubleshooting. +The default sort option for the snapshots is youngest to oldest. To sort the output from oldest to youngest specify `--reverse`. + +Usage: `restic find [flags] PATTERN...` + +Examples: +``` +restic find config.json +restic find --json "*.yml" "*.json" +restic find --json --blob 420f620f b46ebe8a ddd38656 +restic find --show-pack-id --blob 420f620f +restic find --tree 577c2bc9 f81f2e22 a62827a9 +restic find --pack 025c1d06 +``` + +Exit Codes: +- Exit status is 0 if the command was successful. +- Exit status is 1 if there was any error. +- Exit status is 10 if the repository does not exist. +- Exit status is 11 if the repository is already locked. +- Exit status is 12 if the password is incorrect. + +| Option | Environment | Description | +| ----------------------- | -------------- | ------------------------------------------------------------------------------------------------------------------------------------ | +| `--blob` | | pattern is a blob-ID | +| `-H`, `--host host` | `$RESTIC_HOST` | only consider snapshots for this host (can be specified multiple times) (default: $RESTIC_HOST) | +| `--human-readable` | | print sizes in human readable format | +| `-i`, `--ignore-case` | | ignore case for pattern | +| `-l`, `--long` | | use a long listing format showing size and mode | +| `-N`, `--newest string` | | newest modification date/time | +| `-O`, `--oldest string` | | oldest modification date/time | +| `--pack` | | pattern is a pack-ID | +| `--path path` | | only consider snapshots including this (absolute) path (can be specified multiple times, snapshots must include all specified paths) | +| `-R`, `--reverse` | | reverse sort order oldest to newest | +| `--show-pack-id` | | display the pack-ID the blobs belong to (with --blob or --tree) | +| `-s`, `--snapshot id` | | snapshot id to search in (can be given multiple times) | +| `--tag tag[,tag,...]` | | only consider snapshots including `tag[,tag,...]` (can be specified multiple times) (default []) | +| `--tree` | | pattern is a tree-ID | + +### forget + +The "forget" command removes snapshots according to a policy. All snapshots are first divided into groups according to `--group-by`, and after that the policy specified by the `--keep-*` options is applied to each group individually. +If there are not enough snapshots to keep one for each duration related `--keep-{within-,}*` option, the oldest snapshot in the group is kept additionally. + +Please note that this command really only deletes the snapshot object in the repository, which is a reference to data stored there. In order to remove the unreferenced data after "forget" was run successfully, see the "prune" command. + +Please also read the documentation for "forget" to learn about some important security considerations. + +Exit Codes: +- Exit status is 0 if the command was successful. +- Exit status is 1 if there was any error. +- Exit status is 10 if the repository does not exist. +- Exit status is 11 if the repository is already locked. +- Exit status is 12 if the password is incorrect. + +Usage: `restic forget [flags] [snapshot ID] [...]` + +| Option | Environment | Description | +| ----------------------------------- | -------------- | ------------------------------------------------------------------------------------------------------------------------------------ | +| `-l`, `--keep-last n` | | keep the last n snapshots (use 'unlimited' to keep all snapshots) | +| `-H`, `--keep-hourly n` | | keep the last n hourly snapshots (use 'unlimited' to keep all hourly snapshots) | +| `-d`, `--keep-daily n` | | keep the last n daily snapshots (use 'unlimited' to keep all daily snapshots) | +| `-w`, `--keep-weekly n` | | keep the last n weekly snapshots (use 'unlimited' to keep all weekly snapshots) | +| `-m`, `--keep-monthly n` | | keep the last n monthly snapshots (use 'unlimited' to keep all monthly snapshots) | +| `-y`, `--keep-yearly n` | | keep the last n yearly snapshots (use 'unlimited' to keep all yearly snapshots) | +| `--keep-within duration` | | keep snapshots that are newer than duration (e.g., 1y5m7d2h) relative to the latest snapshot | +| `--keep-within-hourly duration` | | keep hourly snapshots newer than duration (e.g., 1y5m7d2h) relative to the latest snapshot | +| `--keep-within-daily duration` | | keep daily snapshots newer than duration (e.g., 1y5m7d2h) relative to the latest snapshot | +| `--keep-within-weekly duration` | | keep weekly snapshots newer than duration (e.g., 1y5m7d2h) relative to the latest snapshot | +| `--keep-within-monthly duration` | | keep monthly snapshots newer than duration (e.g., 1y5m7d2h) relative to the latest snapshot | +| `--keep-within-yearly duration` | | keep yearly snapshots newer than duration (e.g., 1y5m7d2h) relative to the latest snapshot | +| `--keep-tag taglist` | | keep snapshots with this taglist (can be specified multiple times) (default []) | +| `--unsafe-allow-remove-all` | | allow deleting all snapshots of a snapshot group | +| `--host host` | `$RESTIC_HOST` | only consider snapshots for this host (can be specified multiple times) (default: $RESTIC_HOST) | +| `--tag tag[,tag,...]` | | only consider snapshots including `tag[,tag,...]` (can be specified multiple times) (default []) | +| `--path path` | | only consider snapshots including this (absolute) path (can be specified multiple times, snapshots must include all specified paths) | +| `-c`, `--compact` | | use compact output format | +| `-g`, `--group-by group` | | group snapshots by host, paths and/or tags, separated by comma (disable grouping with '') (default host,paths) | +| `-n`, `--dry-run` | | do not delete anything, just print what would be done | +| `--prune` | | automatically run the 'prune' command if snapshots have been removed | +| `--max-unused limit` | | tolerate given limit of unused data (absolute bytes with suffixes k/K, m/M, g/G, t/T, %, or 'unlimited') (default "5%") | +| `--max-repack-size size` | | stop after repacking this much data in total (allowed suffixes: k/K, m/M, g/G, t/T) | +| `--repack-cacheable-only` | | only repack packs which are cacheable | +| `--repack-small` | | repack pack files below 80% of target pack size | +| `--repack-uncompressed` | | repack all uncompressed data | +| `--repack-smaller-than below-limit` | | pack below-limit packfiles (allowed suffixes: k/K, m/M) | + +### init + +The "init" command initializes a new repository. + +Exit Codes: +- Exit status is 0 if the command was successful. +- Exit status is 1 if there was any error. + +Usage: `restic init [flags]` + +| Option | Environment | Description | +| ----------------------------- | ------------------------------- | --------------------------------------------------------------------------------------------------------------- | +| `--copy-chunker-params` | | Copy chunker parameters from the secondary repository (useful with the copy command) | +| `--from-insecure-no-password` | | Use an empty password for the source repository (insecure) | +| `--from-key-hint` | `$RESTIC_FROM_KEY_HINT` | Key ID of key to try decrypting the source repository first | +| `--from-password-command` | `$RESTIC_FROM_PASSWORD_COMMAND` | Shell command to obtain the source repository password from | +| `--from-password-file` | `$RESTIC_FROM_PASSWORD_FILE` | File to read the source repository password from | +| `--from-repo` | `$RESTIC_FROM_REPOSITORY` | Source repository to copy chunker parameters from | +| `--from-repository-file` | `$RESTIC_FROM_REPOSITORY_FILE` | File from which to read the source repository location to copy chunker parameters from | +| `--repository-version` | | Repository format version to use, allowed values are a format version, `latest` and `stable` (default "stable") | + +### key + +The "key" command allows you to set multiple access keys or passwords per repository. + +Usage: `restic key [command]` + +#### key add +Add a new key (password) to the repository; returns the new key ID + +Usage: `restic key add [flags]` + +| Option | Environment | Description | +| ---------------------------- | ----------- | --------------------------------------------------- | +| `-h`, `--help` | | help for add | +| `--host string` | | the hostname for new key | +| `--new-insecure-no-password` | | add an empty password for the repository (insecure) | +| `--new-password-file file` | | file from which to read the new password | +| `--user string` | | the username for new key | + +#### key passwd +Change key (password); creates a new key ID and removes the old key ID, returns new key ID + +Usage: `restic key passwd [flags]` + +| Option | Environment | Description | +| ---------------------------- | ----------- | --------------------------------------------------- | +| `-h`, `--help` | | help for add | +| `--host string` | | the hostname for new key | +| `--new-insecure-no-password` | | add an empty password for the repository (insecure) | +| `--new-password-file file` | | file from which to read the new password | +| `--user string` | | the username for new key | + +#### key list +List keys (passwords) + +Usage: `restic key list` + +#### key remove +Remove key ID (password) from the repository. + +Usage: `restic key remove [ID] [flags]` + +### list + +The "list" command allows listing objects in the repository based on type. + +Exit Codes: +- Exit status is 0 if the command was successful. +- Exit status is 1 if there was any error. +- Exit status is 10 if the repository does not exist. +- Exit status is 11 if the repository is already locked. +- Exit status is 12 if the password is incorrect. + +Usage: `restic list [flags] [blobs|packs|index|snapshots|keys|locks]` + +### ls + +The "ls" command lists files and directories in a snapshot. + +The special snapshot ID "latest" can be used to list files and directories of the latest snapshot in the repository. The `--host` flag can be used in conjunction to select the latest snapshot originating from a certain host only. + +File listings can optionally be filtered by directories. Any positional arguments after the snapshot ID are interpreted as absolute directory paths, and only files inside those directories will be listed. If the `--recursive` flag is used, then the filter will allow traversing into matching directories' subfolders. +Any directory paths specified must be absolute (starting with a path separator); paths use the forward slash '/' as separator. + +File listings can be sorted by specifying `--sort` followed by one of the sort specifiers `(name|size|time=mtime|atime|ctime|extension)`. +The sorting can be reversed by specifying `--reverse`. + +Exit Codes: +- Exit status is 0 if the command was successful. +- Exit status is 1 if there was any error. +- Exit status is 10 if the repository does not exist. +- Exit status is 11 if the repository is already locked. +- Exit status is 12 if the password is incorrect. + +Usage: `restic ls [flags] snapshotID [dir...]` + +| Option | Environment | Description | +| ------------------ | -------------- | ---------------------------------------------------------------------------------------------------------------------------------- | +| `-H`, `--host` | `$RESTIC_HOST` | Only consider snapshots for this host, when snapshot ID "latest" is given (can be specified multiple times) | +| `--human-readable` | | Print sizes in human readable format | +| `-l`, `--long` | | Use a long listing format showing size and mode | +| `--ncdu` | | Output NCDU export format (pipe into `ncdu -f -`) | +| `--path` | | Only consider snapshots including this (absolute) path, when snapshot ID "latest" is given (can be specified multiple times) | +| `--recursive` | | Include files in subfolders of the listed directories | +| `--reverse` | | Reverse sorted output | +| `-s`, `--sort` | | Sort output by (name\|size\|time=mtime\|atime\|ctime\|extension) (default name) | +| `--tag` | | Only consider snapshots including tag[,tag,...], when snapshot ID "latest" is given (can be specified multiple times) (default []) | + +### mount + +The "mount" command mounts the repository via fuse to a directory. This is a read-only mount. + +**Snapshot Directories**: +If you need a different template for directories that contain snapshots, +you can pass a time template via `--time-template` and path templates via `--path-template`. + +Example time template without colons: `--time-template "2006-01-02_15-04-05"` + +You need to specify a sample format for exactly the following timestamp: `Mon Jan 2 15:04:05 -0700 MST 2006` + +For path templates, you can use the following patterns which will be replaced: +- `%i` by short snapshot ID +- `%I` by long snapshot ID +- `%u` by username +- `%h` by hostname +- `%t` by tags +- `%T` by timestamp as specified by `--time-template` + +The default path templates are: +- `ids/%i` +- `snapshots/%T` +- `hosts/%h/%T` +- `tags/%t/%T` + +Exit Codes: +- Exit status is 0 if the command was successful. +- Exit status is 1 if there was any error. +- Exit status is 10 if the repository does not exist. +- Exit status is 11 if the repository is already locked. +- Exit status is 12 if the password is incorrect. + +Usage: `restic mount [flags] mountpoint` + +| Option | Environment | Description | +| -------------------------- | -------------- | ------------------------------------------------------------------------------------------------------------------------------------ | +| `--allow-other` | | Allow other users to access the data in the mounted directory | +| `-H`, `--host` | `$RESTIC_HOST` | Only consider snapshots for this host (can be specified multiple times) | +| `--no-default-permissions` | | For `--allow-other`, ignore Unix permissions and allow users to read all snapshot files | +| `--owner-root` | | Use `root` as the owner of files and dirs | +| `--path` | | Only consider snapshots including this (absolute) path (can be specified multiple times, snapshots must include all specified paths) | +| `--path-template` | | Set template for path names (can be specified multiple times) | +| `--tag` | | Only consider snapshots including `tag[,tag,...]` (can be specified multiple times) (default []) | +| `--time-template` | | Set template to use for times (default "2006-01-02T15:04:05Z07:00") | + +### prune + +The "prune" command checks the repository and removes data that is not referenced and therefore not needed any more. + +Usage: `restic prune [flags]` + +| Option | Environment | Description | +| -------------------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `-n`, `--dry-run` | | Do not modify the repository, just print what would be done | +| `--max-repack-size` | | Stop after repacking this much data in total (allowed suffixes: k/K, m/M, g/G, t/T) | +| `--max-unused` | | Tolerate given limit of unused data (absolute value in bytes with suffixes k/K, m/M, g/G, t/T, a value in % or the word 'unlimited') (default "5%") | +| `--repack-cacheable-only` | | Only repack packs which are cacheable | +| `--repack-small` | | Repack pack files below 80% of target pack size | +| `--repack-smaller-than` | | Pack below-limit packfiles (allowed suffixes: k/K, m/M) | +| `--repack-uncompressed` | | Repack all uncompressed data | +| `--unsafe-recover-no-free-space` | | **UNSAFE**, read the documentation before using! Try to recover a repository stuck with no free space. Do not use without trying 'prune --max-repack-size 0' first. | + + +### restore + +The "restore" command extracts the data from a snapshot from the repository to a directory. + +The special snapshotID "latest" can be used to restore the latest snapshot in the repository. + +To only restore a specific subfolder, you can use the `snapshotID:subfolder` syntax, where `subfolder` is a path within the snapshot. + +Usage: `restic restore [flags] snapshotID` + +| Option | Environment | Description | +| ----------------- | -------------- | ------------------------------------------------------------------------------------------------------------------------------------ | +| `--delete` | | Delete files from target directory if they do not exist in snapshot. Use `--dry-run -vv` to check what would be deleted | +| `--dry-run` | | Do not write any data, just show what would be done | +| `-e`, `--exclude` | | Exclude a pattern (can be specified multiple times) | +| `--exclude-file` | | Read exclude patterns from a file (can be specified multiple times) | +| `--exclude-xattr` | | Exclude xattr by pattern (can be specified multiple times) | +| `-H`, `--host` | `$RESTIC_HOST` | Only consider snapshots for this host, when snapshot ID "latest" is given (can be specified multiple times) | +| `--iexclude` | | Same as `--exclude` but ignores the casing of filenames | +| `--iexclude-file` | | Same as `--exclude-file` but ignores casing of filenames in patterns | +| `--iinclude` | | Same as `--include` but ignores the casing of filenames | +| `--iinclude-file` | | Same as `--include-file` but ignores casing of filenames in patterns | +| `-i`, `--include` | | Include a pattern (can be specified multiple times) | +| `--include-file` | | Read include patterns from a file (can be specified multiple times) | +| `--include-xattr` | | Include xattr by pattern (can be specified multiple times) | +| `--overwrite` | | Overwrite behavior, one of (always\|if-changed\|if-newer\|never) (default always) | +| `--path` | | Only consider snapshots including this (absolute) path, when snapshot ID "latest" is given (can be specified multiple times) | +| `--sparse` | | Restore files as sparse | +| `--tag` | | Only consider snapshots including `tag[,tag,...]`, when snapshot ID "latest" is given (can be specified multiple times) (default []) | +| `-t`, `--target` | | Directory to extract data to | +| `--verify` | | Verify restored files content | + +### rewrite + +The "rewrite" command excludes files from existing snapshots. It creates new snapshots containing the same data as the original ones, but without the files you specify to exclude. All metadata (time, host, tags) will be preserved. + +The snapshots to rewrite are specified using the `--host`, `--tag` and `--path` options, or by providing a list of snapshot IDs. Please note that specifying neither any of these options nor a snapshot ID will cause the command to rewrite all snapshots. + +The special tag 'rewrite' will be added to the new snapshots to distinguish them from the original ones, unless `--forget` is used. If the `--forget` option is used, the original snapshots will instead be directly removed from the repository. + +Please note that the `--forget` option only removes the snapshots and not the actual data stored in the repository. In order to delete the no longer referenced data, use the "prune" command. + +When rewrite is used with the `--snapshot-summary` option, a new snapshot is created containing statistics summary data. Only two fields in the summary will be non-zero: TotalFilesProcessed and TotalBytesProcessed. + +When rewrite is called with one of the `--exclude` options, TotalFilesProcessed and TotalBytesProcessed will be updated in the snapshot summary. + +Usage: `restic rewrite [flags] [snapshotID ...]` + +| Option | Environment | Description | +| -------------------------- | -------------- | ------------------------------------------------------------------------------------------------------------------------------------ | +| `-n`, `--dry-run` | | Do not do anything, just print what would be done | +| `-e`, `--exclude` | | Exclude a pattern (can be specified multiple times) | +| `--exclude-file` | | Read exclude patterns from a file (can be specified multiple times) | +| `--forget` | | Remove original snapshots after creating new ones | +| `-H`, `--host` | `$RESTIC_HOST` | Only consider snapshots for this host (can be specified multiple times) | +| `--iexclude` | | Same as `--exclude` but ignores the casing of filenames | +| `--iexclude-file` | | Same as `--exclude-file` but ignores casing of filenames in patterns | +| `--new-host` | | Replace hostname | +| `--new-time` | | Replace time of the backup | +| `--path` | | Only consider snapshots including this (absolute) path (can be specified multiple times; snapshots must include all specified paths) | +| `-s`, `--snapshot-summary` | | Create snapshot summary record if it does not exist | +| `--tag` | | Only consider snapshots including tag\[,tag,...] (can be specified multiple times) (default: `[]`) | + +### snapshots + +The "snapshots" command lists all snapshots stored in the repository. + +Usage: `restic snapshots [flags] [snapshotID ...]` + +| Option | Environment | Description | +| ---------------------- | -------------- | ------------------------------------------------------------------------------------------------------------------------------------ | +| `-c, --compact` | | use compact output format | +| `-g, --group-by group` | | group snapshots by host, paths and/or tags, separated by comma | +| `-H, --host host` | `$RESTIC_HOST` | only consider snapshots for this host (can be specified multiple times) | +| `--latest n` | | only show the last n snapshots for each host and path | +| `--path path` | | only consider snapshots including this (absolute) path (can be specified multiple times, snapshots must include all specified paths) | +| `--tag tag[,tag,...]` | | only consider snapshots including `tag[,tag,...]` (can be specified multiple times) (default []) | + +### stats + +The "stats" command walks one or multiple snapshots in a repository and accumulates statistics about the data stored therein. It reports on the number of unique files and their sizes, according to one of the counting modes as given by the `--mode` flag. + +It operates on all snapshots matching the selection criteria or all snapshots if nothing is specified. The special snapshot ID "latest" is also supported. Some modes make more sense over just a single snapshot, while others are useful across all snapshots, depending on what you are trying to calculate. + +The modes are: + +* restore-size: (default) Counts the size of the restored files. +* files-by-contents: Counts total size of unique files, where a file is considered unique if it has unique contents. +* raw-data: Counts the size of blobs in the repository, regardless of how many files reference them. +* blobs-per-file: A combination of files-by-contents and raw-data. + +Refer to the online manual for more details about each mode. + +Usage: `restic stats [flags] [snapshot ID] [...]` + +| Option | Environment | Description | +| --------------------- | -------------- | ------------------------------------------------------------------------------------------------------------------------------------ | +| `-H, --host host` | `$RESTIC_HOST` | only consider snapshots for this host (can be specified multiple times) | +| `--mode string` | | counting mode: restore-size (default), files-by-contents, blobs-per-file or raw-data (default "restore-size") | +| `--path path` | | only consider snapshots including this (absolute) path (can be specified multiple times, snapshots must include all specified paths) | +| `--tag tag[,tag,...]` | | only consider snapshots including `tag[,tag,...]` (can be specified multiple times) (default []) | + +### tag + +The "tag" command allows you to modify tags on exiting snapshots. + +You can either set/replace the entire set of tags on a snapshot, or add tags to/remove tags from the existing set. + +When no snapshotID is given, all snapshots matching the host, tag and path filter criteria are modified. + +Usage: `restic tag [flags] [snapshotID ...]` + +| Option | Environment | Description | +| --------------------- | -------------- | ------------------------------------------------------------------------------------------------------------------------------------ | +| `--add tags` | | tags which will be added to the existing tags in the format `tag[,tag,...]` (can be given multiple times) (default []) | +| `-H, --host host` | `$RESTIC_HOST` | only consider snapshots for this host (can be specified multiple times) (default: $RESTIC_HOST) | +| `--path path` | | only consider snapshots including this (absolute) path (can be specified multiple times, snapshots must include all specified paths) | +| `--remove tags` | | tags which will be removed from the existing tags in the format `tag[,tag,...]` (can be given multiple times) (default []) | +| `--set tags` | | tags which will replace the existing tags in the format `tag[,tag,...]` (can be given multiple times) (default []) | +| `--tag tag[,tag,...]` | | only consider snapshots including tag[,tag,...] (can be specified multiple times) (default []) | + +### unlock +The "unlock" command removes stale locks that have been created by other restic processes. + +Usage: `restic unlock [--remove-all] [flags]` From 557a61c4187373a70f8e5e9c61873444a295f91a Mon Sep 17 00:00:00 2001 From: JMARyA <jmarya@hydrar.de> Date: Sat, 21 Jun 2025 00:42:27 +0200 Subject: [PATCH 63/74] update applications --- technology/applications/Applications.md | 35 +++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/technology/applications/Applications.md b/technology/applications/Applications.md index 5ac52a2..20e0e93 100644 --- a/technology/applications/Applications.md +++ b/technology/applications/Applications.md @@ -39,6 +39,7 @@ rev: 2025-01-30 ## Desktop - [KDE Plasma](./desktops/KDE%20Plasma.md) - [SDDM](./desktops/SDDM.md) +- [spectacle](./desktops/spectacle.md) - [dwm](./desktops/dwm.md) - [picom](./desktops/picom.md) - [Hyprland](./desktops/hyprland.md) @@ -51,21 +52,23 @@ rev: 2025-01-30 - [DB Browser for SQLite](./development/DB%20Browser%20for%20SQLite.md) - [Ghidra](./development/Ghidra.md) - [GitHub Desktop](./development/GitHub%20Desktop.md) +- [delta](./development/delta.md) - [HTTPie](./development/HTTPie.md) - [MongoDB Compass](./development/MongoDB%20Compass.md) - [MongoDB](./development/MongoDB.md) -- [Postgres](./development/Postgres.md) +- [PostgreSQL](./development/Postgres.md) - [Podman Desktop](./development/Podman%20Desktop.md) - [Visual Studio Code](./development/Visual%20Studio%20Code.md) - [continue](./development/continue.md) - [psequel](development/psequel.md) -- [PostgreSQL](development/Postgres.md) +- [Valkey](./development/valkey.md) ## Documents - [Tachiyomi](./documents/Tachiyomi.md) - [LibreOffice](./office/LibreOffice.md) - [Obsidian](./office/Obsidian.md) - [Typst](../tools/Typst.md) +- [mdbook](./office/mdbook.md) ## Finance - [Feather Wallet](./finance/Feather%20Wallet.md) @@ -77,6 +80,8 @@ rev: 2025-01-30 - [Lutris](./gaming/Lutris.md) - [Steam](./gaming/Steam.md) - [Steam ROM Manager](./gaming/Steam%20ROM%20Manager.md) +- [dualsensectl](./gaming/dualsensectl.md) +- [MangoHUD](./gaming/MangoHUD.md) ## Network - [JDownloader](./network/JDownloader.md) @@ -120,6 +125,7 @@ rev: 2025-01-30 - [Wildcard](utilities/Wildcard.md) - [Textpieces](utilities/Textpieces.md) - [ImHex](utilities/ImHex.md) +- [Octopi](utilities/octopi.md) # Mobile - [Aegis](./utilities/Aegis.md) @@ -168,6 +174,15 @@ rev: 2025-01-30 - [Caddy](./web/Caddy.md) - [zigbee2MQTT](./web/zigbee2mqtt.md) - [dawarich](./web/dawarich.md) +- [glance](./web/glance.md) +- [ntfy](./web/ntfy.md) +- [owncast](./web/owncast.md) +- [panamax](./web/panamax.md) +- [stalwart](./web/stalwart.md) +- [OpenGist](./web/opengist.md) +- [SFTPGo](./web/sftpgo.md) +- [Lemmy](./web/lemmy.md) +- [Stump](./web/stump.md) # CLI ## Terminal @@ -177,6 +192,8 @@ rev: 2025-01-30 - [Shell](./cli/Shell.md) - [bash](./cli/bash.md) - [zsh](./cli/zsh.md) +- [fish](./cli/fish.md) +- [starship](./cli/starship.md) ## Compression - [p7zip](./cli/compression/p7zip.md) @@ -236,6 +253,7 @@ rev: 2025-01-30 - [GPG](../cryptography/GPG.md) - [OpenSSL](../cryptography/OpenSSL.md) - [age](../cryptography/age.md) +- [minisign](../cryptography/minisign.md) - [tomb](./cli/tomb.md) - [dysk](./cli/dysk.md) - [pass](./cli/pass.md) @@ -250,6 +268,7 @@ rev: 2025-01-30 - [rexturl](./cli/rexturl.md) - [mhost](./cli/mhost.md) - [timr-tui](./cli/timr-tui.md) +- [skate](./cli/skate.md) ## System - [Core Utils](./cli/system/Core%20Utils.md) @@ -266,6 +285,8 @@ rev: 2025-01-30 - [systemd-cryptenroll](../linux/systemd/systemd-cryptenroll.md) - [bubblewrap](./utilities/bubblewrap.md) - [retry-cli](./utilities/retry-cli.md) +- [systeroid](./utilities/systeroid.md) +- [distrobox](./utilities/distrobox.md) ## Development - [act](./development/act.md) @@ -278,10 +299,15 @@ rev: 2025-01-30 - [Ansible](../tools/Ansible/Ansible.md) - [Docker](../tools/Docker.md) - [Podman](../tools/Podman.md) +- [sops](../tools/sops.md) - [serie](./cli/serie.md) - [usql](./cli/usql.md) - [kondo](./cli/kondo.md) - [licensit](./development/licensit.md) +- [onefetch](./development/onefetch.md) +- [ruff](./development/ruff.md) +- [uv](./development/uv.md) +- [rust-script](./development/rust-script.md) ## Media - [yt-dlp](./media/yt-dlp.md) @@ -290,6 +316,10 @@ rev: 2025-01-30 - [ImageMagick](./media/ImageMagick.md) - [pywal](./media/images/pywal.md) - [viu](./cli/viu.md) +- [wallust](./media/wallust.md) +- [artem](./media/artem.md) +- [auto-palette-cli](./media/auto-palette-cli.md) +- [metadata](./media/metadata-cli.md) ## Network - [rclone](./network/rclone.md) @@ -317,3 +347,4 @@ rev: 2025-01-30 ## Backup - [borg](./backup/borg.md) - [borgmatic](./backup/borgmatic.md) +- [restic](./backup/restic.md) From 9ec7a79348d98df1bd21b5f6da15eab108cbebc0 Mon Sep 17 00:00:00 2001 From: JMARyA <jmarya@hydrar.de> Date: Sat, 21 Jun 2025 04:06:10 +0200 Subject: [PATCH 64/74] add renovate --- technology/applications/Applications.md | 1 + .../applications/development/renovate.md | 58 +++++++++++++++++++ 2 files changed, 59 insertions(+) create mode 100644 technology/applications/development/renovate.md diff --git a/technology/applications/Applications.md b/technology/applications/Applications.md index 20e0e93..e3c3140 100644 --- a/technology/applications/Applications.md +++ b/technology/applications/Applications.md @@ -308,6 +308,7 @@ rev: 2025-01-30 - [ruff](./development/ruff.md) - [uv](./development/uv.md) - [rust-script](./development/rust-script.md) +- [renovatebot](./development/renovate.md) ## Media - [yt-dlp](./media/yt-dlp.md) diff --git a/technology/applications/development/renovate.md b/technology/applications/development/renovate.md new file mode 100644 index 0000000..8ea8e73 --- /dev/null +++ b/technology/applications/development/renovate.md @@ -0,0 +1,58 @@ +--- +obj: application +website: https://docs.renovatebot.com +repo: https://github.com/renovatebot/renovate +--- + +# RenovateBot + +RenovateBot is a powerful open-source tool that automates the process of updating dependencies in your codebase. It scans your project files, identifies outdated packages, and creates pull requests to update them—keeping your dependencies secure and up to date with minimal manual intervention. + +## Setup +Setup a user for renovate on your preferred git forge and get a PAT to authenticate. + +Then add this user as a member to your repositories. Renovate can then be configured through a `renovate.json` config file per repository. + +## K8s Manifest +```yml +apiVersion: batch/v1 +kind: CronJob +metadata: + name: renovate +spec: + schedule: '@hourly' + concurrencyPolicy: Forbid + jobTemplate: + spec: + template: + spec: + containers: + - name: renovate + # Update this to the latest available and then enable Renovate on + # the manifest + image: renovate/renovate:40.57.0 + args: + - user/repo + # Environment Variables + env: + - name: LOG_LEVEL + value: debug + envFrom: + - secretRef: + name: renovate-env + restartPolicy: Never +--- +apiVersion: v1 +kind: Secret +metadata: + name: renovate-env +type: Opaque +stringData: + RENOVATE_GITHUB_COM_TOKEN: 'any-personal-user-token-for-github-com-for-fetching-changelogs' + # You can set RENOVATE_AUTODISCOVER to true to run Renovate on all repos you have push access to + RENOVATE_AUTODISCOVER: 'false' + RENOVATE_ENDPOINT: 'https://github.company.com/api/v3' + RENOVATE_GIT_AUTHOR: 'Renovate Bot <bot@renovateapp.com>' + RENOVATE_PLATFORM: 'github' + RENOVATE_TOKEN: 'your-github-enterprise-renovate-user-token' +``` From 0a4140ae8cf21cf5abb06daf15a0dd4e26a2f294 Mon Sep 17 00:00:00 2001 From: JMARyA <jmarya@hydrar.de> Date: Sat, 21 Jun 2025 04:09:59 +0200 Subject: [PATCH 65/74] rm todo --- technology/applications/development/Ghidra.md | 2 -- technology/dev/programming/frameworks/Dioxus.md | 4 ++-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/technology/applications/development/Ghidra.md b/technology/applications/development/Ghidra.md index dbc4122..b0a93b8 100644 --- a/technology/applications/development/Ghidra.md +++ b/technology/applications/development/Ghidra.md @@ -5,8 +5,6 @@ repo: https://github.com/NationalSecurityAgency/ghidra rev: 2024-04-15 --- -#refactor - # Ghidra Ghidra is a powerful open-source software reverse engineering (SRE) suite developed by the National Security Agency (NSA) that enables users to analyze compiled code to understand its functionality, vulnerabilities, and inner workings. diff --git a/technology/dev/programming/frameworks/Dioxus.md b/technology/dev/programming/frameworks/Dioxus.md index 9f77faf..9ca21c6 100644 --- a/technology/dev/programming/frameworks/Dioxus.md +++ b/technology/dev/programming/frameworks/Dioxus.md @@ -177,11 +177,11 @@ enum Route { } fn Home() -> Element { - todo!() + // HomePage... } fn Blog() -> Element { - todo!() + // BlogPage... } ``` From 9b15512ff6e733abfeb58a0140847f185019728f Mon Sep 17 00:00:00 2001 From: JMARyA <jmarya@hydrar.de> Date: Sat, 21 Jun 2025 07:46:07 +0200 Subject: [PATCH 66/74] add trailsense --- technology/applications/Applications.md | 1 + technology/applications/mobile/TrailSense.avif | Bin 0 -> 20105 bytes technology/applications/mobile/TrailSense.md | 11 +++++++++++ 3 files changed, 12 insertions(+) create mode 100644 technology/applications/mobile/TrailSense.avif create mode 100644 technology/applications/mobile/TrailSense.md diff --git a/technology/applications/Applications.md b/technology/applications/Applications.md index e3c3140..cc3af9c 100644 --- a/technology/applications/Applications.md +++ b/technology/applications/Applications.md @@ -139,6 +139,7 @@ rev: 2025-01-30 - [Google Calendar](./office/Google%20Calendar.md) - [Google Contacts](./office/Google%20Contacts.md) - [OwnTracks](./mobile/OwnTracks.md) +- [TrailSense](./mobile/TrailSense.md) # Web - [Authelia](./web/Authelia.md) diff --git a/technology/applications/mobile/TrailSense.avif b/technology/applications/mobile/TrailSense.avif new file mode 100644 index 0000000000000000000000000000000000000000..d5bad1f9a26776012d4252d46c6e1c5ab6421ba3 GIT binary patch literal 20105 zcmXteV~{3I)AiV%9ox3;9ox2T+qP|U$F}Vq+qSQ7@8^v#D<X07bXET9=*mtYARt0B z7f%O6H%l|1fAXKTwKQY0wKO!76=D+l2ff>xx)}bK`zH(*CN@t0=K=vaSQ@+hfB!$L z@Go|CGL<m2GqExK9}B_3(#7_F6ySdv-_pk3_`gUL2nhJ!`cDG^69ECqTKw}VEiLW- zSHk}?*#81kkpIa4IEHSFOd|F+_W#?{%F@Bf;U6w->0oUC&;GJ>b};>q2m}Py4+I4B z-$O_amL8V>A)ruDQ2z{^p&OG(Ankt$5UR1gjgy_RjRz3OzXcTV55ll?ur>TI_fP&6 z1_lfg4EC=o2U`<E7Z?OWARwbU{drixqo9Z&6!UTx@GqbeAfz{e7weyO`IG>v$JVI$ zH`DZA&!4El007`ewT6{K9doY&&(XF53PLLV2M4sA;u6__|KxG@@ho(Use0RG3-jnJ zG=KN5K`yDT)5xuOl^%t~C52v{v*eGzgoG>2^R1_7(;j+s(qA?yBsCRt33099IYAX) zMW9^owiF_Z%9@i|0xKFE)U@&b3}@Mvf9GDtfgg^pi&0pp5XVg#v+Zvo7#cE9rhD<h z<dY$*#E<h>l-aJlzo>>mDw4FsB?`)jzOh@)m&WbI;OD<A|7Dz*4w;CDL@xmFZ0GLn zMF_RGIX|T<*qHQB)o6)dps$6R3p+lyAYf5GnSnW{5*0u<JzX$OS5WWWLU4C`g=E%i z?2N-T(ufm~fkL;}+?HjkBB#<nP;`-On+49gml#Zy`P-utLVNuVs2V?EPk<V)cb(PY zG2oxK2Oq=(_UEGIX+9nNOsu7JPByF$2{sQHBP#QhJU3lwD`5rR5|T9Gy~9ve--J?5 zbvH4o(kgSw$@Qz?h$M*J2tw_)hPyp2*H=_XBNUq#@&a7Z@MKK{?m^w&ferBdU|*Uv z>WQ59gD=s{!22&@&|8j~S|cWj@#gh|HEt)KFP$xLOfH$lqS%n19A$V$AF3<)@xIKJ z7n&lXvXKZS*=sfnvT!?MJz<beHVLAQ!pyu<ldf7EbP<|%i$Eo_`|m_|5XV2z8ptZw zOxO)UI3Lttn^NcZ@+=sCv8y`0Y+iG{=d=adXER`hh8i?bWZ87S6HVKHb@#ZvgHaGF zHO2g9HwA${iQ{ju-ric^<Q68W&GXk3r8;f`n-onC(2wU$KRJfJe2xiwv|HM0;hM{P z&_fZk)!<BKLmGh_JYxdJO(xy|tD!Z0fonMyKj3pra(>AD6|uX~^~I4UI=gEe$<;Rq z-XzeN5`kHRkX>`p|3%V8H+1{yjrLHRn&o!WYf7nJziVWdS#}A9xVc(gylt9O7R(Sx zKwVW312!^?A45Ot2ujgHdB5K8D0y)sE>x)uqi9P>Fv`&0rb|R|mHJkhTt}E%Oj?q~ zJ%Jj1A1PH6|MgA(LKqY76JD$?iuP!v_kQPppSP#KF%sujZK+D9u46rm#~$%Ag@9vr zZJL2?O8j27u05m>)_|pDjPdSu<a$%Y3RT1)Y2*xdwKJ4<=0u%XR?C@agyFpE0G3F! zPFca^n5f02$LVMxoePNP5BtukqmHxqp)>Rg=I4h~2gx<}+)$;%#25+vqt4=Ur^sVx z&6k^LU@#)lT|B8<UR-8mI{G+C4u>)rBZ=O^b5NlH!w{TSRgm%qM1jUh+CyanBx{cg zo(Z?jrgw4kam=A@e1rWdJ>g?xz5pO}0MeB&i=x_Fj))^p*YpK~mz$UW*zE$XW|O%W zIRp7H#Bz2N{=$ePZ(oXPwaVbOPrJrr`$bq9GY|5>V5P_Ecg95U?{(ofUv3{7G`C5v zU6_hqjzGs=+tj0b!a4gfNSA6_jSyOmoI?uSydn=6QY9JOBTp`e1z^q!2B0l;N>gHU zf$`gVGaWHiS;T6u=2Y%>hEPaUutXdIG)m<Kn{e-q!>i{7x0GO(Nv1~kUXAnHrnQ0g z>85FsSqC)8J!QOhv$r}m9M!_fGO&HM*B1i>E2X8EfqX{?<@UHkr{Zp2A|5L64k0_= zQ5OgaF@H6DS#T8(N4ZZ-z*i!#yDz@s8G?fg@LeHf5E|aEn*aQg{M2fL(sMu5yi1?j zP&8{wc=qr9u~jrbG*Ccr?Lg)P0{Ps%DwJ7RS^*1&)KAGhW5z*e%B!k_N{k<7>3)Fe zZE<c5hCJG9`l=!$tdm?#Z;=$Qv9Z@92GjC}C&S>D%{aI!OK@ALnjy7Zg@@~n(w)j9 zEAG)$9LYe+@Y{X4b`=ay1`G;5Q#RpQJD$M2gSl~7oLcl8QAty{p~(pcPFP(a62+_6 z{y+qku0hr0ZA#Dd*<GhesvIy8X|Xm&c}o%edGD}X#Z#YQ1eQ%ZK{JraGR)P-fy^|& z{IZbg@j<<TR3Hg0w+4ANIE?>z(DI|C1$6UL7n<}^>Kjd8$vvXk|M9G|Psr;UKRJJF z^@Vu|42g0?0+I&11C*OtZnL19xu(I=p9I>yADz-z?MTo&ZykRSf=5Uwf%i9+)z=bl z75qimyaKNVZ<+L;d{5~{onLb64(1-0s4#bf)v)CTl_|O(6H<miEuJ*FdsljR`Wd%< zOGGk6Jf3&UGCf!m`%|Fkx1rA=Y#pl1?A9orK_>y*TAPnCPuWI8ZoECZ2W#9K8E5cg zXB}HYA7%OX&rvgoXj}HdSX6&Oq-T5kjaBILJE^pxAE|{!vVa|?4D$27;S6z9KA_&C zQ(Ao6wrpOSHle7Tlp7<>oq(;DmCLs=e9jLx-Ov%Ds~BXGZLE+)wtwd{(6-SmLNHgz z(_&@}YdBl>!@MJ-*sRj>9oqz)Cb22n<PfD7k@9&*H+SHS-x;))`H^<$Cc811LBFp& zzD1!{@=Rq1oh{RsN;K%mPs{~87N8Te?epB8jcb}U_ma&UKxlvxup%+`QaYvG>q@Ii zj&m<D*(@1}v_8xX?coe>6Nq!_iZ&>5l7It4ut{u4rZrgk@(vM2M!xxbj&oTd3m<p> zu8n~nB!CNJaH+W@utATt<aJPXe9lWR{jSbx*Fu{^6BT_QJs;Z5=n`Z+^o7>6ffp@D zgRRD{aK{K(q83@N;Fa7WG8En_HL<zJ9q%O*Wn-o33|j&P+aL4EQGO7W@_0qlxlCnD z6hC7CG$rKfF?)=iA@x*6SmnYJYIr57eVma%)m5J9@0QVsf(HcyqS>u8^KTCNaS&eP z{oj1ctU0_h9|lp;(6*&r)R>U*Db!?TV>_kjESX*T%-nH+pi=-~qZ?Fll5}o;_ORV! zZOR;Sb;F6@70kTv$6_S3Q~HRp_LCMbbFLJ!d|gTzm6R#b(k?um@NUxK;R(51vY9Oy zE^LW1C)pGXUU;>M8~2`0VH^$uDC^Cr^+UBm)oKN-(yE=zXCfn}R<?xg&g1jT-8L*H zM6J4(al?g>-|-F0j5US;FbF|otk&^e#$SN0KdR3v^j7soOyUP727|n*>gAXiCxJc| z1KH5)4B5NlC1JfjPWK-8mp)vB3Z-+nAM5e7h(WP#QSF6XT)xH@S*Lb&CC-&dfp1Fe z<2d@^b6F==6w3_oK@uO(gPYt`-pQKaojjp2fg^aOqyW+5bi1o`C-&S`i}KxD@l%RM zvRRNFRN7oTE*LqY13+V+Fox`%m*7p}A9*jt^~IvfX0)<|VjGv<`X*5eNtSvJ0Hg1^ zl)O-;Zbo&_KBoQ_Tj4*9L;4#bJVOc`#0hK{2xS-_2MX8Igm9{c=oqQdZ5-=LpO1N{ zA;cFmi-K!99?O`_4`HOAi<gM<aG;okMYM>pR(*V4Az>OLX^M(w$hGKj>V2UBj#FK< z=Uyam4wviVH?~{2SM9e4ik<MCh!wXYBZcRGgl_@^6MjsA!(Y(i7|}c9UByXW)I57e zOW+OD09jY@q6xr!2oc^2Sw$~>-8lo`n(xAZvU~}{fPk6E{U)}yG1hm0+QYa-dF5W2 z^Yfi!JC!*MeHn~6p1q#QwckDL!4pC5Xyihs%YUU84skY5XTH^L{rmFA{@ab|Yar&S zTpB63GG<<vE_nEP`w}To-S8-dKckdMia_Sr|Enj;`Sp5J+sbd@LN58I9QH(?v_6{m zd0mEA`naWy@sNHMXBSosF2<$u;czFE__|pggMK?*L~-75Z}2dJsh#-3s&y6c=2;+r zq}iYil&RX%`<GM*0C=>)J0~;#4Z_|&4_P7alPn~NL&Mgova8(?ew=Wm;YTx1;}utH z_u{rd5{9Q(d7|hgw#oYT8?Opk_a)0UM!yqS`&;>_Yh&Eg^py*Sh;9tb{-OHyu-JpC z#rcp$_fohSwJiE$(&w_o!qKr3*Q{1Ybx`TFi~{hBDsOsL<E8DO9k{>u^Yuj~qG?ON z2wR**t#q_zWx2BjOwDcE0H|T|yEEAr2p{}<xua4Po4P8NZV}+6KRV;3PAm58<L!)` zW$|<Sa@DuPXJ3l76t@y^slLtx;(g&K4*2k6SUx^?&Fdg29)<Y#iGGg{G+%FBf(oKb zsGQZ;8oiiwRs)B}`Aoqez%Gpl_#{N*@0EZcnJsrN&P4kG`Rf!%!G`Jkg0~6eJE-Sy znIONj0<>?L`LURfUkm}0_Lf*mKL~D4M6_X`AvN@*S&XSipyAo)g`{E0^b<=Dm4QO8 z$O3wtrCkQMPLQbD4^MeEK;SNQH)moO&=^EjN&~B42wi;du8r?BIFoqr#r~I|yn<_q z)L;kzZ4$X`2DL?xi>z5nW!&(zSvz%1iULm(3&S8&6E?tfF(2|>+vofJl$tArz?(~B z{5rBhAWlazxlW72cDaG$orESR%T=rbHNLv#VT3@ik21%EW3$*k2~!qcLPw1`tqzvj zZEU<R)3Mg5Ku;vr6_%G}?t{z`ywI>nox^V>$Zd-OX0Ry0l-VJ0Nx^&^;68FL>23m= zczf|J5bGB6L?Xyd?dT5|yN`FlY>!0F6;leM#D~lJzB<R5mjOMF>s5Ps2ZZ*~jR=OY zna)|*V8H~+><l<aE{VB4S_+#^C4AT5DvQC;;`>5pVc}MJ>qE4?sUy&EHwamef|G-I zS`3_<>yA5Snb?}!fEa)QLQ61kf$Md<4WBsGdhX44<u!s&_MfUH$4<$*hGy$}1ZUOS zj>oS><}Wk?FBKSyj_+h9A%)d1bLh4sy8M8XuKOK?6tze3IB`zd`(wfY_kc#iEq|EO zhPAETL7={`e*ll6CQb(U3R_W2`pt5k^yVSzn!zLW4DaTx#aI8TsA;!13nwPTScfq+ z<(A6efGuB<qsPYmAjh9H36)Ne**stp161}Zl>Gg=Hbkrp2rg(#q-IpjA*dZQbcs8U zmg9&=ODZ<>Yj{48{krN0ns*`isE74_c+V}#6#wz+=hx09_*EPv>HRQw!tFt1vE+U| zA_%A2;vD^*Bj+2+r;@(cfP5I@T!Zl@S05myr33X+bCw64sL3n+05ej$Ax>(Ar}d`c z4oQXCAbxcHkX(+{>N`_ZzJ6HKrwFe*%0vNs-Y0NnEjML9ozXcJw@g>~i&wD}Gx$E@ zXZQ!sNFgB(vYXGMQoS0BHT1QA9ZOS^QNsc}S^6otge5$w9<d0bdmeh~))$z(-%}#% z`M1xEx7h_zQ_ivtJfX7hS(IQA^pS<|^LN7tRfoGJ*Hqo;n{(4?afL+l=Fi;AYpuUy zpLOaC<E0^S8gd|`M)=LxB>9Iv^w%r}Q=1qZ)HuK0%q0sOZXh`!r}AGflR!ERpE1+? z*dM3)3w?V!Z#`^WtnSS&ra+sqpG?97bl-qdWLTqY$_n0eK6nIL+JQf%N2&pDAN7>2 zMEGgg^+0RucKVHJPsiV!3of8xtEAYmP(9cstqY6J-D`OJ;@3lHSYES#Yfj3H$OPnI z0QR4K8>Lm;u)7ab;xogQXv!m(>Tm@WCOSpy`XAo2imD_0DT+hnV5@VkQ10N%gU_Eg z$7IL3ZK0v*Zpt*%PUv?|jEoQBM73I~rDNX3FP(Ad!h2a)DkIWi0*{r00Aif;HVfu1 zsm?bZFv&2%=t1*^%W&jj=u7Q<?)8pqT?KYHxlg}F>D=3i0^awzr;JV@%hK5@ScW?q z=u>#{YHSF;QTpwzN0TCVtoY!bPp^?uF4Sr@@ejgCGy+fVN2ZsI40u(eGQHw5%aZmN z<$|JP`Feml#Z`r62YK>I?E;S9`udywo*`h6wPmbVe+%IS+o?$VS(K@%rSQ`6(8E-| zdhN<rt3RfxjI#c<8`b&&O3<gtKC|L@MyRbiF_FLKd7Ln1ndre`<?;Y*s3@V7hj2R2 z3K^xpgya`VWoXqZ{*Gmpp=B8>0z1wK5UXr)c5fo4k-0yy9Q?Sq7bU@J7-sUXW2oUA z{>_ExQwuZvv8wij@+*M(GUqnjcqJ=kKxoS}A$4V;aS>vTTGb3EP=AKBs)WXubC^hr zjWb<Ffie$LD_`#T2Bu<$;A@y>Tixllk4$iJ8wZ^Z<Ur%O2;E!DYm3rI^td#>A~_=% zt5-Y&;pT~i5+<GKP|PD~^UZ4Zl=z)fzpT_mV@iBQ9N+>_!z`B#^NpM(+*!ij>2P}F z%*74r)Xs&MNA0E)9JV?oA~UcPT|qj(Ji@E#GlRX{dp5ON`aw}>@wwLy`R=qqkX@m1 zG4HOAKcd5{NE}H@0gnJhm)hOLH2x$w@m*a7&x9(HKcDmT!%V|IFXAVXm!Fm^<-GXb zCPgx*P`F-r`Y;Qj)rw5UlH2+Mi{7V!{<sD8Mgz}6m;7O!z)^B%U;y*9)qZ<qdtS)z z+d*HdG0^<2X6T^Bd=GVQRISmP*BJ4e{a3lQLW6-~Bzcn$tY$H)3jQP8<O(<XGLSGe zoU=7dw-m($Sg+v^zA~2$UTzI+e-LgiW{6w@V0K2O2e%Dfdw2b{RcTqEe5p+q%6l)x z@~k>R0(g;qM%uv%&T-3xZ<?N+=-J}|8dY?l>H>aqVq@YA<`D#p-%H$}A@;hzM~J>L z@tEM}N)Abvs<N)<c*aB|o*_T%tYZKEz&<p|`2>%}{VWj?#t>vp;_AWv_NsAt^R6rY z27gqN7%oq7=_gTMwX8d?ls6yz-9uCUl|)M8Yu%gcpcCG!TwH&vSs=_juM91$8kL_6 zx-#qfIXE?Ip9hNkRCRP`Vj@Ttby8RX_=~7<*7<j#XUJ7pYADqbnq8aSJR-q6<8G5^ zzNnjN_Ttlbi)jKb2^vB7)ynnR4#Ac8%iu^kUi(p&%?)2<8BMj$kt7Q$Z6@@-nYK+C zpd+lUsB@~vOrf!I;OK1da%$U*Hs=OT0H6Mc$g3OSVG-s<uB(K2yvN4AkEu};%0A80 z?^^7=ua8v#y?o{3!awd<Tsn%LnCntS+IR;_HeaU+3EV1Gf7>eA>bfr!GzuoHlj))d zJpk@6+%o~eug#57P+K7Wb2?*1^PJ5FmB<>l6`Ar`6t|+BP;SH8@1^&i=E^O0GEN)Y zTNI*M=*lBtyUs`-tuup+(9E3E+$VHk$#PFrhU2hJ^Zf`_CZq)O<8*jwalkoc9Y)zM z1zG76=vW4MaKrq<Rpwk$@azF2wv~UnlBmRI@oUb*r0UEtM^}AMXk}R3`}y(){jAil z`l<@sr&*n1;yy~yuhv^E=^~-MDMApB<M}>OFnMh$Ka)yDiJq5zL0#65z1Htl=K&IV z=3RXK7VFR~=U^?4Nl;AaTL0q>8b*WUx_aC{K+ks2J{QbgUaHF_dZ+Ea!~+BrvJ_>I zgKYg?z&CVM(oR;-M+XpCqsh6_CCa3xNID1pcB?c`vuinn2iuMeDPdJbuu=!g$j7>_ z!J$#?j>F0>;<B3Y#;iivnc6&)@(TS@)+Q4Mq?)lEQHveTY|KAuQ4?vpi+;_oT5m_g zAefN9Mhj9g4icM{ghZdkJ5yZ+9p*~}IeEyq$mTLBn^N~H$|D-p6)qiV)QbEA{fIv; zH6&%OQ+!)mMn7_u5?2`vou|lflWBHXvLz9<t|lPTkzc)}+rW{IW+TnTmoJ!Ti`^U# z^T6VI)n9hH06+RDm&82BJKGn6z2L7RsG|`ek3B`Xog5{QP5A=U-Se}4LzyI#&T`#h z@AHi)5SY6spcq<HK})QFbB#tT?!BkrlPnwl+E%!U)hGk<K-9P>B_rF)fOc^cW*trF zT<9<|)wsd$#;pdKR^l(m9B@x$D-$vbjET{hRw7{bms7@4)J8wwr}#}4ynN57m)Ex5 z4rjd;%Sax4tWQ>AO#Ja0Nh`Mpf!D1sF2EN_qJ<rlaU+C@eQn>7q_MWYCX*u}v<$i= z=bgvy&W|{6uo?{(&YkNO^%6c_)+k=y>tIo)nK1~F7nESZ+)D8_f0$Ha=eS6#i~ey_ zZY8sF+GZQodBcq`7dl}i!`iIeb(pjS&WyC#9PX~x@-Wsem`q?pf#QCnP-bkum?H%) ze9utYR<7FlGyx^}JU`tgLIe<naHC1;vf$InxcQ3zM#Uqf4!m39@{89JXBTRf-0$U2 zX05iJkUw`W$n6<c5biW^=JYPVMKxxq<pD`<9Dk>zVZ-2Q2rg2Mc8qZh`YSL&ZhKK~ ze#MQ{2fa4-?Uw;MrLhT;$~V6$(KPvcC)d`IGGsePurV;w-R(b7E5XcKR4quB*Hggu z3t8`Zs~os6iO;_jsJF$L6qGI2AE0X%ukOd1*PZQKE}{Yf?MQ=oTbGCgTy1)|0YJzM z8yNil&6q8llG+hfc%PZ-2@ET@i0x{_!X@&(u#3%Q?EBjoPRDlTX3z0~ZTT<Pb`S5i zZ6Byh6Ap*k3b2Lpxm134Y!%?-TXqP9=0&hozZ*4uvk2OJK!S$T;(zJSZV}3zM+G)z zn5ANjD5tou6_@1|g4_`G(DA%9803fA5ASx?7bk`&A$rr|Mt7>f1f8^iu80@ex<Go$ zN3pb7YvM{1j^8ytbX45^saOJnZt@FJD$-ArBui@1QW-`geD{XD@xQ2^#=Wk)=sOu} zcG=$jk^VE(D0AZsH5!+Z2<x?B8p-K(@*etk3jYSb^M`_VUP#g6qBY#xnF0=mo2F+S zspC)~=PzeBhsGzT73cs-n-M#nH3wa(%s$Fj-}8ggX}+=Ep0b-pnNv0!2x=wrY@0#p zqQ?xS7-)If?F0|2W%UlB(I<7&t{3Cq0p+@klq9y#(NW{|fVL{f>#JLrr*&iVDdkcL zsx^G=x+QUHaeX12YTbyP$6DJ$c;BDrP(P$elnxsYotPu~=A<FfuTnIdNUzm6YuO!7 z=X2ozv!T!}7BACM!2ony>~=4`s;Pjg(frN1VXhP}sb>Oba{`Z;)g2H`Yyan`LRS7K zQ|32mF%(&HoUmPEK01=0j^UYLa(u*s=-nW?Fba8fQ<uN5WVUIjTH<^W-?{oCCir4o z{R+l9ePjHmpQ1&AG!>5Ha)(FpA7S3X2pH0SuFR$P=B8bUJ8KETVNtk6Z`tiWW1J#T zrY+ffDGIfd(&M|%@auk#Z#uQt_eb!@NAU=G3(QNXqEloOpu1g<SoOU^U4wh0C`jS< zi9?JJINXWz2Ym1Ch^pS5rjc8FzK55MEomw*;2^jxqCo1OrjmRO=XSr`Qa{=xIhmTC z0x<Svp3*y?Y1r#aoj}2^O7YAlEH?0>S(xDZ?NyZ+6x#N8nM?3y9mt%lnR67~q{1AP zf-GYYIWjAPiAe=PUlgG$&)7FWc<dq3W&-jMHNF!BdZ_XU{j+6KUoTH(KVRc~os4eK z{C|!e?L@6}w3g>Pg*577m5V+9wRiZ|rU5WXhsaNt|L!OJ>!5g7P|~#Mizu5ur^-3m zA&bdUGWVz`=h-ASnPh5o01mHRxL@3eLSM)PEB!~ZHxg>R9g=UrMn9G%9Up?6?LP{b z4e>!6=j#jWucwIU<KZq7H_I%Y0^P^+w`EYOrrT^dsDd;tDVb_F1W+s(dxLx|aDI*? z7r2_n`^A;F+2Lh&-sApB%~i1>i@O^L^6G^EErX<x=xzE%IQ*XvgWZFfa?$d#7f_p% zqh0^3bc;bV*()})U3p+>$xy%-r-NTed-lAu&H6A<#)euy>rHBPWjN1QAkPwu@tOkM z8vc4RA-74ak3vK+7|U)&Lr9k*7-9m7a>xhtV#_JWW%=pVrzof*>o7`e0&aBgw_*;1 zz1O`}e^A`mqC@eMY+_<3sJg__&;#UMS?sB*7>V+{YU|V>7?WTWN(=)~QmWKjSH?rm z`0HLI)~6rx-)+8?T(05#%8)JeBGYf?J1tMyP3P|vgctz2b*_k5;&`SnF$x5i*7vw_ zXCcv0HtV+&98(k;XRQb8s}tPbOil$3&B7+bw?%tdOw%=-xj7<(9Vfq#86H3{+p+T? zOr%f$Q(!H3z3vYHFNN=^xe^X}e_jNiYwn1MsZ>{Ug|!6XQ{QG{&~gb)hh-+k+F<Gv zIOHlQ)5C^mTE_VP5RXUAydgyqpMtEvGc`8(sOohyapAIibDhq#rtSf;c!Z!U>h|O? z5RYIrvg6ozM4xv&=LSd$6x&;j=#aXyDJIBh1w)V_>C*F$?KxpL*!y?=^I7k4^UXY# z(I4Vg7+VSEw{ENIEI+f|t{SM(n2Pv$gXdoarc_!H1mR(dUv{!p#ZT=9Dq%S_25F5O z0@B1?Y4J+e$aRqkG)pJMp2i=DL!j$r<HHEgE;<OpJj@<tv{X96#VFNLQo;32_#?Ce zRidX!gjzR(<viHff#v0^vJ(dksWN-`i+>=)@|b;KsJ1RPU1Ch<2%*<AwTmY9&EtLR z(8btU<riN*^shvI98!csbh#H`-Vp0RKxLH5DePqipvY=Ud}|<dh4NC2A+H_jR>{k$ z6S=2*CMeMg|Aae|-=V{tsR0*lVxzKdi==KO*z0wCXX8MM|Ip7#1Wcf5QW=QHR3rRp zttNYIb?Tf?nWc_szGWf>yM(F8p#vypX;S~X-R?NHy2$+L728_)*B1LH>Kr8+_Scr| zO=~RP04!)>DWLzu|7o>x_Cm{Y$j^U2^g+nCQ@IzKy(<_8KBVd~!P$%)J>+)*-`)D) zD+p|0@mE0<YRgqoxZakdg`hq22Y3`Jr`80g984u>DGKq0jTJ2-4T+Dfy_I!^0%ra0 z$C<f5=n+4qVb#AanNFVt5_zQ6@+6#f)QE{fkco3n)P&&AxSL?U*vWMC9jFH4Bcz4+ zzfj=jsOy=ex+k0^ML2vd)D@TK3tuCAZ#ZI2vn;!`{&nVXHwKUI>4*0CcB5z)L#zg2 ztM^Zv&(Tzx;)F8|&VDC=EBsV1xG$-<XS5Uk>Z4o1u;S~JXlrkSDXx%4<sQK`q1CtN zE&zHV(2pPw#_C(&sBByMLJjx>0q4sDVvr5>Aj>B0rf*t4G)f+r#+oq1sneu2wCS}} zxo$koaP{Q4iy2hbGM!B|@TT;m9J?si2?i+myk#8VLCQl_{2^2L=AYzsi0YC6($R-> z5AN|3Pau5(Rn#cMjo+?dAKucotsd%j&>n-bbVS_t_a`bK=hZwEi@xKB)glde3p01N zr7xu*otSq&{9>UY!(Q2SHjQJNdOUteZtlgQHo2md_i-D~j3xT4cSC22Z6UAF)wC}0 z&{rNF$msbDyKq2*p!ur(TU3YSiCHaOD;+EwGG4avynI`N+CaVI53MC-YPn7(Ep0hL z0YYXuz$htEd6hC{V>22AS}HB^j9EF4b><z)Dief>q}XgcEe*b!-O*gWuJz+1(+Vb` z8i!XXN%>vK5#+^K4?qvU_HrrNJixzkUqwy~^mw(0y)I|So3bCmL3VxMiIeak$1|e> zya@a{S*#qor}G(jz4pEE>+iw+%V|Ppx~ME3|LIjKG}QVmXp7{?s);4W|K6vs?+(5M zzQu*H-3N{~P5GVv{pmD6Og|k|aqc+e1*nDKVienybb}DJNfm}#1bNPf27X=AD8Go~ zQ3y;1L8T60dVjURD2HivdM!*iCb-kt{wDp9k&7upzxl}&#s@oj^hxV8pH}7o_E2XF z$?0)QUOn7Dp*h15uy`G+b~LBH1YfSYnXsVQ9oNek1l=+`uQl}*0pS)F`h;qp_GTg{ z>0GJ`)dg)=wC-lEsbV@>{zbTCGS{s35}joNXjA`ttE(BkL{yWOZ>AET&8fjChp(Mm z{MI*(|MYeOApk$75A<f4OrhB*^T5?2-=jA(6y{@yEA&QP=JZh7K~dFf#Kj3E9FB4F z9b;p1QSx_~s??dwg2734$IkAlHcgMohqf~#l>yvww^{8Sp?zzNb-sj(%zg0uIyq{? z1d{k-@_6CZ3ppQKZkjVD(yw?DjqHO!(!{sT?8M`c@rQh4kO$WTdG+8g%3|L)G*^sg zbWaxo;Oj8Mw@fq#vL?LQz24;KNvX)p_Jk%1Zp<+8*@3>saDp&=0PbYh9JQB(CIKF7 zkGEGZ9z!e`Zo_GHg@y-@gi4_b-NW0udhdXKx>Y3-lmQ<ui}FwX1%9iuJ+ZU7>BSeU z-AveK?3}-~cY)){d9d8AMjb0$a460(S~fYNT4N8Nr~=&9$;5pMo*v|5jP+2{NZ0Kk z3Zzcu!5RWRzOPgkhNYh*()6WA6oe_0zPQf2!N#sD-yhMnz;NYey!K)mKzXm=G6aVU zW!KcJy`x*b)DOp_M0C^<x3azNv<bO)+>zJsjTFCG7yK#5IkE0Lz9BHLLplNnsoFXJ zJGmco&f$W=mWgD?F)kN*iR|)uMnt@s{+7z$sItCR=+IO7aLRZB#a!T=RIPcxP?^gS z*UrIRc3idB@@@+{>(ok-R(`sTDt>SAo1_O^FdEhAa=1OZR-e+LmtosV9D)^X^phnl z(<W~15OZj$Ekaic%WSz`ODAK;`!p|2uI_oa9u?KpXGuk_a;&$1qYTYaD#HaUvB4i% z=)bsD)KU=Z3U4JkKBt=*T7Q44dr=}sO}0Vh)L8IMyGB+9%(;|<@hKtDIv~o@+F1}O zQH3y%@}rm^mWDew31D0S%%Ub}4orb!D%PtLAL1NLelzf;v`#kdg!X7*;wL}#(Tp9) z=hC$xh4qVp88&Bw#?Rd#htnOM`3;GaNX)Leqli|x@k3QTG!Mc+Z;>p%D&@<1)&1G@ zc48y+4{h>#?|nTeaN;hc(?=Cd)5zQG&0Iq<^pG}s-9g4`xCSkA0oO<(%6c4^$oQU~ zXdMsRCt&;?LQ4_kAUrTR4jHvrzD>8NUvk#zf#d^ZdGWiO$lgtZkIW8)aJr)*GvIdx zGvu;KR?BctpZ)5Md0&tL*dp3)A65=EKGnK~Ja1OT{u~m>;4fP&^Cu@3?G^Q;f{eBN z*4KG>MqoRH@m_Zt1g&^=nlT(_+^Ku74+UJMMDy5E9lf1(@(oqi3iLR+7e;g2N=}JA zS$g3oL00}7M_WIugn}q(&d!My`?zqp?hU7rqAWwa6z7?wW2{8p_cObTjG<iGfdoAE z-QrMRt;KKE<9*E4foq&zPmLP(gqnI4CD3i*M_MBbKvKt%BJB}CPvTUScQH!SZy^wM z<ImKWjF(pzUK<O8MmE(VyX~~YJ*8F-U9V+))B4i%h&-o?s*Uo60M+c|o0P>}{)-}+ zVyfsWSyed0?ivN1#P@`p`V_n2$-D^Y%I&zJT>UEXlmQ8~IA6w4-PSq!rs;`BCc*-I z{yep>jzt4%X_GDrZE76?`N+K3sjszJkydVww1;VphsJt!U(9K8ZTb`H0C(%ieX3*P zf{<cc8s!OfC!(9!ib3v3L(1{U-&=gW6h&i8An8c-9$BF%uCQl19qwsR$IG7q?_k4L z#OXIq5c}dgCGVuib$z|B$5KO+!q(MBl=n=)3s2W^r3$Iys)Si3%gErN!l)y(c-NG! z_Ny1YSq{%SA52Io&eHK@?XkX}USS3-T+orJ0GF2Zf%He3R;_-!^Rl=tuzl{|r;A?7 zG}*%_9aoZPWY>Y<*TB+TyoHI{#V|Mo){9IrXZP%+!a%Oa_1~sSvu*TqAML_-pIC%w zPR&M*o1S`l7>9ow;ls(%-YE|IeYT4U?YXQ6H!sHT_pp;kc=8azSv;?x`8^xx*4q@C z%uH^zAb(NoKx`a7%crC?M>94%R-e&#kybG!kwX9~IKorbp&!P+0nvz#Go+Ami1sY< zbOLv|>=N@K9tuSwIe|Sz*UE8DhWpeM;~zAxDoR!Pn?(zFzV8<U(lU1yr24#$Q2}h& z*oKJ0Y_SRi-m6{GyW3j=)TpEe^kJ4d*%><Z1S|Yy-?VY=zd8CLA&{I=N%s$^R3MC? z9})R3Lk7IF8MgITAUVj0(8**UNkdG#meW>`nbg|Xh#PxSJ$ZhO)I1~$>&k)NiL-GT zM9sa+H-MK-n7S=RLuSYP0!4up7yQl8$Ne?{tIQC*AN8bcmo`E9EG}Edds(JLUH7}$ zIv`OLk#qf<d^V_-$Fn9J^j+Ua)s>ru1Dv9U#6<h@NrNh!gsPg+2U0a{8AB-Mpz%4u z*iCr7WxhsVioVS_mqo!u3A8k@h)%5qC(4Usz~>P^0iLc*F_!P&4YT!6301P|!tlWp z5vyD`+Dpu$Z99K-&2Mi=*LY>WTtyWxFm`t8Sua_zr&F2??ZU6KrKaX2!LwLfB_&jy z){}^zuGrNa5zkFJM}Cawu0wIZ;R-Q8!?6(#s!-{x;TfINz#VUViP&0=x5su;D#gC2 zLKrx~ZAg@sUCvo<Wxa5`cFq7sTAq!}A=f9{1`H#e9$MZz@z^#mAKc2ouzZaTq{+Dk zb?)1suRUwu^-@@d+}-<20)u2CqDFka?zqBUI@$;#f5K`VG{031-44&eLH6Tz-&Oa| zDA<s}{iNxyh94+*gGljvIui-C44=pQ!iA?5AVspu_S?k#-tY)7r8eLs*D$D#e4R<l z(<u@o_f!ZC3aKdSK8?j$DD=p5DUa*EJIfsi5N&9`)v-CzGJA}Q<oHq`8~#K5>_b}D zqV1(i-_x*j->`9_ko90vqmmr}QgBUlRFlOMwta(qX$m@13UmSo;ZGnQZQU||VKl&j z=O-fsKcN4I<6TiQAoF+KinZ!+GE(a(S<^8Rh#(O6nBCzI!A3W5C~o1lY#LoGMjX~! zo-P>-`BN*olzVDJHo&j@>5z~0B4w548~}j2=Qu7TODhN4Qs$^REa~#*f0l%eTHA?p z9#zO8n0*=>_FHj(hfwF*gkE_d*TEI0#9h+>_V|_=9vNoTi99S5o+sL{1MV+7bXJy^ zY@%3}#2hQIOJMf5J{60)4|eu#DL65AHknFOL%z#jH}PIM4f*coo%)(0aw^BgM5lfC zTZJxV^w*lTs+T12Ho@TaJag~r1%34+8k)Q6h5{<$-`FrLjR6%dJB;l%$YzF@JUBsB z^)z&@|CO;3mC0#>OsZli%yxJ=r>OyfhNm%R#hVOjTk341)+_%lszbs`!@ikBC1loK zP_UQL!rD^xt(~<=^vjs9oK#^{_;n5ky8ifmJP!SSN(({p(LeWVY8s5)I7cGxhaq=K zwg7?HFHu)lK2FbMJUBuMx)u<BlULB?gtgSyf(17?d7Bxy`<90liVFCmoVON-7f2<h z_$p4-5*e1=3~m>Hh1AId{rUSAH4JMyQded-qREjbZ~4G~&G-8VA~L7AgKWhryd(tM zaEKyqf37&pg97CgA%c>ZW4rWTl0~+SR%|TdCcmK1y*o$%#9R32{a9!Csi~uUOxcIS zx)rp|R$t}Grvdr*mal%RgYVKXuI^L!j+=SaI;j6HsLnE?T$S<j);3(;aosMQ9e#D< zp0YJ@Jy&<_B-o`IJ$Ccq-u5aGEeE|A|AOuc%W=)o;?EbICU31=C+cbxH^$VggX~F9 zg=<9R-@@jtMyI*D{8r1|Xz?GIW5};n{0Xmf`ubmdPLE`$Fr`5Bps435)jzNFlhcWX z#<qjvE2!&;F^3yeTCZgC-`WA)E=IJzaZir%U`H8K-c`7G6cZEAQGAb2nffoX^4<s= z0e59j?8DvkLqG338#j8Nu1ASXR9Vjw9J#3;F;6LaTkjnVx-8kdQR^9)5%$U-n}%^K z)DtrsQh&BTRtW*Oy-ncySsZC$8l|3$O6<RZz8Rg8qt9uu8N|7`vcjsPZa_ChzwL)? zZ137Z7Zx$?uqov_(Dr}rimC;)=045+G04j(kP)&6ew5@m6t`h5SfTvBqJwC`Lbo>I zN6X7hP@(Q#E<h!fT@|0^Q{nra;@%=}ILU~Oov5!UDOv%M4xmWfyh?M4z|Y<ZF-s;U zJkBZ3zDV-~a>CFp(XPrE?u(d=2>bJx5!k7!INLR~D($!S!@2^UM3}o!u1Bjy?nJnG zxUu4fS_~K%+%i!mtHQ9eVB1$Ad+*_JJ3;&vUfzxNERZpD?p4u#`XM&HEzV7O!50+E zqyDNhQumq&H=7j)gO-7m-Z4qD!uO}wW7fzUWFp!}f6<wH6nVP-hZ5c@mbq}8iPA;U zyoe16ADXSt)_Hbfr0)Ee7ZW1epA^>>%*)o2`bRPC$>zl|HEO@7evBvVyo<0h@XD%N zNvkgx)a*^$7u6fRU&9mA-b8eP`>p_OUQDWVeXw^=2aAIf8!jSGfe;gW;25!MXS?{b zfn}0MEj?U#wje4M|Kksx)a9#Ot?c5G6+cEor2R+<Usau-LWx+ts6FWiMn7w<h?*j4 z>iCV0MozhKLYIw#NDk#9&3DmUojkwo3EE+@dQO8%Q6^9>WErqcodY84dVqD~5`ifj z2DhPJL9#BaLasZH>=MZ?`UG2kTtd}d^*-<N@NIM(@(I~WO4$y6aTv{XhK?_D6VP#i z#k79-kSMmq8aQLj@R~&&Dnt!7x<aE{HCvC`kp4ReWnt#;{%7D`uT(?gm=em=evP&< zveGZohUMp~D<=D56F0wS({|UV31cn`OhZOj+^Ta|yy0=1PVVSvZ^JP{mT^hlM}$4M zJT%Qf?y{Im<A5*CW&C;4a_d|g5%|cR?p|-}wjt=t+xOwG#{QMlcAWaS=Z_wJC+!4l zkbHuG%f!VI|8?azv0!WkM=gFQ)kRjexHL4%!<cKUkTX~aY(*1&@x!MI5EF;a5kx7C z*md)xSq?G3w(ESFyvx&&`t<8<(iJ*z9I^SDN9+B|B-67yA`+Y>1?+Bb05O>)2p~+c zC&egGo?W3t+=qb;*A|<6dtD2Y2vgS8tFJt7$C^QTEu64eKkJeI#Zvxan#wxLLT{)( z4qnMpT}4_jUMggWJ_7z20*M8xWj{w>KO%r99v!ovm*^$UhBti`Q!?5qj{Z?ze=2Cc zomB^9ewh(ogwtu!JNdH^Gh^G<TBRTD@Opg%JeNf!Z4$T)Ka)21^W0#4?SbG_#ROX# zfi#G4SI%lh;wc4$c+bN*!`9!M?>8vs?#3?8EJFK(RF3{VAHPftH0l!)Em|6*usm|> zzPFrSwL7;00GIx`?~??81JbMJo0Ce2+cvp8f*!7@f4&b9gpN|`4!gby4qDEJOA|?5 z+@&i@PigmBjRfh}kdB1j&pgh{;+WDnflEu-iq>leVX+(}H=^$<7aJpYJln#@+_%o{ z7A2(OktgHXdVBKM53qeFt$i-imGbwa?D0$+J0NbZP%aAD&_s271MDSRiqm>(_LdKn zM!)x?qkQx^v6YgLtxJ{;^2(~~2wYZt`({yDKS^gfl`#T4<YQ}cer`~hk2S?K1|&q$ zqUTMs<+ZfZ{*+ytkL-AOn^LA<3h0lUz|NPKb=AtNay6RzSIk@W&WPUy(_v?S#a(Pz zBs1eI0FU5HZc%Dq*V*K+)xZW*vQ4X91HiCvmzJ0DLgLk070HY8SDiF7R&X?2@SkvC zVKP&KAdS;AHb}^lmouZy4J6ddPY>eCB#~J8MG8E+`*HX24D-4fw-F}#x*AnbqPT`{ z!A;(o;{6_7hSc+M2;Xi{Fiz5rV$3DKxIjjT2Ysrg;Xc?7?JK^$DveAUpd2RJ$7N9P z@z7O?YL^yJCh@3y;l9UfEAJwSm|H<xNGA3T^c+dGY%$?q=)In#wmx&KYw!PN2~`K< zjxgWC@sG4QMvn+q#pM${n-)rqbOx(is#<BXMO^CV7NfTJiM31)PNv-9Ktw;tSQ>vf zP&2#^3byT5(p!*g*(MnqVsY`UUrb~r&6?3f;o`OT{fXfu`2_xYjPS-ayWu(MB!w|^ z*2bjuL+xQ+{pQ;SGol)<fx6gPlE&EG?^x})t~o`<_Ubq;aq~=^8}m&`jaEH*b4b`L zG92m}<JBjjt$xlIX<f6U;}PIgV=ih2rxK;RVrnE?xbQPI@u<E<-U17-mkscAA_9!? z&j!4OO5@H1hlQP|p7RyQk{z1`$M16CTZO#kfvjv-pEW9miERBbRkHu{pf9df`UkX( z|8UsfSutqmF)qCgZ*R~~a~-}mSp366_T=Um$Ku(-Til3J3a3N{=nBnEkk%^{sZ&Ox ze^*Neq&gY7;hgIf)jhv~5HrR|44}Sq_2M(Xx?E;DiLNf1{i~ukb&FpE3=K&-lmf?z zz$Pu<2&ZH!J;Yl)M&w9+3>NCd^`x0>S^xLmqm#Elmzufw%%oC9ndEApf++30g!bh0 zv)>#Zdfj3F(Je9lf!c5xtnY)N7MI<P>OJ0~h$o!g$hgGcN*$W!=a{?3d`~WD2ml@R z>6~LQ&gl&-77l#a2hn=VP9v@5BO7B%KM_Y%qdG`Vb<>rgr&tGjmvJxC9;8l}#@7k^ zwj(S4POw{?UP0fBc8w*KIfm)Fyrkph$m~D^&ajpRFjgYN%QeV!+V1KU6qtsxRi~qS zIANBM|9ZctH3Y^D$zQ>5vA{o0k;F;%|N7-$s_L{fB{5llA?;b=wH~gl@qvKAxAGR6 zAAa|gy>>3Zn8LpW-pM8LEXxE@rdM*kzMOJw^Zl^fF|AzyCwmHG2*!54fG$(sz>f9) z=KQg%<eeA909hc}6C!6(V{9n*kDe=qVcAE-jj!Eq<`K8GidI9mKoX?3Vxu4ix89}$ zm=((hPnE<Pr9mAC4X6NO$kVf<phGfFN@}B~o9{K*AUx5E1QOgN{QViQAb0qXelMts z(msqx);k|OX|(91`S7CKZ{J3;=hZgXv^Lp8MfMi8!K)uvXh*i<3-J9Lr~tCrLH3gC zG8eA=q*UB~5Zxc@f$t`QPKblq&3J-St%WhOGy%Kj0L6vS)@9ijxp}LdR<s4SuugTW zkBvn@wC(9h^0O4FA1f4lrs*cGttT@B5trDI6E~VRtr>Lgpw-s@>6@okWzeDsc0(MJ z1s=@}9~px;VfV%V0AZX4nu(!Z+`S&F(<GSweyj|?iBq?Vu!)mr%Im{NL~g^tLL*sy z%9Fp!{{82;`$9M)fToaRY^f@jls8isRSH!smLmsl^?q}hx|KI?L(A|r2=86~B&y+F zSx0L?Hq6o2e8Y^m4=^<<l)ncn&p%K>{CA%jMDsYEZ6|q?n<6#MoxxP88|tp`9lSL9 zKuVfyai6Nl@66#56D3q<$!;xxogm&`0s>)Z_oqa2(Zy(c(r4pC+TVZ5bGwa@qAB)W zG`J(W<!D;fT9yS>BS9%=&HY|eDZT{R<pDiw(zs}Il*PcL0sc!kBRZEeR~W{Oj=WDz zklPcH?d)S{tm^x5Bw&gWi46{)cX~1u`n!^U)qNBh_g=225_u<YJss7Y0=6O^A*c@2 zCj`@zX!BF8;BNR@^)S(s=ydJL@=ru8?`#acC6a1%_t{}oCN+;Cr5)B6Ovpm1G<-QR z&m>-EahK3Rk2|?Hi^QDc9XvOTJx}N7OrJqdUBI}Er{|2n{RKetqxAB5f_6`KQh86C zP#{QGKfHLJvEF+$4_e4Vi-sU+;E+?^oW{Tit56muo1p%~PnMB14>+Az#fl@)NrP0- zF`SiqzAY|1C`1Dk!FieyELeTB-^q5ozeBh-JoAWgp-F(F)F?1+k`K%mc0Jx>{}IE% z6ocktZp@R^G07^pz@Y&hW=6?oud6gT-Iz+bD&h|9e9}&;ZdMDzBbdlL65!0`T|UN4 zp3H{xJw%n@vk1lCY)n=j5qIw`NkDnUyWBuwsQ;x;+KlA=m%ubAkot>6!+cQn+dzzz zOyC<vu-%_W>2dH+;c&N0V~9k(yv%UkrUn15-%!S^ha_F?D0;i{N&c4q#gBkrP@88E zLhV%+*2KdV28C>Bt$H}_^Fj_1m=OctzfsCOwgoQ_y~$gQheeQOHekNULNN11OIr-Q z>S<%UqGZ}Yafy8Ta;Z#rUb;_%6of1YxYK|ude0P%-z>V>ZWb88ZJahb^wQRUk?v?F z1XJO^iQOfq4f8$b+2&gnBo<wqa=D?iq$}Rm@LhpYdTA0#Qa<K5Fl;02=u$lP@EWeb zvjUSobV}~iBu1U2*A)e;Qp3R~$HI(Ou+0vmMt^deJ!Or{@)bUNmQm%o7Q*K}t_K~9 zP9CnqJ<+=>ZL#u3VI*!)@ALxC!An^1&Q8@jGk8sSZ1y{;a?}oMB_M0QN_uU+P^>Ik zIn4-2syEE0(bBjJ8IkqG3ZFm9QVU~Q`xA1!H8YC(Tn*b7alR_Xs6i?dyb-@byAQDe z(d>chtFWnQe{NyeVRg3C=3(2TotcrgflV3pSdfcP)EJ_N!PqFeds5|K_74Sc92eHr z;z`Y2k{6uvT{_WgXT69xlb?y$mis#T7{_nt27$QuKg24175DhpWCuZJj$5_9O9f?B zPiOVhrxqrct`<%6%nR=TWnLpg%3T>=#&q||tX?Wk`O}%mnaG7i*FY{&7;+CUB(&m9 z&sZE76;2gK#@A12b6dm*W9+Ai?K^}Y>4fHkV_ghwJ2U0dY<!*BBOct44edTi1l<;W z^ADPa<y;>vJNdSm{&(`N%{W5kz0uoJ(y!bS)kcX(jrjuVHs7v@sq(#C0T+hA!zc-H zFLyz1Lk=%eQX9RGZCvXCL(<m7c0$^qM|%S{3fQn(?V{&}I5~^o&vY3i(gDHth;X6+ zqKLuSE-Gm`0yUWI=|w_DSgdL_!DVBA;&Fk$bDnQLs~fmi2&gc1TV%7Kqw$sO)r)q- zWKNp-t;0pK4`d^9PTgJAC`2+NND{~VH6qxSS9^)p;N^BbmJoVyn?5dDSRg<hXMwX| zc^M#xYBLTMh$HkZ6V#c$`5vb|IjPN=q4KR(_A;6%+#iTIMfnAlci6U&Lb{j(Y~^dH zm25i2Vl|&{__*Hbd%OG?RJpaaFLApWj~2Y!I>R6aVA7_AZYx>45efpQEAuu+L2(=l z0?p5kqCARMt!7~|;V~MlGOQDxl&#LnD};FHC#Vjc5TQ1_CO)L{+b1B}P4)KG*ESUX z^pcL-@wD8uDXlF~6P6+%7G9n;&+LV#A+oj+wk>olYaN%zVPvH5AukkQp)m8~`rH*T zTev1W9S9y^7%R)|sb5jYgtj#WvTD{cPcYjAMHL)X<XAqa5qFWmz#{PHQqkMu`guX~ z*XVe(pGY*Z2we9$Kp6anEG{b4*xVqU<I-V1-iS13n>q66pdDgc<^TYlbu0zFe{--W zhRs<yoWcVgL_mud!fBc#>D$t0Q@OZToWby~X46t~p#Wl0#u+=PoE2z6tTYK8SX8!p zq`FCmWcmRs;y5`Q0Yp;iaKDqPMgUD8c(c6wa9+TXZ&R8i8<kEk`ddINV%)Dd$|@xX z2^C2+q+cBY>T?f>yk-=12t(7a7TY#&_r5^{8>zL!K~;y!<&4kwd}2}|Xei2q%<`<6 z9NUhe0&LRKN^I*JC0>UKY}o%V1P=T0?Md?qnuYM~dWU13RQx2`*aT09Y>_o&48AP| z<{{^gNv9%L@Xrs%T9|>8Jz07`ay}p!BNX1|V&}%%N{(x&tF3uYp!q2ad24tX+PXYq z9|J9KY07M^D0Ve2baH=Pp$o0y-<%5XI+FMM#s3}Q7OM~Vu74*IfWsBL*K(;?U1l}y z)PWJ)Z(*=g61~XbpL4IaNw{a|&{P&dq)=b?vj>le^kXUUF<UVk^}LlY5|KEi(W)bu z+m`E1G$VHOT6};27&iv?y_2GcKYOY<;lmspN?2RvJf{?bsvF)wS<o2rxuds|Gm~z) zyXpuiOx{~dYR4%AH(RC+2uh}4-WtDYsHLC%p4PQg+ZmgQyd|dsx=TfxY7${aa%@=% zWapwTe4P3_KXHZe<8Nc^meHbb?AI61Bs0T9fVtOh$d8eAfT}Bbs&F#qO)jX<hVzjb z#mRVO@Q5-~8y63qJ8kqqO;UcjJ3UbH&x*8Voe3tvus21{(7T&B_A)R}wDfs4s7Tyt zncbp|+lqA^J(sOsJn~Y+-r9f7%TI@~E1fVz9=Lj?nZVN)w=hfRZ1H>NbBCRapvuSA zT<ZYUSk9^<7Q8_E3(`wB*{;_QSoEQ1-c1l}+{<ul;_5T-&}I<6H_`7NL+&~^PC4=} zwNa{yW*ob-k1comD4$BMJ`?P5T=PFh!<)2q;^JK$(^;u{yKuI;v=&c^JgvL6&sA9{ zASY7U%uXJFLxlam?9WaqNB{k4pPiE<itV+3X2H)VC)nvYT?rBTC9E4{SyL-HLmtBp zpaqPuiL~A%6eXNuJyk(}-pVW4Nt?u&l1RvHg*N9W%(N>4kO!WaoX&y6ygE-lXC&?3 z_~%Wf$`0=tuUd*^Ck=PGOdOlu&eb%YrZB-e^=!ws+NP#z%o+nnO34Ky0m@3~e7Kc1 zM-DYps@>atDEqG}_ItMkgF39QmPT|buql$GMkZ^qh$9#fo@^qHq8@<a6l^W(FgChR z=LX0StP<4B%CzTnL{`bZ2oF*FRM$I5vXaZn4}Q<~{;c|-t@>;YKi8t~Q3A2`r?J8) zH}?_@E*0iLm%E|nwKR2P{UC)&Exk>g8C+A@;yJ0X!i;<hB~(!VnV=uplCFtM6I)T2 zR~SJ{hU?gLtau{}>Rn3a=4P=;TN694a%~1#rr)0b&NXz9f&hH+nKx=Fhe)#$x-v1z z>N46cq@T8u1QhV)?|=%KCzcb)5y&K*w4;m#HulAH#rMO3AiLM|cMUQ7a@pQo#v*RU zB!B97UE-}}d)^K3e#QqF32Ox+1>~mef`lqWCa<-lX8Ff~mHi)u!wHnnIZann)hixt ziK5AifMWIb$KF)Ux4I_|U>qax86iBCHiY%Sn+$D}zHCpm>;Ij%e1U~`7>#UM_mSIO zH;5>s%E%WowPwr6DIsW~ZL9H-bupSQec(y=l;#<Sw6bZ)bn7SJ(yvi8x9f<LYBxD$ z_l+LvHMtZp$4Lg4flO)ri@m9SnV_sTyrBP2d8XZ0Vf`}8%z|gvmk!6?=aQ%SdI(B^ z?4(tLmOIIHYI*-&97OFRI)|6S?-kcBwBCmGxp}odZ90}D2$1u>SLeCM!Jq@U4s7zd z_{vJ-J+U(I9z9ZpBK7aJA!96s|8X^=ZOlMEM{hmDI)Nn@6o@ed@md-&%fEXYjPE0- z?)~9c8PrA(7Xu1<bEuGVOGr$-8dSn}@l=Fikm&-0ofy-@XxSl#6fwR~Y1+0v{R)H3 zASgFkl6T%!pX~3n;088&L$Ho^wUp&DW=oi4CtB_0JA+RS90jDUsS}@hEB6V<3qeef zW9$<wk10$qG-@ziGV%W31*yP}=*Y$nS_sVC5#16%qO+n@@jT-@@U&r9)f}#Tu~uEs zC>hqG9OJ;3y(IlyJ_*|b5=rV}!5Cyb2leyC<H}rBL5)080e$ue*!4l_17&mEAwv10 z3elNEj6`QlN6|N}Z)P5MmLN)XBAnOH<*$^SW9qn;9lK`zLSi_)m{BfZq7-Jhu-tk& zrk<|5uRDw3)s`pEpt+pBLClKZ<a9D`w91*ZmcnOmq2ALlB-}4f&++UP?IK~*ZeM=f zOge?G_+GOyCKLM}{fD4)#rlyIU9P0tG298bQAX2Gw}rLnYjU)cDHIg~)t~VUo4k46 zK?QIP<o;zo!dj~>O$b2rY1TZdC^ZI;rcU;3=?1;rKu*QG$S2YKbT45rRQQwVv)zd; zZhu3!yNxbKXH<oB#_)oPLtierF}B5Q-_7;nLUXcvl+v()CjW%2zetBb?Y_nyc{BOD zo30WPp)?#|o#w|-qoYgT2#HYJ^b1vEVp?oepUUr1?oNwHvlBv*+>EVT_Cu&P+0dU2 zllgmE;40n;5WIfQ=4imR&f*zNVhl>ya?R3whgMrZFknec80#xJ7lSR8cl@oi*q31l z<j7Q-3iK1FR8v)KtPB&Rd%=L`{Tqr=e8&`)Ry7YeI?mR|_i1dYGUc3F6XB;!5W<gA z@Mu=k>L|YC$&9Vy1)YrU`!^Qh8mDpYT5o`4Z1_Ms|E%FNea;YC*Pc?_^fsHE;yWNP zP&xI$9J=_WwWE5c=tZ|Tnrg)XkNMyGdEn=xiMQyQA6^dCs_t=*g2sC$2(x8O`iZ{J zHn8-+TTed9)w0%ONHKZJ1s#PXCoD{0Gw?Xx^t{i8rJk>(RUYy?avT*Rmv9g4?pi?A zEH}%J%L?W_q0B@3b#SV)`ngE}PGA`}ySBgi+nso5x1^iA8e9HmH^$=4W*oLQD17Rj zeP|-+jTJRDK_LduiN)bmnrLJOj{f9?D)@`|+HX`?>-U&nDg&=o5jLhfpW`0r%#zUI zm0BE9QSTIZyg(LL*$7bsu^Gh>a>d6VC;to2q*g|z#i)bs76&=x&adMRVMeH0z;z)? zkWxM{DUCDJTsfodTjKz){==w%aYWL1i!|h0p5*$zYE%9Tq700yiU%naP?&_bsW-Qy zUP)2yo{}56nAdh;I)r!Rs;=W(y=Oz$Hz%cWhLxa&V%Ssz3=}01Og|<KW=l>BZB(XK zIxQC3EpDDOzr#jsQALoC`&<boSto&>^E+`=U1&r;V4c0gR|8GVGiEpWm)4YO5F>Ke zQ59)7ldf$n2aX(oXNVv-->P2O;FJgNcIOJtfD}}1paM!nRB67njxTJ?h>y9eHt7NZ zk2T%}fI5z9YR`%m6+xZScVo-EdcCSgUdR4={MQSPL6<motUQKbj%EY6hd{1&J6S4m z0dpF%d2Li!GciDvXeR=(Vp<>X8s5B@u@V|6-;0_8pUr@8ulMJ~jmzl$wJ<WI3@d2N zo<(-0im+*`O{NV>CK)O^q39#k0E<|;;o65*_b3e~v`-plf+K)9m5Stmg9t-TlrR7V zf0;yBX#zcQ*QYH9!<?OrVSlD8{t>&&Uro7N#Rd3cA>-EK!tf}1<t4GC_|23Shoh&g z5|DriyK__0iVdrWAL~zc)eXs#I1Sz*Hl%+%Cjh|;)QVjlCqQP9yn+2Jjs(Jh(v&CM zTu?jF)1PjROP;FN03+h9;W==0xhY9{qZ<S!P8}P)rSS&^Mzq!^1U3S!OEJO4>Q?sT z$_Z_D7LcPL_a5!+`(Yi+X4za=Zg3->ZjY6A^!i0R2t>Q7uGnSaD()v#TeHIdnA(nj zU3@c*T$@Q%d`n%7%9z-J3y7RkmOGUAPsn-NO}myC{KX@lAWiOdvrM6VvgN~wHebsF zEE?6@Kw0f~ZPdN+lj8GEWPt<&PEgj~jY@>h2hbjKZ_uf%5x9l-(gaYC{&gnINpO^Q z(g9d_1gib+m)fk}L>dy>yfG-gNG|KwX{onu{P7n`C*q_be=iKP;ju-KOf*2zjyksF zGvGg03i_H5x`}5tK2+cZw9~njk}d1=X~tDwC{3S$k%0;0#Q`hS?4@x4a`G?@m7XIv zv}2ux%#yxUY#rU|v^wv{L+#k5fB#;B|9XW?Jz=JAHZtMLqcT;Ws>*)46czs#;dqAB zhmw_ZOU|XQQaJM4Lq`0tL$Qo;M11MdU(NCu+1+%zC<1)fq#L;%4mw~fT7`X-uyUDb zy(3ZjcT5oIbQDU+7;$N^KxAqk|3EhHR9kcWly^a-HoIZb--|})=eQ2_H*X(+ESVZ( zTJfP1kXL2m?`kBS1#c|j-&fN8HpgIdG9N7@Y@W3)Msjq_s~BLg`MCHF$M!-Y%q1nF zE01A97j9{wWSy;Q+vH)mPj_d$O2G!{=T+TOG?Yt$F!OKiad$g5&D9_O0C#q1hC|<q z5bW9IJH<oMo@e#J3%gjXUt>rt2Z28M@}Eie0k0$eLc3_KfKU-;pYp(>ak{wIoS4|n zFa{ZrM<n~8mA0#QukOFoP+M*<9sOcYMoUe`-bSN8FG5jDL+C2DF_v=rgMyfzf2Tv$ z-~+_$mfW$2pABM3?9b}l8pJXi?e13JFK{>25?_$#EPQT|>3F~U?E6OeaGPpuUQ{NX z;aNcU4DOu^$sI6{U<)1GrYm^+=Z~<cTsn;XO6kwCFM;sh1as8Mr2k{y)bIa(4PGO^ zr(F=0O)n9F@k$@K-(IdgauKiyT2n6|i7-F^|NsAQ!E6I;8KHs(n3m;t$Dk845-t)H z)wyQa!XQsm|Ix^!!O&7rw283@oUkG926dDO6kT17PZp8Fd}rtLN{$$ip0s@HvF$iP bw=o3+RPu-hQr*1SJyW4h7>T1=*vx*AAF~t4 literal 0 HcmV?d00001 diff --git a/technology/applications/mobile/TrailSense.md b/technology/applications/mobile/TrailSense.md new file mode 100644 index 0000000..b40be4c --- /dev/null +++ b/technology/applications/mobile/TrailSense.md @@ -0,0 +1,11 @@ +--- +obj: application +repo: https://github.com/kylecorry31/Trail-Sense +android-id: com.kylecorry.trail_sense +--- + +# TrailSense + +**Trail Sense** is a powerful, offline-first Android app that transforms your phone into a wilderness survival toolkit . + +![Screenshot](TrailSense.avif) From 2319bfb378b56f9e1d8b7d4fc6ad55227f70782d Mon Sep 17 00:00:00 2001 From: JMARyA <jmarya@hydrar.de> Date: Sat, 21 Jun 2025 09:59:49 +0200 Subject: [PATCH 67/74] add k8s --- technology/applications/Applications.md | 2 + technology/tools/k3s.md | 76 ++++++ technology/tools/k9s.avif | Bin 0 -> 144237 bytes technology/tools/k9s.md | 11 + technology/tools/kubernetes.md | 343 ++++++++++++++++++++++++ 5 files changed, 432 insertions(+) create mode 100644 technology/tools/k3s.md create mode 100644 technology/tools/k9s.avif create mode 100644 technology/tools/k9s.md create mode 100644 technology/tools/kubernetes.md diff --git a/technology/applications/Applications.md b/technology/applications/Applications.md index cc3af9c..94ea8d9 100644 --- a/technology/applications/Applications.md +++ b/technology/applications/Applications.md @@ -300,6 +300,8 @@ rev: 2025-01-30 - [Ansible](../tools/Ansible/Ansible.md) - [Docker](../tools/Docker.md) - [Podman](../tools/Podman.md) +- [k3s](../tools/k3s.md) +- [k9s](../tools/k9s.md) - [sops](../tools/sops.md) - [serie](./cli/serie.md) - [usql](./cli/usql.md) diff --git a/technology/tools/k3s.md b/technology/tools/k3s.md new file mode 100644 index 0000000..94ae2e5 --- /dev/null +++ b/technology/tools/k3s.md @@ -0,0 +1,76 @@ +--- +obj: application +website: https://k3s.io +repo: https://github.com/k3s-io/k3s +--- + +# k3s + +K3s is a certified [Kubernetes](./kubernetes.md) distribution developed by Rancher (now part of SUSE). It is designed to be lightweight, simple to install, and optimized for resource-constrained environments such as edge computing, IoT devices, and development setups. + +## Installation +K3s provides an installation script that is a convenient way to install it as a service on systemd or openrc based systems. This script is available at https://get.k3s.io. To install K3s using this method, just run: + +```sh +curl -sfL https://get.k3s.io | sh - +``` + +After running this installation: + +- The K3s service will be configured to automatically restart after node reboots or if the process crashes or is killed +- Additional utilities will be installed, including `kubectl`, `crictl`, `ctr`, `k3s-killall.sh`, and `k3s-uninstall.sh` +- A kubeconfig file will be written to `/etc/rancher/k3s/k3s.yaml` and the `kubectl` installed by K3s will automatically use it + +A single-node server installation is a fully-functional Kubernetes cluster, including all the datastore, control-plane, kubelet, and container runtime components necessary to host workload pods. It is not necessary to add additional server or agents nodes, but you may want to do so to add additional capacity or redundancy to your cluster. + +To install additional agent nodes and add them to the cluster, run the installation script with the `K3S_URL` and `K3S_TOKEN` environment variables. Here is an example showing how to join an agent: + +```sh +curl -sfL https://get.k3s.io | K3S_URL=https://myserver:6443 K3S_TOKEN=mynodetoken sh - +``` + +Setting the `K3S_URL` parameter causes the installer to configure K3s as an agent, instead of a server. The K3s agent will register with the K3s server listening at the supplied URL. The value to use for `K3S_TOKEN` is stored at `/var/lib/rancher/k3s/server/node-token` on your server node. + +## HA (Embedded etcd) +To get started, first launch a server node with the `cluster-init` flag to enable clustering and a token that will be used as a shared secret to join additional servers to the cluster. + +```sh +curl -sfL https://get.k3s.io | K3S_TOKEN=SECRET sh -s - server \ + --cluster-init \ + --tls-san=<FIXED_IP> # Optional, needed if using a fixed registration address +``` + +After launching the first server, join the second and third servers to the cluster using the shared secret: + +```sh +curl -sfL https://get.k3s.io | K3S_TOKEN=SECRET sh -s - server \ + --server https://<ip or hostname of server1>:6443 \ + --tls-san=<FIXED_IP> # Optional, needed if using a fixed registration address +``` + +Check to see that the second and third servers are now part of the cluster: + +``` +$ kubectl get nodes +NAME STATUS ROLES AGE VERSION +server1 Ready control-plane,etcd,master 28m vX.Y.Z +server2 Ready control-plane,etcd,master 13m vX.Y.Z +server3 Ready control-plane,etcd,master 10m vX.Y.Z +``` + +Now you have a highly available control plane. Any successfully clustered servers can be used in the `--server` argument to join additional server and agent nodes. Joining additional agent nodes to the cluster follows the same procedure as servers: + +```sh +curl -sfL https://get.k3s.io | K3S_TOKEN=SECRET sh -s - agent --server https://<ip or hostname of server>:6443 +``` + +There are a few config flags that must be the same in all server nodes: + +- Network related flags: `--cluster-dns`, `--cluster-domain`, `--cluster-cidr`, `--service-cidr` +- Flags controlling the deployment of certain components: `--disable-helm-controller`, `--disable-kube-proxy`, `--disable-network-policy` and any component passed to `--disable` +- Feature related flags: `--secrets-encryption` + +### Existing single-node clusters +If you have an existing cluster using the default embedded SQLite database, you can convert it to etcd by simply restarting your K3s server with the `--cluster-init` flag. Once you've done that, you'll be able to add additional instances as described above. + +If an etcd datastore is found on disk either because that node has either initialized or joined a cluster already, the datastore arguments (`--cluster-init`, `--server`, `--datastore-endpoint`, etc) are ignored. diff --git a/technology/tools/k9s.avif b/technology/tools/k9s.avif new file mode 100644 index 0000000000000000000000000000000000000000..c252fedd4206b4687869a40f435ecfd84a16409d GIT binary patch literal 144237 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Ð!PILsEvs$Go|$o9#QbIadaD4kH=t1^$p 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�C6!B~c0JUzT~G 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 literal 0 HcmV?d00001 diff --git a/technology/tools/k9s.md b/technology/tools/k9s.md new file mode 100644 index 0000000..e1cb025 --- /dev/null +++ b/technology/tools/k9s.md @@ -0,0 +1,11 @@ +--- +obj: application +website: https://k9scli.io +repo: https://github.com/derailed/k9s +--- + +# k9s + +K9s is a terminal based UI to interact with your Kubernetes clusters. The aim of this project is to make it easier to navigate, observe and manage your deployed applications in the wild. K9s continually watches Kubernetes for changes and offers subsequent commands to interact with your observed resources. + +![Screenshot](k9s.avif) diff --git a/technology/tools/kubernetes.md b/technology/tools/kubernetes.md new file mode 100644 index 0000000..7a6f1f8 --- /dev/null +++ b/technology/tools/kubernetes.md @@ -0,0 +1,343 @@ +--- +obj: concept +website: https://kubernetes.io +--- + +# Kubernetes + +## Overview + +Kubernetes is an open-source system for automating deployment, scaling, and management of containerized applications. It groups containers into logical units called **Pods**, which run on **Nodes** in a cluster. A simple solution to get up and running is [k3s](k3s.md). + +You can manage k8s clusters via `kubectl`. Most things are defined via yaml manifest files decleratively. You can throw these into your cluster with `kubectl apply -f FILE`. + +## Resources + +### Namespace + +Logical separation of resources within a cluster. + +```yaml +apiVersion: v1 +kind: Namespace +metadata: + name: example-namespace +``` + +### Pod + +The smallest deployable unit in Kubernetes. + +```yaml +apiVersion: v1 +kind: Pod +metadata: + name: full-example-pod + namespace: example-namespace + labels: + app: web + tier: frontend + annotations: + description: "A full-featured pod example for demonstration purposes" +spec: + restartPolicy: Always + + # Init container (runs before main containers) + initContainers: + - name: init-permissions + image: busybox + command: ["sh", "-c", "chmod 777 /mnt/data"] + volumeMounts: + - name: data-volume + mountPath: /mnt/data + + containers: + - name: main-app + image: nginx:1.25 + imagePullPolicy: IfNotPresent + ports: + - containerPort: 80 + name: http + env: + # Environment + - name: ENVIRONMENT + value: production + + # Env from ConfigMap + - name: CONFIG_TIMEOUT + valueFrom: + configMapKeyRef: + name: example-config + key: TIMEOUT + + # Env from Secret + - name: SECRET_PASSWORD + valueFrom: + secretKeyRef: + name: example-secret + key: password + volumeMounts: + - name: data-volume + mountPath: /usr/share/nginx/html + - name: config-volume + mountPath: /etc/config + readOnly: true + resources: + limits: + cpu: "500m" + memory: "256Mi" + requests: + cpu: "250m" + memory: "128Mi" + livenessProbe: + httpGet: + path: / + port: 80 + initialDelaySeconds: 10 + periodSeconds: 10 + readinessProbe: + httpGet: + path: / + port: 80 + initialDelaySeconds: 5 + periodSeconds: 5 + lifecycle: + preStop: + exec: + command: ["sh", "-c", "echo stopping..."] + + - name: sidecar-logger + image: busybox + args: ["sh", "-c", "tail -f /var/log/app.log"] + volumeMounts: + - name: log-volume + mountPath: /var/log + + # Volumes + volumes: + # ConfigMap - inject config files + - name: config-volume + configMap: + name: example-config + items: + - key: config.json + path: config.json + + # Secret - inject sensitive data + - name: secret-volume + secret: + secretName: example-secret + items: + - key: password + path: password.txt + + # EmptyDir - ephemeral shared storage between containers + - name: log-volume + emptyDir: + medium: "" + sizeLimit: 500Mi + + # HostPath - access host node's filesystem (example: logs) + - name: host-logs + hostPath: + path: /var/log + type: Directory +``` + +### Deployment + +Ensures a specified number of identical Pods are running and up-to-date. Supports rolling updates and rollbacks. + +```yml +apiVersion: apps/v1 +kind: Deployment +metadata: + name: example-deployment + namespace: example-namespace +spec: + replicas: 3 + selector: + matchLabels: + app: example + template: + metadata: + labels: + app: example + spec: + containers: + - name: web + image: nginx:alpine + ports: + - containerPort: 80 +``` + +### StatefulSet + +Like a Deployment, but for workloads requiring stable network IDs, persistent storage, and ordered startup/shutdown. + +```yml +apiVersion: apps/v1 +kind: StatefulSet +metadata: + name: example-statefulset + namespace: example-namespace +spec: + serviceName: "example" + replicas: 2 + selector: + matchLabels: + app: stateful-app + template: + metadata: + labels: + app: stateful-app + spec: + containers: + - name: web + image: nginx:alpine + volumeMounts: + - name: data + mountPath: /usr/share/nginx/html +``` + +### DaemonSet + +Ensures a copy of a Pod runs on all (or some) Nodes in the cluster. Ideal for log collectors or system-level agents. + +```yml +apiVersion: apps/v1 +kind: DaemonSet +metadata: + name: example-daemonset + namespace: example-namespace +spec: + selector: + matchLabels: + name: ds-app + template: + metadata: + labels: + name: ds-app + spec: + containers: + - name: node-monitor + image: busybox + args: ["sh", "-c", "while true; do echo hello; sleep 10; done"] +``` + +### Job + +Runs a Pod (or multiple) to completion. Used for batch processing or one-off tasks. + +```yml +apiVersion: batch/v1 +kind: Job +metadata: + name: example-job + namespace: example-namespace +spec: + template: + spec: + containers: + - name: pi + image: perl + command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"] + restartPolicy: Never + backoffLimit: 4 +``` + +### CronJob + +Schedules Jobs to run periodically, similar to [UNIX cron](../linux/cron.md). + +```yml +apiVersion: batch/v1 +kind: CronJob +metadata: + name: example-cronjob + namespace: example-namespace +spec: + schedule: "*/5 * * * *" + jobTemplate: + spec: + template: + spec: + containers: + - name: hello + image: busybox + args: ["echo", "Hello from the CronJob"] + restartPolicy: OnFailure +``` + +> Note: You can quickly run CronJobs as a job with: `kubectl create job --from=cronjob.batch/my_cron_job new_job` + +### Service + +Defines a stable network endpoint to access a set of Pods. Supports different types like `ClusterIP`, `NodePort`, and `LoadBalancer`. + +```yml +apiVersion: v1 +kind: Service +metadata: + name: example-service + namespace: example-namespace +spec: + selector: + app: example + ports: + - protocol: TCP + port: 80 + targetPort: 80 + type: ClusterIP +``` + +### ConfigMap + +Injects configuration data (as key-value pairs) into Pods, keeping config decoupled from code. + +```yml +apiVersion: v1 +kind: ConfigMap +metadata: + name: example-config + namespace: example-namespace +data: + APP_ENV: production + TIMEOUT: "30" +``` + +Usage in a Pod: + +```yml +envFrom: + - configMapRef: + name: example-config +``` + +### Secret + +Similar to ConfigMap, but for sensitive data like passwords, tokens, or keys. +If you want encryption on rest for your manifests, look at [sops](../tools/sops.md). + +```yml +apiVersion: v1 +kind: Secret +metadata: + name: example-secret + namespace: example-namespace +type: Opaque +data: + username: YWRtaW4= # base64 of 'admin' + password: cGFzc3dvcmQ= # base64 of 'password' +``` + +Usage in a Pod: + +```yml +env: + - name: USERNAME + valueFrom: + secretKeyRef: + name: example-secret + key: username +``` From c8f86c0da093fe41018f708632c56d8f4bad3dfb Mon Sep 17 00:00:00 2001 From: JMARyA <jmarya@hydrar.de> Date: Sat, 21 Jun 2025 11:02:51 +0200 Subject: [PATCH 68/74] add hl --- technology/applications/Applications.md | 1 + technology/applications/development/hl.md | 75 +++++++++++++++++++++++ 2 files changed, 76 insertions(+) create mode 100644 technology/applications/development/hl.md diff --git a/technology/applications/Applications.md b/technology/applications/Applications.md index 94ea8d9..7b94900 100644 --- a/technology/applications/Applications.md +++ b/technology/applications/Applications.md @@ -312,6 +312,7 @@ rev: 2025-01-30 - [uv](./development/uv.md) - [rust-script](./development/rust-script.md) - [renovatebot](./development/renovate.md) +- [hl](./development/hl.md) ## Media - [yt-dlp](./media/yt-dlp.md) diff --git a/technology/applications/development/hl.md b/technology/applications/development/hl.md new file mode 100644 index 0000000..9ec1abd --- /dev/null +++ b/technology/applications/development/hl.md @@ -0,0 +1,75 @@ +--- +obj: application +repo: https://github.com/pamburus/hl +---- + +# hl +High-performance log viewer and processor that transforms logs in JSON and logfmt formats into a human-readable output. Built with efficiency in mind, it enables quick parsing and analysis of large log files with minimal overhead. + +## Usage +Usage: `hl [OPTIONS] [FILE]...` + +| Option | Environment | Description | +| ----------------------------------- | ------------ | ---------------------------------------------------------------------------------------------------- | +| `--config <FILE>` | `$HL_CONFIG` | Configuration file path | +| `-s`, `--sort` | | Sort messages chronologically | +| `-F`, `--follow` | | Follow input streams and sort messages chronologically during time frame set by `--sync-interval-ms` | +| `--tail <N>` | | Number of last messages to preload in `--follow` mode (default: 10) | +| `--sync-interval-ms <MILLISECONDS>` | | Synchronization interval for live streaming (default: 100) | +| `--paging <WHEN>` | `$HL_PAGING` | Control pager usage (default: auto) [auto, always, never] | +| `-P` | | Alias for `--paging=never`, overrides `--paging` | +| `--help` | | Print help | +| `-V`, `--version` | | Print version | + +### Filtering Options + +| Option | Environment | Description | +| ------------------------- | ----------- | --------------------------------------------------- | +| `-l`, `--level <LEVEL>` | `$HL_LEVEL` | Filter messages by level | +| `--since <TIME>` | | Filter messages by timestamp >= TIME | +| `--until <TIME>` | | Filter messages by timestamp <= TIME | +| `-f`, `--filter <FILTER>` | | Filter by field values, e.g. `k=v`, `k~=v`, `k~~=v` | +| `-q`, `--query <QUERY>` | | Filter using query expressions | + +### Output Options + +| Option | Environment | Description | +| ------------------------------ | ----------------------- | -------------------------------------------------------------------------- | +| `--color [<WHEN>]` | `$HL_COLOR` | Control color output (default: auto) [auto, always, never] | +| `-c` | | Alias for `--color=always`, overrides `--color` | +| `--theme <THEME>` | `$HL_THEME` | Set color theme (default: uni) | +| `-r`, `--raw` | | Output raw source messages | +| `--no-raw` | | Disable raw output, overrides `--raw` | +| `--raw-fields` | | Output raw field values without formatting | +| `-h`, `--hide <KEY>` | | Hide/reveal fields by key (use `!*` to reveal all) | +| `--flatten <WHEN>` | `$HL_FLATTEN` | Whether to flatten objects (default: always) | +| `-t`, `--time-format <FORMAT>` | `$HL_TIME_FORMAT` | Time format (default: `%b %d %T.%3N`) | +| `-Z`, `--time-zone <TZ>` | `$HL_TIME_ZONE` | Set time zone (default: UTC) | +| `-L`, `--local` | | Use local time zone | +| `--no-local` | | Disable local time zone | +| `-e`, `--hide-empty-fields` | `$HL_HIDE_EMPTY_FIELDS` | Hide empty fields | +| `-E`, `--show-empty-fields` | `$HL_SHOW_EMPTY_FIELDS` | Show empty fields, overrides hide option | +| `--input-info <LAYOUTS>` | | Set input info layout (default: auto) [auto, none, minimal, compact, full] | +| `-o`, `--output <FILE>` | | Write output to file | + +### Input Options + +| Option | Environment | Description | +| ------------------------------ | ------------------------- | -------------------------------------------------------------- | +| `--input-format <FORMAT>` | `$HL_INPUT_FORMAT` | Set input format (default: auto) [auto, json, logfmt] | +| `--unix-timestamp-unit <UNIT>` | `$HL_UNIX_TIMESTAMP_UNIT` | Unit for Unix timestamps (default: auto) [auto, s, ms, us, ns] | +| `--allow-prefix` | `$HL_ALLOW_PREFIX` | Allow non-JSON prefixes | +| `--delimiter <DELIMITER>` | | Message delimiter, e.g. [NUL, CR, LF, CRLF, custom string] | + +### Advanced Options + +| Option | Environment | Description | +| ------------------------------ | ---------------------------- | ------------------------------------------------------------------------ | +| `--interrupt-ignore-count <N>` | `$HL_INTERRUPT_IGNORE_COUNT` | Number of Ctrl-C signals to ignore (default: 3) | +| `--buffer-size <SIZE>` | `$HL_BUFFER_SIZE` | Set buffer size (default: "256 KiB") | +| `--max-message-size <SIZE>` | `$HL_MAX_MESSAGE_SIZE` | Max message size (default: "64 MiB") | +| `-C`, `--concurrency <N>` | `$HL_CONCURRENCY` | Number of processing threads | +| `--shell-completions <SHELL>` | | Print shell completion script [bash, elvish, fish, powershell, zsh] | +| `--man-page` | | Print man page | +| `--list-themes[=<TAGS>]` | | Print available themes, optionally filtered [dark, light, 16color, etc.] | +| `--dump-index` | | Print debug index metadata in `--sort` mode | From 4fc56d3efd3d94b37f31a58d18349a9505dd9139 Mon Sep 17 00:00:00 2001 From: JMARyA <jmarya@hydrar.de> Date: Mon, 23 Jun 2025 01:37:56 +0200 Subject: [PATCH 69/74] add blackarch --- technology/linux/Arch Linux.md | 4 ++- technology/linux/BlackArch.md | 57 ++++++++++++++++++++++++++++++++ technology/linux/blackarch.avif | Bin 0 -> 204595 bytes 3 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 technology/linux/BlackArch.md create mode 100644 technology/linux/blackarch.avif diff --git a/technology/linux/Arch Linux.md b/technology/linux/Arch Linux.md index d97ad8c..b229fa3 100644 --- a/technology/linux/Arch Linux.md +++ b/technology/linux/Arch Linux.md @@ -5,7 +5,9 @@ rev: 2024-09-13 --- # Arch Linux -Arch is a very minimal [Linux](Linux.md) Distribution. It features many [packages](https://archlinux.org/packages/) installable with [Pacman](../applications/package%20managers/arch-linux/Pacman.md) and a useful [wiki](https://wiki.archlinux.org/). Additional software support is based on the [AUR](https://aur.archlinux.org/) +Arch is a very minimal [Linux](Linux.md) Distribution. It features many [packages](https://archlinux.org/packages/) installable with [Pacman](../applications/package%20managers/arch-linux/Pacman.md) and a useful [wiki](https://wiki.archlinux.org/). Additional software support is based on the [AUR](https://aur.archlinux.org/). + +There is also a hacker distro called [BlackArch](./BlackArch.md). Installation of Arch Linux is typically done manually following the [Wiki](https://wiki.archlinux.org/title/Installation_guide). Additionally there are install scripts like this one: ```shell diff --git a/technology/linux/BlackArch.md b/technology/linux/BlackArch.md new file mode 100644 index 0000000..b987d02 --- /dev/null +++ b/technology/linux/BlackArch.md @@ -0,0 +1,57 @@ +--- +obj: os +website: https://blackarch.org +--- + +# BlackArch +BlackArch Linux is an Arch Linux-based penetration testing distribution for penetration testers and security researchers. The repository contains 2846 tools. You can install tools individually or in groups. BlackArch Linux is compatible with existing Arch installs. For more information, see the installation instructions. + +![Screenshot](./blackarch.avif) + +## Install +Installation instructions can be found [here](https://blackarch.org/blackarch-install.html). + +### On Arch Linux +BlackArch Linux is compatible with existing/normal Arch installations. It acts as an unofficial user repository. Below you will find instructions on how to install BlackArch in this manner. + +```sh +# Run https://blackarch.org/strap.sh as root and follow the instructions. + +$ curl -O https://blackarch.org/strap.sh +# Verify the SHA1 sum + +$ echo bbf0a0b838aed0ec05fff2d375dd17591cbdf8aa strap.sh | sha1sum -c +# Set execute bit + +$ chmod +x strap.sh +# Run strap.sh + +$ sudo ./strap.sh +# Enable multilib following https://wiki.archlinux.org/index.php/Official_repositories#Enabling_multilib and run: + +$ sudo pacman -Syu +``` + +You may now install tools from the blackarch repository. + +```sh +# To list all of the available tools, run + +$ sudo pacman -Sgg | grep blackarch | cut -d' ' -f2 | sort -u +# To install a category of tools, run + +$ sudo pacman -S blackarch-<category> +# To see the blackarch categories, run + +$ sudo pacman -Sg | grep blackarch +# To search for a specific package, run + +$ pacman -Ss <package_name> +# Note - it maybe be necessary to overwrite certain packages when installing blackarch tools. If +# you experience "failed to commit transaction" errors, use the --needed and --overwrite switches +# For example: + +$ sudo pacman -Syyu --needed --overwrite='*' <wanted-package> +``` + +The complete tool list of the BlackArch Linux repository can be found [here](https://blackarch.org/tools.html). diff --git a/technology/linux/blackarch.avif b/technology/linux/blackarch.avif new file mode 100644 index 0000000000000000000000000000000000000000..40a950c7225dbe15a1bfb93748a2ee8afdf4ad64 GIT binary patch literal 204595 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 eH+JgV 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 literal 0 HcmV?d00001 From a422d93c7b8a1b5dfd812fe5677f7789592dda82 Mon Sep 17 00:00:00 2001 From: JMARyA <jmarya@hydrar.de> Date: Mon, 23 Jun 2025 01:44:06 +0200 Subject: [PATCH 70/74] add ab-av1 --- technology/applications/Applications.md | 1 + technology/applications/media/ab-av1.md | 75 +++++++++++++++++++++++++ 2 files changed, 76 insertions(+) create mode 100644 technology/applications/media/ab-av1.md diff --git a/technology/applications/Applications.md b/technology/applications/Applications.md index 7b94900..7d552e6 100644 --- a/technology/applications/Applications.md +++ b/technology/applications/Applications.md @@ -325,6 +325,7 @@ rev: 2025-01-30 - [artem](./media/artem.md) - [auto-palette-cli](./media/auto-palette-cli.md) - [metadata](./media/metadata-cli.md) +- [ab-av1](./media/ab-av1.md) ## Network - [rclone](./network/rclone.md) diff --git a/technology/applications/media/ab-av1.md b/technology/applications/media/ab-av1.md new file mode 100644 index 0000000..238295c --- /dev/null +++ b/technology/applications/media/ab-av1.md @@ -0,0 +1,75 @@ +--- +obj: application +repo: https://github.com/alexheretic/ab-av1 +--- + +# ab-av1 +AV1 video encoding tool with fast VMAF sampling & automatic encoder crf calculation. Uses [`ffmpeg`](./ffmpeg.md), `svt-av1` & `vmaf`. + +## Usage +### Command: `auto-encode` +Automatically determine the best crf to deliver the `--min-vmaf` and use it to encode a video or image. + +Two phases: +- `crf-search` to determine the best `--crf` value +- `ffmpeg` to encode using the settings + +```sh +ab-av1 auto-encode [OPTIONS] -i <INPUT> --preset <PRESET> --min-vmaf <MIN_VMAF> +``` + +### Command: `crf-search` +Interpolated binary search using sample-encode to find the best crf value delivering `--min-vmaf` & `--max-encoded-percent`. + +Outputs: +- Best crf value +- Mean sample VMAF score +- Predicted full encode size +- Predicted full encode time + +```sh +ab-av1 crf-search [OPTIONS] -i <INPUT> --preset <PRESET> --min-vmaf <MIN_VMAF> +``` + +Notable options +- `--min-xpsnr` <MIN_XPSNR> may be used as an alternative to VMAF. + +### Command: `sample-encode` +Encode short video samples of an input using provided crf & preset. This is much quicker than full encode/vmaf run. + +Outputs: +- Mean sample VMAF score +- Predicted full encode size +- Predicted full encode time + +```sh +ab-av1 sample-encode [OPTIONS] -i <INPUT> --crf <CRF> --preset <PRESET> +``` + +Notable options +- `--xpsnr` specifies calculation of XPSNR score instead of VMAF. + +### Command: `encode` +Invoke `ffmpeg` to encode a video or image. + +```sh +ab-av1 encode [OPTIONS] -i <INPUT> --crf <CRF> --preset <PRESET> +``` + +### Command: `vmaf` +Full VMAF score calculation, distorted file vs reference file. Works with videos and images. + +- Auto sets model version (4k or 1k) according to resolution. +- Auto sets n_threads to system threads. +- Auto upscales lower resolution videos to the model. + +```sh +ab-av1 vmaf --reference <REFERENCE> --distorted <DISTORTED> +``` + +### Command: `xpsnr` +Full XPSNR score calculation, distorted file vs reference file. Works with videos and images. + +```sh +ab-av1 xpsnr --reference <REFERENCE> --distorted <DISTORTED> +``` From 87702f58dab125be0c64bc5e372d722a7c33aecd Mon Sep 17 00:00:00 2001 From: JMARyA <jmarya@hydrar.de> Date: Tue, 24 Jun 2025 23:13:23 +0200 Subject: [PATCH 71/74] add gitql --- technology/applications/Applications.md | 1 + technology/dev/gitql.md | 48 +++++++++++++++++++++++++ 2 files changed, 49 insertions(+) create mode 100644 technology/dev/gitql.md diff --git a/technology/applications/Applications.md b/technology/applications/Applications.md index 7d552e6..641a5c4 100644 --- a/technology/applications/Applications.md +++ b/technology/applications/Applications.md @@ -297,6 +297,7 @@ rev: 2025-01-30 - [tokei](./cli/tokei.md) - [gum](./cli/gum.md) - [git](../dev/Git.md) +- [gitql](../dev/gitql.md) - [Ansible](../tools/Ansible/Ansible.md) - [Docker](../tools/Docker.md) - [Podman](../tools/Podman.md) diff --git a/technology/dev/gitql.md b/technology/dev/gitql.md new file mode 100644 index 0000000..3ffa404 --- /dev/null +++ b/technology/dev/gitql.md @@ -0,0 +1,48 @@ +--- +obj: application +website: https://amrdeveloper.github.io/GQL/ +repo: https://github.com/amrdeveloper/GQL +--- + +# GitQL +GQL is a query language with a syntax very similar to SQL with a tiny engine to perform queries on `.git` files instance of database files, the engine executes the query on the fly without the need to create database files or convert `.git` files into any other format, note that all Keywords in GQL are case-insensitive similar to SQL. + +## Examples + +```sql +SELECT 1 +SELECT 1 + 2 +SELECT LEN("Git Query Language") +SELECT "One" IN ("One", "Two", "Three") +SELECT "Git Query Language" LIKE "%Query%" +SELECT INTERVAL '1 year 2 mons 3 days 04:05:06.789' + +SET @arr = [1, 2, 3]; +SELECT [[1, 2, 3], [4, 5, 6], [7, 8, 9]]; +SELECT @arr[1], @arr[2], @arr[3], ARRAY_LENGTH(@arr); +SELECT @arr[1:2], @arr[2:], @arr[:2]; + +SELECT DISTINCT title AS tt FROM commits +SELECT author_name, COUNT(author_name) AS commit_num FROM commits GROUP BY author_name, author_email ORDER BY commit_num DESC LIMIT 10 +SELECT commit_count FROM branches WHERE commit_count BETWEEN 0 AND 10 + +SELECT * FROM refs WHERE type = "branch" +SELECT * FROM refs ORDER BY type + +SELECT * FROM commits +SELECT author_name, author_email FROM commits +SELECT author_name, author_email FROM commits ORDER BY author_name DESC, author_email ASC +SELECT author_name, author_email FROM commits WHERE author_email LIKE "%gmail%" ORDER BY author_name +SELECT * FROM commits WHERE LOWER(author_name) = "amrdeveloper" +SELECT author_name FROM commits GROUP By author_name +SELECT author_name FROM commits GROUP By author_name HAVING author_name = "AmrDeveloper" + +SELECT * FROM branches +SELECT * FROM branches WHERE is_head = true +SELECT name, LEN(name) FROM branches + +SELECT * FROM tags +SELECT * FROM tags OFFSET 1 LIMIT 1 + +SELECT path, count() AS changes_count, SUM(insertions) AS additions, SUM(removals) AS removes FROM diffs_changes GROUP BY path ORDER BY changes_count DESC +``` From 95750fa75574bb08d31bc917d1a00fb721b9f861 Mon Sep 17 00:00:00 2001 From: JMARyA <jmarya@hydrar.de> Date: Wed, 25 Jun 2025 05:03:16 +0200 Subject: [PATCH 72/74] add limbo --- technology/applications/Applications.md | 1 + technology/applications/development/limbo.md | 10 ++++++++++ 2 files changed, 11 insertions(+) create mode 100644 technology/applications/development/limbo.md diff --git a/technology/applications/Applications.md b/technology/applications/Applications.md index 641a5c4..693461f 100644 --- a/technology/applications/Applications.md +++ b/technology/applications/Applications.md @@ -306,6 +306,7 @@ rev: 2025-01-30 - [sops](../tools/sops.md) - [serie](./cli/serie.md) - [usql](./cli/usql.md) +- [limbo](./development/limbo.md) - [kondo](./cli/kondo.md) - [licensit](./development/licensit.md) - [onefetch](./development/onefetch.md) diff --git a/technology/applications/development/limbo.md b/technology/applications/development/limbo.md new file mode 100644 index 0000000..6c6664c --- /dev/null +++ b/technology/applications/development/limbo.md @@ -0,0 +1,10 @@ +--- +obj: application +repo: https://github.com/tursodatabase/limbo +--- + +# Limbo +Limbo is a work-in-progress, in-process OLTP database engine library written in Rust that has: +- SQLite compatibility for SQL dialect, file formats, and the C API +- Language bindings for JavaScript/WebAssembly, Rust, Go, Python, and Java +- Asynchronous I/O support on Linux with io_uring From d888ed74deacfabb32aed86265f442eb198d847a Mon Sep 17 00:00:00 2001 From: JMARyA <jmarya@hydrar.de> Date: Wed, 25 Jun 2025 06:00:46 +0200 Subject: [PATCH 73/74] add fleetdm + osquery --- technology/applications/Applications.md | 2 ++ technology/applications/utilities/osquery.md | 14 ++++++++++++++ technology/applications/web/FleetDM.md | 9 +++++++++ 3 files changed, 25 insertions(+) create mode 100644 technology/applications/utilities/osquery.md create mode 100644 technology/applications/web/FleetDM.md diff --git a/technology/applications/Applications.md b/technology/applications/Applications.md index 693461f..066a3bb 100644 --- a/technology/applications/Applications.md +++ b/technology/applications/Applications.md @@ -184,6 +184,7 @@ rev: 2025-01-30 - [SFTPGo](./web/sftpgo.md) - [Lemmy](./web/lemmy.md) - [Stump](./web/stump.md) +- [FleetDM](./web/FleetDM.md) # CLI ## Terminal @@ -288,6 +289,7 @@ rev: 2025-01-30 - [retry-cli](./utilities/retry-cli.md) - [systeroid](./utilities/systeroid.md) - [distrobox](./utilities/distrobox.md) +- [osquery](./utilities/osquery.md) ## Development - [act](./development/act.md) diff --git a/technology/applications/utilities/osquery.md b/technology/applications/utilities/osquery.md new file mode 100644 index 0000000..5dcb258 --- /dev/null +++ b/technology/applications/utilities/osquery.md @@ -0,0 +1,14 @@ +--- +obj: application +website: https://www.osquery.io +repo: https://github.com/osquery/osquery +--- + +# osquery + +[osquery](https://osquery.io/) is an open-source endpoint instrumentation framework. It exposes an operating system as a high-performance relational database, allowing you to write SQL queries to explore system state and activity in real-time. See [schema](https://osquery.io/schema/5.17.0/). + +## Usage +Usage: `osqueryi [SQL]` + +Example Statement: `SELECT name, path, pid FROM processes WHERE on_disk = 0;` diff --git a/technology/applications/web/FleetDM.md b/technology/applications/web/FleetDM.md new file mode 100644 index 0000000..45b812a --- /dev/null +++ b/technology/applications/web/FleetDM.md @@ -0,0 +1,9 @@ +--- +obj: application +website: https://fleetdm.com +repo: https://github.com/fleetdm/fleet +--- + +# FleetDM + +[FleetDM](https://fleetdm.com/) is an open-source device management platform built to help teams query, monitor, and secure their entire infrastructure using [osquery](../utilities/osquery.md). It provides a scalable and centralized way to collect real-time information from thousands of laptops, desktops, and servers across a fleet. From 38e61193f593d3120b42297057f980e2079e67d9 Mon Sep 17 00:00:00 2001 From: JMARyA <jmarya@hydrar.de> Date: Thu, 26 Jun 2025 08:17:03 +0200 Subject: [PATCH 74/74] update systemd --- .../applications/network/NetworkManager.md | 6 +- technology/linux/fwupd.md | 34 ++++- technology/linux/smartctl.md | 9 +- technology/linux/systemd/Systemd.md | 5 + technology/linux/systemd/hostnamectl.md | 14 +- technology/linux/systemd/journalctl.md | 74 +++++++++- technology/linux/systemd/localectl.md | 21 ++- technology/linux/systemd/loginctl.md | 36 ++++- technology/linux/systemd/networkctl.md | 26 +++- technology/linux/systemd/systemd-analyze.md | 60 ++++++++- technology/linux/systemd/systemd-ask-pass.md | 6 - .../linux/systemd/systemd-ask-password.md | 10 ++ technology/linux/systemd/systemd-inhibit.md | 4 +- technology/linux/systemd/systemd-resolve.md | 6 - technology/linux/systemd/systemd-resolved.md | 41 ++++++ technology/linux/systemd/systemd-timesyncd.md | 25 +++- technology/linux/systemd/userdbctl.md | 15 ++- technology/linux/udev.md | 24 +++- technology/linux/udisks.md | 127 +++++++++++++++++- 19 files changed, 511 insertions(+), 32 deletions(-) delete mode 100644 technology/linux/systemd/systemd-ask-pass.md create mode 100644 technology/linux/systemd/systemd-ask-password.md delete mode 100644 technology/linux/systemd/systemd-resolve.md create mode 100644 technology/linux/systemd/systemd-resolved.md diff --git a/technology/applications/network/NetworkManager.md b/technology/applications/network/NetworkManager.md index 7e20ae4..dffeb87 100644 --- a/technology/applications/network/NetworkManager.md +++ b/technology/applications/network/NetworkManager.md @@ -1,16 +1,16 @@ --- obj: application +website: https://networkmanager.dev +repo: https://gitlab.freedesktop.org/NetworkManager/NetworkManager --- -#refactor - # NetworkManager [NetworkManager](https://networkmanager.dev/) is a program for providing detection and configuration for systems to automatically connect to networks. NetworkManager's functionality can be useful for both wireless and wired networks. For wireless networks, NetworkManager prefers known wireless networks and has the ability to switch to the most reliable network. NetworkManager-aware applications can switch from online and offline mode. NetworkManager also prefers wired connections over wireless ones, has support for modem connections and certain types of VPN. NetworkManager was originally developed by Red Hat and now is hosted by the GNOME project. After installation, you should start/enable `NetworkManager.service`. Once the NetworkManager daemon is started, it will automatically connect to any available "system connections" that have already been configured. Any "user connections" or unconfigured connections will need _nmcli_ or an applet to configure and connect. ## Usage -NetworkManager comes with nmcli and nmtui. +NetworkManager comes with `nmcli` and `nmtui`. ### nmcli examples List nearby Wi-Fi networks: diff --git a/technology/linux/fwupd.md b/technology/linux/fwupd.md index 76891b3..f54e281 100644 --- a/technology/linux/fwupd.md +++ b/technology/linux/fwupd.md @@ -6,4 +6,36 @@ repo: https://github.com/fwupd/fwupd --- # fwupd -#wip + +fwupd is a simple daemon to allow session software to update device firmware on your local machine. It's designed for desktops, but also usable on phones and headless servers. + +## Usage +To display all devices detected by fwupd: +``` +$ fwupdmgr get-devices +``` + +> *Note*: Listed devices may not be updatable through fwupd (e.g. Intel integrated graphics). Alternative vendor solutions may be provided instead. + +To download the latest metadata from the Linux Vendor firmware Service (LVFS): +``` +$ fwupdmgr refresh +``` + +> *Note*: This can be done automatically by enabling `fwupd-refresh.timer`. + +To list updates available for any devices on the system: +``` +$ fwupdmgr get-updates +``` + +To install updates: +``` +$ fwupdmgr update +``` + +> *Note*: +> - Updates that can be applied live will be done immediately. +> - Updates that run at bootup will be staged for the next reboot. +> - The root user may be required to perform certain device updates. + diff --git a/technology/linux/smartctl.md b/technology/linux/smartctl.md index e0c1b65..6694b0f 100644 --- a/technology/linux/smartctl.md +++ b/technology/linux/smartctl.md @@ -1,6 +1,13 @@ --- obj: application +arch-wiki: https://wiki.archlinux.org/title/S.M.A.R.T. +website: https://www.smartmontools.org --- # smartctl -#wip + +S.M.A.R.T. (Self-Monitoring, Analysis, and Reporting Technology) is a supplementary component built into many modern storage devices through which devices monitor, store, and analyze the health of their operation. Statistics are collected (temperature, number of reallocated sectors, seek errors...) which software can use to measure the health of a device, predict possible device failure, and provide notifications on unsafe values. + +## Usage + +Show all smart information: `smartctl -a /device` diff --git a/technology/linux/systemd/Systemd.md b/technology/linux/systemd/Systemd.md index c5251a8..f2f85aa 100644 --- a/technology/linux/systemd/Systemd.md +++ b/technology/linux/systemd/Systemd.md @@ -92,6 +92,11 @@ Stored in: - `/etc/systemd/system/`: units installed by the system administrator - `~/.config/systemd/user/`: units used by local users +### User Units +Units can run under a user context. These are under the users home directory like `~/.config/systemd/user/` and can be used with `systemctl --user`. + +To run user units even the user is not logged in, enable: `loginctl enable-linger <user>`. + ### Service types There are several different start-up types to consider when writing a custom service file. This is set with the `Type=` parameter in the `[Service]` section: diff --git a/technology/linux/systemd/hostnamectl.md b/technology/linux/systemd/hostnamectl.md index 56bfaa0..fa63e2a 100644 --- a/technology/linux/systemd/hostnamectl.md +++ b/technology/linux/systemd/hostnamectl.md @@ -3,4 +3,16 @@ obj: application --- # hostnamectl -#wip +Query or change system hostname. + +Usage: `hostnamectl [OPTIONS...] COMMAND ...` + +Commands: +``` + status Show current hostname settings + hostname [NAME] Get/set system hostname + icon-name [NAME] Get/set icon name for host + chassis [NAME] Get/set chassis type for host + deployment [NAME] Get/set deployment environment for host + location [NAME] Get/set location for host +``` diff --git a/technology/linux/systemd/journalctl.md b/technology/linux/systemd/journalctl.md index 9e119a7..5a8da54 100644 --- a/technology/linux/systemd/journalctl.md +++ b/technology/linux/systemd/journalctl.md @@ -1,6 +1,78 @@ --- obj: application +arch-wiki: https://wiki.archlinux.org/title/Systemd/Journal --- # journalctl -#wip + +systemd has its own logging system called the journal; running a separate logging daemon is not required. To read the log, use `journalctl`. + +## Usage +Show all messages matching `PATTERN`: +``` +# journalctl --grep=PATTERN +``` + +Show all messages from this boot: +``` +# journalctl -b +``` + +However, often one is interested in messages not from the current, but from the previous boot (e.g. if an unrecoverable system crash happened). This is possible through optional offset parameter of the `-b` flag: `journalctl -b -0` shows messages from the current boot, `journalctl -b -1` from the previous boot, `journalctl -b -2` from the second previous and so on – you can see the list of boots with their numbers by using `journalctl --list-boots`. + +Include explanations of log messages from the message catalog where available: +``` +# journalctl -x +``` + +Show all messages from date (and optional time): +``` +# journalctl --since="2012-10-30 18:17:16" +``` + +Show all messages since 20 minutes ago: +``` +# journalctl --since "20 min ago" +``` + +Follow new messages: +``` +# journalctl -f +``` + +Show all messages by a specific executable: +``` +# journalctl /usr/lib/systemd/systemd +``` + +Show all messages by a specific identifier: +``` +# journalctl -t sudo +``` + +Show all messages by a specific process: +``` +# journalctl _PID=1 +``` + +Show all messages by a specific unit: +``` +# journalctl -u man-db.service +``` + +Show all messages from user services by a specific unit: +``` +$ journalctl --user -u dbus +``` + +Show kernel ring buffer: +``` +# journalctl -k +``` + +Show only error, critical and alert priority messages: +``` +# journalctl -p err..alert +``` + +You can use numeric log level too, like `journalctl -p 3..1`. If single number/log level is used, `journalctl -p 3`, then all higher priority log levels are also included (i.e. 0 to 3 in this case). diff --git a/technology/linux/systemd/localectl.md b/technology/linux/systemd/localectl.md index 77ca526..3311cc9 100644 --- a/technology/linux/systemd/localectl.md +++ b/technology/linux/systemd/localectl.md @@ -3,5 +3,22 @@ obj: application --- # localectl -#wip -https://man.archlinux.org/man/localectl.1 +Query or change system locale and keyboard settings. + +Usage: `localectl [OPTIONS...] COMMAND ...` + +Commands: +``` + status Show current locale settings + set-locale LOCALE... Set system locale + list-locales Show known locales + set-keymap MAP [MAP] Set console and X11 keyboard mappings + list-keymaps Show known virtual console keyboard mappings + set-x11-keymap LAYOUT [MODEL [VARIANT [OPTIONS]]] + Set X11 and console keyboard mappings + list-x11-keymap-models Show known X11 keyboard mapping models + list-x11-keymap-layouts Show known X11 keyboard mapping layouts + list-x11-keymap-variants [LAYOUT] + Show known X11 keyboard mapping variants + list-x11-keymap-options Show known X11 keyboard mapping options +``` diff --git a/technology/linux/systemd/loginctl.md b/technology/linux/systemd/loginctl.md index da735c9..4ffc05c 100644 --- a/technology/linux/systemd/loginctl.md +++ b/technology/linux/systemd/loginctl.md @@ -3,4 +3,38 @@ obj: application --- # loginctl -#wip +Send control commands to or query the login manager. + +Usage: `loginctl [OPTIONS...] COMMAND ...` + + +``` +Session Commands: + list-sessions List sessions + session-status [ID...] Show session status + show-session [ID...] Show properties of sessions or the manager + activate [ID] Activate a session + lock-session [ID...] Screen lock one or more sessions + unlock-session [ID...] Screen unlock one or more sessions + lock-sessions Screen lock all current sessions + unlock-sessions Screen unlock all current sessions + terminate-session ID... Terminate one or more sessions + kill-session ID... Send signal to processes of a session + +User Commands: + list-users List users + user-status [USER...] Show user status + show-user [USER...] Show properties of users or the manager + enable-linger [USER...] Enable linger state of one or more users + disable-linger [USER...] Disable linger state of one or more users + terminate-user USER... Terminate all sessions of one or more users + kill-user USER... Send signal to processes of a user + +Seat Commands: + list-seats List seats + seat-status [NAME...] Show seat status + show-seat [NAME...] Show properties of seats or the manager + attach NAME DEVICE... Attach one or more devices to a seat + flush-devices Flush all device associations + terminate-seat NAME... Terminate all sessions on one or more seats +``` diff --git a/technology/linux/systemd/networkctl.md b/technology/linux/systemd/networkctl.md index 0ddbe1f..20c2ab0 100644 --- a/technology/linux/systemd/networkctl.md +++ b/technology/linux/systemd/networkctl.md @@ -3,4 +3,28 @@ obj: application --- # networkctl -#wip +Query and control the networking subsystem. +This controls the networking via `systemd-networkd`. + +Usage: `networkctl [OPTIONS...] COMMAND` + +Commands: +``` + list [PATTERN...] List links + status [PATTERN...] Show link status + lldp [PATTERN...] Show LLDP neighbors + label Show current address label entries in the kernel + delete DEVICES... Delete virtual netdevs + up DEVICES... Bring devices up + down DEVICES... Bring devices down + renew DEVICES... Renew dynamic configurations + forcerenew DEVICES... Trigger DHCP reconfiguration of all connected clients + reconfigure DEVICES... Reconfigure interfaces + reload Reload .network and .netdev files + edit FILES|DEVICES... Edit network configuration files + cat [FILES|DEVICES...] Show network configuration files + mask FILES... Mask network configuration files + unmask FILES... Unmask network configuration files + persistent-storage BOOL + Notify systemd-networkd if persistent storage is ready +``` diff --git a/technology/linux/systemd/systemd-analyze.md b/technology/linux/systemd/systemd-analyze.md index 918ccba..4ccf76e 100644 --- a/technology/linux/systemd/systemd-analyze.md +++ b/technology/linux/systemd/systemd-analyze.md @@ -3,4 +3,62 @@ obj: application --- # systemd-analyze -#wip + +Profile systemd, show unit dependencies, check unit files. + +Usage: `systemd-analyze [OPTIONS...] COMMAND ...` + +``` +Boot Analysis: + [time] Print time required to boot the machine + blame Print list of running units ordered by + time to init + critical-chain [UNIT...] Print a tree of the time critical chain + of units + +Dependency Analysis: + plot Output SVG graphic showing service + initialization + dot [UNIT...] Output dependency graph in dot(1) format + dump [PATTERN...] Output state serialization of service + manager + +Configuration Files and Search Paths: + cat-config NAME|PATH... Show configuration file and drop-ins + unit-files List files and symlinks for units + unit-paths List load directories for units + +Enumerate OS Concepts: + exit-status [STATUS...] List exit status definitions + capability [CAP...] List capability definitions + syscall-filter [NAME...] List syscalls in seccomp filters + filesystems [NAME...] List known filesystems + architectures [NAME...] List known architectures + smbios11 List strings passed via SMBIOS Type #11 + +Expression Evaluation: + condition CONDITION... Evaluate conditions and asserts + compare-versions VERSION1 [OP] VERSION2 + Compare two version strings + image-policy POLICY... Analyze image policy string + +Clock & Time: + calendar SPEC... Validate repetitive calendar time + events + timestamp TIMESTAMP... Validate a timestamp + timespan SPAN... Validate a time span + +Unit & Service Analysis: + verify FILE... Check unit files for correctness + security [UNIT...] Analyze security of unit + fdstore SERVICE... Show file descriptor store contents of service + malloc [D-BUS SERVICE...] Dump malloc stats of a D-Bus service + +Executable Analysis: + inspect-elf FILE... Parse and print ELF package metadata + +TPM Operations: + has-tpm2 Report whether TPM2 support is available + pcrs [PCR...] Show TPM2 PCRs and their names + srk [>FILE] Write TPM2 SRK (to FILE) +``` diff --git a/technology/linux/systemd/systemd-ask-pass.md b/technology/linux/systemd/systemd-ask-pass.md deleted file mode 100644 index c321193..0000000 --- a/technology/linux/systemd/systemd-ask-pass.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -obj: application ---- - -# systemd-ask-pass -#wip diff --git a/technology/linux/systemd/systemd-ask-password.md b/technology/linux/systemd/systemd-ask-password.md new file mode 100644 index 0000000..a68b7e3 --- /dev/null +++ b/technology/linux/systemd/systemd-ask-password.md @@ -0,0 +1,10 @@ +--- +obj: application +--- + +# systemd-ask-password + +Query the user for a passphrase, via the TTY or a UI agent. + +Usage: `systemd-ask-password [OPTIONS...] MESSAGE` + diff --git a/technology/linux/systemd/systemd-inhibit.md b/technology/linux/systemd/systemd-inhibit.md index d728255..3c3b4b4 100644 --- a/technology/linux/systemd/systemd-inhibit.md +++ b/technology/linux/systemd/systemd-inhibit.md @@ -3,4 +3,6 @@ obj: application --- # systemd-inhibit -#wip +Execute a process while inhibiting shutdown/sleep/idle. + +Usage: `systemd-inhibit [OPTIONS...] COMMAND ...` diff --git a/technology/linux/systemd/systemd-resolve.md b/technology/linux/systemd/systemd-resolve.md deleted file mode 100644 index 5896281..0000000 --- a/technology/linux/systemd/systemd-resolve.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -obj: application ---- - -# systemd-resolve -#wip diff --git a/technology/linux/systemd/systemd-resolved.md b/technology/linux/systemd/systemd-resolved.md new file mode 100644 index 0000000..b4da2d9 --- /dev/null +++ b/technology/linux/systemd/systemd-resolved.md @@ -0,0 +1,41 @@ +--- +obj: application +arch-wiki: https://wiki.archlinux.org/title/Systemd-resolved +--- + +# systemd-resolved + +systemd-resolved is a systemd service that provides network name resolution to local applications via a D-Bus interface, the `resolve` NSS service, and a local DNS stub listener on `127.0.0.53`. + +## resolvectl + +Send control commands to the network name resolution manager, or +resolve domain names, IPv4 and IPv6 addresses, DNS records, and services. + +Usage: `resolvectl [OPTIONS...] COMMAND ...` + +Commands: +``` + query HOSTNAME|ADDRESS... Resolve domain names, IPv4 and IPv6 addresses + service [[NAME] TYPE] DOMAIN Resolve service (SRV) + openpgp EMAIL@DOMAIN... Query OpenPGP public key + tlsa DOMAIN[:PORT]... Query TLS public key + status [LINK...] Show link and server status + statistics Show resolver statistics + reset-statistics Reset resolver statistics + flush-caches Flush all local DNS caches + reset-server-features Forget learnt DNS server feature levels + monitor Monitor DNS queries + show-cache Show cache contents + show-server-state Show servers state + dns [LINK [SERVER...]] Get/set per-interface DNS server address + domain [LINK [DOMAIN...]] Get/set per-interface search domain + default-route [LINK [BOOL]] Get/set per-interface default route flag + llmnr [LINK [MODE]] Get/set per-interface LLMNR mode + mdns [LINK [MODE]] Get/set per-interface MulticastDNS mode + dnsovertls [LINK [MODE]] Get/set per-interface DNS-over-TLS mode + dnssec [LINK [MODE]] Get/set per-interface DNSSEC mode + nta [LINK [DOMAIN...]] Get/set per-interface DNSSEC NTA + revert LINK Revert per-interface configuration + log-level [LEVEL] Get/set logging threshold for systemd-resolved +``` diff --git a/technology/linux/systemd/systemd-timesyncd.md b/technology/linux/systemd/systemd-timesyncd.md index 1578234..6333cdc 100644 --- a/technology/linux/systemd/systemd-timesyncd.md +++ b/technology/linux/systemd/systemd-timesyncd.md @@ -4,6 +4,27 @@ arch-wiki: https://wiki.archlinux.org/title/Systemd-timesyncd --- # systemd-timesyncd -#wip +systemd-timesyncd is a daemon that has been added for synchronizing the system clock across the network. -timedatectl +## Usage +Query or change system time and date settings. + +Usage: `timedatectl [OPTIONS...] COMMAND ...` + +Commands: +``` + status Show current time settings + show Show properties of systemd-timedated + set-time TIME Set system time + set-timezone ZONE Set system time zone + list-timezones Show known time zones + set-local-rtc BOOL Control whether RTC is in local time + set-ntp BOOL Enable or disable network time synchronization + +systemd-timesyncd Commands: + timesync-status Show status of systemd-timesyncd + show-timesync Show properties of systemd-timesyncd + ntp-servers INTERFACE SERVER… + Set the interface specific NTP servers + revert INTERFACE Revert the interface specific NTP servers +``` diff --git a/technology/linux/systemd/userdbctl.md b/technology/linux/systemd/userdbctl.md index 90bbd1e..e64034b 100644 --- a/technology/linux/systemd/userdbctl.md +++ b/technology/linux/systemd/userdbctl.md @@ -3,4 +3,17 @@ obj: application --- # userdbctl -#wip + +Show user and group information. + +Usage: `userdbctl [OPTIONS...] COMMAND ...` + +Commands: +``` + user [USER…] Inspect user + group [GROUP…] Inspect group + users-in-group [GROUP…] Show users that are members of specified groups + groups-of-user [USER…] Show groups the specified users are members of + services Show enabled database services + ssh-authorized-keys USER Show SSH authorized keys for user +``` diff --git a/technology/linux/udev.md b/technology/linux/udev.md index 0fb4f83..9b1ed59 100644 --- a/technology/linux/udev.md +++ b/technology/linux/udev.md @@ -4,6 +4,24 @@ arch-wiki: https://wiki.archlinux.org/title/Udev --- # udev -#wip -udev -udevadm + +udev is a userspace system that enables the operating system administrator to register userspace handlers for events. The events received by udev's daemon are mainly generated by the (Linux) kernel in response to physical events relating to peripheral devices. As such, udev's main purpose is to act upon peripheral detection and hot-plugging, including actions that return control to the kernel, e.g., loading kernel modules or device firmware. Another component of this detection is adjusting the permissions of the device to be accessible to non-root users and groups. + +## Usage +Send control commands or test the device manager. + +Usage: `udevadm [--help] [--version] [--debug] COMMAND [COMMAND OPTIONS]` + +Commands: +``` + info Query sysfs or the udev database + trigger Request events from the kernel + settle Wait for pending udev events + control Control the udev daemon + monitor Listen to kernel and udev events + test Test an event run + test-builtin Test a built-in command + verify Verify udev rules files + wait Wait for device or device symlink + lock Lock a block device +``` diff --git a/technology/linux/udisks.md b/technology/linux/udisks.md index fb4e585..429671d 100644 --- a/technology/linux/udisks.md +++ b/technology/linux/udisks.md @@ -6,4 +6,129 @@ repo: https://github.com/storaged-project/udisks --- # udisks -#wip + +udisks provides a daemon `udisksd`, that implements D-Bus interfaces used to query and manipulate storage devices, and a command-line tool `udisksctl`, used to query and use the daemon. + +## Configuration +### Permissions +Actions a user can perform using udisks are restricted with `polkit`. If the user session is not activated or present (for example, when controlling udisks from a systemd/User service), adjust `polkit` rules accordingly. + +See https://github.com/coldfix/udiskie/wiki/Permissions for common udisks permissions for the `storage` group. + +### Default mount options +It is possible to define default mount options in `/etc/udisks2/mount_options.conf`. Create the file if it does not already exist. The built-in defaults and some examples can be seen in `/etc/udisks2/mount_options.conf.example`. + +The options can target specific filesystem types. For example, mount btrfs filesystems with zstd compression enabled: +``` +# /etc/udisks2/mount_options.conf +[defaults] +btrfs_defaults=compress=zstd +``` + +> *Note*: Lines override the corresponding built-in defaults. Make sure not to accidentally remove mount options this way. + +## Usage +### Information + +Show information about an object. + +Usage: `udisksctl info [OPTION …]` + +| Option | Description | +| -------------------- | ------------------------------------- | +| `-p, --object-path` | Object to get information about | +| `-b, --block-device` | Block device to get information about | +| `-d, --drive` | Drive to get information about | + +To show info on all elements: `udisksctl dump` + +For a high-level status: `udisksctl status` + +To monitor for changes: `udisksctl monitor` + +### Mounting + +Mount a filesystem. + +Usage: `udisksctl mount [OPTION …]` + +| Option | Description | +| ----------------------- | -------------------------------------- | +| `-p, --object-path` | Object to get information about | +| `-b, --block-device` | Block device to get information about | +| `-t, --filesystem-type` | Filesystem type to use | +| `-o, --options` | Mount options | +| `--no-user-interaction` | Do not authenticate the user if needed | + +Unmount a filesystem. + +Usage: `udisksctl unmount [OPTION …]` + +| Option | Description | +| ----------------------- | -------------------------------------- | +| `-p, --object-path` | Object to get information about | +| `-b, --block-device` | Block device to get information about | +| `-f, --force` | Force/lazy unmount | +| `--no-user-interaction` | Do not authenticate the user if needed | + +### Encryption + +Unlock an encrypted device. + +Usage: `udisksctl unlock [OPTION …]` + +| Option | Description | +| ----------------------- | -------------------------------------- | +| `-p, --object-path` | Object to get information about | +| `-b, --block-device` | Block device to get information about | +| `--no-user-interaction` | Do not authenticate the user if needed | +| `--key-file` | Keyfile for unlocking | +| `--read-only` | Unlock the device as read-only | + +Lock an encrypted device. + +Usage: `udisksctl lock [OPTION …]` + +| Option | Description | +| ----------------------- | -------------------------------------- | +| `-p, --object-path` | Object to get information about | +| `-b, --block-device` | Block device to get information about | +| `--no-user-interaction` | Do not authenticate the user if needed | + +### Loop Devices + +Set up a loop device. + +Usage: `udisksctl loop-setup [OPTION …]` + + +| Option | Description | +| ----------------------- | ------------------------------------------ | +| `-f, --file` | File to set-up a loop device for | +| `-r, --read-only` | Setup read-only device | +| `-o, --offset` | Start at `<num>` bytes into file | +| `-s, --size` | Limit size to `<num>` bytes | +| `--no-partition-scan` | Do not scan the loop device for partitions | +| `--no-user-interaction` | Do not authenticate the user if needed | + +Delete a loop device. + +Usage: `udisksctl loop-delete [OPTION …]` + +| Option | Description | +| ----------------------- | -------------------------------------- | +| `-p, --object-path` | Object to get information about | +| `-b, --block-device` | Block device to get information about | +| `--no-user-interaction` | Do not authenticate the user if needed | + +### Power Off + +Safely power off a drive. + +Usage: `udisksctl power-off [OPTION …]` + +| Option | Description | +| ----------------------- | -------------------------------------- | +| `-p, --object-path` | Object to get information about | +| `-b, --block-device` | Block device to get information about | +| `--no-user-interaction` | Do not authenticate the user if needed |