Fix linting, and added a main Header with the title

This commit is contained in:
Marco D'Agostini 2020-07-15 17:37:44 -05:00
parent 583a0ee80a
commit bd915436e5
7 changed files with 129 additions and 105 deletions

View File

@ -1,4 +1,6 @@
# Como funcionan los fees
# Bitcoin
## Como funcionan los fees
Cada ~10m (varia mucho, muchas veces hasta se tarda mas de 30m) se genera un bloque que como máximo puede pesar hasta 1Mb de informacion.
@ -6,39 +8,41 @@ La transaccion mas común y simple es de 2 entradas y 2 salidas, y esa pesa mas
Lo mineros son los encargados de decidir cuales transacciones entran o no en un bloque, y por lo general, ellos le dan prioridad a las que tengan mejor fee (la que tenga la mayor densidad de BTC, osea la mayor **BTC/vbyte**)
En esta pagina https://bitcoinfees.earn.com puedes ver estimaciones de los fees actuales. Ahorita están absurdamente bajos, osea una transaccion normal te puede estar costando menos de 300 satoshis(0.025$) menos de 2,5 centavos de dolar. Con una wallet en la que tu tengas el control, tú decides cuantos fees vas a pagar. Si no pagas comision, corres el riesgo de que ni uno de los mineros meta tu transaccion en la blockchain y nunca se confirme. En la práctica los fees dependen principalmente de 2 cosas:
En esta pagina <https://bitcoinfees.earn.com> puedes ver estimaciones de los fees actuales. Ahorita están absurdamente bajos, osea una transaccion normal te puede estar costando menos de 300 satoshis(0.02# Bitcoin5$) menos de 2,5 centavos de dolar. Con una wallet en la que tu tengas el control, tú decides cuantos fees vas a pagar. Si no pagas comision, corres el riesgo de que ni uno de los mineros meta tu transaccion en la blockchain y nunca se confirme. En la práctica los fees dependen principalmente de 2 cosas:
- Congestión de la red, cuantas transacciones tienes haciendote competencia en el valor del fee (BTC/vbyte)
- Cuanto estás dispuesto a esperar
Fijate en la página, cada fila es un rango de fee/byte medido en **satoshis/byte**, el tamaño de la barra indica cuantas transacciones hay/habido en ese rango, y a la derecha, al final, hay una estimacion de minutos de espera (En la práctica varía)
El peso de una transaccion no solo depende de la cantidad de entradas y salidas, tambien depende del tipo de direcciones de las salidas (y quizas tambien de las entradas, not sure). Y existen 3 tipos de direcciones:
- 1... (clásica)
- 3... (Segwit envuelto en un script, para hacerlo compatible con la clásica)
- bc1... (Segwit nativo)
El primero es el mas ineficiente (el que pesa mas en una transaccion), y el último es el mas eficiente.
El primero es el mas ineficiente (el que pesa mas en una transaccion), # Bitcoiny el último es el mas eficiente.
Ya todos los servicios se han adaptado al mas eficiente, asi que asegurate de que la wallet que uses tenga direcciones que empiecen por **bc1...**
# Wallets centralizadas vs descentralizadas
## Wallets centralizadas vs descentralizadas
Las wallet descentralizadas modernas al momento de creacion generan un número aleatorio, que es básicamente el alma de tu wallet, de hecho, ese número **es** tu wallet, y quien lo tenga puede gastar tus BTC. Ese número te lo muestran en el formato **seed/semilla**, que es una lista de 12-24 palabras, es simplemente una forma mas presentable de mostrar el numero, ya que es mas facil de memorizar, y de transcribir.
Y muchas wallet van un paso mas allá e implementan el estandar **BIP39**, para encriptar esa **seed** con un **password** que tú escojas, y en estos casos para recuperar tu wallet vas a necesitar tanto la seed, como el password. Esta opcion es la que uso yo, porque entonces yo guardo tranquilamente mi **seed** en todos lados, sin preocuparme si alguien la llega a obtener, y solo me preocupo de guardar bien la clave, que es mas corta y aún mas fácil de memorizar y de guardar. (Es importante escoger una buena clave, mas q todo q sea larga, o te le pueden hacer bruteforce)
La necesidad de guardar bien esa clave es la desventaja que tienen las wallet descentralizadas vs las centralizadas/custodeadas, es muy facil cagarla, desde dejar muy a la vista la clave secreta a guardarla tan bien que se te pierde. O tambien si tienes muchos ahorros, tambien tienes que pensar en tener backups que tu familia pueda recuperar si te llega a pasar algo.
# lightning
## lightning
Está construido encima de Bitcoin. Y está basado en una especie de contrato entre 2 partes, y cada parte puede decidir meter X cantidad de BTC para usarlos dentro de ese canal, y mientras ese canal está abierto ambas partes pueden tranzar sin comision alguna, porque no son transacciones que se guardan en la blockchain, son transacciones totalmente privadas.
Y aquí es donde entra lightning como tal, porque bajo ciertas condiciones, se pueden conectar los canales entre sí para así poder transferirle a entidades con las que no tengas canales abierto directamente.
Ventajas:
- Transacciones son casi instantáneas.
- Fees son aún mas bajos. Gratis si con quien abriste el canal de lightning es el mismo a quien le vas a pagar.
Desventajas:
- No es suficiente con guardar la **seed** y **password**, tu aplicacion tambien necesita guardar cada cambio que se haga en tus canales abiertos. (La única aplicacion que probé creo que tenia para configurar Google Drive para guardar todos esos cambios).
- Tu aplicacion tiene que estar pendiente de la red cada cierto tiempo (dependiendo de cuando tiempo se le configuró al canal, por lo general varios días)
- Capacidad limitada de cantidad de Bitcoins que puedes enviar, depende de la capacidad de los canales de la ruta que atraviesa la transacción.

