Manjaro - Laravel Dev Setup
Tags: linux, php, manjaro
Published: 2021-11-24 21:17:57

Introduction
------------

I think its fair to say i have a bit of an addiction to Linux distro's.... over the last few months i have tried and tested a number of them and also blogged about a few... here is a brief list of distro's I've tested in the last 3 months.

- Ubuntu (Normal)
- Kubuntu (KDE)
- Lubuntu
- Elementary OS (my favourite so far)
- Pop!\_OS
- Fedora 35
- Zorin Core

And that's probably missing a few... yes I'm a distro wh\*re...

The absolute beauty of Linux Distro's is you can get up and running with what you need really fast. In my case i can get my Laravel development environment setup in less than 30 minutes on Ubuntu based distro and that would include sorting out my ssh access and GitHub keys...

With the exception of Fedora, all of the distributions above all have Ubuntu in common so the commands are all the same... so if you have followed my Elementary OS Dev setup it will work on all Debian based OS's

But recently, I've tested out Manjaro KDE (Also Gnome) and so far... i love it! Although based on Arch its really easy to setup and fairly easy to use for software installation similar to Ubuntu...

So the idea for this tutorial is to setup a few things and get Laravel Dev Environment setup done!. I will try to explain these commands as we go along to help sort of compare them to Debian based commands as best i can.

So lets get started!

### Chrome

I'm not a fan of Firefox (just a personal preference) so i always install Chrome on any installation of Linux i do. Do do this in Manjaro you can use the terminal or you can enable AUR (Arch User Repository)... This is a community driven report to help users with Arch based Linux setups with software installs.

AUR doesn't come enabled as standard but its SUPER easy to enable.

Press your Super/Windows key and type "Add/Remove Software" and open the program. When in here you need to do the following.

- Click on the hamburger menu and select preferences
- Click the third Party Tab and set the "enable AUR Support" as active with the sub option of "check for updates"

