mirror of
https://codeberg.org/Mo8it/How_To_Linux.git
synced 2024-11-24 09:51:36 +00:00
Add terminal upgrade
This commit is contained in:
parent
8b90df6fe7
commit
6ba629913b
3 changed files with 136 additions and 37 deletions
|
@ -1,3 +1,6 @@
|
|||
# Day 2
|
||||
|
||||
In this day, we will learn how to glue commands together to benefit from their modularity. Later, we will write our own shell scripts to achieve some automation.
|
||||
In this day, we will learn more about the terminal and how to glue commands together to benefit from their modularity.
|
||||
|
||||
But we will start by making our terminal more comfortable!
|
||||
Let's make an upgrade away from the terminal of the 90s ✨
|
||||
|
|
132
src/day_2/terminal_upgrade.md
Normal file
132
src/day_2/terminal_upgrade.md
Normal file
|
@ -0,0 +1,132 @@
|
|||
# Terminal upgrade
|
||||
|
||||
## Fish
|
||||
|
||||
When you run something in the terminal, then you are interacting with a so called _shell_.
|
||||
|
||||
The default shell on almost all Linux systems is `bash`.
|
||||
Therefore, you should be familiar with it.
|
||||
|
||||
But if you want a modern terminal experience instead of that of the 90s, then you should use the [Fish shell](https://fishshell.com/) 🐠
|
||||
The **f**riendly **i**nteractive **sh**ell".
|
||||
|
||||
Bash offers basic (auto)completion, but Fish takes it to the next level!
|
||||
|
||||
Type `ls ~/` (without hitting `Enter` yet) and press `Tab` twice in Bash.
|
||||
Bash will just show you all possible completion options.
|
||||
But Fish will let you cycle through these options with `Tab` and `Shift + Tab` to choose one!
|
||||
This doen't only work with paths, but also for commands and even command options!
|
||||
|
||||
In Bash, you you can cycle through your command history using the up and down arrow keys.
|
||||
But in Fish, you can also start a command and _then_ cycle through your history that has the same **prefix** with the up and down arrow keys!
|
||||
|
||||
It will also automatically give you suggestions to what you type based on history and completion!
|
||||
These autosuggestions are showed as dimmed text to the right of your input.
|
||||
To use that suggestion, you can just press the right arrow key (or `Ctrl + e`)!
|
||||
|
||||
Fish also supports true color synatx highlighting 🌈
|
||||
|
||||
Colors are not only fancy, but they can also be very helpful!
|
||||
If you start typing a command with a program that does not exit (like `echoo` instead of `echo` for example), Fish will highlight that program in red!
|
||||
Otherwise, the program is highlighted in blue!
|
||||
This gives you rapid feedback while typing 🤩
|
||||
|
||||
You can also configure Fish in the file `~/.config/fish/config.fish`.
|
||||
Here is any example
|
||||
|
||||
```bash
|
||||
if status is-interactive
|
||||
# Disable the greeting message.
|
||||
set -g fish_greeting
|
||||
|
||||
# Abbreviations
|
||||
|
||||
# Prevent overriding files/directories by accident when using `cp` and `mv`.
|
||||
abbr -ag cp "cp -i"
|
||||
abbr -ag mv "mv -i"
|
||||
# Use `trash` by default instead of `rm`.
|
||||
abbr -ag rm "trash"
|
||||
# Use another shortcut for when you really want to delete instead of moving into a trash.
|
||||
abbr -ag rmr "rm -r"
|
||||
# Set some default options.
|
||||
abbr -ag rsync "rsync -Lahz"
|
||||
|
||||
# Alias
|
||||
# Use `bat` instead of `cat` for colored output!
|
||||
alias cat "bat"
|
||||
|
||||
# Functions
|
||||
function demo
|
||||
echo "Hallo from the demo function!"
|
||||
echo "Arguments taken: $argv"
|
||||
echo "First argument: $argv[1]"
|
||||
end
|
||||
# Well will learn more about arguments later.
|
||||
end
|
||||
```
|
||||
|
||||
Use **abbreviations** when you want your input to be replaced while typing with the ability to modify the replacement.
|
||||
**Aliases** should only be used if you are sure that the two commands are equivalent for you.
|
||||
|
||||
## Zellij
|
||||
|
||||
Now that we have a fancy shell, what can be even better than a fancy terminal?
|
||||
|
||||
Multiple fancy terminals!
|
||||
|
||||
Let me introduce you to [Zellij](https://zellij.dev/about/), a modern [terminal multiplexer](https://en.wikipedia.org/wiki/Terminal_multiplexer) written in Rust 🦀
|
||||
|
||||
It offers panes, tabs and even floating panes!
|
||||
|
||||
Start Zellij by running `zellij` and take a look at the shortcuts at the bottom.
|
||||
It is pretty user friendly!
|
||||
|
||||
Press `Ctrl + p` to go into the _pane mode_ where you can select one of the shortcuts that newly appeared at the bottom.
|
||||
Press `n` in the _pane mode_ to create a **new pane**!
|
||||
|
||||
You can change the focused pane by clicking on another pane.
|
||||
But there are also keyboard shortcuts for that.
|
||||
|
||||
Normally, you can press `Ctrl + t` to go into the _tab mode_ where you can press `n` to create a new tab.
|
||||
But if you are using the terminal in the browser provided during the course, then you might not be able to press `Ctrl + t` without opening a _browser_ new tab.
|
||||
|
||||
Therefore, we have to change that keybinding to something that does not conflict with the browser.
|
||||
To do so, create the directory `~/.config/zellij` and place the file `config.kdl` in it with the following content:
|
||||
|
||||
```kdl
|
||||
keybinds {
|
||||
normal {
|
||||
bind "Ctrl b" { SwitchToMode "tab"; }
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
This configuration uses the shortcut `Ctrl + b` instead of `Ctrl + t` to enter the _tab mode_.
|
||||
|
||||
Now, use that new shortcut followed by `n` to create a new tab.
|
||||
The easiest way to change the focused tab is by clicking on the tab label at the top.
|
||||
But there are also keyboard shortcuts for that.
|
||||
|
||||
Try detaching the session by pressing `Ctrl + o` followed by `d`.
|
||||
This will lead to exiting Zellij, but your session (open panes and tabs) is not gone!
|
||||
|
||||
To attach back to that session, run `zellij attach` or `zellij a` for short.
|
||||
Fancy, right?
|
||||
You can just detach a session you working in, do something else and attach back to continue from where you have left it 😃
|
||||
|
||||
There is still something annoying:
|
||||
Everytime you start zellij, you have to start fish afterwards.
|
||||
Wouldn't it be awesome to have Fish as the default shell in Zellij?
|
||||
|
||||
Let's make it the default one!
|
||||
Add the following line to the beinning of the configuration file `~/.config/zellij/config.kdl`:
|
||||
|
||||
```kdl
|
||||
default_shell "/usr/bin/fish"
|
||||
```
|
||||
|
||||
You can check that this is the path of the program `fish` on your system by running `which fish`.
|
||||
|
||||
We are not done with upgrading our terminal workspace.
|
||||
We will introduce more modern tools later.
|
||||
But this should be enough for now 🙂
|
|
@ -66,42 +66,6 @@ export PATH="$PATH:$HOME/.cargo/bin"
|
|||
alias rm="trash"
|
||||
```
|
||||
|
||||
## Fish
|
||||
|
||||
`~/.config/fish/config.fish`
|
||||
|
||||
```bash
|
||||
if status is-interactive
|
||||
# Disable greeting message
|
||||
set -g fish_greeting
|
||||
|
||||
# Abbreviations
|
||||
abbr -ag cp "cp -i"
|
||||
abbr -ag mv "mv -i"
|
||||
abbr -ag rmr "rm -r"
|
||||
abbr -ag rm "trash"
|
||||
abbr -ag rsync "rsync -Lahz"
|
||||
|
||||
# Aliases
|
||||
alias cat "bat"
|
||||
alias lg "lazygit"
|
||||
|
||||
# Functions
|
||||
function demo
|
||||
echo "Hallo from demo function!"
|
||||
echo "Arguments taken: $argv"
|
||||
echo "First argument: $argv[1]"
|
||||
end
|
||||
end
|
||||
```
|
||||
|
||||
Add to path:
|
||||
|
||||
```bash
|
||||
fish_add_path ~/.cargo/bin
|
||||
fish_add_path ~/.local/bin
|
||||
```
|
||||
|
||||
## SSH
|
||||
|
||||
### Setup host
|
||||
|
|
Loading…
Reference in a new issue