View File

@ -38,7 +38,7 @@ END
Al ejecutar ese procedimiento almacenado, se abre una transacción, se ejecuta la **Consulta 1**, y al intentar la **Consulta 2** falla.
Hay un problema aquí, la transacción no se deshace, sino que queda abierta, osea, tiene cambios hechos de la **Consulta 1**, pero no se han hecho permanentes en la BD (`COMMIT`), ni tampoco se han devuelto los cambios (`ROLLBACK`). Y puede ocurrir cualquiera de los dos escenarios. Por ejemplo si se cierra la conexión, la BD ejecuta un `ROLLBACK` y si se ejecuta cualquiera de estas consultas https://dev.mysql.com/doc/refman/8.0/en/implicit-commit.html se genera un `COMMIT` implicitamente.
Hay un problema aquí, la transacción no se deshace, sino que queda abierta, osea, tiene cambios hechos de la **Consulta 1**, pero no se han hecho permanentes en la BD (`COMMIT`), ni tampoco se han devuelto los cambios (`ROLLBACK`). Y puede ocurrir cualquiera de los dos escenarios. Por ejemplo si se cierra la conexión, la BD ejecuta un `ROLLBACK` y si se ejecuta cualquiera de estas consultas <https://dev.mysql.com/doc/refman/8.0/en/implicit-commit.html> se genera un `COMMIT` implicitamente.
Si en este estado de la BD se hace un `SELECT` para verificar si en la BD se hicieron los cambios de la **Consulta 1**, se va a obtener distintas respuestas dependiendo de si el `SELECT` se ejecuta desde la misma conexión/sesión o no.
@ -77,7 +77,7 @@ Esto sirve para que cualquier otra consulta que quiera leer o modificar los elem
Los `SELECT` normales no generan ningun bloqueo, para eso existen el `SELECT ... FOR SHARE` y el `SELECT ... FOR UPDATE`.
En términos simples el **FOR SHARE** bloquea los elementos seleccionados para que otra consulta no pueda escribir sobre ellos hasta que se cierre la transacción, y el **FOR UPDATE** adicionalmente impide que tampoco puedan leerlos (igual que los `INSERT`, `UPDATE` o `DELETE`). Mas información https://dev.mysql.com/doc/refman/8.0/en/innodb-locking-reads.html
En términos simples el **FOR SHARE** bloquea los elementos seleccionados para que otra consulta no pueda escribir sobre ellos hasta que se cierre la transacción, y el **FOR UPDATE** adicionalmente impide que tampoco puedan leerlos (igual que los `INSERT`, `UPDATE` o `DELETE`). Mas información <https://dev.mysql.com/doc/refman/8.0/en/innodb-locking-reads.html>
### Recomendaciones

View File

