Merge repository docs into knowledge

This commit is contained in:
Marco D'Agostini 2021-02-24 12:15:11 +01:00
commit 3d987eab94
9 changed files with 770 additions and 0 deletions

5
.markdownlint.json Normal file
View File

@ -0,0 +1,5 @@
{
"MD024": false,
"MD013": false,
"MD033": false
}

50
Bitcoin Explicacion.es.md Normal file
View File

@ -0,0 +1,50 @@
# 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.
La transaccion mas común y simple es de 2 entradas y 2 salidas, y esa pesa mas de 100 bytes, eso quiere decir que en un bloque caben menos de 10.000 transacciones.
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.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.
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
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
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.
Lightning sigue en desarrollo activo, y algunas de las desventajas son mejorables sacrificando decentralizacion, como hace Phoenix Wallet, que me parece un muy buen tradeoff para noobs.

View File

@ -0,0 +1,86 @@
[//]: # "Ctrl+K,V o Ctrl+Shift+V - Para ver vista previa en VSCode"
# Comandos principales
- `START TRANSACTION` se utiliza para abrir una transacción (desactiva temporalmente el modo `autocommit`).
- `COMMIT` se utiliza para que los cambios que están pendientes de la transacción actual, se vuelvan permanentes en la BD y cierra la transacción.
- `ROLLBACK` para deshechar cualquier cambio pendiente que se haya hecho en la transacción actual y cierra la transacción.
MYSQL por defecto funciona con el modo `autocommit` activado, eso quiere decir que cualquier consulta es una transacción implicitamente, osea, si hacen un `UPDATE ...` en el fondo InnoDB ejecuta algo parecido a esto:
```sql
START TRANSACTION;
UPDATE ...
COMMIT;
```
Si ese `UPDATE ...` falla estando el modo `autocommit` activado, entonces automáticamente se ejecuta un `ROLLBACK`
# Usos
## Ejecutar todo o nada
Supongamos que queremos ejecutar una serie de consultas que modifican la BD, pero queremos que se ejecuten todas, y que si cualquiera falla que se deshagan los cambios.
Podemos hacer algo así:
```sql
BEGIN
START TRANSACTION;
.. Consulta 1 ..
.. Consulta 2 .. # Esta consulta siempre falla
.. Consulta 3 ..
COMMIT;
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.
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.
Cuando se abre una transacción y se hace un cambio, ese cambio solamente es visible para esa misma sesión que abrió la transacción.
### Solución
Explicitamente hacer `ROLLBACK` cuando ocurra un error.
Para eso definimos un *HANDLER* para los errores, es como el equivalente a un `try ... catch` pero afecta a todo el procedimeinto almacenado
```sql
BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
ROLLBACK;
RESIGNAL;
END;
START TRANSACTION;
.. Consulta 1 ..
.. Consulta 2 .. # Esta consulta siempre falla
.. Consulta 3 ..
COMMIT;
END
```
Ahora cuando la **Consulta 2** falle, se dispara el handler, y se ejecutan los comandos `ROLLBACK` y `RESIGNAL`. *RESIGNAL* sirve para que se vuelva a lanzar el error, ya que de lo contrario el procedimiento almacenado termina *"exitosamente"* a pesar de que hubo un error.
## Bloquear tablas
Luego de abrir una transaccion con `START TRANSACTION` las consultas como el `INSERT`, `UPDATE` o `DELETE` bloquean las tablas, registros o índices que afecten, hasta que dicha transacción se cierre ya sea con un `COMMIT` o un `ROLLBACK`.
Esto sirve para que cualquier otra consulta que quiera leer o modificar los elementos bloqueados, deban esperar hasta que la transacción que los bloquea se cierre y los libere.
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>
### Recomendaciones
Hay que analizar detalladamente todo lo que se mete dentro de una transacción, y reducirlo a lo mas mínimo posible, para evitar [Deadlocks](https://dev.mysql.com/doc/refman/5.7/en/innodb-deadlocks.html) o retrasos debido a bloqueos innecesarios.
Usar índices en todos los `WHERE` de las consultas que bloquean, para que dichos bloqueos sean lo mas óptimos posibles, y se bloquee solo lo que hace falta bloquear.

View File

@ -0,0 +1,65 @@
# 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 en el cliente y en el servidor:
sudo apt-get install tor -y
## 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:
HiddenServiceDir /var/lib/tor/ssh/
HiddenServicePort 22
<kbd>Ctrl</kbd>+<kbd>x</kbd> para guardar y cerrar el archivo.
3. Reiniciar Tor:
sudo systemctl restart tor
## Obtener la direccion .onion
Estará en el archivo `hostname` en la carpeta configurada anteriormente `/var/lib/tor/ssh/`
sudo cat /var/lib/tor/ssh/hostname
Deberia arrojarte algo así: `riludi2kstjwmlzn.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
Para no tener que recordar la direccion **.onion** puedes configurar los parámetros de conexión en el archivo `~/.ssh/config`
nano ~/.ssh/config
Ingresar configuracion:
Host serverTor
User jack
HostName riludi2kstjwmlzn.onion
Port 22
Ahora puedes conectarte así:
torify ssh serverTor
## Mas informacion
<https://community.torproject.org/onion-services/setup/>

View File

@ -0,0 +1,65 @@
# Configure an onion service
*Shamelessly copied from <https://www.techrepublic.com/article/how-to-run-an-ssh-connection-through-tor/>*
---
## Install Tor
Install Tor on both client and server:
sudo apt-get install tor -y
## Configure Tor
1. In the server let's edit tor's config file `/etc/tor/torrc`:
sudo nano /etc/tor/torrc
2. At the bottom of that file, add this:
HiddenServiceDir /var/lib/tor/ssh/
HiddenServicePort 22
<kbd>Ctrl</kbd>+<kbd>x</kbd> to save and close file.
3. Restart Tor:
sudo systemctl restart tor
## Get .onion address
It will be in the file `hostname` in the previously configured folder `/var/lib/tor/ssh`
sudo cat /var/lib/tor/ssh/hostname
You should get something like `riludi2kstjwmlzn.onion`
## Connect to the Tor hidden ssh server
torify ssh ... # replace the domain/ip with the .onion address
For example:
torify ssh jack@riludi2kstjwmlzn.onion
### Optional
You don't need to remember the **.onion** address, you can write an entry to your user's ssh config file `~/.ssh/config`:
nano ~/.ssh/config
Set configuration:
Host serverTor
User jack
HostName riludi2kstjwmlzn.onion
Port 22
Now you can simply connect with:
torify ssh serverTor
## More info
<https://community.torproject.org/onion-services/setup/>

View File

@ -0,0 +1,113 @@
# Terminal Shortcuts
## Default shortcuts
For Ubuntu's default keybinding settings (i.e Emacs keybindings)
### 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.
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`
### 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.*
### 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>)*
### 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
Insert any argument of a previous command by iterating one by one until selection
#### Setup Instructions
run this:
autoload -Uz copy-earlier-word
zle -N copy-earlier-word
bindkey "^[:" copy-earlier-word
*(to make this permanent, add it to your `~/.zshrc` and restart shell)*
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
Last command is
echo 1 2 3 4 5
- <kbd>Alt</kbd>+<kbd>.</kbd>: `5`
- <kbd>Alt</kbd>+<kbd>.</kbd>+<kbd>:</kbd>: `4`
- <kbd>Alt</kbd>+<kbd>.</kbd>+<kbd>:</kbd>+<kbd>:</kbd>: `3`
- <kbd>Alt</kbd>+<kbd>.</kbd>+<kbd>:</kbd>+<kbd>:</kbd>+<kbd>:</kbd>: `2`
- <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>
## Other examples
### Common usecases
Let's consider the last command to be:
mv foo bar
<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>: first argument of last command = `mv`
## 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.
E.g: `curl -I --header "Connection: Keep-Alive" https://stackoverflow.com/questions/38176514/re-run-previous-command-with-different-arguments`
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

@ -0,0 +1,159 @@
[//]: # "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
Based on <https://www.reddit.com/r/Piracy/comments/baufql/youtubedl_the_easy_way_on_android/>
## 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/>
## Open Termux and run one of these
<!-- no toc -->
1. [Youtube-dl + sharing + dialog **(Recommended)**](#youtube-dl--sharing--dialog-recommended)
2. [Youtube-dl + sharing](#youtube-dl--sharing)
3. [Youtube-dl](#youtube-dl)
4. [Termux extras](#termux-extras)
5. [All-In-One](#all-in-one)
### Youtube-dl + sharing + dialog **(Recommended)**
```bash
# Ask for storage permission
termux-setup-storage &&
# Install youtube-dl
apt update && apt upgrade -y && apt install -y python ffmpeg dialog && pip install youtube-dl &&
# Configure to download videos in `Download/{URL's provider (e.g. Youtube)}/{filename}`
mkdir -p ~/.config/youtube-dl &&
echo "# Default Output Directory and Pattern
-o /data/data/com.termux/files/home/storage/downloads/%(extractor_key)s/%(title).150s-%(id)s.%(ext)s" > ~/.config/youtube-dl/config &&
# Configure to open shared URLs with `youtube-dl {url}`
mkdir -p ~/bin &&
echo '#!/bin/bash
URL=$1
HEIGHT=15
WIDTH=40
CHOICE_HEIGHT=4
CHOICE=$(dialog \
--menu "What would you like to download?" \
$HEIGHT $WIDTH $CHOICE_HEIGHT \
Video "" \
Audio "" \
2>&1 >/dev/tty)
case $CHOICE in
Video)
echo "Downloading video from $URL"
youtube-dl $URL
;;
Audio)
echo "Downloading audio from $URL"
youtube-dl -x $URL
;;
esac' > ~/bin/termux-url-opener &&
chmod +x ~/bin/termux-url-opener
```
- Paste the script above 🖢 in the Termux console and press <kbd>Enter</kbd>
- 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
Share an URL to termux, a dialog will ask you to choose if download **video** or just **audio**
### Youtube-dl + sharing
#### Usage
Share URL to termux, this will automatically download the video.
But if you always want to download just audio, replace `youtube-dl $url` with `youtube-dl -x $url` in the script below 🖣
```bash
# Ask for storage permission
termux-setup-storage &&
# Install youtube-dl
apt update && apt upgrade -y && apt install -y python ffmpeg && pip install youtube-dl &&
# Configure to download videos in `Download/{URL's provider (e.g. Youtube)}/{filename}`
mkdir -p ~/.config/youtube-dl &&
echo "# Default Output Directory and Pattern
-o /data/data/com.termux/files/home/storage/downloads/%(extractor_key)s/%(title).150s-%(id)s.%(ext)s" > ~/.config/youtube-dl/config &&
# Configure to open shared URLs with `youtube-dl {url}`
mkdir -p ~/bin &&
echo "#!/bin/bash
url=$1
youtube-dl $url" > ~/bin/termux-url-opener &&
chmod +x ~/bin/termux-url-opener
```
### 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`
```bash
# Ask for storage permission
termux-setup-storage &&
# Install youtube-dl
apt update && apt upgrade -y && apt install -y python ffmpeg && pip install youtube-dl
```
### Termux extras
```bash
# Add special keys to keyboard
# source: https://wiki.termux.com/wiki/Touch_Keyboard#Extra_Keys_Row(s)
mkdir -p ~/.termux
echo "extra-keys = [ \
['ESC', '/', '|', 'HOME', 'UP', 'END', 'PGUP', '-'], \
['TAB','CTRL', 'ALT', 'LEFT', 'DOWN', 'RIGHT', 'PGDN', '~'] \
]" > ~/.termux/termux.properties
# Install nano
apt install -y nano
```
### All-In-One
Youtube-dl + sharing + dialog + Termux extras
```bash
termux-setup-storage &&
apt update && apt upgrade -y && apt install -y nano python ffmpeg dialog && pip install youtube-dl &&
mkdir -p ~/.config/youtube-dl &&
echo "# Default Output Directory and Pattern
-o /data/data/com.termux/files/home/storage/downloads/%(extractor_key)s/%(title).150s-%(id)s.%(ext)s" > ~/.config/youtube-dl/config &&
mkdir -p ~/bin &&
echo '#!/bin/bash
URL=$1
HEIGHT=15
WIDTH=40
CHOICE_HEIGHT=4
CHOICE=$(dialog \
--menu "Que desea descargar?" \
$HEIGHT $WIDTH $CHOICE_HEIGHT \
Video "" \
Audio "" \
2>&1 >/dev/tty)
case $CHOICE in
Video)
youtube-dl $URL
;;
Audio)
youtube-dl -x $URL
;;
esac' > ~/bin/termux-url-opener &&
chmod +x ~/bin/termux-url-opener &&
mkdir -p ~/.termux &&
echo "extra-keys = [ \
['ESC', '/', '|', 'HOME', 'UP', 'END', 'PGUP', '-'], \
['TAB','CTRL', 'ALT', 'LEFT', 'DOWN', 'RIGHT', 'PGDN', '~'] \
]" > ~/.termux/termux.properties
```

View File

@ -0,0 +1,43 @@
# NetworkManager
- `nm-applet` to run old GUI and activate `Enable Networking`.
- `nm-connection-editor` to edit any weird configuration in the connections.
- You can also see what the **NetworkManager** is doing with these commands.
```bash
# Run one by one to see if anything is useful
nmcli device
nmcli
nmcli device show
```
`unmanaged` means **NetworkManager** will not manage that device.
### Documentation: https://help.ubuntu.com/community/NetworkManager
---
# Netplan
```bash
# Create a config file
sudo nano /etc/netplan/ethernet.yaml
```
and enter this
```bash
network:
version: 2
renderer: networkd
ethernets:
eno1:
dhcp4: true
```
replace `eno1` with whatever your device is (mine was `ens33`).
To see your list of devices, run `ip addr`.
Finally apply the new configurations
sudo netplan apply
### Documentation: https://netplan.io/reference#examples

184
ubuntu fresh install.md Normal file
View File

@ -0,0 +1,184 @@
# Ubuntu fresh setup guide
## Update & Upgrade
```bash
sudo apt update && sudo apt upgrade -y
```
## Install Packages
```bash
sudo apt-get install python3-pip zsh curl wget git dconf-editor
sudo apt-get install p7zip-full smplayer cmus speedtest-cli git-gui filezilla pavucontrol paprefs ufw servefile nmap fail2ban gimp most colordiff mosh ncdu qalculate-gtk jq tor fonts-noto nautilus-actions filemanager-actions thunderbird chrome-gnome-shell gnome-tweaks smartmontools &
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>
`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`
### 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>
## Shells
### Fish
#### Functions
- nvm
Install bass, then configure these functions
- **__nvm_load.fish**
```fish
function __nvm_load
functions -e __nvm_load node npm npx
bass source ~/.nvm/nvm.sh --no-use ';' nvm use 2> /dev/null '||' nvm use default
end
```
- **nvm.fish**
```fish
function nvm
functions -e __nvm_load node npm npx
bass source ~/.nvm/nvm.sh --no-use ';' source ~/.nvm/bash_completion ';' nvm $argv
end
```
- **npx.fish**
```fish
function npx
__nvm_load
npx $argv
end
```
- **npm.fish**
```fish
function npm
__nvm_load
npm $argv
end
```
- **node.fish**
```fish
function node
__nvm_load
node $argv
end
```
### Zsh - Edit ~/.zshrc
#### Add `~/.local/bin` to PATH
```bash
export PATH=$HOME/.local/bin:$PATH
```
#### 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
bindkey "^[:" copy-earlier-word
```
#### Aliases
```bash
alias lr="ls -hartl"
alias youtube-dl720='youtube-dl -f "bestvideo[height<=720]+bestaudio/best[height<=720]"'
alias python=python3
alias ipython=ipython3
function mkcd () { mkdir -p "$@" && cd "$@"; }
```
#### Lazy-load nvm
```bash
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . $NVM_DIR/nvm.sh --no-use;
[ -s "$NVM_DIR/bash_completion" ] && . $NVM_DIR/bash_completion;
function __nvm_load_node () {
unalias node npm npx;
nvm use 2> /dev/null || nvm use default;
command=$1;
shift 1;
$command $@;
}
alias node='__nvm_load_node node $@'
alias npm='__nvm_load_node npm $@'
alias npx='__nvm_load_node npx $@'
```
#### Enable most
```bash
export PAGER=most
```
#### Enable zsh plugins
```bash
plugins=(git zsh-syntax-highlighting zsh-autosuggestions)
```
**Note:** Probably need to install them first
## Gnome extensions
- Caffeine <https://extensions.gnome.org/extension/517/caffeine/>
- NetSpeed <https://extensions.gnome.org/extension/104/netspeed/>
- EasyScreenCast <https://extensions.gnome.org/extension/690/easyscreencast/>
## Dconf
### Built-in dash-to-dock extension
- `org.gnome.shell.extensions.dash-to-dock.click-action` = **`cycle-windows`**
- `org.gnome.shell.extensions.dash-to-dock.scroll-action` = **`cycle-windows`**
- `org.gnome.shell.extensions.dash-to-dock.show-windows-preview` = **`false`**
## Custom shortcuts
- `systemctl suspend`
- Cmus <https://medium.com/@madacol/configure-cmus-music-player-on-the-terminal-in-ubuntu-3c513d2d2cd0>
- `qalculate`
## StartUp
- Cmus `gnome-terminal -- cmus`