diff --git a/modules/qualifying/assets/vim_01.png b/modules/qualifying/assets/vim_01.png new file mode 100644 index 0000000..228ced6 Binary files /dev/null and b/modules/qualifying/assets/vim_01.png differ diff --git a/modules/qualifying/assets/vim_03.png b/modules/qualifying/assets/vim_03.png new file mode 100644 index 0000000..7cd20e1 Binary files /dev/null and b/modules/qualifying/assets/vim_03.png differ diff --git a/modules/qualifying/assets/vimrc_basic b/modules/qualifying/assets/vimrc_basic new file mode 100644 index 0000000..09b829e --- /dev/null +++ b/modules/qualifying/assets/vimrc_basic @@ -0,0 +1,44 @@ +" ---------------------------------------------------------------------------- +" basic essentials +" ---------------------------------------------------------------------------- + +" don't make vim vi compatible (if not set you miss out on a lot of features!) +" you'll see this option set in most configuration files found online +set nocompatible + +" enable filetype recognition plus indent and plugin (pretty much mandatory) +filetype plugin indent on " required + +" enable syntax highlighting +syntax on + +" backspace can be a tricky thing and this setting make it work a lot better +set backspace=indent,eol,start + +" when tab completing on the expert line you don't want to miss out on EDIT vs +" edit or nerdtree vs NERDTree and this setting ignores case completely +set ignorecase + +" highlight your search patterns (very handy when building regexes) +set hlsearch + +" highlight the search pattern as-you-go (tremendously helpful when +" constructing regexes) +set incsearch + +" always show a status line at the bottom of your vim which shows some basic +" information about the file, which line you're at etc +set laststatus=2 + +" show files in statusbar when opening via expert mode +set wildmenu + +" also show all possible expert mode commands in the statusline +set wildmode=full + +" reverse numbering (in the sideline) so you don't have to manually count how +" many lines you have to yank +set rnu + +" can do copy paste from the clipboard +set clipboard=unnamedplus diff --git a/modules/qualifying/learning_dbus.md b/modules/qualifying/learning_dbus.md index e69de29..40134e5 100644 --- a/modules/qualifying/learning_dbus.md +++ b/modules/qualifying/learning_dbus.md @@ -0,0 +1,11 @@ +# DBus + +## What is dbus + +## Command line interfacing with dbus + +## Graphical interfacing + +``` +dbus-send --session --print-reply --dest=org.freedesktop.Notifications --type=method_call --reply-timeout=10000 /org/freedesktop/Notifications org.freedesktop.Notifications.Notify string:'Test Application' uint32:0 string: string:'NOTIFICATION TEST' string:'This is a test of the notification system via DBus.' array:string: dict:string:string: int32:10000 +``` diff --git a/modules/qualifying/learning_disks.md b/modules/qualifying/learning_disks.md new file mode 100644 index 0000000..ab6f8ae --- /dev/null +++ b/modules/qualifying/learning_disks.md @@ -0,0 +1,10 @@ +# HDD Disks on Linux + +## Adding a disk in VirtualBox + +* via gnome disks +* install gparted + * look at the filesystem support menu +* fdisk create new partition table +* mkfs.ext4 partition + diff --git a/modules/qualifying/learning_vim_configuration.md b/modules/qualifying/learning_vim_configuration.md new file mode 100644 index 0000000..4ee3184 --- /dev/null +++ b/modules/qualifying/learning_vim_configuration.md @@ -0,0 +1,243 @@ +# Beyond the basics + +By now you have used enough `vim` to see it's tremendous text editing potential. +Out of the box it works very well, but with some additional configuration and a few plugins installed it get's even better. +We'll go over all basic aspects of tweaking your `~/.vimrc` file from some welcome changes, some aesthetic to a complete IDE. +For IDE features we'll focus on `python3` and `bash` but I'll leave some links to point you in the right direction for other languages. +The point of this chapter is not to race towards the end but to understand what every step adds to your working comfort. +I highly advise to take the changes to your vimrc *slowly* and see if you actually *like* the change. +If you don't like a feature you don't have to use it, but it's still good to be aware of where you can take vim for future reference. + +## Which vim to install + +A simple `sudo apt install vim` installs a *basic* version of vim but when you're on a server and need to do some scripting it's a better idea to install `vim-nox`. +What's the difference? +We can get some information about both packages via `sudo apt-cache show vim vim-nox`. + +Classic vim will give you the following description: + +``` +Description-en: Vi IMproved - enhanced vi editor + Vim is an almost compatible version of the UNIX editor Vi. + . + Many new features have been added: multi level undo, syntax + highlighting, command line history, on-line help, filename + completion, block operations, folding, Unicode support, etc. + . + This package contains a version of vim compiled with a rather + standard set of features. This package does not provide a GUI + version of Vim. See the other vim-* packages if you need more + (or less). +``` + +And vim-nox the following: + +``` +Description-en: Vi IMproved - enhanced vi editor - with scripting languages support + Vim is an almost compatible version of the UNIX editor Vi. + . + Many new features have been added: multi level undo, syntax + highlighting, command line history, on-line help, filename + completion, block operations, folding, Unicode support, etc. + . + This package contains a version of vim compiled with support for + scripting with Lua, Perl, Python 3, Ruby, and Tcl but no GUI. + +``` + +I would *always* install vim-nox but this is personal preference. +Some people like the graphical versions of vim, or `gvim`, but I'm not a fan. +Maybe try the vim-gtk package to see if you like it. +Do keep in mind that the program you'll invoke is **always** `vim` no matter which version you install! +For graphical vim you'll invoke `gvim`. + +**From here on out I expect a vim-nox installed!** + +## Basic improvements + +You'll probably always want to include the following in your vimrc. +You can [download](./assets/vimrc_basic) the file if you want to try it out but do take the time to read the comments. + +``` +" ---------------------------------------------------------------------------- +" basic essentials +" ---------------------------------------------------------------------------- + +" don't make vim vi compatible (if not set you miss out on a lot of features!) +" you'll see this option set in most configuration files found online +set nocompatible + +" enable filetype recognition plus indent and plugin (pretty much mandatory) +filetype plugin indent on + +" enable syntax highlighting +syntax on + +" backspace can be a tricky thing and this setting makes it work a lot better +set backspace=indent,eol,start + +" when tab completing on the expert line you don't want to miss out on EDIT vs +" edit or nerdtree vs NERDTree and this setting ignores case completely +set ignorecase + +" highlight your search patterns (very handy when building regexes) +set hlsearch + +" highlight the search pattern as-you-go (tremendously helpful when +" constructing regexes) +set incsearch + +" always show a status line at the bottom of your vim which shows some basic +" information about the file, which line you're at etc +set laststatus=2 + +" show files in statusbar when opening via expert mode +set wildmenu + +" also show all possible expert mode commands in the statusline +set wildmode=full + +" reverse numbering (in the sideline) so you don't have to manually count how +" many lines you have to yank +set rnu + +" it's also nice to still have your absolute line number in the sideline +set nu + +" can do copy paste from the clipboard +set clipboard=unnamedplus +``` + +You can test out the vim configuration above by downloading it to your home directory and telling vim explicitly you want *that* vimrc by invoking `vim -u ~/vimrc_basic test.py` where `test.py` is just an example. +Each setting has some information about what it does but vim comes with built-in help. +You can invoke this help by pressing `:help laststatus`. + +## Getting help + +![vim help](./assets/vim_01.png) + +Now, what has happened here? +Vim opened it's own documentation in a new *horizontal split* and moved the cursor there. +At first this is very intimidating but there are just a few command you need to know to manage this situation perfectly. +Don't worry about messing up the documentation, it's opened in read only mode. + +* you can read the documentation by pressing `j` to go down and `k` to go up +* to navigate splits you use `CRTL-w j` to go down, `CRTL-w k` to go up, `CTRL-w l` to to right and `CRTL-w h` to go left +* to close the documentation you need to be *inside* the documentation split and press `:close` which means it will close the split you're in (if your cursor is on the **other** split you can use `:only` which does the opposite) + +The `CTRL-w` affair is a shortcut to vim's window navigation. +You can read up a bit more in the manual at `:help window` but below is the gist of it. +It might sound a bit confusing at the start but think of `tmux` and it's *panes, splits and windows* and it might make some more sense. + +``` +Summary: + A buffer is the in-memory text of a file. + A window is a viewport on a buffer. + A tab page is a collection of windows. + +A window is a viewport onto a buffer. You can use multiple windows on one +buffer, or several windows on different buffers. + +A buffer is a file loaded into memory for editing. The original file remains +unchanged until you write the buffer to the file. + +A buffer can be in one of three states: + + *active-buffer* +active: The buffer is displayed in a window. If there is a file for this + buffer, it has been read into the buffer. The buffer may have been + modified since then and thus be different from the file. + *hidden-buffer* +hidden: The buffer is not displayed. If there is a file for this buffer, it + has been read into the buffer. Otherwise it's the same as an active + buffer, you just can't see it. + *inactive-buffer* +inactive: The buffer is not displayed and does not contain anything. Options + for the buffer are remembered if the file was once loaded. It can + contain marks from the |viminfo| file. But the buffer doesn't + contain text. +``` + +If you actually read the documentation you must have noticed you can make tabs, as in firefox tabs, in vim! +I tend to mostly use buffers, based on [this](https://stackoverflow.com/questions/26708822/why-do-vim-experts-prefer-buffers-over-tabs) philosophy but you do you. +As for window navigation I add the following to my vimrc but you will probably not like it too much. +This remaps the arrow keys, which you should **not** be using for navigation text anyway, to window navigation. +If the `nnoremap` makes no sense try `:help mapping`. + +``` +" use the arrows for buffer navigation +nnoremap +nnoremap +nnoremap +nnoremap +``` + +## Switching quickly from config file to config file + +A lot of information about vim online is geared towards programmers and not system administrators but I have a trick for you that will probably help you quite a bit when modifying configuration files. +You have to get comfortable with opening and navigating buffers first so a quick rundown on the basics. +To do this exercise properly first prepare the following files by executing the commands below. + +``` +echo "I am a first file" > ~/first_file.txt +echo "[unit]\nDescription=looks like a config file\nManual=maybe systemd\n" > ~/test.service +echo "import datetime\n\nd = datetime.datetime.now()\nprint(d)" >python_test.py +``` + +### Part one + +1. Open up vim with my basic vimrc you downloaded above and you should have a blank vim in front of you. +2. Type `:edit ~/first_file.txt` to open up the first file. +3. Type `:edit ~/test.service` to open up the second file. +4. Type `:edit ~/python_test.py` to open up the third file. + +You have now opened up all three files in one vim but how do you switch from one to the other? +They are loaded in memory and are called buffers. +To list all buffers currently opened in vim you type `:buffers` and you should see a list like the one below. + +``` +:buffers + 1 "first_file.txt" line 1 + 2 # "test.service" line 1 + 3 %a "python_test.py" line 1 +Press ENTER or type command to continue +``` + +To go back to the buffer you where are just hit enter but if you want to **switch** to a different one type `:b 1`. +This will take you to the first buffer. +As you are opening and editing files in the same instance of vim you can yank and paste from one to the other! +Try playing around with this and make some changes to some files. +At some point you'll be confronted with the following message. + +``` +E37: No write since last change (add ! to override) +``` + +This means you're trying to switch to an other buffer but you have unsaved changes in the one you're currently at. +I like to add the following to my vimrc to automatically save a buffer upon leaving. +Do keep in mind it can be a bit dangerous to overwrite files you're not too certain about. + +``` +" automatically save buffers +set autowrite +set autowriteall +``` + +Once you feel comfortable move on to the next part. + +### Part two + +OK, quit vim completely and go to your home directory, where you created the three files before. +Open vim up again with my basic configuration but instead of `:edit` use `:find tes` where is your tab complete key. +Vim should list all files matching the `tes` pattern inside the folder you're in. +We can supercharge this behaviour by modifying the `path` vim will search in. +To see which paths are searched by default type `:set path` and you'll probably see `path=.,/usr/include,,`. +This is nice from a *programmers* point of view but we can change it to suit our administrator's point of view better. +To completely override we can change the setting by typing `:set path=/etc/**` and vim will now search our `/etc` folder **recursively**. +Try it out with `:find ssh` to see it's full power! +This is a setting you can either fix in your vimrc, or change in the fly, your choice. + +**Don't be greedy and set it to the root of your hard drive. +This will slow vim down way too much because there are just too many files and folders!** + +