@ -1,18 +1,19 @@
*copiado sin verguenza alguna de https://www.techrepublic.com/article/how-to-run-an-ssh-connection-through-tor/*
# Configurar a un servicio onion
*copiado sin verguenza alguna de <https://www.techrepublic.com/article/how-to-run-an-ssh-connection-through-tor/>*
---
# Instalar Tor
## Instalar Tor
Instalar Tor en el cliente y en el servidor:
sudo apt-get install tor -y
# Configurar Tor
## Configurar Tor
1. En el servidor vamos a editar el archivo de configuración de tor `/etc/tor/torrc`:
sudo nano /etc/tor/torrc
2. Al final del archivo vamos a agregar esto:
@ -26,7 +27,7 @@ Instalar Tor en el cliente y en el servidor:
sudo systemctl restart tor
# Obtener la direccion .onion
## Obtener la direccion .onion
Estará en el archivo `hostname` en la carpeta configurada anteriormente `/var/lib/tor/ssh/`
@ -34,18 +35,15 @@ Estará en el archivo `hostname` en la carpeta configurada anteriormente `/var/l
Deberia arrojarte algo así: `riludi2kstjwmlzn.onion`
# Conectarse al servidor ssh con la direccion .onion
```bash
torify ssh ... # reemplazar el dominio/ip por la direccion .onion`
```
## Conectarse al servidor ssh con la direccion .onion
torify ssh ... # reemplazar el dominio/ip por la direccion .onion`
Por ejemplo:
torify ssh jack@riludi2kstjwmlzn.onion
## Opcional
### Opcional
Para no tener que recordar la direccion **.onion** puedes configurar los parámetros de conexión en el archivo `~/.ssh/config`
@ -58,7 +56,6 @@ Ingresar configuracion:
HostName riludi2kstjwmlzn.onion
Port 22
Ahora puedes conectarte así:
torify ssh serverTor

View File

