programs
#define programs: \
I-----------------------------------------------------------------------------------------------------------\
I-----------------------------------------------------------------------------------------------------------\
I-----------------------------------------------------------------------------------------------------------\
I /$$$$$$$ \
I | $$__ $$ \
I | $$ \ $$ /$$$$$$ /$$$$$$ /$$$$$$ /$$$$$$ /$$$$$$ /$$$$$$/$$$$ /$$$$$$$ \
I | $$$$$$$//$$__ $$ /$$__ $$ /$$__ $$ /$$__ $$|____ $$| $$_ $$_ $$ /$$_____/ \
I | $$____/| $$ \__/| $$ \ $$| $$ \ $$| $$ \__/ /$$$$$$$| $$ \ $$ \ $$| $$$$$$ \
I | $$ | $$ | $$ | $$| $$ | $$| $$ /$$__ $$| $$ | $$ | $$ \____ $$ \
I | $$ | $$ | $$$$$$/| $$$$$$$| $$ | $$$$$$$| $$ | $$ | $$ /$$$$$$$/ \
I |__/ |__/ \______/ \____ $$|__/ \_______/|__/ |__/ |__/|_______/ \
I /$$ \ $$ \
I | $$$$$$/ \
I \______/ \
I-----------------------------------------------------------------------------------------------------------\
I-----------------------------------------------------------------------------------------------------------\
I-----------------------------------------------------------------------------------------------------------I
manuvering
#define manuvering::
ag (<typename>) ([options]) [pattern] ([path]) : recursively searches for [pattern] in all <typename> files AT [path]
and prints results dependent on [options]
binary
#define binary::
hexedit : trusty TUI hex editor
ImHex : robust GUI hex editor
text
#define text:: \
I----------------------------\
I _____ _______ _______ \
I |_ _| ____\ \/ /_ _| \
I | | | _| \ / | | \
I | | | |___ / \ | | \
I |_| |_____/_/\_\ |_| \
I----------------------------I
• any program manipulating on text/plain text files
vim
#define vim::: \
I-----------------\
I __ ___ \
I \ \ / (_)_ __ \
I \ V /| | ' \ \
I \_/ |_|_|_|_| \
I-----------------I
• "Vi IMpoved"
• descends from Vi; Vi is similar enough that its comfortable for smaller edits
• Vi keybindings are extremely comfortable
• many programs use Vi like controls or support a "Vi(m) mode",
enabling alternative key bindings; therefor it is recommended to be aware of
Vi controls even if you do not use Vi or its derivatives
vim [options] [file] : "a programmer's text editor"
— R : read only
— b : binary mode
— i [path] : specifies [path] as the file to be used as .viminfo (see BELOW)
vimdiff [file1] [file2]
• alias of "vim -d"
• allows for the user to easily compare differing version of the same file
• highlights changes color marked by type side by side
• matching regions are folded up
• better alternative for diff
• im not using the my usual square bracket - key-combination notation for a reference on vim
is almost entirely composed of key-combinations because such quantity of square brackets would
actually make it harder to read
Files:
.exrc : ?!
.vimrc : where settings and prefrences are read from
.viminfo : where dynamically set informations are stored (marks/registers)
Modes:
Normal_mode:
esc : to enter
Integer_manipulation:
ctrl + A : increment the number under the cursor
ctrl + x : decrease the number under the cursor
String_manipulation:
x : deletes char under cursor
i : enters insert mode at the cursor
I : enters insert mode before the cursor
o : starts new line after the cursors line and enters insert mode
O : starts new line before the cursors line and enters insert mode
A : jumps to the end of the last word in the line and enters insert mode
r [char] : replace the character under the cursor with [char]
Operation:
u : undo
U : undo line
crtl + r : redo
p : put the previously deleted
P : put the previously deleted before cursor
Operators:
[operator] ([num]) [motion]
d : delete
J : join ("$d")
c : delete and enter insert mode
. : repeat last operation
Motion:
([num]) [motion]
+--------------------+
| A H ^ | H : High k : up
| │ k | M : Middle j : down
| │ M < h l > | L : Low l : right
| │ j | h : left
| V L v |
+--------------------+
w : start of the next word
e : end of the current word
$ : end of the current line
Movement:
ctrl + u : moves up half a screen
ctrl + d : moves down half a screen
ctrl + b : moves up a screen
ctrl + f : moves down a screen
H : jumps to first line on the screen
M : jumps to middle line on the screen
L : jumps to lowest line on the screen
gg : jumps to the start of the document (ctrl + home)
G : jumps to the end of the document (ctrl + end)
Marks:
• marks are file specific
• stored season cross
• they are not stored directly at the file, but rather at a .viminfo file
m & [char] : places mark with ID [char]
' & [char] : jumps to the mark with the ID [char]
:marks : lists existing marks
Searcing:
/[regex] : searches for [regular expression]
?[regex] : searches for [regular expression] from the end
n : jumps to the next result of previous search
N : jumps to the previous result of previous search
* : searches for the word currently under the cursor
# : searches for the word currently under the cursor from the end
Regex:
\< : beginning of a word
\> : end of a word
. : any char except '\n'
\p : printable char
\P : \p - \d
• upper case not-ed { \d = digit; \D = not digit }
\s : whitespace
\d : digit
\x : hex digit
\o : octal digit
\h : ?!
\w : word char
\a : letter
\l : lower case char
\u : upper case char
Camera_movement:
zz : center line to cursor
Query:
ga : print value of the char under the cursor
Insert_mode:
• normal typing
• <int> is the times ti repeat the operation after return from insert mode
Entering:
(<int>) i : enter before the cursor
(<int>) a : enter after the cursor
(<int>) I : enter at the beginning of the line
(<int>) A : enter at the end of the line
Special_chars:
• chars that normal people are not capable of entering with just their keyboards
ctrl + k && [digraph] : inserts [digraph] char (see BELOW)
:digra : brings up a list of [digraph]s
ctrl + v && [code] : inserts char by value
[num][num][num] : by decimal value \
O[num][num][num] : by octal value } 0<= n <= 255
x[num][num] : by hex value /
u[num][num][num][num] : by hex value
U[num][num][num][num][num][num][num][num] : by hex value
Visual_mode:
v : to enter regular visual mode
shift + v : to enter line visual mode
ctrl + v : to enter block visual mode
u : converts selection to lowercase
U : converts selection to uppercase
= : fix indentation
Command_mode:
: : to enter
Commands:
:[command]
q : quit
w : write (save)
echo [var] : prints the value of vim variable [var]
![cmd] : spawns a shell and runs [cmd]
r [file] : insert the contents of [file] after the cursor
r ![cmd] : insert the output of [cmd] after the cursor
• see window commands AT ../../Windows
• see mark commands AT ?!
• see register commands AT ../../Registers
([range] = .)s/[pattern]/<string>(/[flags] [count]) : substitutes a maximum of [patern]s in [range] with <string> using [flags]
[range]:
% : all lines
[int1];[int2] : from line [int1] till [int2]
. : current line
$ : last line
+<int> || -<int>: relative line to current line
[flags]:
g : replace all occurrences of [pattern] in current line
c : ask for conformation before replacing (each)
a : case insensitive
Notes:
• use '\r' instead of '\n'
Replace_mode:
[R] : to enter
Short_cuts:
• things that can be done with more key presses too
dd : "Vd"
Windows:
• not that kind of Windows!
• a new window doesnt mean a new buffer
ctrl + w && v : split the document vertically
ctrl + w && s : split the document horizontally
ctrl + w && [h || j || k || l] : move the cursor to an adjacent window (the last letters correspond to motions)
ctrl + w && [H || J || K || L] : move window to far [position]
ctrl + w && x : swap this window with the next one
ctrl + w && r : rotate window positions
crtl + w && c : close the currently selected window
ctrl + w && o : close all windows but the one currently selected
ctrl + + : increase size of currently selected window horizontally
ctrl + - : decrease size of currently selected window horizontally
:(vertical) res (+ || -)<int> : resize currently selected window, <int> meaning rows by default or columns if "vertical" is specified
add a '+' or a '-' to make <int> be interpreted relatively
Tabs:
:ls : list buffers
(<int> &&) ctrl + 6 : switch to tab <int> or the previously used tab
Registers:
Commands:
reg ([register]) : view contents of [register] or contents of main registers
Operating:
" "[register][operation] : refers to register
Operation:
• please see the table AT the end of this section
p : paste
P : paste before cursor
y : yank
x : cut
Registers:
— Unnamed register:
• used in common copying and pasting (deleting and yanking)
— Numbered registers:
• 0-9 (10 total)
• store previous copies
— Named registers:
• a-z
• refer to them as "A-Z" to append to contents of the corresponding register
— Selection and drop registers
(>name; content)
— Black hole register
_ : abyss
• exist so one can delete text without affecting any register values
• always contains nothingness
— Read-only registers:
% : file name
: : most recently executed command
# : alternate file (most recently edited file thats not the current one)
. : last edit (what '.' would do)
— Expression register
= : ?!
— Search register
/ : last search expression
Colorschemes:
• default themes are stored at /usr/share/vim/vim[version]/colors
• user specific themes are stored at ~/.vim/colors
colo : prints name of currently used colorscheme
colo [scheme] : loads [scheme]
highlight : brings up a list of the current colorscheme settings
Macros:
• stored in registers
• a (literal) string of key presses which can be played to automate repetitive jobs
q[char]<string>q : records macro with a value of <string> stored in register [char]
(<int>)@[char] : plays macro [char] <int> times
Marks:
• way to navigate
• marks are similar to registers in the sense that [a-zA-Z] are valid user marks
and there are special reserved ones
m<id> : sets mark to current line
`<id> : jumps to mark
:marks : shows a list of assigned marks
Builtin:
. : last change
' : "jump back"; position from where the last jump occurred
< : last visual selection start
• : last visual selection end
Programming:
Autocomplete_menus:
ctrl + n : loads "Next" option
ctrl + p : loads "Previous" option
ctrl + x : ?!
ctrl + f : displays path autocomplete menu (see BELOW)
Hints:
ctrl + k : open man page for the symbol under the cursor
Scripting:
Commenting:
" [...] : single line comment //(")
Settings:
set [setting](=[value]) : sets a bool setting to [setting] otherwise sets a setting named [setting] to [value]
Variables:
let [scope]:[name] (= [value]) : declares variable called name visible at scope [scope] (and assignes it to [value])
v : global, predefined by vim
g : global
b : buffer
w : window
t : tab
a : "argument"; function
l : function
s : sourced vim script
@[register] : refers to a register as it were a variable
Folding:
• vim allows for "folding" multiple physical lines into one displayed line
zc : close under cursor
zo : open under cursor
za : toggle under cursor
zR : open all
zM : close all
Spelling:
:set spell
zg : add word under the cursor as a correct spelling
z= : suggest spelling correction for word under the cursor
(((
-----------------
--------
Neovim
--------
• Vim fork
• Vim and Neovim features have branched,
but if one implements a well liked feature,
the other usually adds its own alternative
---------
Kakoune
---------
• Vim like text editor
• reverse action order
-----
bat
-----
• cat clone with syntax highlighting
tui
#define tui::
-----------------
--------
aspell
--------
• spell checking tool
Files:
/etc/aspell.conf : global configuration file
~/aspell.conf : user spefific configuration file
~/.aspell.[lang].pws : personal directory (see BELOW)
~/.aspell.[lang].prepl : personal replacement directory (see BELOW)
Personal_directory:
metadata:
personal_ws-1.1 [lang] [num] ([encoding])
• the first Word is simply an indication, that this, indeed, is a personal dictionary
• [lang] is the language the dictionary is for
• [num] is the count of words, technically not important, might as well be any number
• [encoding] represents the encoding, not mandatory
dictionary:
• simply a list of word each on new lines representing the correctly spelled word
Personal_replacement_directory:
• used for containing correction suggestions
metadata:
persoanl_repl-1.1 [lang] [num] ([encoding])
• follows mostly the same logic as personal directories (see ABOVE)
• [num] is unused and therefor is always 0
dictionary:
• a list of replacements, each on a new line
[misspelled word] [correction]
aspell [options] : performs specified spell checks
— ? : displays short help message
--help : displays long help message
— c [file] : specifies [file] to be checked
— l
--lang=[lang] : sets language of grammar
config : prints configuration
[actions]:
• commands after aspell interactive mode is entered
[num] : replace current word with suggestion number [num]
a : adds current word to personal dictionary
A : adds tolower(current word) to personal dictionary
r : replaces word with user entered input
R : replaces all occurrences of word with user entered input
i : ignores current occurrence of misspelled word
I : ignores all occurrences of misspelled word
b : exit without saving
x : save and exit
image
#define image:: \
I-----------------------------------\
I ___ __ __ _ ____ _____ \
I |_ _| \/ | / \ / ___| ____| \
I | || |\/| | / _ \| | _| _| \
I | || | | |/ ___ \ |_| | |___ \
I |___|_| |_/_/ \_\____|_____| \
I-----------------------------------I
-------------
ImageMagick
-------------
convert [files] ([options]) [file] : manipulate images; [files] being source files; [file] being the output file
• by changing the extension on the output file, convert will convert the file type
— rotate <int> : rotate image by <int> degrees
— append : append [files] vertically to each other
+append : append [files] horizontally to each other
— resize [dim] : resizes the input to resemble the given dimensions
[spec]x[spec]([mark])
○ [spec]
[uint]([sign]) : [uint] is the desired number of pixels
○ [sign]
^ : follow exactly
○ [mark]
! : do not preserve aspect ratios
— crop [uint-1]x[uint-2]+[uint-3]+[uint-4] : crops image; [uint-1] specifies desired width; [uint-2] specifies desired height;
[uint-3] specifies horizontal offset (from the left);
[uint-4] specifies vertical offset (from the top)
identify [options] [files] : displays information on image files
------
gimp
------
• "GNU Image Manipulator Program"/"Green Is My Pepper"
• Photoshop alternative
• featureful, but not as convenient to use as could be / one would hope so
• OK, but not great for drawing, its primary job is in fact image manipulation
Scripting:
• uses the Scheme dialect called "Script-fu"
• allows for python bindings
• under "/Filters" one can find the options to launch a console with an interpreter
• has a piss easy server/client protocol
video
#define video:: \
I----------------------------------\
I __ _____ ____ _____ ___ \
I \ \ / /_ _| _ \| ____/ _ \ \
I \ \ / / | || | | | _|| | | | \
I \ V / | || |_| | |__| |_| | \
I \_/ |___|____/|_____\___/ \
I----------------------------------I
--------
ffmpeg
--------
• video converter
ffmpeg [options] : yes ;
([input_options]) -i [file] : specifies input file
○ [input_options]
— ss [pos] : seeks file till [pos]
— t [dur] : limit duration read from input
— to [pos] : stop reading the input at [pos]
○ [output_options]
— ss [pos] : discards footage until [pos]
— t [dur] : stop writing output after [dur]
— to [pos] : stop writing the input at [pos]
• "-t" and "-to" are mutually exclusive; "-t" takes priority
○ [pos]
• "position"
• a time point in the video
• uses time_syntax
○ [dur]
• "duration"
• an amount of time which is summed with a time point to determine its position
• uses time_syntax
○ [time_syntax]
(-)[<HH>](:<MM>(:<SS>)(.<m>)) : specifies duration
(-)[<SS>](.<m>) : specifies duration
'-' is a negative sign
<HH> marks the hour
<MM> marks the minute
<SS> marks the second
<m> marks the decimal fraction of <SS>
○ [size]:
• either a string as follows:
[int1]x[int2]
or an abbreviation
○ [abbreviation]
| String | Meaning |
| :-------: | :-------: |
tsc 720x480
pal 720x576
qntsc 352x240
qpal 352x288
sntsc 640x480
spal 768x576
film 352x240
ntsc_film 352x240
sqcif 128x96
qcif 176x144
cif 352x288
4cif 704x576
16cif 1408x1152
qqvga 160x120
qvga 320x240
vga 640x480
svga 800x600
xga 1024x768
uxga 1600x1200
qxga 2048x1536
sxga 1280x1024
qsxga 2560x2048
hsxga 5120x4096
wvga 852x480
wxga 1366x768
wsxga 1600x1024
wuxga 1920x1200
woxga 2560x1600
wqsxga 3200x2048
wquxga 3840x2400
whsxga 6400x4096
whuxga 7680x4800
cga 320x200
ega 640x350
hd480 852x480
hd720 1280x720
hd1080 1920x1080
2k 2048x1080
2kflat 1998x1080
2kscope 2048x858
4k 4096x2160
4kflat 3996x2160
4kscope 4096x1716
nhd 640x360
hqvga 240x160
wqvga 400x240
fwqvga 432x240
hvga 480x320
qhd 960x540
2kdci 2048x1080
4kdci 4096x2160
uhd2160 3840x2160
uhd4320 7680x4320
— filter:v [...]
fps=<int>
Transcoding:
_______ ______________
| | | |
| input | demuxer | encoded data | decoder
| file | ---------> | packets | -----+
|_______| |______________| |
v
_________
| |
| decoded |
| frames |
|_________|
________ ______________ |
| | | | |
| output | <-------- | encoded data | <----+
| file | muxer | packets | encoder
|________| |______________|
Examples:
Concatanation:
Same_codec:
$ tree
.
├── 1.webm
├── 2.webm
└── 3.webm
0 directories, 3 files
$ for i in *; do
> echo "file '$i'" >> files.list
> done
$ ffmpeg -f concat -safe 0 -i files.list -c copy output.webm
# one liner
for i in *.mp3; do echo "file '$i'" >> files.list; done; ffmpeg -f concat -safe 0 -i files.list -c copy output.mp3
-----------
mpv
-----------
• "Media Player for the People"
• pretty good
• for audio it can play on the cli, multimedia opens a dummy GUI for which
you are supposed to get a 3th party full-fetched frontend of your liking,
but the default is ok too
mpv [options] <file> : plays file
--loop : play while true
CLI:
/ : volume down
* : volume up
filesystem_management
#define filesystem_management:: \
I------------------------------------------------------\
I ______ _ _ _ \
I | ___(_) | | | \
I | |_ _| | ___ ___ _ _ ___| |_ ___ _ __ ___ \
I | _| | | |/ _ \ / __| | | / __| __/ _ \ '_ ` _ \ \
I | | | | | __/ \__ \ |_| \__ \ || __/ | | | | | \
I \_| |_|_|\___| |___/\__, |___/\__\___|_| |_| |_| \
I __/ | \
I |___/ \
I------------------------------------------------------I
File_managers:
○
Terminal:
ranger : too slow. takes a gorillion years to start up
nnn : i dont remember what what wrong with it, but it was bad
fff : meh
clifm : very cool, but the defaults break too much and there is no documentation
Gui:
thunar : xfce default; can recommend
spacefm : coonfiger's wetdream
-----
fff
-----
"Fucking Fast File-manager"
Usage:
• very vim-ish (see AT ../Text/Vim)
j : scroll down
k : scroll up
h : go to parent dir
l : go to child dir
down : scroll down
up : scroll up
left : go to parent dir
right : go to child dir
enter : go to child dir
backspace : go to parent dir
— : Go to previous dir.
g : go to top
G : go to bottom
: : go to a directory by typing.
. : toggle hidden files
/ : search
t : go to trash
~ : go to home
e : refresh current dir
! : open shell in current dir
x : view file/dir attributes
i : display image with w3m-img
f : new file
n : new dir
r : rename
X : toggle executable
y : mark copy
m : mark move
d : mark trash (~/.local/share/fff/trash/)
s : mark symbolic link
b : mark bulk rename
Y : mark all for copy
M : mark all for move
D : mark all for trash (~/.local/share/fff/trash/)
S : mark all for symbolic link
B : mark all for bulk rename
p : paste/move/delete/bulk_rename
c : clear file selections
[1-9] : favourites/bookmarks (see customization)
q : exit with 'cd' (if enabled).
[Ctrl] + [C] : exit without 'cd'.
------
luks
------
$ cryptsetup luksFormat <partition>
$ cryptsetup luksOpen <partition> <name>
$ mount /dev/mapper/<name> <dest>
$ umount /dev/mapper/<name>
$ cryptsetup luksClose <name>
processes
#define processes:: \
I---------------------------------------------------------\
I ____ ____ ___ ____ _____ ____ ____ _____ ____ \
I | _ \| _ \ / _ \ / ___| ____/ ___/ ___|| ____/ ___| \
I | |_| | |_| | | | | | | _| \__ \__ \| _| \__ \ \
I | __/| _ <| |_| | |___| |___ __| |__| || |___ __| | \
I |_| |_| \_\\___/ \____|_____|____/____/|_____|____/ \
I---------------------------------------------------------I
--------
bpytop
--------
>modern alternative for top
>kinda bloated, looks amazing tho
------
btop
------
• modern alternative for top
• rewrite of bpytop in C++, runs like lightning
• looks amazing
virtualization
#define virtualization:: \
I---------------------------------------------------------------------------------------\
I __ _____ ____ _____ _ _ _ _ ___ ____ _ _____ ___ ___ _ _ \
I \ \ / /_ _| _ \|_ _| | | | / \ | | |_ _|_ | / \ |_ _|_ _| / _ \| \ | | \
I \ \ / / | || |_| | | | | | | | / _ \ | | | | / / / _ \ | | | | | | | | \| | \
I \ V / | || _ < | | | |_| |/ ___ \| |__ | | / /_ / ___ \ | | | | | |_| | |\ | \
I \_/ |___|_| \_| |_| \___//_/ \_\____|___|____/_/ \_\|_| |___| \___/|_| \_| \
I---------------------------------------------------------------------------------------I
Files:
.ovf : "Open Virtualization Format descriptor"
.ova : "Open Virtual Appliance"
• preconfigured
• archive format packed with individial files
├── *.mf
├── *.ovf
└── *.vmdk
--------
docker
--------
systemctl start docker
Files:
~/.docker
Dockerfile
docker-compose.yaml
Programs:
docker <operation> : docker cli; the main docker tool
build
pull <image> : downloads docker image [image]
images : lists installed images
run <options> <image> <command> <arg>* : runs an image inside a new container,
performing the specified action
— v <volume-specification> : binds host location to virtual location (see BELOW)
--rm : auto delete the container on exit
rmi <image> : "ReMove Image"
kill <container>+ : kill running cotainer
rm <container>+ : delete container
inspect <container> : dump data in json
attach <container> : hook the terminal to a container (running in the background)
start [options] <container> : runs an existing container
— a : "attach"; hook up stdout && stderr
— i : "interactive"; hook up stdin
ps : print all running containers (as if they were normal processes)
— a : print exited containers too
stats : live "UNIX top" like view
volume <verb>
ls : list named volumes
inspect <named-volume> : dump volume info;
the dump contains what host filesystem directory it maps to
(should be somewhere in /var/lib/docker/volumes)
docker-desktop : nice gui wrapper for docker;
too bad that its a pain in the ass to install in 2024
docker-compose : utility to manage multi-containers
up : execute the "docker-compose.yaml" in the current directory
Docker_images:
• read-only container templates (consisting of code, libraries and dependencies)
• identified by a name or an ID number
attaining:
https://hub.docker.com/
• use the verb "search" or the hub
Docker_container:
• writable initialazation of an image
• each has a hash-like id and a name;
these can be used to refer to the container in commands
Volumes:
• a physical directory that is mounted to the containers virtual filesystem
• its purpise is to have data that persists between runs and or saving that data perminently
• volumes must be specified when creating the image;
they CANNOT be added to an existing container
• a named volume is storage manged by docker
• a bind mount is a volume map-ping to a local directory;
they are created by passing absolute paths
volume_specification:
<host-volume>:<virtual-path> : meaning something along the lines of:
slave@container$ mount <host_path> <virtual_path>
Multi_containers:
• a cluster of containers intended to work together
Dockerfile:
{
(# comment)* |
(<keyword> <arguments>)+
}
• used to create docker images
• the Dockerfile has an image working directory; it is used to alias '.'
FROM <image> : source image; the current image will be a moded version
of the source image; very common
MAINTAINER <string> : arbitrary data identifying the maintainer of the image;
NOT required
RUN <string> : arbitrary script to run while building the image
CMD <string> : arbitrary script to run when running the image
WORKDIR <path> : change current working directory of the Dockerfile
ADD <source> <destination> : copy host file into the image
EXPOSE <image-port>:<host-port> : proxy a port to the host machine;
by default no ports are exposed;
similar to how Tor handles it;
you still have to pass
the appropriate -p flag
when running the machine
ENV <key>=<value> : set environment variable
Compose:
docker-compose.yaml
• fuck yaml, use the JSON subset
"version"
"services" : {
<string> : {
"container_name"
"image"
"ports"
"command"
"volumes"
"envirnment"
}
}
--------
VMWare
--------
Files:
*.vmdk : "Virtual Machine DisK"
------------
virtualbox
------------
linux-headers
modprobe vboxdrv
### Setting up a Virtualbox shared folder ###
1. Start up the guest machine
2. Install "guest additions"
• lauch the virtual machine click "Devices/Insert Guest Additions CD image..." (on the top bar)
• run the contents of the CD
3. Configurate
• in the main menu click the guest systems settings
• find the "Shared Folders" tab
• click the pluss folder sign
input:
Folder path: [host machine folder path]
[X] Auto-mount
Mount point: [guest machine folder path]
#
------
qemu
------
• kernel level virtualization
• runs smooth as hell
• much better than virtualbox
Files:
qcow2 : "Qemu Copy On Write 2"; disk image
Deamons:
libvirtd
Programs:
qemu-img <global-options> <verb> : "disk IMaGe utility"
— h : print help; lists supported image formats
<verb>
convert <input> <output>
— f <format>
{
$ qemu-img convert -f vmdk ubuntu/Ubuntu-20.04.5-EN-disk001.vmdk ubuntu.qcow2
}
Front_ends:
• qemu provides the virtualization and a communication protocol,
its up to specific and various front-ends to provide guis
virt-manager : pretty cool qemu front-end
networking
#define networking:: \
I------------------------------------------------------------------\
I _ _ _____ _______ _____ ____ _ _____ _ _ ____ \
I | \ | | ____|_ _\ \ / / _ \| _ \| |/ /_ _| \ | |/ ___| \
I | \| | _| | | \ \ /\ / / | | | |_| | ' / | || \| | | _ \
I | |\ | |___ | | \ V V /| |_| | _ <| . \ | || |\ | |_| | \
I |_| \_|_____| |_| \_/\_/ \___/|_| \_\_|\_\___|_| \_|\____| \
I------------------------------------------------------------------I
--------------
netcat: netcat:
--------------
• "The Swiss Army Knife of Networking"
• from a single implementation it has evolved into a whole family of similarly named
and partially compatible software
• the core idea is providing a cli utility to quickly spawn TCP(/UDP) clients/servers
for testing mostly, but using it as a chat program or a reverse proxy service is
not unheard of either
Implementations:
(Unix) netcat
(GNU) netcat
(OpenBSD) nc
(BusyBox) nc
(Nmap) ncat
○ practical usages include
• testing whether a server of some arcane protocol is listening at all
— quickly transferring files on LAN:
# we wish to transfer something from PC1 to PC2
PC1$ echo 'this is my message' > file.txt
# find the local IP of PC2 and start listening for incoming traffic
PC2$ ip a | grep inet | grep global
inet 192.168.0.192/24 brd 192.168.0.255 scope global dynamic noprefixroute wlp0s20f3
PC2$ nc -l 5050 > download.txt
# send the message
PC1$ cat file.txt | nc -q 0 192.168.0.192 5050
# the transaction should be done with both netcat instances exiting with 0
# if it did not work, its probable that the LAN was restricted by an administrator
git
#define git:: \
I ___ _ _ \
I / __(_) |_ \
I | (_ | | _| \
I \___|_|\__| I
• made by Saint Linus Torvalds
• project version tracking software, ie. a "version control system"
• stores compressed stapshots of groups of files so they may be easily reverted, read back and or versions are easily comparable
• used for easing software development
• a project managed by git is called a repository
Files:
[project_root] : folder of a project managed by git
├── .git/ : each repository has one; used for storing development data {version, backups, branches}
├── .gitignore : plain text file for listing files in the project directory which shall be ignored by git {swap files left by editors}
└── .gitmodules : ini file containing submodule information; see AT "../Nesting"
git [options] [verb] [opts]
[verb]:
. init : creates a ".git" folder in ${PWD}
config [field] [value] : sets config option [field] to [value]
[field]:
user.name
user.email
. status
log
branch [options]
add [file] : specify that [file] shall be included int the next commit
restore
clone [repository] : copy [repository] to ${PWD}; [repository] is free to be an url
diff [file] : shows differences of [file] and its previous version commited (something like GNU diff)
. commit [options] : ?!; added statuses reset on commit
— m <string> : specify message for the git log
tag [options] : manages tags which are usually for realise marking;
without arguments it lists all tags
[options]:
<string> : adds tag named <string>
— d <string> : delete-s tag named <string>
submodule : see AT "../Nesting"
format-patch <branch> : create *.patch files for all commits on <branch>
am <path> : apply *.patch files from <path> to the current branch
COMMIT:
┏━━━━━━━━━━━━━━━━━━━━━┓
┃ Commit ┃
┣━┯━━━━━━━━━━━━━━━━━━━┫
┃ ├── hash ┃
┃ ├── parent ┃
┃ ├── message ┃
┃ ├── commiter ┃
┃ └── change snapshot ┃
┗━━━━━━━━━━━━━━━━━━━━━┛
REPOSITORY:
— can be well abstracted as a stack of commits
• past commits cannot be easily modified
• you can only append to the top (or branch)
┏━━━━━━━━━━━━┓
┃ Repository ┃
┃ ┌────────┐ ┃
┃ │ Commit │ ┃
┃ ├────────┤ ┃
┃ │ Commit │ ┃
┃ ├────────┤ ┃
┃ │ Commit │ ┃
┃ └────────┘ ┃
┗━━━━━━━━━━━━┛
• after you have shared your local changes, consider the online history immutable;
to change and resync it with others is a major pain and mostly not advised
Visualizing_using_git_for_team_work:
(You) | Server | Anon
--------------------+-----------+--------------------
┌───┐ | .-. | .-.
│ C │ | I\\ I | I\\ I
├───┤ | I \\I | I \\I
│ C │ | ^-^ | ^-^
├───┤ | |
│ C │ | . | .
└───┘ | |
| | . | .
+-------+ | |
| | . | .
| | |
┓───┏ | | ┓───┏ | .
┃ C ┃ <---+---> | ┃ C ┃ |
┣━━━┫ push | ┣━━━┫ | .
┃ C ┃ | ┃ C ┃ |
┣━━━┫ | ┣━━━┫ | .
┃ C ┃ | ┃ C ┃ |
┗━━━┛ | ┗━━━┛ | .
| |
. | . | .
| |
. | . | ┓───┏
| | ┃ C ┃
. | . | pull ┣━━━┫
| | --------> ┃ C ┃
. | . | ┣━━━┫
| | ┃ C ┃
. | . | ┗━━━┛
| | |
. | . | |
| | | commit -m "Added new bugs"
. | . | |
| | |
. | . | V
| | ┌───┐
. pull | . | │ C │
"Already up" <---- | | ┓───┏
"to date." | . | ┃ C ┃
| | ┣━━━┫
. | . | ┃ C ┃
| | ┣━━━┫
. | . | ┃ C ┃
| | ┗━━━┛
. | . | |
| | +-------+
. | . | |
| | |
┓───┏ | ┓───┏ | | ┓───┏
┃ C ┃ | ┃ C ┃ | <---+---> ┃ C ┃
┣━━━┫ | ┣━━━┫ | push ┣━━━┫
┃ C ┃ | ┃ C ┃ | ┃ C ┃
┣━━━┫ pull | ┣━━━┫ | ┣━━━┫
┃ C ┃ <-------- | ┃ C ┃ | ┃ C ┃
┣━━━┫ | ┣━━━┫ | ┣━━━┫
┃ C ┃ | ┃ C ┃ | ┃ C ┃
┗━━━┛ | ┗━━━┛ | ┗━━━┛
| |
HEAD:
• an imaginary pointer that specifies which version is currently selected
• the version pointed by HEAD is the one that is currently located in ${PWD}
Front_ends:
• using git without a front-end is quite tiresome and tidious
gitui : tui for git; easy to get into, manouver and use; great for terminal based workflows
Nesting:
• makes the repository structure strictly hierarchical
• practically marks the submodule as a dependency
• submodules do not behave as regular subdirectories
git submodule
add
<path>
<remote>
### Oh no, I fucked up and commited with Git ###
1. Revert head until necessary
$ git rebase -i HEAD~<int> # where <int> the number of the commint counted from the last commit, starting from 1
• this command is perfectly safe, it does not automatically affect your history and or state just by invocation
2. Read the help comment carefully
• one thing it doesnt explicitly mention is that "pick" can be used for cherry-picking too
3. ???
4. Profit
#
### Managing git conflicts (with Vim) ###
— git will place a conflict marker into a conflicting file:
{
<<<<<<< <version-1>
<Content from version-1>
=======
<Content from version-2>
• >>>>>> <version-2>
}
{
[merge]
tool = vimdiff
}
{
$ git mergetool
+-------+----------+--------+
| | | |
| local | previous | remote |
| | | |
+-------+----------+--------+
| |
| resolution |
| |
+---------------------------+
}
• the top 3 sections serve as cheatsheets
• in the bottom, "resolution" area, delete either sections between the guards ("[<>=]+")
or mix (perhaps append) their contents to the desired effect
• ":qa" after all conflict markers are done with; the next conflict will auto open
#
?!:
git filter-branch --index-filter 'git rm -rf --cached --ignore-unmatch <file>' HEAD
git log --follow -- <file>
------------
peru: peru:
------------
• submoduling tool
• works better and is more general than Git submodules
• integrates nicely with Make
○ supports:
• git
• hg
• svg
• curl
pip install peru
peru <verb>
sync : install modules
clean : delete modules; only delete modules previously installed
according to .peru, reinstalling kinda breaks it
reup : fetch the newest versions and add "rev" entries to peru.yaml
Files:
peru.yaml : main configuration file for modules
.peru/ : local magic folder, keeping module information
peru.yaml:
{
imports:
(<name>: <destination_folder>)+
}
{
<method> module <name>:
<option>: <value>
}
<method>:
git
url
pick: <file_list> : only install these files
rev: <commit> : select exact commit instead of main/master
curl
url
unpack
Usage_with_make:
{
.peru/lastimports: peru.yaml
peru sync
}
tor
#define tor::: \
I _____ \
I |_ _|__ _ _ \
I | |/ _ \ '_| \
I |_|\___/_| I
• tor daemon
https://github.com/grugq/PORTALofPi
tor (-f <torrc>)
• "The Onion Router"
• connection-oriented anonymizing communication service
• many layers of individual encryption, hence the onion
• directory servers with an overview of all relays and their public keys
• exit nodes are essention man-in-the-middles, tho they dont know the source, they can see
all data as encrypted as they normally would be
• both the local network and the remote target should have no clue about the identity of a tor user
• both the local network and the remote target can easily tell if one is using tor
• there are protocols to hide connections to tor from the local network (see AT /?!)
• is tor the tor protocol safe?
yes.
• is tor browser safe?
no, not with javascript enabled, it isnt.
— clearnet sites may advertise their onion counterpart by adding a special HTTP header to the form:
Onion-Location: http://vwc43ag5jyewlfgf.onion
Files:
/etc/tor/
└── torrc : config file; see BELOW
Config:
• done throught a config file
• all directives must have their own line
• empty lines are ignored
• C style escape sequances are allowed inside quotes
#[...] : comment
[option] [value] : sets [option] to [value]
○ [options]
User <string> : who to use as; a literal user on ones machine (look inside /etc/shadow)
DataDirectory [path] : store working data in [path]
ClientDNSRejectInternalAddresses [bool] : reject any DNS anwares pointing to internal addresses { 168.192.0.1 } as
that allows for some types of attacks; default 1
#
# Minimal torrc so tor will work out of the box
#
User tor
PIDFile /run/tor/tor.pid
Log notice syslog
DataDirectory /var/lib/tor/data
Dependant_programs:
torbrowser : webbrowser routing throught the tor network and having onion site support;
uses Modzilla Firefox as its backbone
torghost [options] : routes all traffic throught the tor network
-s : starts
-r : switches tor node
-x : exits
torctl [command] : routes all traffic throught the tor network
start : starts
stop : stops
restart : restarts
status : displays status information
ip : prints current public ipv4 address
Tor_services:
• or "hidden services"
• .onion sites
• often mistakenly referred to as the dark web while in reality its only a sub-set of it
• onion links are public key hashes
### How to Set Up a Hidden (Onion|Tor) Service ###
• insanely easy, especially compared to conventional web hosting
1. Have a service running
• this can be any service
• write down what port its running on, this address will be referenced BELOW as <port>
• for testing purposes lets use netcat
{
$ nc -l 1234
}
2. Configure Tor
{
HiddenServiceDir <data_dir>
HiddenServicePort <service_port> 127.0.0.1:<port>
}
• open the torrc your daemon is using ("/etc/tor/torrc" by default)
• tor will need to know where to store relevant information about the site
and which port it must mirror/proxy to the tor network
• you will also have to specify the dir for Tor to create(!) and store stuff at {"mynetcat"}
• if you're planning on hosting multiple hidden services its a good idea
to create a designated parent directory for all {"/var/lib/tor/hidden_service/"};
double check permissions and owner (have it '7xx tor')
• <service_port> is the outbound port through which one must connect to the service to access it
• while <service_port> in our case will be the same as <port>,
this would not apply, if we had, lets say,
a gitea running on port 3000;
there, <service_port> we would set it to 80 (or 443),
because we would want to to behave normally from a browser
{
HiddenServiceDir /var/lib/tor/hidden_service/mynetcat
HiddenServicePort 1234 127.0.0.1:1234
}
• for debugging, "tor --runasdaemon 0 --verify-config" could be useful
3. Restart tor
{
$ sudo systemctl restart tor # or with whatever init system you have, obviously
}
4. Get the address
{
$ cat <data_dir>/hostname
}
• an onion address is automatically created for your hidden service
{
$ cat /var/lib/tor/hidden_service/mynetcat/hostname
}
5. Verify
• it should be online now, allowing us to connect
• test it
{
$ torify nc jsBsjBsn2j59poqndnajk45ndtjsbA6bsjubyeqzfqhxcgujsadnmi5d.onion 1234
}
#
### Fixing Git address-resolving issues with Hidden (Onion) Services ###
$ [proxychains|torify] git clone http://xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.onion/anon/test.git
Cloning into 'test'...
fatal: unable to access 'http://xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.onion/anon/test.git/': Not resolving .onion address (RFC 7686)
• no clue why proxychains actually fails
• the error doesnt even have a mark in the source code, not sure what throws it
• not understanding the issue does not prevent us from solving it
1. Configure git to consult a proxy for onion addresses
• open your ".gitconfig" (presumably under "~/")
— append:
{
# assuming the service is http, not https; you could add both by duplicating,
# however git with self-signed https certs is its own can of worms
[http "http://*.onion"]
sslVerify = false
proxy = "socks5h://127.0.0.1:9050"
}
2. Ensure Tor provides a SOCKS5 proxy at the configured port (9050 in our case)
• open your torrc (presumably under "/etc/tor/torrc")
— ensure you have the following line:
{
SOCKSPort 9050
}
3. Enjoy
• from now on .onion urls will work for you like regular ones
{
$ git clone http://xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.onion/anon/test.git
Cloning into 'test'...
remote: Enumerating objects: 112, done.
remote: Counting objects: 100% (112/112), done.
remote: Compressing objects: 100% (80/80), done.
remote: Total 112 (delta 21), reused 89 (delta 17), pack-reused 0
Receiving objects: 100% (112/112), 128.80 KiB | 241.00 KiB/s, done.
Resolving deltas: 100% (21/21), done.
}
#
SURPASSED BY YT-DLP
------------
youtube-dl
------------
>downloader
>suitable for youtube videos, playlists and channels, but also for non-youtube content
>when specifing a playlist make sure its not a video playing belonging to a playlist,
but the unique page of the playlist where all members are listed
youtube-dl [options] [url]
-v : verbose
--write-thumbnail : download thumbnail too
--write-description : download description too
--write-sub : download subtitles too
-F : list avalible [format]s
-f [format] : download in [format]
bestaudio : download only audio; in the best avalible format
>specify multiple formats to (audio and video| by
the use of a '+'
--------------
yt-dlp:
--------------
• video downloader
• suitable for youtube videos, playlists and channels, but also for non-youtube content
• when specifing a playlist make sure its not a video playing belonging to a playlist,
but the unique page of the playlist where all members are listed
yt-dlp [options] [url]
— v : verbose
--write-thumbnail : download thumbnail too
--write-description : download description too
--write-sub : download subtitles too
— F : list avalible [format]s
— f [format] : download in [format]
bestaudio : download only audio; in the best avalible format
• specify multiple formats to (audio and video| by
the use of a '+'
---------------------
BitTorrenting: BitTorrenting:
---------------------
• the protocol is called BitTorrent, but almost always shortened to "torrent"
• the process is called torrenting
• torrenting is p2p
• peer discovery is federated; its either done using trackers or a DHT, both requires servers
File:
*.torrent : torrent file; contains information on files and trackers
Programs:
transmission : fully featured torrent client
• has a web interface on 9091
transmission-create : creates new torrent files
transmission-edit : edits torrent files
transmission-show : reads/info dumps torrent files
transmission-daemon : background process and server heavy lifting torrents
transmission-cli : CLI front end connecting to the daemon
transmission-remote : GUI front end connecting to the daemon
transmission-remote-gtk : GUI front end connecting to the daemon; in GTK
----------------
soulseek:
----------------
• a network of the partially peer-to-peer soulseek protocol
• older and more obscure torrent
• the prime source for pirated music
• requires registration, but no verification of any kind, just a username and password
• whenever you get banned for leeching, you can just quickly re-register
• Nicotine+ is the recommended client {pip install nicotine-plus}
--------------
httpie: httpie:
--------------
• curl for humans
• recommended if you invoke curl by hand often
http [options] [METHOD] [URL]
https [options] [METHOD] [URL]
[options]:
--verify=[yes|no] : whether to check ssl certificates; <---
-----------
ftp: ftp:
-----------
• "File Transfer Protocol"
• interactive network connection handler
• "modern" (read: a train wrecking into a dumpster fire)
browsers have removed builtin ftp support
ftp [options] ([host]) : creates an ftp connection to [host]
• after lauch the user has the option to enter commands
○ commands
• the most important commands are marked with a 'Ж' at the begining of their line
• [rfile] signals a remote file
• [lfile] signals a local file
!
$
account
append
ascii
bell
binary
bye
case
Ж cd : change directory; operates on the remote machine; analogous to Linuxs cd (see AT "/Linux/Manuvering/cd")
cdup
chmod
close
cr
delete
debug
dir
disconnect
epsv4
form
get [rfile] : downloads [rfile] to ${PWD}; see also mget BELOW
glob
hash
help
idle
image
ipany
ipv4
ipv6
Ж lcd : local cd; operates on the local machine; analogous to Linuxs cd (see AT "/Linux/Manuvering/cd")
lpwd
Ж ls : list; analogous to Linuxs cd (see AT "/Linux/Manuvering/ls")
macdef
mdelete
mdir
mget [rfiles] : downloads [rfiles] (notice the plural form) to ${PWD}; see also get ABOVE
mkdir
mls
mode
modtime
mput [lfiles] : uploads [lfiles] (notice the plural form) to the remote machines ${PWD}; see also put BELOW
newer
nmap
nlist
ntrans
Ж open : connects to host; you do NOT give the host address as an arguemnt, you will be promted to enter it
passive
prompt
proxy
sendport
Ж put [lfile] : uploads [lfile] to the remote machines ${PWD}; see also mput ABOVE
Ж pwd : "Print Working Directory"; outputs the current path
Ж quit : closes connection and exits ftp
quote
recv
reget
rstatus
rhelp
rename
reset
restart
rmdir
runique
site
size
status
struct
system
sunique
tenex
trace
type
user
umask
verbose
? : alias of help
-----------
ssh: ssh:
-----------
• secure shell protocol and application implementation
• server-client struct-ed
• running ssh daemon on the target
{ sudo systemctl start sshd }
{ sudo rc-service sshd start }
Programs:
ssh [options] [target] : login with a shell to a remote machine
{
root@Server $ /usr/sbin/sshd
anon@Client $ ssh myuser@192.168.0.176
}
scp [options] ([target]:)[path-1] ([target]:)[path-2] : "Secure CoPy"; copy file(s) using ssh
— P [port] : specifies port
— r : recursively
[target]:
([username]@)([ip]|[domain]) : [username] is the user one would like to login to the server;
can be ommited if it maches ${USER}
([ip]|[domain]) specifies the server
### Set up key only auth for SSH ###
• basic knowledge of public key cryptography
• the server holds a public key, while the client has a private key
which it will use for authentication
• this way we protect from brute forcing attacks and
optionally avoid having to enter a password manually when connecting
1. Create a key pair
anon@Client $ ssh-keygen
"Generating public/private rsa key pair."
"Enter file in which to save the key (/home/anon/.ssh/id_rsa):" <path>
"Enter passphrase (empty for no passphrase):" [password]
"Enter same passphrase again:" [password]
"Your identification has been saved in ignore"
"Your public key has been saved in ignore.pub"
"The key fingerprint is:"
"SHA256:sAswBDPwdk6wqK8HSOvDBRUrJmYbA0O9i8ZAmTbxve0 anon@Client"
"The key's randomart image is:"
"+---[RSA 3072]----+ "
"|=o=.o o * | "
"|.Xx+o+ + a | "
"|+BB o.o . b | "
"|*o* o | "
"|+o* o...S | "
"|.=.B .+ r | "
"|+ ..+ oE | "
"| + .jklas8u | "
"| o. | "
"+----[SHA256]-----+ "
○ NOTES:
<path> : if you're following this tutorial then the default probably good enough for you
[password] : optional password; your private key will be encrypted with this,
which makes it secure from being plainly stolen,
however do note that you'll have to enter it
whenever with every new ssh-agent session;
dont be afraid to leave it empty
2. Get the server's identifier
• if the server is located on the LAN use:
root@Server $ ip a
192.168.0.<int>
• if the server is located on WAN look up its IP online
• if the server has a register-ed domain use that
• use whatever you got as "<targer>" from now on
3. Add the key to the server
anon@Client $ ssh-copy-id <target>
• if the key location is not the default,
explicit-ly specify its path using the `-i` flag
and point it towards the `.pub` file
4. Login to the server
anon@Client $ ssh <targer>
• this step serves as both ground work for easing the next step and as a test
• if you're prompted for a password something went terribly wrong, do not proceed
5. Disable password authentication
root@Server $ ${EDITOR} /etc/ssh/sshd_config
○ add or modify lines to match the following rules:
PubkeyAuthentication yes
PasswordAuthentication no
6. Restart ssh server
root@Server $ systemctl restart sshd
Troubleshooting:
○ permissions
• ssh is very sensitive to the correct permissions on the server
(for understandable security reasons, but the error reporting ain't great)
:--------------:------------------------:
| Permission | File |
:--------------:------------------------:
: 755 : ~/ :
: 700 : ~/.ssh/ :
: 600 : ~/.ssh/authorized_keys :
:--------------:------------------------:
#
-------
tmate
-------
• ssh wrapper
• provides one time secure sessions
• uses a central server, dodging all difficulties arrising from ip / port forwarding
-------
rhino
-------
• Mozillas javascript interpreter
rhino [options] : runs javascript
— w : enable warnings
---------
web-ext
---------
• Mozillas command line tool for browser extension development
web-ext [options] [verb]
• Option values can also be set by declaring
an environment variable prefixed with "WEB_EXT_"
{ --source-dir="~/myExtention"
WEB_EXT_SOURCE_DIR="~/myExtention"
}
○ [options]
— s [path] : source directory; default-s to ./
○ [verb]
build : builds an easily installable version of ones extension
sign
run : fires up a dummy browser with the extension at ${PWD} installed
lint
docs
firefox
#define firefox::: \
I-----------------------------\
I ___ _ __ \
I | __(_)_ _ ___ / _|_____ __ \
I | _|| | '_/ -_| _/ _ \ \ / \
I |_| |_|_| \___|_| \___/_\_\ \
I-----------------------------I
• web browser
Special_pages:
• these pages are all imune to extension content scripts
accounts-static.cdn.mozilla.net
accounts.firefox.com
addons.cdn.mozilla.net
addons.mozilla.org
api.accounts.firefox.com
content.cdn.mozilla.net
content.cdn.mozilla.net
discovery.addons.mozilla.org
input.mozilla.org
install.mozilla.org
oauth.accounts.firefox.com
profile.accounts.firefox.com
support.mozilla.org
sync.services.mozilla.com
testpilot.firefox.com
Extentions:
manifest.json : the main firefox specific file which contains metadat and starts the control flow
○ keys:
• all are strings; the values are not neccesserly, but defaults to if not specified otherwise
• mandatory pairs are marked with a '#'
author : the extensions creators name
background : specifies background execution with its properties
scripts : list of javascripts which should be treated as background scripts
page : a path to a html document which can have its own javascripts;
cant be used together with "scripts" (see ABOVE)
persistent : bool; whether the background page should be kept in memory
(and therefor preserve its state) when its not in use
browser_action : controls the button added to the browser toolbar
browser_style : bool; whether to include firefoxs stylesheet
default_area : [area]; where the button shall be initally placed
"navbar" : main browser toolbar; default
"menupanel" : popup panel
"tabstrip" : tab toolbar
"personaltoolbar" : bookmarks toolbar
default_icon : string or object; the icon for the button;
path(s) relative to the manifest.js;
specify multiple files for multiple sizes,
where the key is the image height
{ "default_icon": {
"16": "MyFolder/pic16.png",
"32": "MyFolder/pic32.png"
}
}
default_popup : path to html file to be used as a popup when the button
is clicked; if the page containts đembededđ javascript,
it will be threated as a Content Violation Policy error
default_title : tooltip for the button (hover)
theme_icons : [ThemeIcons] object; specifies what extension themes to be used
○ acording to firefoxs theme
properties:
"light" : path to the image to be used on light theme
"dark" : path to the image to be used on dark theme
"size" : size of the "light" and "dark" images
commands : defines key combinations which can be listened to with the API
[name] : the name of the feature
suggested_key : defines key; specific to subproperty
"default"
"mac"
"linux"
"windows"
"chromeos"
"android"
"ios"
description : feature description
— exceptions:
• these builtin actions never fire (on the API)
when their shortcut is called
_execute_browser_action
_execute_page_action
_execute_sidebar_action
content_scripts : specifies content scripts to be loaded
default_locale : specifies locale
description : a short description of the extension,
intended for display in the browsers user interface
devtools_page : path to a html file; used to enhance devtools
# manifest_version : must always be 2
# version : float; specifies extension version
browser_specific_settings : application specific properties
"gecko" :
chrome_setting_overrides : override-s browser settings
"homepage" : url/path to new homepage
"search_provider" : adds new search engine
chrome_url_override : override-s local browser pages
bookmarks : bookmarks page
history : history page
newtab : new tab
newtab : new tab
content_security_policy :
— content script:
• content scripts run on a particular page as embedded code
— background script:
pass
Dev_tools:
F12
• since there are 2 usable web engines in existence, every browser supports it
○
[CTRL] & [ALT] & [MOUSE1] : expand element with all children
#define\
I----------------------------\
I __ __ ___ ____ ____ \
I | \/ |_ _/ ___| / ___| \
I | |\/| || |\__ \| | \
I | | | || | __| || |___ \
I |_| |_|___|____/ \____| \
I----------------------------I
rsnapshot
XAMPP:
• very popular
• winhead cope over proper service management
• trivially wraps some common webdev serves using a gui
— the services include, but are not limited to:
apache2
mysql
history:
atuin : TUI front-end for shell histories;
bloated and has sync philosophy which i find shady
hstr : TUI front-end for shell histories; ugly, but useful
histui : TUI front-end for bash history