documenting my notes
This commit is contained in:
commit
0379beff4d
28 changed files with 1639 additions and 0 deletions
6
README.md
Normal file
6
README.md
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
<h2>A Colection of My Personal Computer Related Notes</h2>
|
||||
|
||||
This repository simply contains a series of notes I have accumulated over a series of time regarding Computers/Programming.
|
||||
Some of them are simply lists of programs I like or commands I have found useful. My memory can't possibly hold all the information.
|
||||
So I have committed them to a series of notes on my computer. This repostiory acts both as a storehouse of my personal knowledge regarding
|
||||
computers and programming, mainly dealing with Linux and its vast array of commands and programs.
|
||||
34
apachesetup.txt
Normal file
34
apachesetup.txt
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
Install Apache on Arch Linux
|
||||
|
||||
We must first begin by installing Apache with the following command:
|
||||
|
||||
sudo pacman -S apache
|
||||
|
||||
Start the Apache service with the following command:
|
||||
|
||||
sudo systemctl start httpd
|
||||
|
||||
To edit the main Apache configuration file for one or many websites, according to your preference, open the configuration file located in the following directory:
|
||||
|
||||
sudo nano /etc/httpd/conf/httpd.conf
|
||||
|
||||
In order to test the installation, create a test HTML file in the following directory with the command below:
|
||||
|
||||
sudo nano /srv/http/index.html
|
||||
|
||||
Insert the following HTML code in the empty file then save and exit:
|
||||
|
||||
<html>
|
||||
<body>
|
||||
<h1>CONGRATULATIONS</h1>
|
||||
<h2>You have just installed Apache on your Arch Linux Server</h2>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
You can now verify that Apache is installed correctly by typing http:// and your IP address in your browser.
|
||||
|
||||
http://YOUR.IP.ADD.RESS
|
||||
|
||||
To get your server’s public IP address, type the following command:
|
||||
|
||||
curl icanhazip.com
|
||||
85
chmod_notes2.txt
Normal file
85
chmod_notes2.txt
Normal file
|
|
@ -0,0 +1,85 @@
|
|||
Chmod is a UNIX based command that changes/modifies file and directory permissions from the CLI.
|
||||
|
||||
Chmod has a somewhat extensive series of command flags that grant or remove read/write/execute privileges from users within a certain group.
|
||||
|
||||
To display files/directories with their permissions listed, type:
|
||||
|
||||
ls -l or ls-la (la shows current working directory with permissions)
|
||||
|
||||
This will display something along the lines of:
|
||||
|
||||
dxwxr-xr-x 2 dave dave 4096 Aug 23 8:02 archive
|
||||
-rw-rw-r-- 1 dave dave 780 Aug 20 11:11 command_cls.page
|
||||
|
||||
'd' represents directory
|
||||
'x' represents execute
|
||||
'w' represents write
|
||||
'r' represents read
|
||||
'l' represents link
|
||||
|
||||
The first series of letters and dashes precluded by teh first '-' character demarcates the current USER's permissions.
|
||||
The second represents the user's GROUP and their permissions.(usually the sudo group)
|
||||
The third represents OTHER users and their permissions. (usually non-sudo users)
|
||||
|
||||
The chmod command can modify these permissions using specific flags(a,u,r,w,x,o,g) and operators(=,+,-).
|
||||
|
||||
For example, the following command grants read,write permissions to the current user, while granting read permissions to the other user groupfor the file new_file.txt.
|
||||
|
||||
chmod u=rw,og=4 new_file.txt
|
||||
|
||||
Note the use of the '=' operator that will overwrite any existing permissions.
|
||||
|
||||
If we now run ls-l again, we might see something that looks like this:
|
||||
|
||||
-rw-r--r-- 1 dave dave 28127 Aug 20 11:11 new_file.txt
|
||||
|
||||
This is all well and good for files we only need to read/write to, like a .txt file, but what if we have a bash script we want to run?
|
||||
We can very easily with chmod grant executable privileges in a similar fashion to granting read/write permissions.
|
||||
|
||||
chmod +x new_shell.sh
|
||||
|
||||
If we run ls -l again, our new_shell.sh file should be highlighted as well to easily differentiate itself as an executable file.
|
||||
Note this could also have been written as 'a+x' which would have done the same thing slightly more verbosely with the 'add' flag.
|
||||
We can also easily remove executable permissions by running the same as above but with the '-' flag:
|
||||
|
||||
chmod -x new_shell.sh
|
||||
|
||||
To easily use chmod to change the permissions on multiple files of a single file extension, one can easily do this using the wildcard flag *.
|
||||
For example if one wished to remove the read permissions for the "other" users from files that have a ".txt" extension, one would simply run:
|
||||
|
||||
chmod o-r *.txt
|
||||
|
||||
And again, one could do the opposite, adding read permissions to the "other" users for files that have a ".txt" extension:
|
||||
|
||||
chmod o+r *.txt
|
||||
|
||||
To recursively change permissions within a subdirectory, adding the -R flag will do this. For example if one wished to remove read permissions for our OTHER users within a subdirectory called 'page', one would simply type:
|
||||
|
||||
chmod -R o-r *.page
|
||||
|
||||
Also note that chmod has similar uses to the other command, chown (change ownership). For example while troubleshooting a permissions issue with mariaDB, I inputted the following to fix the issue:
|
||||
|
||||
sudo chown -R mysql: /var/lib/mysql
|
||||
|
||||
Note the difference in syntax here, instead of using flags to demarcate broad sweeping permission changes across user groups, instead we specified the user (in this case mysql). The use of the -R flag was important in this case as only the directory /var/lib/mysql was granted read/write permissions, while the files inside were still locked off from the user, mysql. In other words, running the chown command recursively where the user mysql (followed by a colon ':' to demarcate an optional paramter which takes the user's group, left blank in this case) would be granted user ownership permissions over the specified directory AND ALL OF ITS CONTENTS.
|
||||
|
||||
There is also a Numerical Shorthand to the chmod command which is very handy, but requires a bit more experience than I have to get used to it.
|
||||
|
||||
The essentials of it basically entails that three digits are given following the chmod command. The first digit represents the USER permissions, the second GROUP permissions, and the third OTHER permissions. An example would look like this:
|
||||
|
||||
chmod 664 *.page
|
||||
|
||||
Which would grant read/write permissions to both the USER and GROUP, while granting only read permissions to the OTHER to all files with the extension '.page'.
|
||||
|
||||
The following is a cheat sheet for the numerical annotations of chmod.
|
||||
|
||||
0:(000) No permission.
|
||||
1:(001) Execute permission.
|
||||
2:(010) Write permission.
|
||||
3:(011) Write and execute permissions.
|
||||
4:(100) Read permission.
|
||||
5:(101) Read and execute permissions.
|
||||
6:(110) Read and write permissions.
|
||||
7:(111) Read, write, and execute permissions.
|
||||
|
||||
This can be extremely useful if you are a systems administrator with a large amount of employees who need various access to different files/directories within your system, but the more verbose strings of letters might be easier to remember depending on what your use is. Nevertheless it is up to you to decide which method of using chmod you are more easily able to remember its syntax. A combination of these techniques should serve you well.
|
||||
38
couchdb_notes.txt
Normal file
38
couchdb_notes.txt
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
Please see the following link to read about how to set up couchdb using snap:
|
||||
|
||||
https://github.com/apache/couchdb-pkg/blob/main/README-SNAP.md
|
||||
|
||||
The essentials of setting up a basic couchdb are this:
|
||||
|
||||
First install using snap:
|
||||
|
||||
sudo snap install couchdb
|
||||
|
||||
Then set the admin password:
|
||||
|
||||
sudo snap set couchdb admin=yourpasswordhere
|
||||
|
||||
And start couchdb:
|
||||
|
||||
sudo snap start couchdb
|
||||
|
||||
Enable snap permissions:
|
||||
|
||||
sudo snap connect couchdb:mount-observe
|
||||
sudo snap connect couchdb:process-control
|
||||
|
||||
Change the Erlang settings stored in the /var/snap/couchdb/current/etc/vm.args file:
|
||||
|
||||
sudo snap set couchdb name=douchdb@127.0.0.1:5984 setcookie=cutter
|
||||
|
||||
;make sure to read the vm.args file to further understand this.
|
||||
|
||||
;and also restart couchdb once this is done:
|
||||
|
||||
sudo snap restart couchdb
|
||||
|
||||
Monitor CouchDB;
|
||||
|
||||
snap logs couchdb -f
|
||||
OR
|
||||
journalctl -u snap.couchdb* -f
|
||||
20
css_notes.txt
Normal file
20
css_notes.txt
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
There is a lot to CSS, SASS, etc, so alot of these notes will be in reference to further documentation you can find online.
|
||||
Eventually very specific tools that we reuse will be noted either here or in a separate file.
|
||||
|
||||
One of the best resources you can go to for CSS is Kevin Powell on youtube:
|
||||
|
||||
https://www.youtube.com/channel/UCJZv4d5rbIKd4QHMPkcABCw
|
||||
|
||||
And also CSS-Tricks.com:
|
||||
|
||||
https://css-tricks.com
|
||||
|
||||
Specifically their CSS grid and flexbox tutorials:
|
||||
|
||||
https://css-tricks.com/snippets/css/a-guide-to-flexbox/
|
||||
|
||||
https://css-tricks.com/snippets/css/complete-guide-grid/
|
||||
|
||||
A great resource for figuring out use specific grid snippets can be found at gridbyexample.com:
|
||||
|
||||
https://gridbyexample.com/examples/
|
||||
11
curl_notes.txt
Normal file
11
curl_notes.txt
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
Very Simple GET request:
|
||||
curl http://localhost:3000/maria_database
|
||||
|
||||
Simple JSON POST request:
|
||||
curl -X POST http://localhost:3000/maria_database -H "Content-Type: application/json" -d '{"task": "DONE IN CURL"}'
|
||||
|
||||
Simple JSON DELETE request:
|
||||
curl -X DELETE http://localhost:3000/maria_database -H "Content-Type: application/json" -d '{"deletedItem": "DONE IN CURL"}'
|
||||
|
||||
Simple JSON PUT request:
|
||||
curl -X PUT http://localhost:3000/maria_database -H "Content-Type: application/json" -d '{"updated": "WE DID THIS IN CURL AGAIN", "previous": "DONE IN CURL"}'
|
||||
64
docker_installation_notes.txt
Normal file
64
docker_installation_notes.txt
Normal file
|
|
@ -0,0 +1,64 @@
|
|||
The following covers the basic installation instructions and basic command line syntax for utilizing docker.
|
||||
|
||||
Install Docker and Docker-compose:
|
||||
|
||||
sudo pacman -S docker
|
||||
sudo pacman -S docker-compose
|
||||
|
||||
Start Docker by Default on Startup:
|
||||
|
||||
sudo systemctl start docker.service
|
||||
sudo systemctl enable docker.service
|
||||
|
||||
Check Docker version:
|
||||
|
||||
sudo docker version
|
||||
|
||||
And info:
|
||||
|
||||
sudo docker info
|
||||
|
||||
Run Docker without root:
|
||||
|
||||
sudo usermod -aG docker <username>
|
||||
reboot (required to take effect)
|
||||
|
||||
Search for a Docker Image:
|
||||
|
||||
docker search [name]
|
||||
|
||||
docker search nginx (an example)
|
||||
|
||||
Install a docker image:
|
||||
|
||||
docker pull hello-world (a simple package that tests if docker is working properly)
|
||||
|
||||
And run that Docker image:
|
||||
|
||||
docker run hello-world
|
||||
|
||||
Monitor Docker:
|
||||
|
||||
docker container ls
|
||||
|
||||
To see a list of all the Docker images installed:
|
||||
|
||||
docker images
|
||||
|
||||
To see the CPU RAM and network usage of the running images:
|
||||
|
||||
docker stats
|
||||
|
||||
To see Docker's network configuration:
|
||||
|
||||
docker network ls
|
||||
|
||||
To remove docker containers type:
|
||||
|
||||
docker container prune (careful, removes them all)
|
||||
docker container -r <container_id>
|
||||
|
||||
You'll still need to remove their corresponding images though, so:
|
||||
|
||||
docker images prune (again, removes them all)
|
||||
docker rmi <container name or id>
|
||||
17
docker_mariadb.txt
Normal file
17
docker_mariadb.txt
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
# Setting up a Docker MariaDB instance isn't too difficult, based off of Technotes yt channel, it can be done as follows:
|
||||
|
||||
# From the terminal, enter:
|
||||
|
||||
docker run -e MYSQL_ROOT_PASSWORD=test --name mydbcontainer -d mariadb
|
||||
|
||||
docker exec -it mydbcontainer -u root -p (enter password test)
|
||||
|
||||
# You will then see a classic CLI mariadb instance, go ahead and quit using \q, then:
|
||||
|
||||
docker inspect mydbcontainer
|
||||
|
||||
# This will show you a JSON like object that will include the IP addresss, copy it, and use it in the following command from your home machine command line:
|
||||
|
||||
mariadb -h 172.17.0.2 root -p (and enter password test again)
|
||||
|
||||
This will allow you to remote into the docker instance and use the mariadb without having to execute docker outright like above.
|
||||
85
docker_notes.txt
Normal file
85
docker_notes.txt
Normal file
|
|
@ -0,0 +1,85 @@
|
|||
Some commands of importance:
|
||||
|
||||
#To spin up the docker-compose server/website:
|
||||
|
||||
docker-compose up
|
||||
|
||||
#To see the docker images in a list:
|
||||
|
||||
docker image ls
|
||||
|
||||
#You can also inspect each image by tag or id with:
|
||||
|
||||
docker inspect <tag or id>
|
||||
|
||||
#To spin up docker in the background (leaving you to use the console further):
|
||||
|
||||
docker-compose up -d
|
||||
|
||||
#And to have a list of what applications are currently running from docker:
|
||||
|
||||
docker-compose ps
|
||||
|
||||
#To see what environment variables are available to the 'web' service:
|
||||
|
||||
docker-compose run web environment
|
||||
|
||||
#And lastly to close docker after opening it with the -d flag:
|
||||
|
||||
docker-compose stop
|
||||
|
||||
#If you wish to remove the containers docker has created in running the app, you can remove the containers by:
|
||||
|
||||
docker-compose down --volumes
|
||||
|
||||
The above commands are the basics of docker-compose program. Below is a not so brief description of what we learned from doing the basic tutorial:s
|
||||
|
||||
Essentially from what I've gathered is that Docker allows for faster integration of all required dependencies and greatly accellerates
|
||||
the development of applications by removing certain repetitive commands that are common to application development.
|
||||
|
||||
Many of the projects that are found at docker.com are written in python and thusly the examples used in these notes will pertain
|
||||
mainly to its uses with python, although it is worth noting that it is highly likely docker is usable with any programming language, including, of course
|
||||
Javascript.
|
||||
|
||||
For a more in depth understanding of Docker basics, please visit:
|
||||
|
||||
https://docs.docker.com/compose/gettingstarted/
|
||||
|
||||
Within our own directories, you can find a subdirectory called docker_compose_test within web_tutorials that follows along.
|
||||
|
||||
Within every Docker application there will be a main application from which docker will look for it's main commands, similar to an index.js file or an
|
||||
index.html file
|
||||
|
||||
In the case of the tutorial, this would be app.py
|
||||
|
||||
We also start off with creating a docker-compose.yml file as well as Dockerfile. Note that Dockerfile should have no extension specified,
|
||||
but is essentially a text file, as well as a requirements.txt file.
|
||||
|
||||
To reiterate as a list:
|
||||
|
||||
app.py
|
||||
docker-compose.yml
|
||||
Dockerfile
|
||||
requirements.txt
|
||||
|
||||
In order to truly understand the syntax, it will be important in the learning process to become familiar with the syntactical nuances of each of these files
|
||||
|
||||
|
||||
The Dockerfile file is actually the file that the docker-compile program talks to to render either a server or a web application, or both. I suspect
|
||||
it is capable of alot more than this, but this is what has been presented to me thus far.
|
||||
|
||||
The app.py is actually quite simple to read in this particular case as all it does is iterate however many times the user refreshes the site, and displays it to them
|
||||
within a string that greets them. Even though I have limited knowledge of python, the syntax is very straightfoward. This is displayed using the Flask application.
|
||||
|
||||
The docker-compose.yml (.yaml can also be used) is likely referenced by the Dockerfile to determine where to build its dependencies, run the program in which environment, which port to run it on, etc.
|
||||
|
||||
Lastly, the requirements.txt is literally a simple list of required dependencies, all it requires is a \n linebreak to differentiate the needed dependencies from each other
|
||||
(simplest formatting ever).
|
||||
|
||||
Note that the formatting is extremely important, just like in all programming. The indentation in the .yml and of course in the .py is of particular importance.
|
||||
In the docker site's tutorial page which covered a django app, I typed out everything as I saw it only to find I had not used proper indentation and simply copying/pasting
|
||||
their text fixed all the errors I was initially receiving.
|
||||
|
||||
Although I have already gone through this tutorial, it might be worth revisiting docker's tutorial on Python/Django, please see:
|
||||
|
||||
https://docs.docker.com/samples/django/
|
||||
102
firefox_notes.txt
Normal file
102
firefox_notes.txt
Normal file
|
|
@ -0,0 +1,102 @@
|
|||
Maximize/"Harden" Firefox privacy settings
|
||||
(via Mental Outlaw YT channel and Chris Xiao's Yet Another Firefox Hardening
|
||||
article and Unix Sheikh's Choose your Browser Carefully article):
|
||||
|
||||
Install Ublock Origin
|
||||
Install Decentraleyes
|
||||
Install ForgetMeNot
|
||||
Install DarkReader
|
||||
Install Vimium-FF
|
||||
Set Default Search Engine to Duck Duck Go Lite
|
||||
Get Firefox to remember nothing through Preferences setting
|
||||
Set Firefox to never visit non https websites
|
||||
Disable smooth scrolling
|
||||
|
||||
about:config settings
|
||||
(Optional): Turn off Javascript
|
||||
media.peerconnection.enabled set to false #breaks real-time audio/video
|
||||
media.navigator.enabled to false #breaks real-time audio/video
|
||||
media.gmp
|
||||
devtools.onboarding.telemetry.logged to false
|
||||
datareporting.policy.dataSubmissionEnabled set to false
|
||||
app.normandy.enabled set to false
|
||||
extensions.pocket.enabled to false
|
||||
extensions.formautofill.available set to blank
|
||||
extensions.screenshots.disabled set to true
|
||||
extensions.webcompat-reporter.enabled set to false
|
||||
privacy.resistfingerprinting set to true #noticeable performance and stability impact, proceed with caution.
|
||||
privacy.firstparty.isolate to true
|
||||
network.dns.disablePrefetch to true
|
||||
network.predictor.enabled set to false
|
||||
network.prefetch-next to false
|
||||
network.http.sendRefererHeader to 0 #sites with forms and logins may break
|
||||
network.http.referer.XoriginPolicy to 1
|
||||
network.cookie.lifetimePolicy to 2
|
||||
pdfjs.enableScripting to false
|
||||
identity.fxaccounts.enabled to false
|
||||
geo.enabled to false
|
||||
dom.webnotifications.enabled to false
|
||||
security.ssl3.rsa_des_ede3_sha set to false
|
||||
security.ssl.require_safe_negotiation set to true
|
||||
security.tls.version set to at least 3 (4 highest setting as of 2021, but not necessary according to Mental Outlaw)
|
||||
security.tls.enable_Ortt_data set to false
|
||||
browser.shell.checkDefaultBrowser = false
|
||||
browser.formfill.enable set to false
|
||||
browser.cache.disk.enable set to false
|
||||
browser.cache.disk_cache_ssl set to false
|
||||
browser.cache.memory.enable set to false
|
||||
browser.cache.offline.enable set to false
|
||||
browser.cache.insecure.enable set to false
|
||||
browser.privatebrowsing.autostart set to true
|
||||
browser.urlbar.speculativeConnect.enabled set to false
|
||||
browser.search.suggest.enabled set to false
|
||||
plugin.scan.plid.all set to false (same, couldn't find)
|
||||
browser.ping-centre.telemetry set to false
|
||||
browser.newtabpage.activity-stream.feeds.telemetry set to false
|
||||
browser.newtabpage.activity-stream.telemetry set to false
|
||||
browser.newtabpage.activity-stream.section.highlights.includePocket to false
|
||||
browser.tabs.crashReporting.sendReport to false
|
||||
browser.uidensity to 1 (makes the browser's tabs not so huge for firefox 89+)
|
||||
devtools.onboarding.telemetry.logged to false
|
||||
toolkit.telemetry.enabled to false
|
||||
toolkit.telemetry.server Delete the URL and leave it empty
|
||||
toolkit.telemetry.archive.enabled set to false
|
||||
toolkit.telemetry.bhrPing.enabled set to false
|
||||
toolkit.telemetry.firstShutdownPing.enabled set to false
|
||||
toolkit.telemetry.newProfilePing.enabled set to false
|
||||
toolkit.telemetry.unified set to false
|
||||
toolkit.telemetry.updatePing.enabled set to false
|
||||
toolkit.telemetry.shutdownPingSender.enabled set to false
|
||||
webgl.disabled set to true
|
||||
privacy.firstparty.isolate set to true
|
||||
security.ssl.enable_false_start set to false
|
||||
|
||||
go into ublock origin and check the 'Prevent WebRTC from leaking local IP addresses' box.
|
||||
go into usr/lib/firefox/distribution and open/create package.json and input the following:
|
||||
|
||||
{
|
||||
"policies": {
|
||||
"DisableAppUpdate": true,
|
||||
"DisableFirefoxAccounts": true,
|
||||
"DisableTelemetry": true,
|
||||
"DNSOverHTTPS": {
|
||||
"Enabled": false,
|
||||
"Locked": true
|
||||
},
|
||||
"DontCheckDefaultBrowser": true,
|
||||
"NetworkPrediction": false,
|
||||
"PromptForDownloadLocation": true,
|
||||
"SearchEngines": {
|
||||
"PreventInstalls": true
|
||||
},
|
||||
"SearchSuggestEnabled": false,
|
||||
"NetworkPrediction": false
|
||||
}
|
||||
}
|
||||
|
||||
The following isn't privacy related, but turns off proton in firefox, which makes better use of screenspace:
|
||||
|
||||
browser.proton.enabled set to false
|
||||
browser.proton.modals.enabled set to false
|
||||
browser.proton.doorhangers.enabled set to false
|
||||
browser.proton.contextmenus.enabled set to false
|
||||
97
git_basics.txt
Normal file
97
git_basics.txt
Normal file
|
|
@ -0,0 +1,97 @@
|
|||
# This document covers the basics of creating a simple git repository.
|
||||
|
||||
################### CREATE NEW REPOSITORY ###################
|
||||
|
||||
# Log into github: https://www.github.com/
|
||||
|
||||
# Click on the left by your profile and then by repositories, click "New"
|
||||
|
||||
# Name your repository (within this document we will now refer to this as "test-repo")
|
||||
|
||||
# Navigate to the directory from which you will be working, and once you have established some files you'd like to commit, enter the following commands:
|
||||
|
||||
echo "# test-repo" >> README.md #creates a simple test README file
|
||||
|
||||
git init # initializes a local(on your computer) git repository
|
||||
|
||||
git add README.md # adds the README.md file to your local git repository
|
||||
|
||||
git commit -m "first commit" # and commits those files to the local git repository with a short message noting it as the "first commit"
|
||||
|
||||
git branch -M main # establishes which branch you wish your repository to be pushed to
|
||||
|
||||
git remote add origin https://github.com/<your_github_user_name>/test-repo.git # adds your local repository to be remotely added to the specified repository
|
||||
|
||||
git push -u origin main # pushes your local repository to the online repository
|
||||
|
||||
################### PUSH TO EXISTING REPOSITORY ###################
|
||||
|
||||
git remote add origin https://github.com/<your_github_user_name>/test-repo.git
|
||||
|
||||
git branch -M main
|
||||
|
||||
git push -u origin main
|
||||
|
||||
git checkout -b <new branch> ## create a new branch in your current repository
|
||||
|
||||
git commit -m "v0.1.0" # commits it to the repository with a version number as its message
|
||||
|
||||
git push origin main # pushes the local repository to the origin main branch
|
||||
|
||||
git tag v0.1.0 # tags that repository with that version number
|
||||
|
||||
git push origin v0.1.0 and pushes it to the repository
|
||||
|
||||
################ DELETING ITEMS FROM YOUR REPOSITORY ####################
|
||||
|
||||
git -rm <file name>
|
||||
|
||||
TO REMOVE FROM JUST THE REPOSITORY:
|
||||
|
||||
git -rm --cache <filename>
|
||||
|
||||
################### SECURITY #######################
|
||||
|
||||
CREATE AN AUTHENTICATION TOKEN ON GITHUB AND USE IT. (or use SSH)
|
||||
|
||||
# To create a gitignore file that ignores all node_modules subdirectories:
|
||||
touch .gitignore
|
||||
echo "node_modules/" > .gitignore
|
||||
|
||||
# To pull from your existing repository and force a merge request into your current git repository:
|
||||
git pull origin main --allow-unrelated-histories
|
||||
|
||||
# Remember that certain files like our files.txt files in our reading-streams Node-Cookbook tutorials were over 50mb in size,
|
||||
# which github has as their file cap, so don't commit files over 50mb.
|
||||
|
||||
#################### SSH PUSHING #####################
|
||||
|
||||
Creating an SSH key and utilizing it on your github account can be found here:
|
||||
|
||||
https://docs.github.com/en/github/authenticating-to-github/connecting-to-github-with-ssh
|
||||
|
||||
In order to utilize ssh with github, within your repository, when setting up your first push (instructions above)
|
||||
You'll want to enter the following command before attempting to push:
|
||||
|
||||
git remote add orgin_ssh <ssh_url>
|
||||
|
||||
The ssh_url can be found on your repository's site under the Code tab, copy it and enter it with the command above
|
||||
|
||||
Then, when you are ready to push your committed changes to your repository, simply enter a modified version of the push command:
|
||||
|
||||
git push origin_ssh main
|
||||
|
||||
It will then prompt you for your ssh key's passphrase, enter it and you will be good to go (better than the security token option above)
|
||||
|
||||
|
||||
################### UPDATE NPM REGISTRY ###################
|
||||
|
||||
npm login # Enter login credentials
|
||||
|
||||
npm publish --access=public # publishes your current npm package to npm
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
96
git_notes.txt
Normal file
96
git_notes.txt
Normal file
|
|
@ -0,0 +1,96 @@
|
|||
git --version
|
||||
#Tells you which version of git you are running
|
||||
|
||||
git config --list
|
||||
#Tells you what configuration settings you have on git
|
||||
|
||||
git config --global user.name "Your name"
|
||||
#Configures git with your git(hub) username
|
||||
|
||||
git config --global user.email "yourname@youremail.com"
|
||||
#Configures git with your git(hub) user email
|
||||
|
||||
git init
|
||||
#initializes a new git repository on local machine
|
||||
|
||||
git add "your_file(s) here"
|
||||
#adds your files to the repository
|
||||
|
||||
git commit -m
|
||||
#commits the files
|
||||
|
||||
git push --set-upstream https:/github.com/username/repository_name.git master
|
||||
#pushes the repository online
|
||||
#you'll be prompted for your username and password at this point
|
||||
|
||||
rm -rf .git
|
||||
#Stops current directory from being tracked by git, essentially removing initalized
|
||||
#git respository.
|
||||
|
||||
touch .gitignore
|
||||
#creates a .gitignore file that tracks the files within the directory you DON'T want
|
||||
#included in your git project repository
|
||||
#note that wildcard and then listing the type of files you want to ignore can ignore all
|
||||
#files of a specific type, for example
|
||||
*.py will ignore all python files
|
||||
*.js will ignore all javascript files, etc.
|
||||
|
||||
git reset file_name
|
||||
#removes the file_name from the files to be committed (opposite of git add)
|
||||
|
||||
git reset
|
||||
#git reset with no parameters given will remove all files from the commit stage
|
||||
|
||||
git log
|
||||
#shows the log of recent commits
|
||||
|
||||
git clone <url> <where to clone>
|
||||
#clones a respotiroy from <url> to <where to clone>
|
||||
#instead of <url> you can use local directories to clone from one local directory to another
|
||||
by following <url> or local directory where <where to clone> is simply ".", the period
|
||||
#indicates that you'd like to clone that respotiroy/directory to the current directory you are in
|
||||
|
||||
git remote -v
|
||||
#lists the origins of the cloned repository
|
||||
|
||||
git branch -a
|
||||
#lists all the branches of the cloned repository
|
||||
|
||||
git pull origin master
|
||||
#pulls any changes that have been made to that git repository while you have
|
||||
#been addding changes of your own (essentially showing changes other developers
|
||||
#may have made/pushed to the repository while you have been working on your own changes)
|
||||
#note that origin is the name of the repository, and master is the name of the branch
|
||||
|
||||
git push origin master
|
||||
#pushes any changes you have made to the git repository, taking it from the commit
|
||||
staging area to the final show area on git(hub).
|
||||
|
||||
common workflow example:
|
||||
|
||||
git branch calc-divide
|
||||
#creates a git branch called calc-divide
|
||||
|
||||
git checkout calc-divide
|
||||
#changes default working branch to calc-divide (default s usually master)
|
||||
|
||||
git branch -d calc-divide
|
||||
#deletes branch locally
|
||||
|
||||
git push origin --delete calc-divide
|
||||
#deletes branch remotely
|
||||
|
||||
#Once changes have been made to various branches, and the project looks like it will
|
||||
#work well with all other branches/code changes (basically, the project is ready to be staged as a final version)
|
||||
#the branches are ready to be merged into the master branch and staged on git(hub)
|
||||
#the following commands allow for such with branch calc-divide:
|
||||
|
||||
git checkout master
|
||||
|
||||
git pull origin master
|
||||
|
||||
git branch --merged
|
||||
|
||||
git merge calc-divide
|
||||
|
||||
git push origin master
|
||||
14
gpg_basics.txt
Normal file
14
gpg_basics.txt
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
GPG is a simple file encryption tool that we can use to easily encrypt and decrypt our sensitive files.
|
||||
To easily encrypt a file, simply type into the terminal:
|
||||
|
||||
gpg -c <file_you_want_to_encrypt.txt>
|
||||
|
||||
And then enter and repeat a passphrase that will decrypt it later.
|
||||
|
||||
You must wait ten minutes to test decrypting the file as it will wait ten minutes after encryption before it will ask for a password.
|
||||
|
||||
To decrypt the file, wait ten minutes, then:
|
||||
|
||||
gpg -d <file_you_want_to_encrypt.txt>
|
||||
|
||||
It will prompt you for the password, then it will decrypt the file. This will ALWAYS copy the file, so remove the original file after encryption and decryption.
|
||||
22
grep_notes.txt
Normal file
22
grep_notes.txt
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
This grep or egrep(just grep with no -E flag), will return all sentences that begin with a capital letter and are followed by any
|
||||
number of uppercase letters, followed by lower case letters, followed by blank spaces and end with a period.
|
||||
This is an example of an extended regular expression, which allows for the use of the :alpha: :upper: :lower: etc. meta search criterion.
|
||||
|
||||
The '' delineates the beginning of an expression so that the meta characters are not interpreted by bash as commands.
|
||||
The carat symbole ^ represents that the beginning of the expression MUST begin with, in this case an uppercase character.
|
||||
It is encapsulated by two square brackets [[]] so as to delineate as ingle character, which then MUST be followed by ANY
|
||||
number of uppercase characters, lowercase characters, and empty space characters, the ANY condition is inputted by the asterix * metacharacter
|
||||
|
||||
The backslash breaks us out of extended regular expressions and then returns us to LITERAL or BASIC regular expressions. In this case
|
||||
we MUST follow it by a literal period .
|
||||
|
||||
We then ask it to search the lorem.txt using the regular expression, which will give us (roughly) every sentence within the text.
|
||||
Note that this is FAR from perfect however, you can even see its major issues by using the same command on this document instead of lorem.txt
|
||||
|
||||
##########################################################
|
||||
|
||||
grep -E '^[[:upper:]][[:upper:][:lower:] ]*\.' lorem.txt
|
||||
|
||||
##########################################################
|
||||
|
||||
some text unique to grep1(compare these two files using the comm and diff(-u) commands)
|
||||
46
grep_notes_1.txt
Normal file
46
grep_notes_1.txt
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
This grep or egrep(just grep with no -E flag), will return all sentences that begin with a capital letter and are followed by any
|
||||
number of uppercase letters, followed by lower case letters, followed by blank spaces and end with a period.
|
||||
This is an example of an extended regular expression, which allows for the use of the :alpha: :upper: :lower: etc. meta search criterion.
|
||||
|
||||
The '' delineates the beginning of an expression so that the meta characters are not interpreted by bash as commands.
|
||||
The carat symbole ^ represents that the beginning of the expression MUST begin with, in this case an uppercase character.
|
||||
It is encapsulated by two square brackets [[]] so as to delineate as ingle character, which then MUST be followed by ANY
|
||||
number of uppercase characters, lowercase characters, and empty space characters, the ANY condition is inputted by the asterix * metacharacter
|
||||
|
||||
The backslash breaks us out of extended regular expressions and then returns us to LITERAL or BASIC regular expressions. In this case
|
||||
we MUST follow it by a literal period .
|
||||
|
||||
We then ask it to search the lorem.txt using the regular expression, which will give us (roughly) every sentence within the text.
|
||||
Note that this is FAR from perfect however, you can even see its major issues by using the same command on this document instead of lorem.txt
|
||||
|
||||
##########################################################
|
||||
|
||||
grep -E '^[[:upper:]][[:upper:][:lower:] ]*\.' lorem.txt
|
||||
|
||||
##########################################################
|
||||
|
||||
|
||||
|
||||
some text unique to grep2(compare these two files using the comm and diff(-u) commands)
|
||||
|
||||
##########################################################
|
||||
|
||||
(this file was copied from grep 1, and originally showed 'unique to grep1' above, it was then passed through the diff command thusly:
|
||||
|
||||
##########################################################
|
||||
|
||||
diff -Naur grep_notes_1.txt grep_notes_2.txt > grep_patch.txt
|
||||
|
||||
##########################################################
|
||||
|
||||
This created a grep_patch.txt file that you can see logs the output of the diff command, using the patch command, we can pass this
|
||||
file through the command to update our original grep_notes_1.txt file to change ONLY what is different from the two files.
|
||||
In this case, grep_notes_2.txt is considered the UPDATED file, and will thusly change the grep_notes_1.txt file. It could just as easily
|
||||
be used to DOWNGRADE the file by reversing the order. This is useful for software development/updating/downgrading versions of programs.)
|
||||
|
||||
##########################################################
|
||||
|
||||
patch < grep_patch.txt
|
||||
|
||||
Outputs$:patching file grep_notes_1.txt
|
||||
##########################################################
|
||||
22
grep_notes_2.txt
Normal file
22
grep_notes_2.txt
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
This grep or egrep(just grep with no -E flag), will return all sentences that begin with a capital letter and are followed by any
|
||||
number of uppercase letters, followed by lower case letters, followed by blank spaces and end with a period.
|
||||
This is an example of an extended regular expression, which allows for the use of the :alpha: :upper: :lower: etc. meta search criterion.
|
||||
|
||||
The '' delineates the beginning of an expression so that the meta characters are not interpreted by bash as commands.
|
||||
The carat symbole ^ represents that the beginning of the expression MUST begin with, in this case an uppercase character.
|
||||
It is encapsulated by two square brackets [[]] so as to delineate as ingle character, which then MUST be followed by ANY
|
||||
number of uppercase characters, lowercase characters, and empty space characters, the ANY condition is inputted by the asterix * metacharacter
|
||||
|
||||
The backslash breaks us out of extended regular expressions and then returns us to LITERAL or BASIC regular expressions. In this case
|
||||
we MUST follow it by a literal period .
|
||||
|
||||
We then ask it to search the lorem.txt using the regular expression, which will give us (roughly) every sentence within the text.
|
||||
Note that this is FAR from perfect however, you can even see its major issues by using the same command on this document instead of lorem.txt
|
||||
|
||||
##########################################################
|
||||
|
||||
grep -E '^[[:upper:]][[:upper:][:lower:] ]*\.' lorem.txt
|
||||
|
||||
##########################################################
|
||||
|
||||
some text unique to grep2(compare these two files using the comm and diff(-u) commands)
|
||||
8
grep_patch.txt
Normal file
8
grep_patch.txt
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
--- grep_notes_1.txt 2021-08-21 05:42:09.720892075 -0700
|
||||
+++ grep_notes_2.txt 2021-08-21 05:39:02.414217690 -0700
|
||||
@@ -19,4 +19,4 @@
|
||||
|
||||
##########################################################
|
||||
|
||||
-some text unique to grep1(compare these two files using the comm and diff(-u) commands)
|
||||
+some text unique to grep2(compare these two files using the comm and diff(-u) commands)
|
||||
23
html_notes.txt
Normal file
23
html_notes.txt
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
#There are some interesting keyboard shortcuts that will help us write our html
|
||||
#pages faster. Keep in mind that saving default index.html files, etc will also be helpful
|
||||
|
||||
#To create a standard html page, simply type:
|
||||
html
|
||||
#to get options in vs code, choose "html5", and you will get a basic html page
|
||||
|
||||
#putting after the meta name tag a generic css link as follows:
|
||||
<link rel="stylesheet" href="styles.css">
|
||||
#is pretty much standard
|
||||
|
||||
#and putting in a generic javascript file as follows:
|
||||
<script src="script.js" defer></script>
|
||||
# will create a link to a standard javascript file and the defer will make sure
|
||||
#it is read after the html/css is first processed
|
||||
|
||||
#hitting a .class*2 will create
|
||||
<div class="class"></div>
|
||||
<div class="class"></div>
|
||||
|
||||
#while doing the same with #id*2 will create
|
||||
<div id="id"><div>
|
||||
<div id="id"><div>
|
||||
363
linux_notes.txt
Normal file
363
linux_notes.txt
Normal file
|
|
@ -0,0 +1,363 @@
|
|||
To Display All Info about your Linux Machine:
|
||||
uname -a
|
||||
|
||||
To change password:
|
||||
passwd
|
||||
|
||||
To change password as root for another user:
|
||||
passwd <username>
|
||||
|
||||
To login as a different user:
|
||||
sudo -u <username> -i
|
||||
|
||||
To Display current kernel and other installed kernels:
|
||||
mhwd-kernel -li
|
||||
|
||||
To quickly display files/directories:
|
||||
ls
|
||||
|
||||
To display files/directories/hidden files in human readable format:
|
||||
ls -lah
|
||||
|
||||
To Display disk usage of a particular directory:
|
||||
du -c /directory (displays total disk usage)
|
||||
du -h /directory (displays total disk usage by file/subdirectory in human readable format)
|
||||
du -hc /directory (displays total disk usage and usage by file/subdirectory in human readable format)
|
||||
|
||||
To Display top five directories that use the most disk space:
|
||||
du -ahx . | sort -rh | head -5
|
||||
|
||||
To Display location of binary file of program:
|
||||
whereis <program_name>
|
||||
|
||||
To show all available network connections:
|
||||
nmcli
|
||||
|
||||
To show all available network connections in human readable format:
|
||||
nmcli connection
|
||||
|
||||
To connect to wifi network:
|
||||
nmcli device wifi connect <NETWORK NAME>
|
||||
|
||||
To Display ip address info:
|
||||
ip addr show
|
||||
inxi -i
|
||||
curl ifconfig.me
|
||||
ip neigh
|
||||
|
||||
To connect via Network Manager Command Line Interface (nmcli):
|
||||
nmcli device wifi connect "$SSID" password "$PASSWORD"
|
||||
nmcli --ask device wifi connect "$SSID" (connects with a prompt that hides password)
|
||||
|
||||
To display and change wifi settings;
|
||||
nmcli
|
||||
|
||||
To Display Proccesses:
|
||||
bpytop
|
||||
htop
|
||||
top
|
||||
powertop
|
||||
|
||||
To Kill all processes on a specific port:
|
||||
fuser -k 3000/tcp
|
||||
|
||||
To Display HD Storage:
|
||||
df
|
||||
|
||||
More info about nmcli:
|
||||
man nmcli (very extensive)
|
||||
man nmcli-examples(good manual for how to connect and configure network and wifi connections)
|
||||
|
||||
To Display CPU and Network info:
|
||||
inxi -p (shows your partitioning)
|
||||
inxi -r (shows your repo list)
|
||||
inxi -i (shows your network details, including public ip)
|
||||
nmcli -p device (displays in human readable format the available network connections)
|
||||
nmcli device wifi list (displays with a mini gui the list of available wifi networks)
|
||||
inxi -w (shows the weather)
|
||||
lscpu OR
|
||||
hwinfo --cpu (much more detailed info) OR
|
||||
inxi -C (sort of like htop with lscpu)
|
||||
|
||||
To Display Nvidia GPU info:
|
||||
nvidia-smi
|
||||
|
||||
To display socket statistics:
|
||||
ss
|
||||
|
||||
To display the history of last logged in users:
|
||||
last
|
||||
|
||||
To display your current external/public IP address:
|
||||
curl ifconfig.me
|
||||
|
||||
To display all directories/files:
|
||||
tree
|
||||
|
||||
To display all directories EXCEPT for one directory:
|
||||
tree -I ignored_directory_name
|
||||
Example:
|
||||
tree -I node_modules
|
||||
|
||||
To display files/directories and their memory usage:
|
||||
pstree
|
||||
|
||||
To Search for all files with the name <query> -i flag means case insensitive:
|
||||
locate -i <query>
|
||||
|
||||
Similar to locate, but within working directory:
|
||||
find /dir_name/filename.txt
|
||||
|
||||
To remove a file:
|
||||
rm filename
|
||||
|
||||
To remove an empty directory:
|
||||
rm -d directoryname
|
||||
|
||||
To remove a directory with files in it:
|
||||
sudo rm -r directoryname
|
||||
|
||||
To securely delete a file (keep in mind this is not perfect, the only way to securely delete files is to physically destroy the hardware):
|
||||
shred -u -z filename
|
||||
|
||||
To kill all processes on port 3000:
|
||||
fuser -k -n tcp 3000
|
||||
|
||||
Grep Command Searches for particular strings/regex patterns within a text file:
|
||||
Most Basic Use:
|
||||
grep -F -i <query> <file.txt>
|
||||
|
||||
Example:
|
||||
grep -F -i "tHe" linux_notes.txt
|
||||
|
||||
Curl is a powerful CLI command that can GET/POST/PATCH/DELETE/etc. from HTTP/FTP/etc:
|
||||
curl "https://www.mywebsite.com"
|
||||
|
||||
To write curl output to a file:
|
||||
curl -o "https://www.mywebsite.com" mywebsiteoutput.txt
|
||||
|
||||
To format the returned text from curl, use prettier:
|
||||
prettier mywebsiteoutput.txt
|
||||
|
||||
And to save/overwrite the file:
|
||||
prettier --write mywebsiteoutput.txt
|
||||
|
||||
To make a POST request in json format to a database:
|
||||
|
||||
curl -X POST http://localhost:3000/maria_database -d '{"id": 1, "task": "do something"}'
|
||||
|
||||
To Benchmark GPU:
|
||||
cd into Unigine_Valley-1.0 (see Uningine for Linux website for download)
|
||||
./valley (to run benchmark)
|
||||
|
||||
To Display system statistics including program resource usage:
|
||||
yay -Ps OR
|
||||
ncdu
|
||||
|
||||
To enable Uncomplicated Firewall:
|
||||
sudo ufw enable
|
||||
|
||||
To turn off bluetooth:
|
||||
sudo bluetooth off
|
||||
|
||||
To install protonvpn:
|
||||
Utilize both Manjaro as well as ProtonVPN instructions, make sure
|
||||
to also install all packages that require pip
|
||||
|
||||
To initialize protonvpn:
|
||||
sudo protonvpn init
|
||||
sudo protonvpn config
|
||||
choose 1
|
||||
enter openvpn login credentials found at protonvpn dashboard
|
||||
sudo protonvpn connect -f
|
||||
|
||||
To disconnect protonvpn:
|
||||
sudo protonvpn d
|
||||
|
||||
|
||||
To Display Temps:
|
||||
sensors OR
|
||||
vcgencmd measure_temp (only works on Raspberry Pi) OR
|
||||
watch -n 2 vcgencmd measure_temp (to see it adjust every 2 seconds)
|
||||
|
||||
To Display NVidia Temps:
|
||||
nvidia-settings -q GPUCoreTemp -t OR
|
||||
watch -n1 nvidia-smi (displays updated GPU temp and other stats every sec)
|
||||
|
||||
To Display CPU Clock Speed:
|
||||
vcgencmd measure_clock arm (only works on Raspberry Pi) OR
|
||||
watch -n 2 vcgencmd measure_clock arm (to see it adjust every 2 seconds)
|
||||
|
||||
To Display licensing/technical data about a program:
|
||||
modinfo <program_name>
|
||||
|
||||
To adjust CPU clock and other settings in Raspberry Pi, navigate to:
|
||||
cd /
|
||||
boot/config.txt
|
||||
and adjust via sudo nano
|
||||
force_turbo=1
|
||||
over_voltage=6-8(8max)
|
||||
arm_freq=2000-2200(2200max)
|
||||
|
||||
To Update/Upgrade All Packages:
|
||||
sudo pacman -Syu
|
||||
OR
|
||||
yay
|
||||
|
||||
To install a specific package:
|
||||
sudo pacman -S <name>
|
||||
OR
|
||||
yay <name>
|
||||
|
||||
To install a package and bypass validity checks (make sure you trust the package):
|
||||
yay -S --mflags --skipinteg <name>
|
||||
|
||||
To test whether or not a server is running on a specific port:
|
||||
|
||||
telnet localhost 3000
|
||||
|
||||
To uncompress a zip file:
|
||||
|
||||
unzip file.zip
|
||||
|
||||
To extract and uncompress a tar.gz file:
|
||||
|
||||
tar -xvzf foo.tar.gz
|
||||
|
||||
To change file permissions:
|
||||
|
||||
chmod (a somewhat advanced command, see chmod_notes.txt)
|
||||
|
||||
To remove a specific package:
|
||||
sudo pacman -R <name>
|
||||
OR
|
||||
yay -Rns <name>
|
||||
|
||||
To remove a specific package and all its dependencies:
|
||||
sudo pacman -Rs <name>
|
||||
|
||||
To Clean up unneeded dependencies:
|
||||
yay -Yc
|
||||
|
||||
To clean up the pacman cache of all packages that are not currently installed:
|
||||
sudo pacman -Sc OR
|
||||
sudo paccache -r
|
||||
|
||||
To clean out your /home directory cache:
|
||||
First to see your home cache disk usage:
|
||||
sudo du -sh ~/.cache/
|
||||
And then to remove everything there:
|
||||
sudo rm -rf ~/.cache/* (be careful with this command as rm -rf with a wildcard will delete EVERYTHING)
|
||||
|
||||
To remove orphan (unused packages):
|
||||
First to see orphans run:
|
||||
sudo pacman -Qtdq
|
||||
And then to remove them
|
||||
sudo pacman -Rns $(pacman -Qtdq)
|
||||
|
||||
To list any failed services:
|
||||
sudo systemctl --failed
|
||||
|
||||
To check for any process errors run:
|
||||
sudo journalctl -p 3 -xb
|
||||
|
||||
To install snap and enable classic:
|
||||
|
||||
sudo pacman -S snapd
|
||||
sudo ln -s /var/lib/snapd/snap /snap
|
||||
|
||||
Install Codium using snap:
|
||||
sudo snap install codium --classic (has issues with displaying user prompts, but other package managers have other issues...)
|
||||
|
||||
For Art Install the following:
|
||||
gimp(should be default in most distros)
|
||||
inkscape
|
||||
krita
|
||||
blender
|
||||
|
||||
To add Fonts:
|
||||
Download Fonts and unzip them
|
||||
move them to usr/share/fonts/<folder_name>
|
||||
|
||||
For Epson V30 scanner enter the following (for arch and manjaro):
|
||||
pamac build iscan-plugin-gt-f720
|
||||
pamac install iscan
|
||||
|
||||
To Install td ameritrade
|
||||
Follow specific instructions from both website and AUR (make sure java 8 is installed)
|
||||
|
||||
Upgrade:
|
||||
sudo pacman -Syu
|
||||
|
||||
Install specific kernel:
|
||||
sudo pacman -S kernel501 (501 being changeable in this case to the kernel version number you want)
|
||||
|
||||
Install package:
|
||||
sudo pacman -S <packagename>
|
||||
|
||||
See package dependencies:
|
||||
pactree <packagename>
|
||||
|
||||
See package dependencies only 1 level deep:
|
||||
pactree -d 1 <packagename>
|
||||
|
||||
See package dependencies only one level deep without tree format:
|
||||
pactree -d -1 -u <packagename>
|
||||
|
||||
Remove package:
|
||||
sudo pacman -R <packagename>
|
||||
|
||||
Remove package and all its dependencies:
|
||||
sudo pacman -Rcns <packagename>
|
||||
|
||||
See which program owns this file:
|
||||
sudo pacman -Qo /path/to/file
|
||||
|
||||
To have bpytop start on startup and align to the left of the screen, go to Session and Startup and create a new operation:
|
||||
xfce4-terminal --geometry=127x51+0+0 -x bpytop
|
||||
Same with xbanish:
|
||||
xbanish
|
||||
|
||||
Other Apps of Mention:
|
||||
alacritty (nice simple terminal emulator)
|
||||
bpytop (much better than htop, themes well with manjaro in the XFCE terminal)
|
||||
nvtop (nvidia graphical user interface to monitor GPU status)
|
||||
powertop (displays power usage)
|
||||
atom (naturegreen dark theme)
|
||||
codium (download via snap and install the vsix file of the borealis theme)(to install theme via CLI, run: codium --install-extension eckertalex.borealis-1.0.2.vs)
|
||||
hub (extends functionality of git commands)
|
||||
librewolf (download vis github)
|
||||
micro(amazing minimalist text editor)
|
||||
irssi
|
||||
tor-browser
|
||||
nmap
|
||||
mangohud (displays gpu, cpu temps and usage percentage in game, input into steam Launch Options the following:)
|
||||
MANGOHUD_CONFIG="cpu_temp,gpu_temp,background_alpha=0.2, font_size=16, round_corners=5.0, gl_vsync=0" mangohud %command% --launcher-skip"
|
||||
ecryptfs-simple (simple encrypter package that can encrypt directories/files)
|
||||
encfs (like ecryptfs, but better, sudo pacman -S encfs)
|
||||
mtr (like ping, but way better)
|
||||
etcher
|
||||
iscan (funny enough, it's in the local repos, but you can also get it from the AUR)
|
||||
krita
|
||||
inkscape
|
||||
xbanish (hides mouse on keyboard input, make sure to add to startup applications)
|
||||
|
||||
Laptop Battery Saving Utilities:
|
||||
autocpufreq (one of the better battery saving measures, works more or less out of the box)
|
||||
powertop (monitors mainly)
|
||||
tlp (tlp start)
|
||||
investigate cpu frequencies
|
||||
|
||||
Installing ecryptfs-simple:
|
||||
git clone https://aur.archlinux.org/ecryptfs-simple.git
|
||||
cd ecryptfs-simple
|
||||
makepkg-si
|
||||
(if your receive: "One or more PGP signatures could not be verified!, enter:)
|
||||
gpg --recv-key <PGP public key listed above error>
|
||||
makepkg-si
|
||||
|
||||
Favorite DE/TWM thus far:
|
||||
Manjaro XFCE (minimal DE)
|
||||
Manjaro Sway (community driven TWM)
|
||||
Manjaro I3 (community driven TWM)
|
||||
Manjaro Lomiri (for Pinephone, still in beta version as of mid 2021)
|
||||
1
lorem.txt
Normal file
1
lorem.txt
Normal file
|
|
@ -0,0 +1 @@
|
|||
Lorem impsum qualum dolum.
|
||||
34
mysql_installation.txt
Normal file
34
mysql_installation.txt
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
# After having had some difficulties installing mariaDB for Manjaro Linux, I though it best to document the basic installation process, as well as how I solved the issue.
|
||||
|
||||
# MariaDB is a free and open source version of the original MySQL. It is a robust SQL database that is easily run from the command line interface.
|
||||
|
||||
# Installation of mariaDB on Manjaro Linux starts off very much like most installations do with Arch based distrobutions, with the pacman package manager:
|
||||
|
||||
sudo pacman -S mariadb
|
||||
|
||||
# After installation is complete, enter:
|
||||
|
||||
sudo mysql_install_db --user=mysql --basedir=/usr --datadir=/var/lib/mysql
|
||||
|
||||
# This will initialize our first mariadb database, note the location of the --datadir. This is where our problem occurred.
|
||||
|
||||
# After initializing our database, start the server and db. The enable command will start mariadb on system startup.
|
||||
|
||||
sudo systemctl start mariadb
|
||||
sudo systemctl enable mariadb (this way we don't have to systemctl start mariadb every time we want to access our database)
|
||||
|
||||
# Finally you'll want to secure your database:
|
||||
|
||||
sudo mysql_secure_installation
|
||||
|
||||
# You will be prompted with a series of questions about how secure you wish to make your database.
|
||||
|
||||
# You may also wish to install and configure MySQL Workbench(not really all that good, install dbeaver instead, dbeaver requires java):
|
||||
|
||||
sudo pacman -S mysql-workbench
|
||||
|
||||
# The issue that I ran into during installation is that the permissions of /var/lib/mysql were not allowed for anyone, only access to the folder was allowed for mysql user. To change this, I ran this command:
|
||||
|
||||
sudo chown -R mysql: /var/lib/mysql
|
||||
|
||||
# the -R flag recursively changed ownership permissions throughout the entire /var/lib/mysql directory, whereas the user mysql only had permissions the directory itself.
|
||||
67
mysql_notes.txt
Normal file
67
mysql_notes.txt
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
//To access root:
|
||||
mariadb -u root -p
|
||||
//and enter root password
|
||||
|
||||
//To access user brian:
|
||||
mariadb -u brian -p
|
||||
//and enter password
|
||||
|
||||
//To access specific port:
|
||||
mariadb -u brian -p port=<portnumber, default 3306>
|
||||
|
||||
//General guidelines for specific ip address, user, password, port number, and database:
|
||||
mariadb -h 166.78.144.191 -u brian -p port=<port#> database_name
|
||||
|
||||
GRANT ACCESS
|
||||
look this up in order to grant access to new user
|
||||
|
||||
SHOW DATABASES
|
||||
//Displays your current databases
|
||||
|
||||
CREATE DATABASE name
|
||||
//Creates a new database
|
||||
|
||||
USE DATABASE name
|
||||
//Brings you to that Database, should change prompt
|
||||
|
||||
CREATE TABLE
|
||||
look this up in order to see how to create tables
|
||||
|
||||
EXAMPLE OF CREATE TABLE:
|
||||
CREATE TABLE to_do (id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY, task VARCHAR(28) NOT NULL) Engine=InnoDB;
|
||||
|
||||
SHOW TABLES
|
||||
Shows databases tables
|
||||
|
||||
DESCRIBE name
|
||||
Shows the properties of the table property
|
||||
|
||||
SELECT * FROM table_name;
|
||||
|
||||
# To add new users to the mysq.user database log into mariadb as root and then type:
|
||||
|
||||
USE mysql; # use the mysql database
|
||||
SELECT User, Host, plugin FROM mysql.user;
|
||||
|
||||
# You will be presented with a display of a basic SQL table with User and plugin columns, below will display the user name under the user column and mysql_native_password under the plugin column.
|
||||
|
||||
# From here you can create a new user using the following mySQL command:
|
||||
|
||||
CREATE USER 'newuser' @ 'localhost' IDENTIFIED BY 'password';
|
||||
|
||||
GRANT ALL PRIVILEGES ON *.* TO user@localhost IDENTIFIED BY 'password';
|
||||
|
||||
# To delete a row from a table:
|
||||
DELETE FROM tablename WHERE parameters; (parameters example: id = 1)
|
||||
|
||||
# To export a database and save it as a .sql file:
|
||||
mysqldump -u username -p current_database_name > sql_file_name.sql
|
||||
|
||||
# To import a database from a .sql file:
|
||||
# Enter mariadb:
|
||||
mariadb -u username -p
|
||||
# Enter password
|
||||
CREATE DATABASE new_database_name;
|
||||
# Exit mariadb:
|
||||
\q
|
||||
mariadb -u username -p new_database_name < sql_file_name.sql
|
||||
43
nodejs_notes.txt
Normal file
43
nodejs_notes.txt
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
There are some simple things every basic web project will need when working nodejs
|
||||
One of these is that the npm init and npm install commands are pretty much universal
|
||||
When creating a basic website that has a backend
|
||||
|
||||
once you are satisfied with the basic index.html, about.html etc. documents and intend
|
||||
to create a backend side of the website, at some point you will want to create the package.json
|
||||
file that will list all the npm depencies as well as other essential information about the project
|
||||
|
||||
to create the package.json file, very simply type in the terminal:
|
||||
|
||||
npm init
|
||||
|
||||
once you have determined which packages you will need from the npm, list them in the depencies of the
|
||||
package.json file
|
||||
and then type in the terminal:
|
||||
|
||||
npm install
|
||||
|
||||
This will install all dependencies listed in the dependencies property of the package.json file.
|
||||
|
||||
For extensive information about how to secure your NodeJS Applications, visit:
|
||||
|
||||
https://medium.com/@rajapradhan08/best-practices-for-securing-node-js-web-applications-2e54cfefdc05
|
||||
|
||||
sudo npm install -g nodemon
|
||||
|
||||
nodemon <server.js>
|
||||
|
||||
sudo npm install -g autocannon
|
||||
|
||||
autocannon is an HTTP benchmarking tool, it can be invoked like this;
|
||||
|
||||
autocannon --connections 100 http://localhost:3000/
|
||||
|
||||
allocates a pool of 100 concurrent connections to our server, default is 10.
|
||||
The number of concurrent connections should be altered to best represent teh naticipated load on your server,
|
||||
so you can simulate production workloads.
|
||||
|
||||
autocannon --connections 100 --duration 20 http://localhost:3000/
|
||||
|
||||
or more syntactically shortened:
|
||||
|
||||
autocannon -c 100 -d 20 http://localhost:3000
|
||||
94
postgreSQL_basics.txt
Normal file
94
postgreSQL_basics.txt
Normal file
|
|
@ -0,0 +1,94 @@
|
|||
PostgreSQL syntax basics are very much like other SQL syntax basics:
|
||||
|
||||
# Essentials to Logging in:
|
||||
|
||||
# If logging in from the same computer the database is being served from:
|
||||
|
||||
psql -d mydb -U myuser (where the -d flag indicates you wish to log into the database mydb, and the -U flag indicates the user you wish to log in as, in this case myuser)
|
||||
|
||||
# If, however you need to log in from a server named myhost, you can log in using this command:
|
||||
|
||||
psql -h myhost -d mydb -U myuser
|
||||
|
||||
# More commonly however you will want to utilize the following, which will ensure you are prompted with a password:
|
||||
|
||||
psql -d mydb -U myuser -W
|
||||
|
||||
# Once you have entered your password you will be prompted with the PostgreSQL's CLI, which looks something like this:
|
||||
|
||||
mydb=#_
|
||||
|
||||
# Should you at any point need any help, simply type the following, which will give you some basic commands:
|
||||
|
||||
psql --help
|
||||
|
||||
# Should you simply need to quit, type:
|
||||
|
||||
\q
|
||||
|
||||
##################################
|
||||
|
||||
# From here on out, we will go over the basics of creating a simple TABLE and INSERTing columns and rows and data into them.
|
||||
|
||||
# Create a Basic Database:
|
||||
|
||||
postgres=#CREATE DATABASE dbname;
|
||||
|
||||
# Change to a different Database:
|
||||
|
||||
\c DBNAME
|
||||
|
||||
# Listing Schema within your Database:
|
||||
|
||||
\dn
|
||||
|
||||
# List all Tables within your Schema:
|
||||
|
||||
\dt
|
||||
|
||||
# Creating a Basic Table:
|
||||
|
||||
# There are many ways to create a simple table with the standard definitions in SQL style syntax, the following is how one would create a basic Table that takes in some data about pets:
|
||||
|
||||
mydb=# CREATE TABLE pets(
|
||||
ID INT PRIMARY KEY NOT NULL,
|
||||
NAME TEXT NOT NULL,
|
||||
AGE INT NOT NULL,
|
||||
GENDER CHAR(1));
|
||||
|
||||
# Note the simple limitations and definitions we've put on the above. We CREATED a table called pets, followed by an opening parantheses. Then we started defining Columns and what kind of data we expect to be inputed there, the first is an ID, which we define as being an INTeger, with a PRIMARY KEY as a defining characteristic, and NOT NULL indicates it cannot be left blank.
|
||||
|
||||
# We also have a NAME column created, with a TEXT type input, and again NOT NULL as it cannot be left blank.
|
||||
# The column AGE is similary created, with an INT type input, and again NOT NULL.
|
||||
# Lastly a GENDER column is created, where it's only limitation is that it's CHARacter count must be one (didn't quite think that one out did I?)
|
||||
|
||||
# And there we have it, a basic table.
|
||||
|
||||
# Add Data to our rows:
|
||||
|
||||
# So if we wanted to INSERT new data into our TABLE we could do so like this:
|
||||
|
||||
INSERT INTO pets VALUES ('1', 'Slip', '12', 'F');
|
||||
|
||||
# Note the use of single quotes surrounding our input, this is a REQUIREMENT when inputting data.
|
||||
|
||||
# To view our data in our table, simply type:
|
||||
|
||||
SELECT * FROM table_name;
|
||||
|
||||
# More modern and works better is:
|
||||
|
||||
TABLE table_name;
|
||||
|
||||
#Or in this case:
|
||||
SELECT * FROM pets;
|
||||
|
||||
# To delete a row from a table, simply enter:
|
||||
|
||||
DELETE FROM table_name
|
||||
WHERE id = id_number;
|
||||
|
||||
##################################
|
||||
|
||||
# There is a lot more to cover, but I'll stop here for now as SQL style syntax can be Monolithic in scale.
|
||||
# It is worth noting, however, that interacting with the psql cli can be a much more intuitive way of interacting with the Database than through the pgadmin4 GUI interface in our web broser, just in my opinion...
|
||||
99
postgreSQL_installation.txt
Normal file
99
postgreSQL_installation.txt
Normal file
|
|
@ -0,0 +1,99 @@
|
|||
PostgreSQL is an Open Source Relational Database Module
|
||||
|
||||
Installation has thus far been somewhat difficult but I have had some success with the following on Manjaro Linux
|
||||
|
||||
# Installs postgresql and it's GUI pgadmin
|
||||
sudo pacman -S yay
|
||||
yay postgresql pgadmin4
|
||||
sudo pacman -S postgres #allows for use of the initdb on Arch/Manjaro
|
||||
|
||||
# Setup the service
|
||||
sudo -u postgres -i #login as postgres
|
||||
initdb --locale $Lang -E -D '/var/lib/postgres/data/'
|
||||
|
||||
#This will then display on the console:
|
||||
[postgres@manjaro ~]$ initdb --locale $LANG -E UTF8 -D '/var/lib/postgres/data/'
|
||||
The files belonging to this database system will be owned by user "postgres".
|
||||
This user must also own the server process.
|
||||
|
||||
The database cluster will be initialized with locale "en_US.utf8".
|
||||
The default text search configuration will be set to "english".
|
||||
|
||||
Data page checksums are disabled.
|
||||
|
||||
fixing permissions on existing directory /var/lib/postgres/data ... ok
|
||||
creating subdirectories ... ok
|
||||
selecting dynamic shared memory implementation ... posix
|
||||
selecting default max_connections ... 100
|
||||
selecting default shared_buffers ... 128MB
|
||||
selecting default time zone ... America/Los_Angeles
|
||||
creating configuration files ... ok
|
||||
running bootstrap script ... ok
|
||||
performing post-bootstrap initialization ... ok
|
||||
syncing data to disk ... ok
|
||||
|
||||
initdb: warning: enabling "trust" authentication for local connections
|
||||
You can change this by editing pg_hba.conf or using the option -A, or
|
||||
--auth-local and --auth-host, the next time you run initdb.
|
||||
|
||||
Success. You can now start the database server using:
|
||||
|
||||
pg_ctl -D /var/lib/postgres/data/ -l logfile start
|
||||
|
||||
# Then we run:
|
||||
sudo systemctl enable --now postgresql
|
||||
# which will log the following:
|
||||
Created symlink /etc/systemd/system/multi-user.target.wants/postgresql.service → /usr/lib/systemd/system/postgresql.service.
|
||||
# and then...
|
||||
sudo systemctl status postgresql #check for any errors
|
||||
|
||||
# To setup your connection security, login as root:
|
||||
su
|
||||
|
||||
cd /var/lib/postgres/data
|
||||
cp pg_hba.conf pg_hba.conf.backup # in case you mess up
|
||||
micro pg_hba.conf
|
||||
|
||||
Although self explanatory, please also see:
|
||||
|
||||
https://dev.to/tusharsadhwani/how-to-setup-postgresql-on-manjaro-linux-arch-412l
|
||||
|
||||
For further details. This is also the website from which this configuration was written.
|
||||
|
||||
Ok, so we got in using pgAdmin as well! (this actually took me a good minute and using the psql cli helped)
|
||||
|
||||
Firstly, its' good to initialize our database on port 5432, note the initdb command above. Once done...
|
||||
|
||||
#login as postgres:
|
||||
sudo -u postgres -i
|
||||
|
||||
#then login to postgres via cli gui:
|
||||
|
||||
psql <dbname>
|
||||
|
||||
|
||||
#then it may prompt you for the password, after logging in, you will be presented with a basic cli GUI:
|
||||
|
||||
postgres=# help
|
||||
You are using psql, the command-line interface to PostgreSQL
|
||||
|
||||
#from here you can pretty much interact with the interface but if you want to run the same server on pgAdmin,
|
||||
#open it up via the terminal or from your Manjaro GUI:
|
||||
|
||||
pgadmin4
|
||||
|
||||
from her eyou can go to object create server, where it will ask for your login input,
|
||||
this was the hard part, but I eventually determined that via psql, you could find all the info by typing
|
||||
|
||||
postgres=# \conninfo
|
||||
|
||||
which displays:
|
||||
You are connected to database "postgres" as user "postgres" via socket in "/run/postgresql" at port "5432".
|
||||
the name can be put in whatever you like, since you're naming the server (i also used postgres for this...)
|
||||
but at the connection under Host name/address took me a while to realize that what it wanted was /run/postgresql
|
||||
and yes the default port is 5432.
|
||||
|
||||
So there we are, finally the installation is complete and running on Manjaro Linux!
|
||||
|
||||
|
||||
|
||||
60
ssh_basics.txt
Normal file
60
ssh_basics.txt
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
OpenSSH, or more commonly known simply as SSH, is a simple Secure Shell protocol that allows us to securely create passwords
|
||||
that are associated with "keys" that will give us a long hashed key that is saved on whatever computer or API we are trying
|
||||
to gain access to in which we can simply apply a password that is associated with that key. The key's hashed values are saved
|
||||
on both our local computer as well as the API, but the passphrase to gain access is stored nowhere (unless we idiotically save it
|
||||
in plain text somewhere, the following is a simle way to set it up on github and use it:
|
||||
|
||||
# Generating the SSH key
|
||||
|
||||
# First see what keys are availabe:
|
||||
|
||||
ls -la ~/.ssh
|
||||
|
||||
# To Generate a new SSH key:
|
||||
|
||||
ssh-keygen -t ed25519 -C "your_email@example.com" (note that the ed25519 is a key type and is necessary for security reasons,
|
||||
you'll always want to use this type, but keep in mind that you'll probably want to rename this when prompted below so you can make
|
||||
multiple ed25519 keys)
|
||||
|
||||
# You will be prompted to enter a file to which to save the key into, if you don't specify it will name it the ed25519 field
|
||||
|
||||
# You will also be prompted to enter/repeat a passphrase (remember this)
|
||||
|
||||
# Then add the SSH key to the ssh-agent
|
||||
|
||||
# First start the ssh-agent in the background.
|
||||
|
||||
evail "$(ssh-agent -s)"
|
||||
|
||||
# It will then list you the Agent pid number (note that yes, this is a process now running the background, this is how
|
||||
it always will authenticate on your end, it is NECESSARY)
|
||||
|
||||
# Then we add the SSH private key to the ssh-agent.
|
||||
|
||||
ssh-add ~/.ssh/ed25519
|
||||
|
||||
# Then from the Github website on your profile page, go to settings and under SSH/GPG keys, add the SSH key including the SHA256 text,
|
||||
but not your email
|
||||
|
||||
#After you have successfully done so (you should see a client side different SSH key that it is associated with), you'll need to test
|
||||
your SSH connection:
|
||||
|
||||
ssh -T git@github.com
|
||||
|
||||
# You should then be prompted with a message like so:
|
||||
|
||||
> Hi username! You've successfully authenticated, but GitHub does not
|
||||
> provide shell access.
|
||||
|
||||
# You're now ready to go, just make sure to specify the origin as origin-ssh instead of origin when pushing to github:
|
||||
|
||||
git add <file(s)>
|
||||
git commit -m "commit message"
|
||||
git push origin-ssh main
|
||||
|
||||
It will then prompt you for your ssh passphrase, enter it and you've successfully committed to github using ssh!
|
||||
|
||||
If you would like to automate it so it doesn't ask for the passphrase (just don't forget your passphrase in case), you can set up
|
||||
automating putting in your passphrase like so:
|
||||
|
||||
ssh-add ~/.ssh/id_ed25519 &>/dev/null
|
||||
75
vim_notes.txt
Normal file
75
vim_notes.txt
Normal file
|
|
@ -0,0 +1,75 @@
|
|||
This Document covers some of the most commonly used vim commands:
|
||||
|
||||
# Super Basic:
|
||||
|
||||
# Quit Vim:
|
||||
|
||||
:q (make sure to enter the colon, this is in NORMAL mode)
|
||||
:q! (quit without saving)
|
||||
|
||||
# Save Document:
|
||||
|
||||
:w
|
||||
:wq (save and quit)
|
||||
|
||||
# Insert Text (enter INSERT mode):
|
||||
|
||||
i (that's right, just hit i)
|
||||
a (enter insert mode, and put the cursor one ahead, ie append)
|
||||
|
||||
# Return to NORMAL mode:
|
||||
|
||||
Esc (hit the Escape key)
|
||||
|
||||
# Enter VISUAL mode:
|
||||
|
||||
v (from NORMAL mode, hit v, this will allow you to enter VISUAL mode)
|
||||
|
||||
# Navigate the Document in NORMAL mode:
|
||||
|
||||
h (go one character left)
|
||||
j (go one character down)
|
||||
k (go one character up)
|
||||
l (go one character right)
|
||||
|
||||
w (go to the first character of the next word)
|
||||
e (go to the last character of the next word)
|
||||
b (go to the first character of the last word)
|
||||
|
||||
0 (go to the beginning of the current line)
|
||||
$ (go to the end of the current line)
|
||||
|
||||
ctrl+d (navigate down one half screen)
|
||||
ctrl+u (navigate up one half screen)
|
||||
ctrl+f (navigate down one full screen)(essentially pgdown)
|
||||
ctrl+b (navigate up one full screen)(essentially pgup)
|
||||
|
||||
# Copy/Paste:
|
||||
|
||||
yy or Y: copy current line, including new line character
|
||||
y$: copy to the end of current line, but not the new line character
|
||||
yiw: copy the current word, excluding surrounding whitespace
|
||||
yaw: copy the current word, including surrounding whitespace
|
||||
ytx: copy from the current cursor position up to and before the character represented by x
|
||||
yfx: copy from the current cursor position up to and including the character represented by x
|
||||
|
||||
# Undo/Redo:
|
||||
|
||||
u: undo
|
||||
Ctrl-R: redo
|
||||
|
||||
# Indent/Unindent:
|
||||
|
||||
>> : indent current line
|
||||
<< : unindent current line
|
||||
|
||||
Travel to a specific line:
|
||||
5G (takes you to line 5)
|
||||
|
||||
Page Up/ Page Down:
|
||||
CTRL + B (Page Up)
|
||||
CTRL + F (Page Down)
|
||||
|
||||
Global Search and Replace:
|
||||
|
||||
:%s/word_to_replace/new_word/g
|
||||
13
vs_code_ext.txt
Normal file
13
vs_code_ext.txt
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
The following are some Codium Extensions that I like:
|
||||
|
||||
Beautify
|
||||
Borealis Theme (install via .vsix file on vscodium)
|
||||
Bracket Pair Colorizer
|
||||
Cobalt2 Theme Official (blue borealis)
|
||||
EsLint
|
||||
GlassIt Linux (or GlassIt depending)
|
||||
Import Cost
|
||||
Markdown Preview Enhanced
|
||||
Prettier
|
||||
Vetur
|
||||
Vim
|
||||
Loading…
Add table
Add a link
Reference in a new issue