@ -1,14 +1,16 @@
*Shamelessly copied from https://www.techrepublic.com/article/how-to-run-an-ssh-connection-through-tor/*
# Configure an onion service
*Shamelessly copied from <https://www.techrepublic.com/article/how-to-run-an-ssh-connection-through-tor/>*
---
# Install Tor
## Install Tor
Install Tor on both client and server:
sudo apt-get install tor -y
# Configure Tor
## Configure Tor
1. In the server let's edit tor's config file `/etc/tor/torrc`:
@ -25,7 +27,7 @@ Install Tor on both client and server:
sudo systemctl restart tor
# Get .onion address
## Get .onion address
It will be in the file `hostname` in the previously configured folder `/var/lib/tor/ssh`
@ -33,17 +35,15 @@ It will be in the file `hostname` in the previously configured folder `/var/lib/
You should get something like `riludi2kstjwmlzn.onion`
# Connect to the Tor hidden ssh server
## Connect to the Tor hidden ssh server
```bash
torify ssh ... # replace the domain/ip with the .onion address
```
torify ssh ... # replace the domain/ip with the .onion address
For example:
torify ssh jack@riludi2kstjwmlzn.onion
## Optional
### Optional
You don't need to remember the **.onion** address, you can write an entry to your user's ssh config file `~/.ssh/config`:
@ -56,7 +56,6 @@ Set configuration:
HostName riludi2kstjwmlzn.onion
Port 22
Now you can simply connect with:
torify ssh serverTor

View File

@ -1,57 +1,66 @@
# Shortcuts
# Terminal Shortcuts
*For Ubuntu's default keybinding settings (i.e Emacs keybindings)*
## Default shortcuts
## Insert previous arguments
- <kbd>Alt</kbd>+<kbd>.</kbd>: insert last argument from last command.
- <kbd>Alt</kbd>+<kbd>number</kbd>+<kbd>.</kbd>: insert #nth last argument from last command.
- <kbd>Alt</kbd>+<kbd>-</kbd> , <kbd>number</kbd> , <kbd>Alt</kbd>+<kbd>.</kbd>, **zsh:** <kbd>Alt</kbd>+<kbd>-</kbd>+<kbd>number</kbd>+<kbd>.</kbd>: insert #nth first argument from last command.
For Ubuntu's default keybinding settings (i.e Emacs keybindings)
*In Linux you can repeat commands to go back in history*
### Insert previous arguments
### Example:
- <kbd>Alt</kbd>+<kbd>.</kbd>: insert last argument from last command.
- <kbd>Alt</kbd>+<kbd>number</kbd>+<kbd>.</kbd>: insert #nth last argument from last command.
- <kbd>Alt</kbd>+<kbd>-</kbd> , <kbd>number</kbd> , <kbd>Alt</kbd>+<kbd>.</kbd>, **zsh:** <kbd>Alt</kbd>+<kbd>-</kbd>+<kbd>number</kbd>+<kbd>.</kbd>: insert #nth first argument from last command.
In Linux you can repeat commands to go back in history
#### Example
Last command is:
mv foo bar
- <kbd>Alt</kbd>+<kbd>0</kbd>+<kbd>.</kbd>: insert first argument of last command = `mv`
- <kbd>Alt</kbd>+<kbd>2</kbd>+<kbd>.</kbd>: insert last 2nd argument of last command = `foo`
- <kbd>up</kbd> , <kbd>Ctrl</kbd>+<kbd>w</kbd>: last command without the last word = `mv foo`
- <kbd>Alt</kbd>+<kbd>0</kbd>+<kbd>.</kbd>: insert first argument of last command = `mv`
- <kbd>Alt</kbd>+<kbd>2</kbd>+<kbd>.</kbd>: insert last 2nd argument of last command = `foo`
- <kbd>up</kbd> , <kbd>Ctrl</kbd>+<kbd>w</kbd>: last command without the last word = `mv foo`
### Cut/Paste commands
## Cut/Paste commands
*(relative to cursor's position)*
- <kbd>Ctrl</kbd>+<kbd>w</kbd>: cuts last word
- <kbd>Alt</kbd>+<kbd>d</kbd>: cuts next word
- <kbd>Ctrl</kbd>+<kbd>k</kbd>: cuts everything after
- <kbd>Ctrl</kbd>+<kbd>u</kbd>, **zsh:** <kbd>Alt</kbd>+<kbd>w</kbd>: cuts everything before
- **zsh:** <kbd>Ctrl</kbd>+<kbd>u</kbd>: cuts the entire command *(In bash you can combine <kbd>Ctrl</kbd>+<kbd>u</kbd> , <kbd>Ctrl</kbd>+<kbd>k</kbd>)*
- <kbd>Ctrl</kbd>+<kbd>y</kbd>: paste characters previously cut with any **Cut command**. *In bash you can chain **cut commands**, and <kbd>Ctrl</kbd>+<kbd>y</kbd> will paste them all.*
(relative to cursor's position)
- <kbd>Ctrl</kbd>+<kbd>w</kbd>: cuts last word
- <kbd>Alt</kbd>+<kbd>d</kbd>: cuts next word
- <kbd>Ctrl</kbd>+<kbd>k</kbd>: cuts everything after
- <kbd>Ctrl</kbd>+<kbd>u</kbd>, **zsh:** <kbd>Alt</kbd>+<kbd>w</kbd>: cuts everything before
- **zsh:** <kbd>Ctrl</kbd>+<kbd>u</kbd>: cuts the entire command *(In bash you can combine <kbd>Ctrl</kbd>+<kbd>u</kbd> , <kbd>Ctrl</kbd>+<kbd>k</kbd>)*
- <kbd>Ctrl</kbd>+<kbd>y</kbd>: paste characters previously cut with any **Cut command**. *In bash you can chain **cut commands**, and <kbd>Ctrl</kbd>+<kbd>y</kbd> will paste them all.*
## Move cursor
- <kbd>Ctrl</kbd>+<kbd>left</kbd>: move to last word
- <kbd>Ctrl</kbd>+<kbd>right</kbd>: move to next word
- <kbd>home</kbd> or <kbd>Ctrl</kbd>+<kbd>a</kbd>: move to start of command
- <kbd>end</kbd> or <kbd>Ctrl</kbd>+<kbd>e</kbd>: move to end of command
### Move cursor
- <kbd>Ctrl</kbd>+<kbd>left</kbd>: move to last word
- <kbd>Ctrl</kbd>+<kbd>right</kbd>: move to next word
- <kbd>home</kbd> or <kbd>Ctrl</kbd>+<kbd>a</kbd>: move to start of command
- <kbd>end</kbd> or <kbd>Ctrl</kbd>+<kbd>e</kbd>: move to end of command
## Other
- <kbd>Ctrl</kbd>+<kbd>_</kbd>: undo last edit *(very useful when exceeding <kbd>Ctrl</kbd>+<kbd>w</kbd>)*
### Other
## To see all shortcuts available
- **bash:** `bind -lp`
- **zsh:** `bindkey -L`
- <kbd>Ctrl</kbd>+<kbd>_</kbd>: undo last edit *(very useful when exceeding <kbd>Ctrl</kbd>+<kbd>w</kbd>)*
# Custom shortcuts
## Iterate through arguments
*only works in zsh, and probably only Linux*
### To see all shortcuts available
- **bash:** `bind -lp`
- **zsh:** `bindkey -L`
## Custom shortcuts
### Iterate through arguments
only works in zsh, and probably only Linux
#### Description
### Description
Insert any argument of a previous command by iterating one by one until selection
### Setup Instructions
#### Setup Instructions
run this:
autoload -Uz copy-earlier-word
@ -62,7 +71,8 @@ run this:
Now use <kbd>Alt</kbd>+<kbd>.</kbd> to go as back as you want, then use <kbd>Alt</kbd>+<kbd>:</kbd> to iterate through the arguments
### Example:
#### Example
Last command is
echo 1 2 3 4 5
@ -74,12 +84,12 @@ Last command is
- <kbd>Alt</kbd>+<kbd>.</kbd>+<kbd>:</kbd>+<kbd>:</kbd>+<kbd>:</kbd>+<kbd>:</kbd>: `1`
- <kbd>Alt</kbd>+<kbd>.</kbd>+<kbd>:</kbd>+<kbd>:</kbd>+<kbd>:</kbd>+<kbd>:</kbd>+<kbd>:</kbd>: `echo`
source: https://stackoverflow.com/a/34861762/3163120
source: <https://stackoverflow.com/a/34861762/3163120>
## Other examples
# Other examples
### Common usecases
## Common usecases
Let's consider the last command to be:
mv foo bar
@ -88,7 +98,8 @@ Let's consider the last command to be:
<kbd>Alt</kbd>+<kbd>0</kbd>+<kbd>.</kbd>: first argument of last command = `mv`
# Limitations
## Limitations
"words" only includes `a-zA-Z` characters, so any symbol character will stop word-shortcuts.
So if last argument was a url and you want to erase it with <kbd>Ctrl</kbd>+<kbd>w</kbd> it will be a pain.
@ -97,8 +108,6 @@ E.g: `curl -I --header "Connection: Keep-Alive" https://stackoverflow.com/questi
To erase that **url** using <kbd>Ctrl</kbd>+<kbd>w</kbd>, you'd have to repeat it 12 times.
---
It would be great to have similar shortcuts that only stops at the **space character**