![](https://www.raspada-blog.co.uk/storage/wink/images/ZMh22XTLKbXdUTbY3YF0uFeET5NWEfGpDwuxWAmL.png)

![](https://www.raspada-blog.co.uk/storage/wink/images/GwJhMhMFfxSR2DBdIXmKKwrhZqKDQD7FkEZ5feRc.png)

And that's it for enabling AUR.... now all you need to do is close the preferences window and search for chrome in the software search and it should be the top result.

![](https://www.raspada-blog.co.uk/storage/wink/images/PdnoHbDJ5dCHYl04bYy4eGgG6TS2mZf9iS4ZO4zO.png)

### Terminal Setup

One great thing about Manjaro is, it comes with ZSH / OhMyZsh pre installed so there is zero config to do, it has the 3 plugins i use and love already

- Git
- ZSH AutoComplete
- ZSH AutoSyntaxHighlights

You can add some more if you need but.... its not necessary. Another cool thing i like about Manjaro KDE is there is two terminal applications out of the box... You have **Konsole** and then **Yakuake**... Now i spend a lot of time with a terminal window open but occasionally I'll just need to run something quickly without having to open from the program menu etc. With Yakuake you just need to press F12 and you get a beautiful drop down terminal! this uses the same configs as you main terminal so no extra setup required.... NEAT!

Next... Lets start on building our Dev environment

### All important update

As with any new software installation, its always good practice to update/upgrade your packages and repo's... With Manjaro's Pacman this is done with one command

 ```
sudo pacman -Syyu

```

What this command essentially does is combine the sudo apt update &amp;&amp; sudo apt upgrade into a single command. All in all it does the same thing. It checks the remote repo's for updates, synchronises with local repo then updates it and your system. If this is the first time you have run this command it could take up to 5 minutes to run.

Mine was update already so i got the below screen.

![](https://www.raspada-blog.co.uk/storage/wink/images/nPCLjo4DTR9eiOstqYeTO3VME40xrzJVtnLl6IBz.png)

The Dev Environment
-------------------

As I'm a Laravel Developer, i want to Have PHP, Nginx and MySQL running as a base standard. In Manjaro's favour there is a fair bit installed out of the box which cuts the setup down slightly.

### First of all... Git

Super easy... The following command will install Git for you

 ```
sudo pacman -S git

```

and then to check its installed correctly just run the version check

 ```
git --version

// Result - git version 2.34.0

```

Done!

### PHP Installation

This next bit may turn some peoples stomachs as its a "lazy method"... although were going to install Valet Linux shortly which uses Nginx, were going to install PHP-APACHE now as it comes bundled with a number of packages which we will use. We will disable Apache later on in the tutorial.

 ```
sudo pacman -S php php-apache

```

Installation Complete, Now lets edit the php.ini

 ```
sudo nano /etc/php/php.ini

```

 Find and uncomment the following extensions:

- extention=bcmath
- extention=zip
- extension=pdo\_mysql
- extension=iconv

Ctrl + X, Y and enter to save the changes and your done with PHP.... Easy right!

### Install MariaDB

I've always used the normal MySQL install for my local environment, but for some reason its a pain to get installed on Arch based systems and as such the recommendation is to use MariaDB which functions exactly the same to us developers but does require a few more steps to get installed. so first off lets install MariaDB

 ```
sudo pacman -S mariadb

```

Now this is where i got confused most doc's say this is enough to get it going... i have found this isn't the case so far and you need to Initialise the MySQL Directory, this can be done with the following command:

 ```
sudo mysql_install_db --user=mysql --basedir=<span class="hljs-regexp">/usr --datadir=/var/lib/mysql
</span>
```

![](https://www.raspada-blog.co.uk/storage/wink/images/a0Qj8sLFocjoLnROWhsdJ2AD3eUAwdggRhTNgK1K.png)

Next lets ensure the MySQL service starts when you reboot or startup your machine.

 ```
sudo systemctl start mysqld

```

Next lets setup MySQL for use!

 ```
sudo mysql_secure_installation

```

![](https://www.raspada-blog.co.uk/storage/wink/images/QFFGlv1kJEe9vrKNgfjJjgL0nCyXn7OVkJiRzIaH.png)

To check its installed and working just open up mysql command prompt with

 ```
sudo mysql

```

If you see the following prompt, You're good to go!

 ```
MariaDB [(<span class="hljs-literal">none)]> 
</span>
```

### Install Composer

![](https://www.raspada-blog.co.uk/storage/wink/images/opWLdheTCx9IDnrjBCVFYH6PzhZsGoKXSJbX9oRW.jpg)

you can install composer real easy like so

 ```
curl -sS https://getcomposer.org/installer | php

```

And that should be it... if you type **composer --version** in your terminal now it should show you the current version installed.

If it doesn't show the version, Try running the following command :

sudo mv composer.phar /usr/local/bin/composer

And adding the next 2 lines to the bottom of the manjaro-zsh-config

 ```
sudo nano /usr/share/zsh/manjaro-zsh-config 

```

And

 ```
PATH=$HOME/.config/composer/vendor/bin:~/.composer/vendor/bin:$PATH
export PATH

```

Now the **composer --version** should work fine.

**Valet Linux - Prerequisites and install**

Run the following command to ensure Valet Linux has the correct software installed for it to work

 ```
sudo pacman -S nss jq xsel networkmanager

```

Next, install Valet Linux. Under **NO CIRCUMSTANCES** should you run this command as sudo, it will require a complete removal and restart if you do... (when i did it i ended up just rebuilding my OS from scratch....)

 ```
composer global require cpriego/valet-linux

```

And then

 ```
valet install

```

Next were going to make a directory and park valet in it so it knows to serve from that directory.

 ```
mkdir ~/www
cd ~/www
valet park

```

The directory can be called what ever you want, www is just something i have always used. Next were going to assign a domain tld so its not .test

this can be what ever you want, but i always go with .vm

 ```
valet domain vm

```

Done.

### ﻿﻿Install Laravel

Another easy one to do, simply type the following command

 ```
composer global require laravel/installer

```

next CD to your www directory and test the Laravel install is working correctly by creating a test project

 ```
cd ~/www
laravel new test

```

As long as its all gone to plan you should see the Laravel logo in terminal and then a shed load of dependencies being dragged down for the application.

That's Laravel globally accessible to you now.

### A few more little things

So remember earlier when i mentioned we were installing Apache PHP for ease of installing packages... well its time to disable that and stop it from loading at system boot... If we don't Nginx wont work and neither will our dev environment. to do this we run the following command.

 ```
sudo systemctl disable apache2 && sudo systemctl stop apache2

```

and then we need to make sure Nginx starts up with the next command.

 ```
sudo systemctl enable nginx

```

Now, the first command is a bit odd... I've installed Manjaro a few times now, through VM's for testing and onto the machine I'm using now. The strange bit is sometimes installing the Apache2 doesn't start it but other times it does.... so it may not be necessary but doesn't hurt to run it.

Now in Laravel your definitely going to use NPM so lets install it. Again another single command and its done.

 ```
sudo pacman -S nodejs npm

```

You can install Node/npm with SNAP but you have to enable that and its not always the "cleanest" way of doing things.

Before jumping into your browser and being disappointed when test.vm doesn't work, Reboot your machine and when its back up and running you can hit the test.vm URL and it will work.

![](https://www.raspada-blog.co.uk/storage/wink/images/3A3w1TgDClWSkVcbnQPiOvhVShJDecgAZluPe0LH.png)

Finally install your IDE Of choice (*i use PHPstorm and Datagrip*) and start coding! I hope this has been helpful!<br><br> <h2>Raspada-Blog</h2>  I post on my blog primarily and share the posts via API, please check out [Raspada-Blog](www.raspada-blog.co.uk) for more posts and information. If you have any questions please message me on twitter or use my website contact form.