├── .bash_aliases ├── README.md ├── nginx ├── fastcgi.conf ├── fastcgi_params ├── koi-utf ├── koi-win ├── mime.types ├── nginx.conf ├── proxy_params ├── scgi_params ├── sites-enabled │ ├── client.conf │ ├── enflow.conf │ ├── foundation.conf │ └── private.conf ├── snippets │ ├── fastcgi-php.conf │ └── snakeoil.conf ├── uwsgi_params └── win-utf └── terminal-settings.json /.bash_aliases: -------------------------------------------------------------------------------- 1 | alias ..="cd .." 2 | alias ...="cd ../.." 3 | alias ....="cd ../../.." 4 | alias .....="cd ../../../.." 5 | 6 | alias h='cd ~' 7 | alias c='clear' 8 | 9 | alias wip='git commit -am "WIP" && git pull origin HEAD --no-edit && git push -u origin HEAD' 10 | alias pd='git pull --no-edit && git push -u origin HEAD && $(crane deploy > /dev/null 2>&1)' 11 | alias fpd='git push -u origin HEAD && $(crane deploy --patch > /dev/null 2>&1)' 12 | 13 | alias a='rlwrap php artisan' 14 | alias tinker='rlwrap php artisan tinker' 15 | alias migrate='rlwrap php artisan migrate' 16 | alias db='mysql -h127.0.0.1 -uroot -psecret' 17 | 18 | alias phpunit="vendor/bin/phpunit" 19 | alias c="composer" 20 | alias cu="composer update" 21 | alias cr="composer require" 22 | alias ci="composer install" 23 | alias cda="composer dump-autoload" 24 | alias gw="gulp watch" 25 | alias update="git pull origin HEAD && composer update && yarn upgrade" 26 | 27 | alias clearexif='for i in *; do echo "Processing $i"; exiftool -overwrite_original -all= "$i"; done' 28 | 29 | export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2; exit;}'):0.0 30 | 31 | # Commit everything 32 | function commit() { 33 | commitMessage="$1" 34 | 35 | if [ "$commitMessage" = "" ]; then 36 | commitMessage="commit" 37 | fi 38 | 39 | git add . 40 | eval "git commit -a -m '${commitMessage}'" 41 | } 42 | 43 | # commit, push & deploy 44 | function cpd() { 45 | if [ "$1" = "" ]; then 46 | echo "Commit message is required" 47 | return 48 | fi 49 | 50 | commit "$1" 51 | pd 52 | } 53 | 54 | function bg() { 55 | nohup "$@" &>/dev/null & 56 | } 57 | 58 | function open() { 59 | explorer.exe . 60 | } 61 | 62 | # Scrape a single webpage with all assets 63 | function scrapePageWithAssets() { 64 | wget --adjust-extension --convert-links --page-requisites --span-hosts --no-host-directories "$1" 65 | } 66 | 67 | # Request using GET, POST, etc. method 68 | for method in GET HEAD POST PUT DELETE TRACE OPTIONS; do 69 | alias "$method"="lwp-request -m '$method'" 70 | done 71 | 72 | alias ip="dig +short myip.opendns.com @resolver1.opendns.com" 73 | alias ipl="ifconfig | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*' | grep -v '127.0.0.1'" 74 | 75 | alias week="date +%V" 76 | 77 | export DISPLAY=:0 78 | 79 | # Autocorrect typos in path names when using `cd` 80 | shopt -s cdspell 81 | 82 | transfer() { 83 | # write to output to tmpfile because of progress bar 84 | tmpfile=$( mktemp -t transferXXX ) 85 | curl --progress-bar --upload-file $1 https://transfer.sh/$(basename $1) >> $tmpfile; 86 | cat $tmpfile; 87 | rm -f $tmpfile; 88 | } 89 | 90 | resetdb() { 91 | if [ $# -eq 0 ] 92 | then 93 | echo "No DB supplied" 94 | return 95 | fi 96 | mysql -h127.0.0.1 --user="root" --password="secret" --execute="DROP DATABASE $1; CREATE DATABASE $1;" 97 | } 98 | 99 | towerlink() { 100 | rm -rf vendor/enflow/tower vendor/enflow/tower-shop 101 | ln -s /home/michel/code/enflow/tower vendor/enflow/tower 102 | ln -s /home/michel/code/enflow/tower-shop vendor/enflow/tower-shop 103 | } 104 | 105 | link() { 106 | die () { 107 | echo >&2 "$@" 108 | exit 1 109 | } 110 | 111 | [ "$#" -eq 1 ] || die "1 argument required, $# provided" 112 | 113 | rm -rf "vendor/enflow/$1" "node_modules/$1" 114 | ln -s "/home/michel/code/enflow/$1" "vendor/enflow/$1" 115 | ln -s "/home/michel/code/vendor/$1" "node_modules/$1" 116 | } 117 | 118 | flavorlink() { 119 | die () { 120 | echo >&2 "$@" 121 | exit 1 122 | } 123 | 124 | [ "$#" -eq 1 ] || die "1 argument required, $# provided" 125 | 126 | rm -rf "vendor/enflow-flavors/$1" 127 | ln -s "/home/michel/code/enflow/flavors/$1" "vendor/enflow-flavors/$1" 128 | } 129 | 130 | restart() { 131 | sudo mkdir -p /var/run/php 132 | sudo service nginx restart 133 | sudo service php8.1-fpm restart 134 | sudo mkdir /var/run/mysqld && sudo chown mysql:mysql /var/run/mysqld 135 | sudo service mysql start 136 | sudo service redis-server start 137 | sudo service memcached start 138 | } 139 | 140 | function dusk() { 141 | pids=$(pidof /usr/bin/Xvfb) 142 | 143 | if [ ! -n "$pids" ]; then 144 | Xvfb :0 -screen 0 1280x960x24 & 145 | fi 146 | 147 | php artisan dusk "$@" 148 | } 149 | 150 | gulp() { 151 | if [ -f "webpack.mix.js" ]; then 152 | command npm run watch 153 | else 154 | command gulp "$@" 155 | fi 156 | } 157 | 158 | # starting in the right directory 159 | cd ~/code/enflow 160 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # WSL2 PHP Development 2 | 3 | We use WSL2 (Bash on Windows) for local development on Windows. 4 | You may install this on a Windows 10 machine with build 1904 or later (May 2020 release). 5 | 6 | ## Installing WSL2 7 | 8 | - Open Powershell as administrator 9 | - Run: 10 | ``` 11 | wsl --install 12 | dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart 13 | dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart 14 | wsl --set-default-version 2 15 | wsl --install -d Ubuntu 16 | ``` 17 | - Install Ubuntu from the Microsoft store and launch Ubunto from start 18 | - WSL will install automatically. Please wait till the username prompt. 19 | - Enter your username. We prefer to use our firstname in lowercase format: i.e. John Doe -> username 'john' 20 | - Password should be 'secret'. We will remove the password later on. 21 | - Run 'sudo apt update' & 'sudo apt upgrade -y' to update all dependencies 22 | - WSL2 is installed! Now the dependencies. 23 | 24 | # Installing dependencies 25 | 26 | - `sudo su` 27 | - `passwd --delete USERNAME` 28 | - `touch ~/.hushlogin` 29 | - `sudo add-apt-repository ppa:ondrej/php` 30 | - `curl -sL https://deb.nodesource.com/setup_18.x | sudo bash -` 31 | - `curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -` 32 | - `echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list` 33 | - `apt update` 34 | - `apt upgrade -y` 35 | - Install PHP/webserver/database: `apt install -y php8.4-fpm php8.4-mbstring php8.4-curl php8.4-bz2 php8.4-zip php8.4-xml php8.4-gd php8.4-mysql php8.4-intl php8.4-sqlite3 php8.4-soap php8.4-bcmath php8.4-memcached php8.4-redis php8.4-xmlrpc php8.4-imagick apt-transport-https nginx mysql-client mysql-server` 36 | - Optional dependencies: `apt install -y nodejs rlwrap git dos2unix memcached default-jre htop yarn unzip dh-autoreconf redis-server pv ack unoconv` 37 | - `sudo npm install gulp-cli -g` 38 | - `locale-gen nl_NL && locale-gen nl_NL.UTF-8 && locale-gen --purge` 39 | - Copy your private key to the `~/.ssh/` directory 40 | 41 | # nginx 42 | Nginx needs to be configured. This depends on how you want to setup your vhosts. 43 | We've included our '/etc/nginx' folder (excluding the SSL certificates) in this repository as reference. 44 | You can copy this directory to your /etc/nginx folder: 45 | - Run `cd /etc/nginx && explorer.exe .` and copy the files from that folder over. 46 | - You need to symlink the /etc/nginx/code folder to your code folder. We recommend this is under `~/code` 47 | 48 | # php-fpm 49 | We have some config items to change in the www PHP FPM pool: 50 | `sudo nano /etc/php/8.4/fpm/pool.d/www.conf` 51 | - `user` should be set to your username. Most likely your first name in lowercase. 52 | - `group` should be set to your username. Most likely your first name in lowercase. 53 | - `listen` should be set to `127.0.0.1:9250` 54 | - You can save those changes. 55 | 56 | # MySQL 57 | We just need to set the root password to 'secret'. The other default configuration is fine for your usecase: 58 | - `sudo usermod -d /var/lib/mysql/ mysql` 59 | - `sudo service mysql start` 60 | - `sudo mysql` 61 | - Setting the root password to 'secret' for easy use: 62 | - `use mysql; 63 | ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'secret'; 64 | flush privileges; 65 | quit` 66 | 67 | # Composer 68 | Install Composer: https://getcomposer.org/download/ 69 | 70 | Move to global directory: `sudo mv composer.phar /usr/local/bin/composer` 71 | 72 | Paste the following composer.json file to `~/.composer/composer.json`. You may change this to handle your usecases. 73 | ``` 74 | { 75 | "minimum-stability": "dev", 76 | "prefer-stable": true, 77 | "repositories": [ 78 | { 79 | "type": "composer", 80 | "url": "https://satis.enflow.nl/" 81 | } 82 | ], 83 | "require": { 84 | "laravel/installer": "^4.2", 85 | "enflow/crane": "dev-master" 86 | } 87 | } 88 | ``` 89 | 90 | Run `composer global update` to install those global dependencies. 91 | 92 | # chromium (optional) 93 | We use chromium with the puppeteer integration to create PDFs etc from webpages and running Laravel Dusk tests. 94 | 95 | - `wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb` 96 | - `sudo apt install -y ./google-chrome-stable_current_amd64.deb` 97 | - verify using `google-chrome --version` 98 | 99 | # SSL certificates 100 | - Install https://brew.sh/ (`/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"`) 101 | - Install https://github.com/FiloSottile/mkcert (`/home/linuxbrew/.linuxbrew/bin/brew install mkcert`) 102 | - Install mkcert `/home/linuxbrew/.linuxbrew/bin/mkcert -install` 103 | - Create certificate. We ran the following, but depends on your subdomains/nginx configuration etc. 104 | `/home/linuxbrew/.linuxbrew/bin/mkcert -ecdsa '*.enflow.test' '*.client.test' '*.crewplanner.client.test' '*.concept.test' '*.foundation.test' '*.private.test'` 105 | - Move generated certificate and key to `/etc/dev-ssl/cert.pem` & `/etc/dev-ssl/key.pem` 106 | - To install these for nginx, run `sudo ln -s /etc/dev-ssl /etc/nginx/ssl` 107 | - Install the root certificates on your local machine. To find these, go to `cd /home/USERNAME/.local/share/mkcert`. Install the `rootCA.pem` via Chrome's certificate installer. 108 | 109 | # SSH Agent 110 | For specific sync or SSH actions, an SSH agent is required. It's recommended to integrate this with 1Password and have your SSH keys defined there. 111 | The following tutorial helps with setting up an auto-starting agent: https://gist.github.com/WillianTomaz/a972f544cc201d3fbc8cd1f6aeccef51 112 | Notes: 113 | - Place `npiperelay.exe` in `C:\Users\XXXXX\npiperelay`. Don't forget to add this to the Windows path 114 | - Restarting the terminal via `wsl --shutdown` or restarting the PC (closing Terminal won't do the trick) 115 | - Add the `source $HOME/.agent-bridge.sh` to the `.zshrc` 116 | 117 | # Starting up 118 | We've defined a `restart` function in our `~/.bash_aliases` file to help starting up. When your machine is started up, you need to run `restart` as the first commando to start all services up. This function should look something like: 119 | 120 | ``` 121 | sudo mkdir -p /var/run/php 122 | sudo service nginx restart 123 | sudo service php8.4-fpm restart 124 | sudo mkdir /var/run/mysqld && sudo chown mysql:mysql /var/run/mysqld 125 | sudo service mysql start 126 | sudo service redis-server start 127 | sudo service memcached start 128 | ``` 129 | 130 | For Enflow users: we've included our `~/.bash_aliases` file in this repository for copying. 131 | 132 | # Terminal 133 | We use Windows Terminal for a nice Terminal interface around WSL2. You can find that here: 134 | https://www.microsoft.com/en-us/p/windows-terminal/9n0dx20hk701?activetab=pivot:overviewtab 135 | 136 | After launching, you need to configure WSL as a valid terminal. This is identified by the following guid: `{2c4de342-38b7-51cf-b940-2309a097f518}` 137 | 138 | The easiest to do this is copy our Terminal file from this repository to the Terminal settings. You can find this under the "arrow down" icon in the top bar -> Settings. 139 | 140 | # Wildcard DNS 141 | We use Acrylic DNS on our Windows machine to automatically setup host files for our local development. For instance, 'app.enflow.test' would forward to '127.0.0.1' 142 | 143 | Editing your host file for every foundation is pretty annoying. The recommended approach is to use a wildcard DNS server: 144 | 145 | - Download & install [acrylic dns server](http://mayakron.altervista.org/wikibase/show.php?id=AcrylicHome). 146 | - Run the 'Acrylic UI' program. 147 | - Go to File -> Open Acrylic Configuration 148 | - Set the `AddressCacheDisabled` key to `Yes` to prevent DNS propagation cache issues. 149 | - Set `PrimaryServerAddress` to `1.1.1.1` 150 | - Set `LocalIPv4BindingAddress` to `127.0.0.1` 151 | - Save the changes (Ctrl+S) 152 | - Go to File -> Open Acrylic Hosts 153 | - Paste the following at the end of the file (these subdomains are specific to Enflow's use-case, modify where needed): 154 | ``` 155 | 127.0.0.1 *.foundation.test 156 | 127.0.0.1 *.enflow.test 157 | 127.0.0.1 *.client.test 158 | 127.0.0.1 *.concept.test 159 | 127.0.0.1 *.private.test 160 | ``` 161 | - Edit your network device (LAN & WiFi if applicable) to use the `127.0.0.1` as primary DNS server and `1.1.1.1` as secondary DNS server as fallback for IPv4. For IPv6 use `::1` as primary and `2606:4700:4700::1111` as secondary. 162 | More info about this can be found here: https://mayakron.altervista.org/support/acrylic/Windows10Configuration.htm 163 | 164 | # Editing code 165 | We recommend that the `~/code` folder is used on your WSL machine. Then you can access those files via `\\wsl$\Ubuntu\home\USERNAME\code`, where USERNAME would be your username configured (most likely your firstname in lowercase) 166 | 167 | # Reference 168 | - https://github.com/valeryan/valet-wsl/wiki/Installation-Guide 169 | -------------------------------------------------------------------------------- /nginx/fastcgi.conf: -------------------------------------------------------------------------------- 1 | 2 | fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 3 | fastcgi_param QUERY_STRING $query_string; 4 | fastcgi_param REQUEST_METHOD $request_method; 5 | fastcgi_param CONTENT_TYPE $content_type; 6 | fastcgi_param CONTENT_LENGTH $content_length; 7 | 8 | fastcgi_param SCRIPT_NAME $fastcgi_script_name; 9 | fastcgi_param REQUEST_URI $request_uri; 10 | fastcgi_param DOCUMENT_URI $document_uri; 11 | fastcgi_param DOCUMENT_ROOT $document_root; 12 | fastcgi_param SERVER_PROTOCOL $server_protocol; 13 | fastcgi_param REQUEST_SCHEME $scheme; 14 | fastcgi_param HTTPS $https if_not_empty; 15 | 16 | fastcgi_param GATEWAY_INTERFACE CGI/1.1; 17 | fastcgi_param SERVER_SOFTWARE nginx/$nginx_version; 18 | 19 | fastcgi_param REMOTE_ADDR $remote_addr; 20 | fastcgi_param REMOTE_PORT $remote_port; 21 | fastcgi_param SERVER_ADDR $server_addr; 22 | fastcgi_param SERVER_PORT $server_port; 23 | fastcgi_param SERVER_NAME $server_name; 24 | 25 | # PHP only, required if PHP was built with --enable-force-cgi-redirect 26 | fastcgi_param REDIRECT_STATUS 200; 27 | -------------------------------------------------------------------------------- /nginx/fastcgi_params: -------------------------------------------------------------------------------- 1 | 2 | fastcgi_param QUERY_STRING $query_string; 3 | fastcgi_param REQUEST_METHOD $request_method; 4 | fastcgi_param CONTENT_TYPE $content_type; 5 | fastcgi_param CONTENT_LENGTH $content_length; 6 | 7 | fastcgi_param SCRIPT_NAME $fastcgi_script_name; 8 | fastcgi_param REQUEST_URI $request_uri; 9 | fastcgi_param DOCUMENT_URI $document_uri; 10 | fastcgi_param DOCUMENT_ROOT $document_root; 11 | fastcgi_param SERVER_PROTOCOL $server_protocol; 12 | fastcgi_param REQUEST_SCHEME $scheme; 13 | fastcgi_param HTTPS $https if_not_empty; 14 | 15 | fastcgi_param GATEWAY_INTERFACE CGI/1.1; 16 | fastcgi_param SERVER_SOFTWARE nginx/$nginx_version; 17 | 18 | fastcgi_param REMOTE_ADDR $remote_addr; 19 | fastcgi_param REMOTE_PORT $remote_port; 20 | fastcgi_param SERVER_ADDR $server_addr; 21 | fastcgi_param SERVER_PORT $server_port; 22 | fastcgi_param SERVER_NAME $server_name; 23 | 24 | # PHP only, required if PHP was built with --enable-force-cgi-redirect 25 | fastcgi_param REDIRECT_STATUS 200; 26 | -------------------------------------------------------------------------------- /nginx/koi-utf: -------------------------------------------------------------------------------- 1 | 2 | # This map is not a full koi8-r <> utf8 map: it does not contain 3 | # box-drawing and some other characters. Besides this map contains 4 | # several koi8-u and Byelorussian letters which are not in koi8-r. 5 | # If you need a full and standard map, use contrib/unicode2nginx/koi-utf 6 | # map instead. 7 | 8 | charset_map koi8-r utf-8 { 9 | 10 | 80 E282AC ; # euro 11 | 12 | 95 E280A2 ; # bullet 13 | 14 | 9A C2A0 ; #   15 | 16 | 9E C2B7 ; # · 17 | 18 | A3 D191 ; # small yo 19 | A4 D194 ; # small Ukrainian ye 20 | 21 | A6 D196 ; # small Ukrainian i 22 | A7 D197 ; # small Ukrainian yi 23 | 24 | AD D291 ; # small Ukrainian soft g 25 | AE D19E ; # small Byelorussian short u 26 | 27 | B0 C2B0 ; # ° 28 | 29 | B3 D081 ; # capital YO 30 | B4 D084 ; # capital Ukrainian YE 31 | 32 | B6 D086 ; # capital Ukrainian I 33 | B7 D087 ; # capital Ukrainian YI 34 | 35 | B9 E28496 ; # numero sign 36 | 37 | BD D290 ; # capital Ukrainian soft G 38 | BE D18E ; # capital Byelorussian short U 39 | 40 | BF C2A9 ; # (C) 41 | 42 | C0 D18E ; # small yu 43 | C1 D0B0 ; # small a 44 | C2 D0B1 ; # small b 45 | C3 D186 ; # small ts 46 | C4 D0B4 ; # small d 47 | C5 D0B5 ; # small ye 48 | C6 D184 ; # small f 49 | C7 D0B3 ; # small g 50 | C8 D185 ; # small kh 51 | C9 D0B8 ; # small i 52 | CA D0B9 ; # small j 53 | CB D0BA ; # small k 54 | CC D0BB ; # small l 55 | CD D0BC ; # small m 56 | CE D0BD ; # small n 57 | CF D0BE ; # small o 58 | 59 | D0 D0BF ; # small p 60 | D1 D18F ; # small ya 61 | D2 D180 ; # small r 62 | D3 D181 ; # small s 63 | D4 D182 ; # small t 64 | D5 D183 ; # small u 65 | D6 D0B6 ; # small zh 66 | D7 D0B2 ; # small v 67 | D8 D18C ; # small soft sign 68 | D9 D18B ; # small y 69 | DA D0B7 ; # small z 70 | DB D188 ; # small sh 71 | DC D18D ; # small e 72 | DD D189 ; # small shch 73 | DE D187 ; # small ch 74 | DF D18A ; # small hard sign 75 | 76 | E0 D0AE ; # capital YU 77 | E1 D090 ; # capital A 78 | E2 D091 ; # capital B 79 | E3 D0A6 ; # capital TS 80 | E4 D094 ; # capital D 81 | E5 D095 ; # capital YE 82 | E6 D0A4 ; # capital F 83 | E7 D093 ; # capital G 84 | E8 D0A5 ; # capital KH 85 | E9 D098 ; # capital I 86 | EA D099 ; # capital J 87 | EB D09A ; # capital K 88 | EC D09B ; # capital L 89 | ED D09C ; # capital M 90 | EE D09D ; # capital N 91 | EF D09E ; # capital O 92 | 93 | F0 D09F ; # capital P 94 | F1 D0AF ; # capital YA 95 | F2 D0A0 ; # capital R 96 | F3 D0A1 ; # capital S 97 | F4 D0A2 ; # capital T 98 | F5 D0A3 ; # capital U 99 | F6 D096 ; # capital ZH 100 | F7 D092 ; # capital V 101 | F8 D0AC ; # capital soft sign 102 | F9 D0AB ; # capital Y 103 | FA D097 ; # capital Z 104 | FB D0A8 ; # capital SH 105 | FC D0AD ; # capital E 106 | FD D0A9 ; # capital SHCH 107 | FE D0A7 ; # capital CH 108 | FF D0AA ; # capital hard sign 109 | } 110 | -------------------------------------------------------------------------------- /nginx/koi-win: -------------------------------------------------------------------------------- 1 | 2 | charset_map koi8-r windows-1251 { 3 | 4 | 80 88 ; # euro 5 | 6 | 95 95 ; # bullet 7 | 8 | 9A A0 ; #   9 | 10 | 9E B7 ; # · 11 | 12 | A3 B8 ; # small yo 13 | A4 BA ; # small Ukrainian ye 14 | 15 | A6 B3 ; # small Ukrainian i 16 | A7 BF ; # small Ukrainian yi 17 | 18 | AD B4 ; # small Ukrainian soft g 19 | AE A2 ; # small Byelorussian short u 20 | 21 | B0 B0 ; # ° 22 | 23 | B3 A8 ; # capital YO 24 | B4 AA ; # capital Ukrainian YE 25 | 26 | B6 B2 ; # capital Ukrainian I 27 | B7 AF ; # capital Ukrainian YI 28 | 29 | B9 B9 ; # numero sign 30 | 31 | BD A5 ; # capital Ukrainian soft G 32 | BE A1 ; # capital Byelorussian short U 33 | 34 | BF A9 ; # (C) 35 | 36 | C0 FE ; # small yu 37 | C1 E0 ; # small a 38 | C2 E1 ; # small b 39 | C3 F6 ; # small ts 40 | C4 E4 ; # small d 41 | C5 E5 ; # small ye 42 | C6 F4 ; # small f 43 | C7 E3 ; # small g 44 | C8 F5 ; # small kh 45 | C9 E8 ; # small i 46 | CA E9 ; # small j 47 | CB EA ; # small k 48 | CC EB ; # small l 49 | CD EC ; # small m 50 | CE ED ; # small n 51 | CF EE ; # small o 52 | 53 | D0 EF ; # small p 54 | D1 FF ; # small ya 55 | D2 F0 ; # small r 56 | D3 F1 ; # small s 57 | D4 F2 ; # small t 58 | D5 F3 ; # small u 59 | D6 E6 ; # small zh 60 | D7 E2 ; # small v 61 | D8 FC ; # small soft sign 62 | D9 FB ; # small y 63 | DA E7 ; # small z 64 | DB F8 ; # small sh 65 | DC FD ; # small e 66 | DD F9 ; # small shch 67 | DE F7 ; # small ch 68 | DF FA ; # small hard sign 69 | 70 | E0 DE ; # capital YU 71 | E1 C0 ; # capital A 72 | E2 C1 ; # capital B 73 | E3 D6 ; # capital TS 74 | E4 C4 ; # capital D 75 | E5 C5 ; # capital YE 76 | E6 D4 ; # capital F 77 | E7 C3 ; # capital G 78 | E8 D5 ; # capital KH 79 | E9 C8 ; # capital I 80 | EA C9 ; # capital J 81 | EB CA ; # capital K 82 | EC CB ; # capital L 83 | ED CC ; # capital M 84 | EE CD ; # capital N 85 | EF CE ; # capital O 86 | 87 | F0 CF ; # capital P 88 | F1 DF ; # capital YA 89 | F2 D0 ; # capital R 90 | F3 D1 ; # capital S 91 | F4 D2 ; # capital T 92 | F5 D3 ; # capital U 93 | F6 C6 ; # capital ZH 94 | F7 C2 ; # capital V 95 | F8 DC ; # capital soft sign 96 | F9 DB ; # capital Y 97 | FA C7 ; # capital Z 98 | FB D8 ; # capital SH 99 | FC DD ; # capital E 100 | FD D9 ; # capital SHCH 101 | FE D7 ; # capital CH 102 | FF DA ; # capital hard sign 103 | } 104 | -------------------------------------------------------------------------------- /nginx/mime.types: -------------------------------------------------------------------------------- 1 | 2 | types { 3 | text/html html htm shtml; 4 | text/css css; 5 | text/xml xml; 6 | image/gif gif; 7 | image/jpeg jpeg jpg; 8 | application/javascript js; 9 | application/atom+xml atom; 10 | application/rss+xml rss; 11 | 12 | text/mathml mml; 13 | text/plain txt; 14 | text/vnd.sun.j2me.app-descriptor jad; 15 | text/vnd.wap.wml wml; 16 | text/x-component htc; 17 | 18 | image/png png; 19 | image/tiff tif tiff; 20 | image/vnd.wap.wbmp wbmp; 21 | image/x-icon ico; 22 | image/x-jng jng; 23 | image/x-ms-bmp bmp; 24 | image/svg+xml svg svgz; 25 | image/webp webp; 26 | 27 | application/font-woff woff; 28 | application/java-archive jar war ear; 29 | application/json json; 30 | application/mac-binhex40 hqx; 31 | application/msword doc; 32 | application/pdf pdf; 33 | application/postscript ps eps ai; 34 | application/rtf rtf; 35 | application/vnd.apple.mpegurl m3u8; 36 | application/vnd.ms-excel xls; 37 | application/vnd.ms-fontobject eot; 38 | application/vnd.ms-powerpoint ppt; 39 | application/vnd.wap.wmlc wmlc; 40 | application/vnd.google-earth.kml+xml kml; 41 | application/vnd.google-earth.kmz kmz; 42 | application/x-7z-compressed 7z; 43 | application/x-cocoa cco; 44 | application/x-java-archive-diff jardiff; 45 | application/x-java-jnlp-file jnlp; 46 | application/x-makeself run; 47 | application/x-perl pl pm; 48 | application/x-pilot prc pdb; 49 | application/x-rar-compressed rar; 50 | application/x-redhat-package-manager rpm; 51 | application/x-sea sea; 52 | application/x-shockwave-flash swf; 53 | application/x-stuffit sit; 54 | application/x-tcl tcl tk; 55 | application/x-x509-ca-cert der pem crt; 56 | application/x-xpinstall xpi; 57 | application/xhtml+xml xhtml; 58 | application/xspf+xml xspf; 59 | application/zip zip; 60 | 61 | application/octet-stream bin exe dll; 62 | application/octet-stream deb; 63 | application/octet-stream dmg; 64 | application/octet-stream iso img; 65 | application/octet-stream msi msp msm; 66 | 67 | application/vnd.openxmlformats-officedocument.wordprocessingml.document docx; 68 | application/vnd.openxmlformats-officedocument.spreadsheetml.sheet xlsx; 69 | application/vnd.openxmlformats-officedocument.presentationml.presentation pptx; 70 | 71 | audio/midi mid midi kar; 72 | audio/mpeg mp3; 73 | audio/ogg ogg; 74 | audio/x-m4a m4a; 75 | audio/x-realaudio ra; 76 | 77 | video/3gpp 3gpp 3gp; 78 | video/mp2t ts; 79 | video/mp4 mp4; 80 | video/mpeg mpeg mpg; 81 | video/quicktime mov; 82 | video/webm webm; 83 | video/x-flv flv; 84 | video/x-m4v m4v; 85 | video/x-mng mng; 86 | video/x-ms-asf asx asf; 87 | video/x-ms-wmv wmv; 88 | video/x-msvideo avi; 89 | } 90 | -------------------------------------------------------------------------------- /nginx/nginx.conf: -------------------------------------------------------------------------------- 1 | user www-data; 2 | worker_processes 4; 3 | pid /run/nginx.pid; 4 | master_process off; 5 | 6 | events { 7 | worker_connections 768; 8 | } 9 | 10 | http { 11 | 12 | ## 13 | # Basic Settings 14 | ## 15 | 16 | sendfile on; 17 | tcp_nopush on; 18 | tcp_nodelay on; 19 | keepalive_timeout 65; 20 | types_hash_max_size 2048; 21 | # server_tokens off; 22 | 23 | # server_names_hash_bucket_size 64; 24 | # server_name_in_redirect off; 25 | 26 | include /etc/nginx/mime.types; 27 | default_type application/octet-stream; 28 | 29 | ## 30 | # Logging Settings 31 | ## 32 | 33 | access_log /var/log/nginx/access.log; 34 | error_log /var/log/nginx/error.log; 35 | 36 | ## 37 | # Gzip Settings 38 | ## 39 | 40 | gzip on; 41 | gzip_disable "msie6"; 42 | 43 | include /etc/nginx/conf.d/*.conf; 44 | include /etc/nginx/sites-enabled/*.conf; 45 | } 46 | -------------------------------------------------------------------------------- /nginx/proxy_params: -------------------------------------------------------------------------------- 1 | proxy_set_header Host $http_host; 2 | proxy_set_header X-Real-IP $remote_addr; 3 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 4 | proxy_set_header X-Forwarded-Proto $scheme; 5 | -------------------------------------------------------------------------------- /nginx/scgi_params: -------------------------------------------------------------------------------- 1 | 2 | scgi_param REQUEST_METHOD $request_method; 3 | scgi_param REQUEST_URI $request_uri; 4 | scgi_param QUERY_STRING $query_string; 5 | scgi_param CONTENT_TYPE $content_type; 6 | 7 | scgi_param DOCUMENT_URI $document_uri; 8 | scgi_param DOCUMENT_ROOT $document_root; 9 | scgi_param SCGI 1; 10 | scgi_param SERVER_PROTOCOL $server_protocol; 11 | scgi_param REQUEST_SCHEME $scheme; 12 | scgi_param HTTPS $https if_not_empty; 13 | 14 | scgi_param REMOTE_ADDR $remote_addr; 15 | scgi_param REMOTE_PORT $remote_port; 16 | scgi_param SERVER_PORT $server_port; 17 | scgi_param SERVER_NAME $server_name; 18 | -------------------------------------------------------------------------------- /nginx/sites-enabled/client.conf: -------------------------------------------------------------------------------- 1 | server { 2 | listen 80; 3 | server_name "~(?'project'([^.]+))\.client.test$"; 4 | return 301 https://$project.client.test$request_uri; 5 | } 6 | server { 7 | listen 443 ssl http2; 8 | 9 | server_name "~(?'project'([^.]+))\.client.test$"; 10 | root "/etc/nginx/code/enflow/clients/$project/public"; 11 | 12 | index index.html index.htm index.php; 13 | 14 | ssl_certificate /etc/nginx/ssl/cert.pem; 15 | ssl_certificate_key /etc/nginx/ssl/key.pem; 16 | 17 | ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 18 | ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS'; 19 | ssl_prefer_server_ciphers on; 20 | 21 | add_header X-Frame-Options "SAMEORIGIN"; 22 | add_header X-XSS-Protection "1; mode=block"; 23 | add_header X-Content-Type-Options "nosniff"; 24 | 25 | charset utf-8; 26 | 27 | location / { 28 | try_files $uri $uri/ /index.php?$query_string; 29 | } 30 | 31 | location = /favicon.ico { access_log off; log_not_found off; } 32 | location = /robots.txt { access_log off; log_not_found off; } 33 | 34 | access_log /var/log/nginx/client.log; 35 | error_log /var/log/nginx/client-error.log error; 36 | 37 | sendfile off; 38 | 39 | client_max_body_size 100m; 40 | 41 | location ~ \.php$ { 42 | fastcgi_split_path_info ^(.+\.php)(/.+)$; 43 | fastcgi_pass 127.0.0.1:9250; 44 | fastcgi_index index.php; 45 | include fastcgi_params; 46 | fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 47 | 48 | fastcgi_intercept_errors off; 49 | fastcgi_buffer_size 16k; 50 | fastcgi_buffers 4 16k; 51 | fastcgi_connect_timeout 300; 52 | fastcgi_send_timeout 300; 53 | fastcgi_read_timeout 300; 54 | } 55 | 56 | location ~ /\.ht { 57 | deny all; 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /nginx/sites-enabled/enflow.conf: -------------------------------------------------------------------------------- 1 | server { 2 | listen 80; 3 | server_name "~(?'project'([^.]+))\.enflow.test$"; 4 | return 301 https://$project.enflow.test$request_uri; 5 | } 6 | server { 7 | listen 443 ssl http2; 8 | 9 | server_name "~(?'project'([^.]+))\.enflow.test$"; 10 | root "/etc/nginx/code/enflow/$project/public"; 11 | 12 | index index.html index.htm index.php; 13 | 14 | ssl_certificate /etc/nginx/ssl/cert.pem; 15 | ssl_certificate_key /etc/nginx/ssl/key.pem; 16 | 17 | ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 18 | ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS'; 19 | ssl_prefer_server_ciphers on; 20 | 21 | add_header X-Frame-Options "SAMEORIGIN"; 22 | add_header X-XSS-Protection "1; mode=block"; 23 | add_header X-Content-Type-Options "nosniff"; 24 | 25 | charset utf-8; 26 | 27 | location / { 28 | try_files $uri $uri/ /index.php?$query_string; 29 | } 30 | 31 | location = /favicon.ico { access_log off; log_not_found off; } 32 | location = /robots.txt { access_log off; log_not_found off; } 33 | 34 | access_log /var/log/nginx/enflow.log; 35 | error_log /var/log/nginx/enflow-error.log error; 36 | 37 | sendfile off; 38 | 39 | client_max_body_size 100m; 40 | 41 | location ~ \.php$ { 42 | fastcgi_split_path_info ^(.+\.php)(/.+)$; 43 | fastcgi_pass 127.0.0.1:9250; 44 | fastcgi_index index.php; 45 | include fastcgi_params; 46 | fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 47 | 48 | fastcgi_intercept_errors off; 49 | fastcgi_buffer_size 16k; 50 | fastcgi_buffers 4 16k; 51 | fastcgi_connect_timeout 300; 52 | fastcgi_send_timeout 300; 53 | fastcgi_read_timeout 300; 54 | } 55 | 56 | location ~ /\.ht { 57 | deny all; 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /nginx/sites-enabled/foundation.conf: -------------------------------------------------------------------------------- 1 | server { 2 | listen 80; 3 | server_name "~(?'project'([^.]+))\.foundation.test$"; 4 | return 301 https://$project.foundation.test$request_uri; 5 | } 6 | server { 7 | listen 443 ssl http2; 8 | 9 | server_name "~(?'project'([^.]+))\.foundation.test$"; 10 | root "/etc/nginx/code/enflow/foundations/$project/public"; 11 | 12 | index index.html index.htm index.php; 13 | 14 | ssl_certificate /etc/nginx/ssl/cert.pem; 15 | ssl_certificate_key /etc/nginx/ssl/key.pem; 16 | 17 | ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 18 | ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS'; 19 | ssl_prefer_server_ciphers on; 20 | 21 | add_header X-Frame-Options "SAMEORIGIN"; 22 | add_header X-XSS-Protection "1; mode=block"; 23 | add_header X-Content-Type-Options "nosniff"; 24 | 25 | charset utf-8; 26 | 27 | location / { 28 | try_files $uri $uri/ /index.php?$query_string; 29 | } 30 | 31 | location = /favicon.ico { access_log off; log_not_found off; } 32 | location = /robots.txt { access_log off; log_not_found off; } 33 | 34 | access_log /var/log/nginx/foundation.log; 35 | error_log /var/log/nginx/foundation-error.log error; 36 | 37 | sendfile off; 38 | 39 | client_max_body_size 100m; 40 | 41 | location ~ \.php$ { 42 | fastcgi_split_path_info ^(.+\.php)(/.+)$; 43 | fastcgi_pass 127.0.0.1:9250; 44 | fastcgi_index index.php; 45 | include fastcgi_params; 46 | fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 47 | 48 | fastcgi_intercept_errors off; 49 | fastcgi_buffer_size 16k; 50 | fastcgi_buffers 4 16k; 51 | fastcgi_connect_timeout 300; 52 | fastcgi_send_timeout 300; 53 | fastcgi_read_timeout 300; 54 | } 55 | 56 | location ~ /\.ht { 57 | deny all; 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /nginx/sites-enabled/private.conf: -------------------------------------------------------------------------------- 1 | server { 2 | listen 80; 3 | server_name "~(?'project'([^.]+))\.private.test$"; 4 | return 301 https://$project.private.test$request_uri; 5 | } 6 | server { 7 | listen 443 ssl http2; 8 | 9 | server_name "~(?'project'([^.]+))\.private.test$"; 10 | root "/etc/nginx/code/$project/public"; 11 | 12 | index index.html index.htm index.php; 13 | 14 | ssl_certificate /etc/nginx/ssl/cert.pem; 15 | ssl_certificate_key /etc/nginx/ssl/key.pem; 16 | 17 | ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 18 | ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS'; 19 | ssl_prefer_server_ciphers on; 20 | 21 | add_header X-Frame-Options "SAMEORIGIN"; 22 | add_header X-XSS-Protection "1; mode=block"; 23 | add_header X-Content-Type-Options "nosniff"; 24 | 25 | charset utf-8; 26 | 27 | location / { 28 | try_files $uri $uri/ /index.php?$query_string; 29 | } 30 | 31 | location = /favicon.ico { access_log off; log_not_found off; } 32 | location = /robots.txt { access_log off; log_not_found off; } 33 | 34 | access_log /var/log/nginx/private.log; 35 | error_log /var/log/nginx/private-error.log error; 36 | 37 | sendfile off; 38 | 39 | client_max_body_size 100m; 40 | 41 | location ~ \.php$ { 42 | fastcgi_split_path_info ^(.+\.php)(/.+)$; 43 | fastcgi_pass 127.0.0.1:9250; 44 | fastcgi_index index.php; 45 | include fastcgi_params; 46 | fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 47 | 48 | fastcgi_intercept_errors off; 49 | fastcgi_buffer_size 16k; 50 | fastcgi_buffers 4 16k; 51 | fastcgi_connect_timeout 300; 52 | fastcgi_send_timeout 300; 53 | fastcgi_read_timeout 300; 54 | } 55 | 56 | location ~ /\.ht { 57 | deny all; 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /nginx/snippets/fastcgi-php.conf: -------------------------------------------------------------------------------- 1 | # regex to split $uri to $fastcgi_script_name and $fastcgi_path 2 | fastcgi_split_path_info ^(.+\.php)(/.+)$; 3 | 4 | # Check that the PHP script exists before passing it 5 | try_files $fastcgi_script_name =404; 6 | 7 | # Bypass the fact that try_files resets $fastcgi_path_info 8 | # see: http://trac.nginx.org/nginx/ticket/321 9 | set $path_info $fastcgi_path_info; 10 | fastcgi_param PATH_INFO $path_info; 11 | 12 | fastcgi_index index.php; 13 | include fastcgi.conf; 14 | -------------------------------------------------------------------------------- /nginx/snippets/snakeoil.conf: -------------------------------------------------------------------------------- 1 | # Self signed certificates generated by the ssl-cert package 2 | # Don't use them in a production server! 3 | 4 | ssl_certificate /etc/ssl/certs/ssl-cert-snakeoil.pem; 5 | ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key; 6 | -------------------------------------------------------------------------------- /nginx/uwsgi_params: -------------------------------------------------------------------------------- 1 | 2 | uwsgi_param QUERY_STRING $query_string; 3 | uwsgi_param REQUEST_METHOD $request_method; 4 | uwsgi_param CONTENT_TYPE $content_type; 5 | uwsgi_param CONTENT_LENGTH $content_length; 6 | 7 | uwsgi_param REQUEST_URI $request_uri; 8 | uwsgi_param PATH_INFO $document_uri; 9 | uwsgi_param DOCUMENT_ROOT $document_root; 10 | uwsgi_param SERVER_PROTOCOL $server_protocol; 11 | uwsgi_param REQUEST_SCHEME $scheme; 12 | uwsgi_param HTTPS $https if_not_empty; 13 | 14 | uwsgi_param REMOTE_ADDR $remote_addr; 15 | uwsgi_param REMOTE_PORT $remote_port; 16 | uwsgi_param SERVER_PORT $server_port; 17 | uwsgi_param SERVER_NAME $server_name; 18 | -------------------------------------------------------------------------------- /nginx/win-utf: -------------------------------------------------------------------------------- 1 | # This map is not a full windows-1251 <> utf8 map: it does not 2 | # contain Serbian and Macedonian letters. If you need a full map, 3 | # use contrib/unicode2nginx/win-utf map instead. 4 | 5 | charset_map windows-1251 utf-8 { 6 | 7 | 82 E2809A; # single low-9 quotation mark 8 | 9 | 84 E2809E; # double low-9 quotation mark 10 | 85 E280A6; # ellipsis 11 | 86 E280A0; # dagger 12 | 87 E280A1; # double dagger 13 | 88 E282AC; # euro 14 | 89 E280B0; # per mille 15 | 16 | 91 E28098; # left single quotation mark 17 | 92 E28099; # right single quotation mark 18 | 93 E2809C; # left double quotation mark 19 | 94 E2809D; # right double quotation mark 20 | 95 E280A2; # bullet 21 | 96 E28093; # en dash 22 | 97 E28094; # em dash 23 | 24 | 99 E284A2; # trade mark sign 25 | 26 | A0 C2A0; #   27 | A1 D18E; # capital Byelorussian short U 28 | A2 D19E; # small Byelorussian short u 29 | 30 | A4 C2A4; # currency sign 31 | A5 D290; # capital Ukrainian soft G 32 | A6 C2A6; # borken bar 33 | A7 C2A7; # section sign 34 | A8 D081; # capital YO 35 | A9 C2A9; # (C) 36 | AA D084; # capital Ukrainian YE 37 | AB C2AB; # left-pointing double angle quotation mark 38 | AC C2AC; # not sign 39 | AD C2AD; # soft hypen 40 | AE C2AE; # (R) 41 | AF D087; # capital Ukrainian YI 42 | 43 | B0 C2B0; # ° 44 | B1 C2B1; # plus-minus sign 45 | B2 D086; # capital Ukrainian I 46 | B3 D196; # small Ukrainian i 47 | B4 D291; # small Ukrainian soft g 48 | B5 C2B5; # micro sign 49 | B6 C2B6; # pilcrow sign 50 | B7 C2B7; # · 51 | B8 D191; # small yo 52 | B9 E28496; # numero sign 53 | BA D194; # small Ukrainian ye 54 | BB C2BB; # right-pointing double angle quotation mark 55 | 56 | BF D197; # small Ukrainian yi 57 | 58 | C0 D090; # capital A 59 | C1 D091; # capital B 60 | C2 D092; # capital V 61 | C3 D093; # capital G 62 | C4 D094; # capital D 63 | C5 D095; # capital YE 64 | C6 D096; # capital ZH 65 | C7 D097; # capital Z 66 | C8 D098; # capital I 67 | C9 D099; # capital J 68 | CA D09A; # capital K 69 | CB D09B; # capital L 70 | CC D09C; # capital M 71 | CD D09D; # capital N 72 | CE D09E; # capital O 73 | CF D09F; # capital P 74 | 75 | D0 D0A0; # capital R 76 | D1 D0A1; # capital S 77 | D2 D0A2; # capital T 78 | D3 D0A3; # capital U 79 | D4 D0A4; # capital F 80 | D5 D0A5; # capital KH 81 | D6 D0A6; # capital TS 82 | D7 D0A7; # capital CH 83 | D8 D0A8; # capital SH 84 | D9 D0A9; # capital SHCH 85 | DA D0AA; # capital hard sign 86 | DB D0AB; # capital Y 87 | DC D0AC; # capital soft sign 88 | DD D0AD; # capital E 89 | DE D0AE; # capital YU 90 | DF D0AF; # capital YA 91 | 92 | E0 D0B0; # small a 93 | E1 D0B1; # small b 94 | E2 D0B2; # small v 95 | E3 D0B3; # small g 96 | E4 D0B4; # small d 97 | E5 D0B5; # small ye 98 | E6 D0B6; # small zh 99 | E7 D0B7; # small z 100 | E8 D0B8; # small i 101 | E9 D0B9; # small j 102 | EA D0BA; # small k 103 | EB D0BB; # small l 104 | EC D0BC; # small m 105 | ED D0BD; # small n 106 | EE D0BE; # small o 107 | EF D0BF; # small p 108 | 109 | F0 D180; # small r 110 | F1 D181; # small s 111 | F2 D182; # small t 112 | F3 D183; # small u 113 | F4 D184; # small f 114 | F5 D185; # small kh 115 | F6 D186; # small ts 116 | F7 D187; # small ch 117 | F8 D188; # small sh 118 | F9 D189; # small shch 119 | FA D18A; # small hard sign 120 | FB D18B; # small y 121 | FC D18C; # small soft sign 122 | FD D18D; # small e 123 | FE D18E; # small yu 124 | FF D18F; # small ya 125 | } 126 | -------------------------------------------------------------------------------- /terminal-settings.json: -------------------------------------------------------------------------------- 1 | // This file was initially generated by Windows Terminal 1.0.1401.0 2 | // It should still be usable in newer versions, but newer versions might have additional 3 | // settings, help text, or changes that you will not see unless you clear this file 4 | // and let us generate a new one for you. 5 | 6 | // To view the default settings, hold "alt" while clicking on the "Settings" button. 7 | // For documentation on these settings, see: https://aka.ms/terminal-documentation 8 | { 9 | "$schema": "https://aka.ms/terminal-profiles-schema", 10 | 11 | "defaultProfile": "{2c4de342-38b7-51cf-b940-2309a097f518}", 12 | 13 | // You can add more global application settings here. 14 | // To learn more about global settings, visit https://aka.ms/terminal-global-settings 15 | 16 | // If enabled, selections are automatically copied to your clipboard. 17 | "copyOnSelect": true, 18 | 19 | // If enabled, formatted data is also copied to your clipboard 20 | "copyFormatting": false, 21 | 22 | // A profile specifies a command to execute paired with information about how it should look and feel. 23 | // Each one of them will appear in the 'New Tab' dropdown, 24 | // and can be invoked from the commandline with `wt.exe -p xxx` 25 | // To learn more about profiles, visit https://aka.ms/terminal-profile-settings 26 | "profiles": 27 | { 28 | "defaults": 29 | { 30 | // Put settings here that you want to apply to all profiles. 31 | }, 32 | "list": 33 | [ 34 | { 35 | "guid": "{2c4de342-38b7-51cf-b940-2309a097f518}", 36 | "hidden": false, 37 | "name": "Ubuntu", 38 | "source": "Windows.Terminal.Wsl" 39 | }, 40 | { 41 | // Make changes here to the powershell.exe profile. 42 | "guid": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}", 43 | "name": "Windows PowerShell", 44 | "commandline": "powershell.exe", 45 | "hidden": false 46 | }, 47 | { 48 | // Make changes here to the cmd.exe profile. 49 | "guid": "{0caa0dad-35be-5f56-a8ff-afceeeaa6101}", 50 | "name": "Command Prompt", 51 | "commandline": "cmd.exe", 52 | "hidden": false 53 | }, 54 | { 55 | "guid": "{b453ae62-4e3d-5e58-b989-0a998ec441b8}", 56 | "hidden": false, 57 | "name": "Azure Cloud Shell", 58 | "source": "Windows.Terminal.Azure" 59 | }, 60 | { 61 | "guid": "{2c4de342-38b7-51cf-b940-2309a097f518}", 62 | "hidden": false, 63 | "name": "Ubuntu", 64 | "source": "Windows.Terminal.Wsl" 65 | } 66 | ] 67 | }, 68 | 69 | // Add custom color schemes to this array. 70 | // To learn more about color schemes, visit https://aka.ms/terminal-color-schemes 71 | "schemes": [], 72 | 73 | // Add custom keybindings to this array. 74 | // To unbind a key combination from your defaults.json, set the command to "unbound". 75 | // To learn more about keybindings, visit https://aka.ms/terminal-keybindings 76 | "keybindings": 77 | [ 78 | // Copy and paste are bound to Ctrl+Shift+C and Ctrl+Shift+V in your defaults.json. 79 | // These two lines additionally bind them to Ctrl+C and Ctrl+V. 80 | // To learn more about selection, visit https://aka.ms/terminal-selection 81 | { "command": {"action": "copy", "singleLine": false }, "keys": "ctrl+c" }, 82 | { "command": "paste", "keys": "ctrl+v" }, 83 | 84 | // Press Ctrl+Shift+F to open the search box 85 | { "command": "find", "keys": "ctrl+shift+f" }, 86 | 87 | // Press Alt+Shift+D to open a new pane. 88 | // - "split": "auto" makes this pane open in the direction that provides the most surface area. 89 | // - "splitMode": "duplicate" makes the new pane use the focused pane's profile. 90 | // To learn more about panes, visit https://aka.ms/terminal-panes 91 | { "command": { "action": "splitPane", "split": "auto", "splitMode": "duplicate" }, "keys": "alt+shift+d" }, 92 | 93 | { "command": "newTab", "keys": ["ctrl+t"] } 94 | ] 95 | } 96 | --------------------------------------------------------------------------------