View File

@ -1,17 +1,18 @@
[//]: # "Ctrl+K,V o Ctrl+Shift+V - Para ver vista previa en VSCode"
Tutorial to install [youtube-dl](https://github.com/ytdl-org/youtube-dl/) in android via [termux](https://termux.com/), and configure it to download links shared from another app.
# Tutorial to install [youtube-dl](https://github.com/ytdl-org/youtube-dl/) in android
*Based on https://www.reddit.com/r/Piracy/comments/baufql/youtubedl_the_easy_way_on_android/*
Based on <https://www.reddit.com/r/Piracy/comments/baufql/youtubedl_the_easy_way_on_android/>
# Usage
## Usage
Click **Share**, select **Termux**, choose video or audio, and that's it!, it will be saved to `Downloads/{Provider}/` e.g `Downloads/Youtube/`
# Install Termux
https://termux.com/
## Install Termux
# Open Termux and run one of these:
<https://termux.com/>
## Open Termux and run one of these
1. [Youtube-dl + sharing + dialog **(Recommended)**](#youtube-dl--sharing--dialog-recommended)
2. [Youtube-dl + sharing](#youtube-dl--sharing)
@ -19,7 +20,7 @@ https://termux.com/
4. [Termux extras](#termux-extras)
5. [All-In-One](#all-in-one)
## Youtube-dl + sharing + dialog **(Recommended)**
### Youtube-dl + sharing + dialog **(Recommended)**
```bash
# Ask for storage permission
@ -60,13 +61,13 @@ https://termux.com/
- A prompt to enable storage will appear, press <kbd>y</kbd> then <kbd>Enter</kbd>
- That's all!, just wait for it to finish upgrading/installing
### Usage:
#### Usage
Share an URL to termux, a dialog will ask you to choose if download **video** or just **audio**
## Youtube-dl + sharing
### Youtube-dl + sharing
### Usage:
#### Usage
Share URL to termux, this will automatically download the video.
@ -89,7 +90,7 @@ But if you always want to download just audio, replace `youtube-dl $url` with `y
chmod +x ~/bin/termux-url-opener
```
## Youtube-dl
### Youtube-dl
This will only install youtube-dl in termux, sharing a URL to Termux will not work, you'll need to run the command manually from the terminal, e.g `youtube-dl https://youtu.be/blahblahblah`
@ -100,8 +101,7 @@ This will only install youtube-dl in termux, sharing a URL to Termux will not wo
apt update && apt upgrade -y && apt install -y python ffmpeg && pip install youtube-dl
```
## Termux extras
### Termux extras
```bash
# Add special keys to keyboard
@ -115,7 +115,7 @@ This will only install youtube-dl in termux, sharing a URL to Termux will not wo
apt install -y nano
```
## All-In-One
### All-In-One
Youtube-dl + sharing + dialog + Termux extras

View File

@ -1,9 +1,13 @@
# Ubuntu install guide
## Update & Upgrade
```bash
sudo apt update && sudo apt upgrade -y
```
## Install Packages
```bash
sudo apt-get install python3-pip zsh curl wget git
sudo apt-get install p7zip-full smplayer cmus speedtest-cli git-gui filezilla pavucontrol ufw servefile nmap fail2ban gimp most colordiff mosh dconf-editor ncdu qcalc jq tor fonts-noto &
@ -14,31 +18,38 @@ pip3 install youtube-dl tldr
## External Repositories
### Antimicro
```bash
sudo add-apt-repository ppa:mdeguzis/libregeek
```
As of today, a bionic package is still not available, but the artful works!. https://github.com/AntiMicro/antimicro/issues
As of today, a bionic package is still not available, but the artful works!. <https://github.com/AntiMicro/antimicro/issues>
`sudo nano /etc/apt/sources.list.d/mdeguzis-ubuntu-libregeek-bionic.list` Replace `bionic` with `artful`
```bash
sudo apt update
sudo apt install antimicro
```
Put config file https://gist.github.com/madacol/19f8c71ba98f484a4294ccfe90e88e6e in `~/.config/antimicro`
Put config file <https://gist.github.com/madacol/19f8c71ba98f484a4294ccfe90e88e6e> in `~/.config/antimicro`
### SinkSwitcher
https://github.com/madacol/sinkSwitcher
<https://github.com/madacol/sinkSwitcher>
## Web installs
- docker: https://download.docker.com
- VSCode: https://code.visualstudio.com/
- chrome: https://www.chrome.com/
- syncthing: https://apt.syncthing.net/
- Zsh-syntax-highlighting: https://github.com/zsh-users/zsh-syntax-highlighting/blob/master/INSTALL.md
- docker: <https://download.docker.com>
- VSCode: <https://code.visualstudio.com/>
- chrome: <https://www.chrome.com/>
- syncthing: <https://apt.syncthing.net/>
- Zsh-syntax-highlighting: <https://github.com/zsh-users/zsh-syntax-highlighting/blob/master/INSTALL.md>
## Edit ~/.zshrc
### Add shortcut "Alt+:" [to iterate through arguments](https://stackoverflow.com/questions/4009412/how-to-use-arguments-from-previous-command/55069846#55069846)
```bash
autoload -Uz copy-earlier-word
zle -N copy-earlier-word
@ -46,19 +57,23 @@ bindkey "^[:" copy-earlier-word
```
### Enable most
```bash
export PAGER=most
```
## Gnome extensions
- Caffeine
- Dash to dock https://extensions.gnome.org/extension/307/dash-to-dock/ `sudo apt remove gnome-shell-extension-ubuntu-dock` https://github.com/micheleg/dash-to-dock/issues/643
- suspend button NetSpeed https://extensions.gnome.org/extension/104/netspeed/
- NetSpeed https://extensions.gnome.org/extension/104/netspeed/
- Dash to dock <https://extensions.gnome.org/extension/307/dash-to-dock/> `sudo apt remove gnome-shell-extension-ubuntu-dock` <https://github.com/micheleg/dash-to-dock/issues/643>
- suspend button NetSpeed <https://extensions.gnome.org/extension/104/netspeed/>
- NetSpeed <https://extensions.gnome.org/extension/104/netspeed/>
## Custom shortcuts
- `systemctl suspend`
- Cmus https://medium.com/@madacol/configure-cmus-music-player-on-the-terminal-in-ubuntu-3c513d2d2cd0
- Cmus <https://medium.com/@madacol/configure-cmus-music-player-on-the-terminal-in-ubuntu-3c513d2d2cd0>
## StartUp
- Cmus `gnome-terminal -- cmus`