wip
This commit is contained in:
parent
63bf55b978
commit
8b18e05fbc
|
@ -13,7 +13,10 @@
|
||||||
devShell = with pkgs; pkgs.mkShell {
|
devShell = with pkgs; pkgs.mkShell {
|
||||||
buildInputs = [
|
buildInputs = [
|
||||||
just
|
just
|
||||||
python310Packages.rst2pdf
|
python39Packages.rst2pdf
|
||||||
|
pdfpc
|
||||||
|
libcanberra
|
||||||
|
libcanberra-gtk3
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
3
justfile
3
justfile
|
@ -20,3 +20,6 @@ generate name: (clean name)
|
||||||
--font-path ../fonts \
|
--font-path ../fonts \
|
||||||
--output {{ name }}-dark.pdf \
|
--output {{ name }}-dark.pdf \
|
||||||
--stylesheets opdavies-dark,tango,monokai
|
--stylesheets opdavies-dark,tango,monokai
|
||||||
|
|
||||||
|
thumbnail name slideNumber:
|
||||||
|
pdftoppm {{ name }}/{{ name }}.pdf -png -f {{ slideNumber }} -l {{ slideNumber }} > {{ name }}/{{ name }}-{{ slideNumber }}.png
|
||||||
|
|
12
working-without-workspace/code/Dockerfile.twig
Normal file
12
working-without-workspace/code/Dockerfile.twig
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
FROM php:{{ php.version }} AS base
|
||||||
|
|
||||||
|
COPY --from=composer:2 /usr/bin/composer /usr/bin/composer
|
||||||
|
RUN which composer && composer -V
|
||||||
|
|
||||||
|
ARG DOCKER_UID=1000
|
||||||
|
ENV DOCKER_UID="${DOCKER_UID}"
|
||||||
|
|
||||||
|
WORKDIR {{ project_root }}
|
||||||
|
|
||||||
|
RUN adduser --disabled-password --uid "${DOCKER_UID}" app \
|
||||||
|
&& chown app:app -R {{ project_root }}
|
13
working-without-workspace/code/aliases.sh
Normal file
13
working-without-workspace/code/aliases.sh
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
alias cp="cp -v"
|
||||||
|
alias mv="mv -v"
|
||||||
|
alias rm="rm -v"
|
||||||
|
|
||||||
|
alias g="git"
|
||||||
|
alias gs="git status"
|
||||||
|
|
||||||
|
alias dk="docker"
|
||||||
|
alias dkp="docker ps"
|
||||||
|
alias dkc="docker compose"
|
||||||
|
alias dkcu="docker compose up"
|
||||||
|
|
||||||
|
alias docker-composer="docker-compose"
|
46
working-without-workspace/code/build.yaml
Normal file
46
working-without-workspace/code/build.yaml
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
name: docker-example-drupal
|
||||||
|
language: php
|
||||||
|
type: drupal-project
|
||||||
|
|
||||||
|
web:
|
||||||
|
type: nginx
|
||||||
|
|
||||||
|
database:
|
||||||
|
type: mariadb
|
||||||
|
version: 10
|
||||||
|
|
||||||
|
php:
|
||||||
|
version: 8.1-fpm-bullseye
|
||||||
|
phpcs:
|
||||||
|
standard: Drupal,DrupalPractice
|
||||||
|
phpstan:
|
||||||
|
level: max
|
||||||
|
|
||||||
|
drupal:
|
||||||
|
docroot: web
|
||||||
|
|
||||||
|
docker-compose:
|
||||||
|
services:
|
||||||
|
database: ~
|
||||||
|
php:
|
||||||
|
build:
|
||||||
|
target: build
|
||||||
|
|
||||||
|
dockerfile:
|
||||||
|
stages:
|
||||||
|
build:
|
||||||
|
extends: base
|
||||||
|
packages:
|
||||||
|
- git
|
||||||
|
- libpng-dev
|
||||||
|
- libzip-dev
|
||||||
|
- mariadb-client
|
||||||
|
- unzip
|
||||||
|
extensions:
|
||||||
|
install:
|
||||||
|
- gd
|
||||||
|
- pdo_mysql
|
||||||
|
- zip
|
||||||
|
commands:
|
||||||
|
- composer validate --strict
|
||||||
|
- composer install
|
26
working-without-workspace/code/configuration.nix
Normal file
26
working-without-workspace/code/configuration.nix
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
{ config, pkgs, ... }:
|
||||||
|
{
|
||||||
|
imports = [ ./hardware-configuration.nix ];
|
||||||
|
|
||||||
|
nix.settings.experimental-features = [ "nix-command" "flakes" ];
|
||||||
|
|
||||||
|
boot.loader.systemd-boot.enable = true;
|
||||||
|
boot.loader.efi.canTouchEfiVariables = true;
|
||||||
|
boot.loader.efi.efiSysMountPoint = "/boot/efi";
|
||||||
|
|
||||||
|
boot.kernelPackages = pkgs.linuxPackages_latest;
|
||||||
|
|
||||||
|
networking.hostName = "nixedo";
|
||||||
|
|
||||||
|
networking.networkmanager.enable = true;
|
||||||
|
|
||||||
|
time.timeZone = "Europe/London";
|
||||||
|
|
||||||
|
i18n.defaultLocale = "en_GB.UTF-8";
|
||||||
|
|
||||||
|
users.users.opdavies = {
|
||||||
|
isNormalUser = true;
|
||||||
|
description = "Oliver Davies";
|
||||||
|
extraGroups = [ "docker" "networkmanager" "wheel" ];
|
||||||
|
packages = with pkgs; [ firefox ];
|
||||||
|
};
|
15
working-without-workspace/code/docker-compose.yaml.twig
Normal file
15
working-without-workspace/code/docker-compose.yaml.twig
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
{% if "php" == language %}
|
||||||
|
php:
|
||||||
|
<<: *default-app
|
||||||
|
build:
|
||||||
|
context: .
|
||||||
|
target: build
|
||||||
|
args:
|
||||||
|
- "DOCKER_UID=${DOCKER_UID:-1000}"
|
||||||
|
volumes:
|
||||||
|
- .:{{ project_root }}
|
||||||
|
{% if "database" in dockerCompose.services|keys -%}
|
||||||
|
depends_on:
|
||||||
|
- database
|
||||||
|
{% endif -%}
|
||||||
|
profiles: [php]
|
19
working-without-workspace/code/flake.nix
Normal file
19
working-without-workspace/code/flake.nix
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
{
|
||||||
|
inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||||
|
inputs.devshell.url = "github:numtide/devshell";
|
||||||
|
|
||||||
|
outputs = inputs@{ flake-parts, ... }:
|
||||||
|
flake-parts.lib.mkFlake { inherit inputs; } {
|
||||||
|
imports = [ inputs.devshell.flakeModule ];
|
||||||
|
|
||||||
|
systems = [ "x86_64-linux" ];
|
||||||
|
|
||||||
|
perSystem = { config, self', inputs', pkgs, system, ... }: {
|
||||||
|
devshells.default = {
|
||||||
|
packages = with pkgs; [ php82 php82Packages.composer ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
flake = { };
|
||||||
|
};
|
||||||
|
}
|
27
working-without-workspace/code/git.nix
Normal file
27
working-without-workspace/code/git.nix
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
programs.git = {
|
||||||
|
enable = true;
|
||||||
|
userName = "Oliver Davies";
|
||||||
|
userEmail = "oliver@oliverdavies.uk";
|
||||||
|
|
||||||
|
aliases = {
|
||||||
|
aa = "add --all";
|
||||||
|
assume = "update-index --assume-unchanged";
|
||||||
|
assumed = "!git ls-files -v | grep '^[hsmrck?]' | cut -c 3-";
|
||||||
|
b = "branch";
|
||||||
|
# ...
|
||||||
|
};
|
||||||
|
extraConfig = {
|
||||||
|
branch = {
|
||||||
|
autosetupmerge = true;
|
||||||
|
autosetuprebase = "always";
|
||||||
|
};
|
||||||
|
checkout.defaultRemote = "origin";
|
||||||
|
color.ui = true;
|
||||||
|
commit = {
|
||||||
|
template = "~/.gitmessage";
|
||||||
|
};
|
||||||
|
core = {
|
||||||
|
editor = "nvim";
|
||||||
|
excludesFile = "~/.gitignore-global";
|
||||||
|
pager = "delta";
|
||||||
|
};
|
15
working-without-workspace/code/gitconfig.ini
Normal file
15
working-without-workspace/code/gitconfig.ini
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
[alias]
|
||||||
|
aa = "add --all"
|
||||||
|
assume = "update-index --assume-unchanged"
|
||||||
|
assumed = "!git ls-files -v | grep '^[hsmrck?]' | cut -c 3-"
|
||||||
|
b = "branch"
|
||||||
|
browse = "!gh repo view --web"
|
||||||
|
ca = "commit --amend --verbose"
|
||||||
|
car = "commit --amend --no-edit"
|
||||||
|
|
||||||
|
[branch]
|
||||||
|
autosetupmerge = true
|
||||||
|
autosetuprebase = "always"
|
||||||
|
|
||||||
|
[checkout]
|
||||||
|
defaultRemote = "origin"
|
25
working-without-workspace/code/hardware-configuration.nix
Normal file
25
working-without-workspace/code/hardware-configuration.nix
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
{ config, lib, pkgs, modulesPath, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
imports = [ (modulesPath + "/installer/scan/not-detected.nix") ];
|
||||||
|
|
||||||
|
boot.initrd.availableKernelModules =
|
||||||
|
[ "xhci_pci" "thunderbolt" "nvme" "usb_storage" "sd_mod" ];
|
||||||
|
boot.initrd.kernelModules = [ ];
|
||||||
|
boot.kernelModules = [ "kvm-intel" ];
|
||||||
|
boot.kernelParams = [ "i8042.reset" ];
|
||||||
|
boot.extraModulePackages = [ ];
|
||||||
|
|
||||||
|
|
||||||
|
fileSystems."/" = {
|
||||||
|
device = "/dev/disk/by-uuid/7c6d69ec-ba06-4ddb-b9c4-62b3994fda91";
|
||||||
|
fsType = "ext4";
|
||||||
|
};
|
||||||
|
|
||||||
|
fileSystems."/boot/efi" = {
|
||||||
|
device = "/dev/disk/by-uuid/B729-9A75";
|
||||||
|
fsType = "vfat";
|
||||||
|
};
|
||||||
|
|
||||||
|
swapDevices =
|
||||||
|
[{ device = "/dev/disk/by-uuid/5db0a0e6-93fb-4d0b-8fb0-fdb3cb76b89d"; }];
|
11
working-without-workspace/code/home-manager.nix
Normal file
11
working-without-workspace/code/home-manager.nix
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
home.username = "opdavies";
|
||||||
|
home.homeDirectory = "/home/opdavies";
|
||||||
|
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
php82
|
||||||
|
php82Packages.composer
|
||||||
|
];
|
||||||
|
};
|
12
working-without-workspace/code/justfile.twig
Normal file
12
working-without-workspace/code/justfile.twig
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
{% if "php" is same as language %}
|
||||||
|
composer *args:
|
||||||
|
{{ "just _exec php composer {{ args }}" | raw }}
|
||||||
|
|
||||||
|
{% if "drupal-project" is same as type %}
|
||||||
|
drush *args:
|
||||||
|
{{ "just _exec php drush {{ args }}" | raw }}
|
||||||
|
|
||||||
|
install *args:
|
||||||
|
{{ "just _exec php drush site:install -y {{ args }}" | raw }}
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
164
working-without-workspace/opdavies-dark.yaml
Normal file
164
working-without-workspace/opdavies-dark.yaml
Normal file
|
@ -0,0 +1,164 @@
|
||||||
|
embeddedFonts:
|
||||||
|
- - Inconsolata.ttf
|
||||||
|
- Inconsolata.ttf
|
||||||
|
- Inconsolata.ttf
|
||||||
|
- Inconsolata.ttf
|
||||||
|
- - Helvetica.ttf
|
||||||
|
- Helvetica-Bold.ttf
|
||||||
|
- Helvetica.ttf
|
||||||
|
- Helvetica-Bold.ttf
|
||||||
|
|
||||||
|
fontsAlias:
|
||||||
|
fontBold: Helvetica-Bold
|
||||||
|
fontFont: Helvetica
|
||||||
|
fontItalic: Helvetica
|
||||||
|
fontMono: Inconsolata
|
||||||
|
fontMonoBold: Inconsolata
|
||||||
|
fontMonoBoldItalic: Inconsolata
|
||||||
|
fontMonoItalic: Inconsolata
|
||||||
|
|
||||||
|
linkColor: '#60a5fa'
|
||||||
|
|
||||||
|
pageSetup:
|
||||||
|
firstTemplate: coverPage
|
||||||
|
height: 18cm
|
||||||
|
margin-bottom: 0cm
|
||||||
|
margin-gutter: 0cm
|
||||||
|
margin-left: 0cm
|
||||||
|
margin-right: 0cm
|
||||||
|
margin-top: 0cm
|
||||||
|
size: null
|
||||||
|
spacing-footer: 2mm
|
||||||
|
spacing-header: 2mm
|
||||||
|
width: 32cm
|
||||||
|
|
||||||
|
pageTemplates:
|
||||||
|
coverPage:
|
||||||
|
background: ../images/bg-dark.png
|
||||||
|
frames:
|
||||||
|
- - 12%
|
||||||
|
- 10%
|
||||||
|
- 76%
|
||||||
|
- 75%
|
||||||
|
showFooter: false
|
||||||
|
showHeader: false
|
||||||
|
|
||||||
|
imagePage:
|
||||||
|
alignment: TA_CENTER
|
||||||
|
background: ../images/bg-dark.png
|
||||||
|
frames:
|
||||||
|
- - 3%
|
||||||
|
- 3%
|
||||||
|
- 92%
|
||||||
|
- 92%
|
||||||
|
showFooter: true
|
||||||
|
showHeader: false
|
||||||
|
|
||||||
|
outputPage:
|
||||||
|
background: ../images/bg-dark.png
|
||||||
|
frames:
|
||||||
|
- - 8%
|
||||||
|
- 10%
|
||||||
|
- 82%
|
||||||
|
- 65%
|
||||||
|
showFooter: false
|
||||||
|
showHeader: false
|
||||||
|
|
||||||
|
standardPage:
|
||||||
|
background: ../images/bg-dark.png
|
||||||
|
frames:
|
||||||
|
- - 3%
|
||||||
|
- 3%
|
||||||
|
- 92%
|
||||||
|
- 92%
|
||||||
|
showFooter: true
|
||||||
|
showHeader: false
|
||||||
|
|
||||||
|
titlePage:
|
||||||
|
alignment: TA_CENTER
|
||||||
|
background: ../images/bg-dark.png
|
||||||
|
frames:
|
||||||
|
- - 8%
|
||||||
|
- 8%
|
||||||
|
- 85%
|
||||||
|
- 65%
|
||||||
|
showFooter: true
|
||||||
|
showHeader: false
|
||||||
|
|
||||||
|
styles:
|
||||||
|
bodytext:
|
||||||
|
alignment: TA_LEFT
|
||||||
|
|
||||||
|
bullet-list:
|
||||||
|
colWidths:
|
||||||
|
- '20'
|
||||||
|
- null
|
||||||
|
commands:
|
||||||
|
- - LEFTPADDING
|
||||||
|
- - 0
|
||||||
|
- 0
|
||||||
|
- - 1
|
||||||
|
- -1
|
||||||
|
- 5
|
||||||
|
- - RIGHTPADDING
|
||||||
|
- - 0
|
||||||
|
- 0
|
||||||
|
- - 1
|
||||||
|
- -1
|
||||||
|
- 0
|
||||||
|
textColor: '#ffffff'
|
||||||
|
|
||||||
|
bullet-list-item:
|
||||||
|
spaceAfter: 0
|
||||||
|
spaceBefore: 18
|
||||||
|
|
||||||
|
centred:
|
||||||
|
alignment: TA_CENTER
|
||||||
|
parent: normal
|
||||||
|
|
||||||
|
centredtitle:
|
||||||
|
alignment: TA_CENTER
|
||||||
|
fontName: fontBold
|
||||||
|
fontSize: 48
|
||||||
|
leading: 64
|
||||||
|
parent: heading
|
||||||
|
|
||||||
|
code:
|
||||||
|
backColor: '#111111'
|
||||||
|
borderWidth: 0
|
||||||
|
fontSize: 24
|
||||||
|
leading: 26
|
||||||
|
parent: literal
|
||||||
|
spaceBefore: 4
|
||||||
|
|
||||||
|
footer:
|
||||||
|
alignment: TA_RIGHT
|
||||||
|
fontName: fontMono
|
||||||
|
fontSize: 20
|
||||||
|
rightIndent: 16
|
||||||
|
spaceBefore: 0
|
||||||
|
textColor: '#24608a'
|
||||||
|
|
||||||
|
heading:
|
||||||
|
fontName: fontBold
|
||||||
|
fontSize: 20
|
||||||
|
spaceAfter: 16
|
||||||
|
textColor: '#60a5fa'
|
||||||
|
|
||||||
|
literal:
|
||||||
|
backColor: '#111111'
|
||||||
|
fontName: fontMono
|
||||||
|
|
||||||
|
normal:
|
||||||
|
fontSize: 24
|
||||||
|
textColor: '#ffffff'
|
||||||
|
|
||||||
|
title:
|
||||||
|
fontSize: 300%
|
||||||
|
parent: heading
|
||||||
|
|
||||||
|
titleslideinfo:
|
||||||
|
alignment: TA_CENTER
|
||||||
|
fontSize: 140%
|
||||||
|
parent: normal
|
||||||
|
|
158
working-without-workspace/opdavies-light.yaml
Normal file
158
working-without-workspace/opdavies-light.yaml
Normal file
|
@ -0,0 +1,158 @@
|
||||||
|
embeddedFonts:
|
||||||
|
- - Inconsolata.ttf
|
||||||
|
- Inconsolata.ttf
|
||||||
|
- Inconsolata.ttf
|
||||||
|
- Inconsolata.ttf
|
||||||
|
- - Helvetica.ttf
|
||||||
|
- Helvetica-Bold.ttf
|
||||||
|
- Helvetica.ttf
|
||||||
|
- Helvetica-Bold.ttf
|
||||||
|
|
||||||
|
fontsAlias:
|
||||||
|
fontBold: Helvetica-Bold
|
||||||
|
fontFont: Helvetica
|
||||||
|
fontItalic: Helvetica
|
||||||
|
fontMono: Inconsolata
|
||||||
|
fontMonoBold: Inconsolata
|
||||||
|
fontMonoBoldItalic: Inconsolata
|
||||||
|
fontMonoItalic: Inconsolata
|
||||||
|
|
||||||
|
linkColor: '#24608a'
|
||||||
|
|
||||||
|
pageSetup:
|
||||||
|
firstTemplate: coverPage
|
||||||
|
height: 18cm
|
||||||
|
margin-bottom: 0cm
|
||||||
|
margin-gutter: 0cm
|
||||||
|
margin-left: 0cm
|
||||||
|
margin-right: 0cm
|
||||||
|
margin-top: 0cm
|
||||||
|
size: null
|
||||||
|
spacing-footer: 2mm
|
||||||
|
spacing-header: 2mm
|
||||||
|
width: 32cm
|
||||||
|
|
||||||
|
pageTemplates:
|
||||||
|
coverPage:
|
||||||
|
frames:
|
||||||
|
- - 12%
|
||||||
|
- 10%
|
||||||
|
- 76%
|
||||||
|
- 75%
|
||||||
|
showFooter: false
|
||||||
|
showHeader: false
|
||||||
|
|
||||||
|
imagePage:
|
||||||
|
alignment: TA_CENTER
|
||||||
|
frames:
|
||||||
|
- - 3%
|
||||||
|
- 3%
|
||||||
|
- 92%
|
||||||
|
- 92%
|
||||||
|
showFooter: true
|
||||||
|
showHeader: false
|
||||||
|
|
||||||
|
outputPage:
|
||||||
|
frames:
|
||||||
|
- - 8%
|
||||||
|
- 10%
|
||||||
|
- 82%
|
||||||
|
- 65%
|
||||||
|
showFooter: false
|
||||||
|
showHeader: false
|
||||||
|
|
||||||
|
standardPage:
|
||||||
|
frames:
|
||||||
|
- - 3%
|
||||||
|
- 3%
|
||||||
|
- 92%
|
||||||
|
- 92%
|
||||||
|
showFooter: true
|
||||||
|
showHeader: false
|
||||||
|
|
||||||
|
titlePage:
|
||||||
|
alignment: TA_CENTER
|
||||||
|
frames:
|
||||||
|
- - 8%
|
||||||
|
- 8%
|
||||||
|
- 85%
|
||||||
|
- 65%
|
||||||
|
showFooter: true
|
||||||
|
showHeader: false
|
||||||
|
|
||||||
|
styles:
|
||||||
|
bodytext:
|
||||||
|
alignment: TA_LEFT
|
||||||
|
|
||||||
|
bullet-list:
|
||||||
|
colWidths:
|
||||||
|
- '20'
|
||||||
|
- null
|
||||||
|
commands:
|
||||||
|
- - LEFTPADDING
|
||||||
|
- - 0
|
||||||
|
- 0
|
||||||
|
- - 1
|
||||||
|
- -1
|
||||||
|
- 5
|
||||||
|
- - RIGHTPADDING
|
||||||
|
- - 0
|
||||||
|
- 0
|
||||||
|
- - 1
|
||||||
|
- -1
|
||||||
|
- 0
|
||||||
|
textColor: '#aaaaaa'
|
||||||
|
|
||||||
|
bullet-list-item:
|
||||||
|
spaceAfter: 0
|
||||||
|
spaceBefore: 18
|
||||||
|
|
||||||
|
centred:
|
||||||
|
alignment: TA_CENTER
|
||||||
|
parent: normal
|
||||||
|
|
||||||
|
centredtitle:
|
||||||
|
alignment: TA_CENTER
|
||||||
|
fontName: fontBold
|
||||||
|
fontSize: 48
|
||||||
|
leading: 64
|
||||||
|
parent: heading
|
||||||
|
|
||||||
|
code:
|
||||||
|
backColor: white
|
||||||
|
borderWidth: 0
|
||||||
|
fontSize: 22
|
||||||
|
leading: 24
|
||||||
|
parent: literal
|
||||||
|
spaceBefore: 0
|
||||||
|
|
||||||
|
footer:
|
||||||
|
alignment: TA_RIGHT
|
||||||
|
fontName: fontMono
|
||||||
|
fontSize: 20
|
||||||
|
rightIndent: 16
|
||||||
|
spaceBefore: 0
|
||||||
|
textColor: '#24608a'
|
||||||
|
|
||||||
|
heading:
|
||||||
|
fontName: fontBold
|
||||||
|
fontSize: 20
|
||||||
|
spaceAfter: 16
|
||||||
|
textColor: '#24608a'
|
||||||
|
|
||||||
|
literal:
|
||||||
|
backColor: white
|
||||||
|
fontName: fontMono
|
||||||
|
|
||||||
|
normal:
|
||||||
|
fontSize: 24
|
||||||
|
textColor: '#383745'
|
||||||
|
|
||||||
|
title:
|
||||||
|
fontSize: 300%
|
||||||
|
parent: heading
|
||||||
|
|
||||||
|
titleslideinfo:
|
||||||
|
alignment: TA_CENTER
|
||||||
|
fontSize: 140%
|
||||||
|
parent: normal
|
71
working-without-workspace/sections/build-configs.rst
Normal file
71
working-without-workspace/sections/build-configs.rst
Normal file
|
@ -0,0 +1,71 @@
|
||||||
|
.. raw:: pdf
|
||||||
|
|
||||||
|
PageBreak titlePage
|
||||||
|
|
||||||
|
.. class:: centredtitle
|
||||||
|
|
||||||
|
Generating configuration files
|
||||||
|
|
||||||
|
.. raw:: pdf
|
||||||
|
|
||||||
|
PageBreak standardPage
|
||||||
|
|
||||||
|
build-configs
|
||||||
|
=============
|
||||||
|
|
||||||
|
Most of my projects have the same configuration files:
|
||||||
|
|
||||||
|
|
|
||||||
|
|
||||||
|
* ``Dockerfile``
|
||||||
|
* ``docker-compose.yaml``
|
||||||
|
* ``justfile``
|
||||||
|
* ``phpstan.neon.dist``
|
||||||
|
* ``phpunit.xml.dist``
|
||||||
|
|
||||||
|
.. raw:: pdf
|
||||||
|
|
||||||
|
TextAnnotation "Same files with either the same or similar values. What if, instead of copying and pasting these between projects, I could generate them from a canonical set of templates?"
|
||||||
|
|
||||||
|
build-configs
|
||||||
|
=============
|
||||||
|
|
||||||
|
* Symfony/Silly CLI project
|
||||||
|
* Twig for templating
|
||||||
|
* Takes values from a `build.yaml` file
|
||||||
|
* Generates the appropriate files with the correct configuration
|
||||||
|
* Easier to set up a new project
|
||||||
|
* Less maintenance overhead
|
||||||
|
* Can quickly add a new feature and update every project
|
||||||
|
|
||||||
|
.. raw:: pdf
|
||||||
|
|
||||||
|
TextAnnotation "Opinionated template files"
|
||||||
|
|
||||||
|
build.yaml
|
||||||
|
==========
|
||||||
|
|
||||||
|
.. code-block:: yaml
|
||||||
|
:include: code/build.yaml
|
||||||
|
:linenos:
|
||||||
|
|
||||||
|
Dockerfile.twig
|
||||||
|
===============
|
||||||
|
|
||||||
|
.. code-block:: Dockerfile
|
||||||
|
:include: code/Dockerfile.twig
|
||||||
|
:linenos:
|
||||||
|
|
||||||
|
docker-compose.yaml.twig
|
||||||
|
========================
|
||||||
|
|
||||||
|
.. code-block:: twig
|
||||||
|
:include: code/docker-compose.yaml.twig
|
||||||
|
:linenos:
|
||||||
|
|
||||||
|
justfile.twig
|
||||||
|
=============
|
||||||
|
|
||||||
|
.. code-block:: twig
|
||||||
|
:include: code/justfile.twig
|
||||||
|
:linenos:
|
22
working-without-workspace/sections/flakes.rst
Normal file
22
working-without-workspace/sections/flakes.rst
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
.. raw:: pdf
|
||||||
|
|
||||||
|
PageBreak standardPage
|
||||||
|
|
||||||
|
Nix Flakes
|
||||||
|
==========
|
||||||
|
|
||||||
|
* Per project
|
||||||
|
* Uses ``nixpkgs`` to create a development shell
|
||||||
|
* Can create build artifacts (phar?)
|
||||||
|
* Could replace Docker and Docker Compose
|
||||||
|
|
||||||
|
.. raw:: pdf
|
||||||
|
|
||||||
|
TextAnnotation "Creates a temporary shell with the requirements for that project."
|
||||||
|
|
||||||
|
flake.nix
|
||||||
|
=========
|
||||||
|
|
||||||
|
.. code-block:: nix
|
||||||
|
:include: code/flake.nix
|
||||||
|
:linenos:
|
19
working-without-workspace/sections/git.rst
Normal file
19
working-without-workspace/sections/git.rst
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
.. raw:: pdf
|
||||||
|
|
||||||
|
PageBreak standardPage
|
||||||
|
|
||||||
|
Git
|
||||||
|
===
|
||||||
|
|
||||||
|
Customised to my preferences, managed by Home Manager:
|
||||||
|
|
||||||
|
.. code-block:: nix
|
||||||
|
:include: code/git.nix
|
||||||
|
:linenos:
|
||||||
|
|
||||||
|
.. raw:: pdf
|
||||||
|
|
||||||
|
PageBreak
|
||||||
|
|
||||||
|
.. code-block:: ini
|
||||||
|
:include: code/gitconfig.ini
|
69
working-without-workspace/sections/just.rst
Normal file
69
working-without-workspace/sections/just.rst
Normal file
|
@ -0,0 +1,69 @@
|
||||||
|
.. raw:: pdf
|
||||||
|
|
||||||
|
PageBreak titlePage
|
||||||
|
|
||||||
|
.. class:: centredtitle
|
||||||
|
|
||||||
|
just
|
||||||
|
|
||||||
|
.. raw:: pdf
|
||||||
|
|
||||||
|
TextAnnotation "Who's used a Makefile? I have, but wasn't using a lot of the build features it has. I was using it as a task runner."
|
||||||
|
|
||||||
|
.. raw:: pdf
|
||||||
|
|
||||||
|
PageBreak standardPage
|
||||||
|
|
||||||
|
justfile
|
||||||
|
========
|
||||||
|
|
||||||
|
.. code-block:: make
|
||||||
|
|
||||||
|
default:
|
||||||
|
@just --list
|
||||||
|
|
||||||
|
_exec +args:
|
||||||
|
docker compose exec {{ args }}
|
||||||
|
|
||||||
|
# Run Composer
|
||||||
|
composer *args:
|
||||||
|
just _exec php composer {{ args }}
|
||||||
|
|
||||||
|
# Run Drush commands
|
||||||
|
drush *args:
|
||||||
|
just _exec php drush {{ args }}
|
||||||
|
|
||||||
|
# Install Drupal
|
||||||
|
install *args:
|
||||||
|
just drush site:install -y {{ args }}
|
||||||
|
|
||||||
|
# Run Artisan commands (Laravel)
|
||||||
|
artisan *args:
|
||||||
|
docker compose run \
|
||||||
|
--entrypoint php \
|
||||||
|
--rm \
|
||||||
|
--tty \
|
||||||
|
php artisan {{ args }}
|
||||||
|
|
||||||
|
.. raw:: pdf
|
||||||
|
|
||||||
|
PageBreak titlePage
|
||||||
|
|
||||||
|
.. class:: centredtitle
|
||||||
|
|
||||||
|
``just composer require
|
||||||
|
drupal/override_node_options``
|
||||||
|
|
||||||
|
.. raw:: pdf
|
||||||
|
|
||||||
|
PageBreak
|
||||||
|
|
||||||
|
.. class:: centredtitle
|
||||||
|
|
||||||
|
``just drush cache-rebuild``
|
||||||
|
|
||||||
|
|
|
||||||
|
|
||||||
|
.. class:: centredtitle
|
||||||
|
|
||||||
|
``just install localgov``
|
14
working-without-workspace/sections/neovim.rst
Normal file
14
working-without-workspace/sections/neovim.rst
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
.. raw:: pdf
|
||||||
|
|
||||||
|
PageBreak standardPage
|
||||||
|
|
||||||
|
neovim
|
||||||
|
======
|
||||||
|
|
||||||
|
* Community-maintained fork of Vim
|
||||||
|
* Configured with Lua
|
||||||
|
* ``nvim-lspconfig`` for language server support
|
||||||
|
* Intelephense and Phpactor for PHP
|
||||||
|
* ``nvim-dap`` and ``nvim-dap-ui`` for step debugging
|
||||||
|
* ``nvim-cmp`` for completion, LuaSnip for snippets
|
||||||
|
* PHPCS, PHPStan diagnostics with ``null-ls.nvim``
|
138
working-without-workspace/sections/operating-system.rst
Normal file
138
working-without-workspace/sections/operating-system.rst
Normal file
|
@ -0,0 +1,138 @@
|
||||||
|
.. raw:: pdf
|
||||||
|
|
||||||
|
PageBreak standardPage
|
||||||
|
|
||||||
|
Operating system
|
||||||
|
================
|
||||||
|
|
||||||
|
**Personal**:
|
||||||
|
|
||||||
|
- Linux
|
||||||
|
- NixOS
|
||||||
|
- KDE Plasma
|
||||||
|
|
||||||
|
|
|
||||||
|
|
||||||
|
**Work**:
|
||||||
|
|
||||||
|
- Windows 10
|
||||||
|
- WSL (Ubuntu)
|
||||||
|
- Nix package manager
|
||||||
|
|
||||||
|
.. raw:: pdf
|
||||||
|
|
||||||
|
TextAnnotation "Started with Ubuntu for work, used Pop!_OS for personal laptops and now on NixOS."
|
||||||
|
TextAnnotation "Used to use Apple/macOS and switched full-time to Linux a few years ago.used Homebrew for package management."
|
||||||
|
TextAnnotation "Automated things with Ansible."
|
||||||
|
TextAnnotation ""
|
||||||
|
TextAnnotation "Use Windows for Office, Teams, etc. Development is done within the WSL/Linux environment."
|
||||||
|
|
||||||
|
Nix and NixOS
|
||||||
|
=============
|
||||||
|
|
||||||
|
- Declarative
|
||||||
|
- Reproducable
|
||||||
|
- Nix Packages collection (``nixpkgs``) has over 80,000 packages
|
||||||
|
- Easy to add to and edit, and contribute to
|
||||||
|
|
||||||
|
.. raw:: pdf
|
||||||
|
|
||||||
|
TextAnnotation "Nix builds packages in isolation from each other. This ensures that they are reproducible and don't have undeclared dependencies, so if a package works on one machine, it will also work on another."
|
||||||
|
TextAnnotation "Nix makes it trivial to share development and build environments for your projects, regardless of what programming languages and tools you’re using. "
|
||||||
|
TextAnnotation "80,000 packages including Vim and tmux plugins, PHP and node packages"
|
||||||
|
TextAnnotation "Configuration file-driven. You declare the end state rather than the steps to get there."
|
||||||
|
TextAnnotation "Replaced Ansible for me."
|
||||||
|
|
||||||
|
.. raw:: pdf
|
||||||
|
|
||||||
|
PageBreak titlePage
|
||||||
|
|
||||||
|
.. class:: centredtitle
|
||||||
|
|
||||||
|
``nix-env -iA php82``
|
||||||
|
|
||||||
|
.. raw:: pdf
|
||||||
|
|
||||||
|
PageBreak
|
||||||
|
|
||||||
|
.. class:: centredtitle
|
||||||
|
|
||||||
|
``nix-shell --packages php82``
|
||||||
|
|
||||||
|
.. raw:: pdf
|
||||||
|
|
||||||
|
PageBreak
|
||||||
|
|
||||||
|
.. class:: centredtitle
|
||||||
|
|
||||||
|
``nix-shell --packages php82
|
||||||
|
--command "php -v"``
|
||||||
|
|
||||||
|
.. raw:: pdf
|
||||||
|
|
||||||
|
PageBreak standardPage
|
||||||
|
|
||||||
|
configuration.nix
|
||||||
|
=================
|
||||||
|
|
||||||
|
.. code-block:: nix
|
||||||
|
:include: code/configuration.nix
|
||||||
|
:linenos:
|
||||||
|
|
||||||
|
|
||||||
|
hardware-configuration.nix
|
||||||
|
==========================
|
||||||
|
|
||||||
|
.. code-block:: nix
|
||||||
|
:include: code/hardware-configuration.nix
|
||||||
|
:linenos:
|
||||||
|
|
||||||
|
.. raw:: pdf
|
||||||
|
|
||||||
|
PageBreak titlePage
|
||||||
|
|
||||||
|
.. class:: centredtitle
|
||||||
|
|
||||||
|
``sudo nixos-rebuild build
|
||||||
|
--flake .#nixedo``
|
||||||
|
|
||||||
|
.. raw:: pdf
|
||||||
|
|
||||||
|
PageBreak standardPage
|
||||||
|
|
||||||
|
dotfiles
|
||||||
|
========
|
||||||
|
|
||||||
|
* System configuration files
|
||||||
|
* Usually hidden, filenames start with a dot (``.zshrc``, ``.gitconfig``, ``.config/``)
|
||||||
|
* Maintained on GitHub since July 2015
|
||||||
|
* https://opdavi.es/dotfiles
|
||||||
|
* Managed with Home Manager
|
||||||
|
|
||||||
|
.. raw:: pdf
|
||||||
|
|
||||||
|
TextAnnotation "Similar to hidden files within projects like .gitignore."
|
||||||
|
TextAnnotation "Manages user configuration instead of system configuration."
|
||||||
|
TextAnnotation ""
|
||||||
|
TextAnnotation "Used with NixOS and the Nix package manager in WSL."
|
||||||
|
|
||||||
|
home-manager/home.nix
|
||||||
|
=====================
|
||||||
|
|
||||||
|
.. code-block:: nix
|
||||||
|
:include: code/home-manager.nix
|
||||||
|
:linenos:
|
||||||
|
|
||||||
|
.. raw:: pdf
|
||||||
|
|
||||||
|
PageBreak titlePage
|
||||||
|
|
||||||
|
.. class:: centredtitle
|
||||||
|
|
||||||
|
``home-manager build
|
||||||
|
-f home-manager/home.nix
|
||||||
|
--flake .#wsl2``
|
||||||
|
|
||||||
|
.. raw:: pdf
|
||||||
|
|
||||||
|
PageBreak standardPage
|
12
working-without-workspace/sections/others.rst
Normal file
12
working-without-workspace/sections/others.rst
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
.. raw:: pdf
|
||||||
|
|
||||||
|
PageBreak standardPage
|
||||||
|
|
||||||
|
Other mentions
|
||||||
|
==============
|
||||||
|
|
||||||
|
* ``fzf``
|
||||||
|
* ``grep`` and ``ripgrep``
|
||||||
|
* ``find`` and ``xargs``
|
||||||
|
* Pulumi and Terraform for infrastructure automation
|
||||||
|
* Ansible and Ansistrano
|
80
working-without-workspace/sections/shell.rst
Normal file
80
working-without-workspace/sections/shell.rst
Normal file
|
@ -0,0 +1,80 @@
|
||||||
|
.. raw:: pdf
|
||||||
|
|
||||||
|
PageBreak titlePage
|
||||||
|
|
||||||
|
.. class:: centredtitle
|
||||||
|
|
||||||
|
Z Shell
|
||||||
|
|
||||||
|
.. raw:: pdf
|
||||||
|
|
||||||
|
PageBreak standardPage
|
||||||
|
|
||||||
|
Why zsh?
|
||||||
|
========
|
||||||
|
|
||||||
|
* Replacement for the ``bash`` shell
|
||||||
|
* Default on macOS
|
||||||
|
* Separate to "oh-my-zsh"
|
||||||
|
* OMZSH plugins and themes can be installed using ``zplug``
|
||||||
|
* Aliases
|
||||||
|
* Globbing and expanding
|
||||||
|
|
||||||
|
Aliases
|
||||||
|
=======
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
:linenos:
|
||||||
|
:include: code/aliases.sh
|
||||||
|
|
||||||
|
.. raw:: pdf
|
||||||
|
|
||||||
|
TextAnnotation "Can be used to override default behaviour or to add new commands and shortcuts."
|
||||||
|
|
||||||
|
Globbing and expanding
|
||||||
|
======================
|
||||||
|
|
||||||
|
Changing a file prefix:
|
||||||
|
|
||||||
|
``mv index.{html,twig}``
|
||||||
|
|
||||||
|
``mv index.html index.twig``
|
||||||
|
|
||||||
|
|
|
||||||
|
|
||||||
|
Creating two files with different prefixes:
|
||||||
|
|
||||||
|
``touch my-component.{config.yml,twig}``
|
||||||
|
|
||||||
|
|
|
||||||
|
|
||||||
|
Creating a range of files:
|
||||||
|
|
||||||
|
``touch {1..10}.php``
|
||||||
|
|
||||||
|
Auto-expanding
|
||||||
|
==============
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
:linenos:
|
||||||
|
|
||||||
|
expand-alias-space() {
|
||||||
|
[[ $LBUFFER =~ "\<(''${(j:|:)baliases})\$" ]]; insertBlank=$?
|
||||||
|
if [[ ! $LBUFFER =~ "\<(''${(j:|:)ialiases})\$" ]]; then
|
||||||
|
zle _expand_alias
|
||||||
|
fi
|
||||||
|
|
||||||
|
zle self-insert
|
||||||
|
|
||||||
|
if [[ "$insertBlank" = "0" ]]; then
|
||||||
|
zle backward-delete-char
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
zle -N expand-alias-space
|
||||||
|
|
||||||
|
bindkey " " expand-alias-space
|
||||||
|
|
||||||
|
.. raw:: pdf
|
||||||
|
|
||||||
|
TextAnnotation "More like snippets than aliases."
|
12
working-without-workspace/sections/tmux.rst
Normal file
12
working-without-workspace/sections/tmux.rst
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
.. raw:: pdf
|
||||||
|
|
||||||
|
PageBreak standardPage
|
||||||
|
|
||||||
|
tmux
|
||||||
|
====
|
||||||
|
|
||||||
|
* "Terminal multiplexer"
|
||||||
|
* Splits a terminal into different sessions and panes
|
||||||
|
* One session per project
|
||||||
|
* Editing in one pane, running commands in another
|
||||||
|
* Long-running commands in a separate window
|
55
working-without-workspace/working-without-workspace.rst
Normal file
55
working-without-workspace/working-without-workspace.rst
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
.. footer:: @opdavies
|
||||||
|
|
||||||
|
Working without Workspace
|
||||||
|
#########################
|
||||||
|
|
||||||
|
|
|
||||||
|
|
||||||
|
.. class:: titleslideinfo
|
||||||
|
|
||||||
|
Oliver Davies (@opdavies)
|
||||||
|
|
||||||
|
.. raw:: pdf
|
||||||
|
|
||||||
|
PageBreak titlePage
|
||||||
|
|
||||||
|
.. class:: centredtitle
|
||||||
|
|
||||||
|
Working with Workspace
|
||||||
|
|
||||||
|
.. raw:: pdf
|
||||||
|
|
||||||
|
TextAnnotation "Workspace is an open-source project developed and maintained by Inviqa, which we used on our projects and I was starting to use on personal projects."
|
||||||
|
TextAnnotation "This talk is about how my development environment and tools work now, a couple of years after leaving Inviqa."
|
||||||
|
|
||||||
|
.. include:: sections/operating-system.rst
|
||||||
|
.. include:: sections/shell.rst
|
||||||
|
.. include:: sections/git.rst
|
||||||
|
.. include:: sections/just.rst
|
||||||
|
.. include:: sections/build-configs.rst
|
||||||
|
.. include:: sections/flakes.rst
|
||||||
|
.. include:: sections/neovim.rst
|
||||||
|
.. include:: sections/tmux.rst
|
||||||
|
.. include:: sections/others.rst
|
||||||
|
|
||||||
|
.. raw:: pdf
|
||||||
|
|
||||||
|
PageBreak standardPage
|
||||||
|
|
||||||
|
Thanks!
|
||||||
|
=======
|
||||||
|
|
||||||
|
References:
|
||||||
|
|
||||||
|
* https://opdavi.es/dotfiles
|
||||||
|
* https://nixos.org
|
||||||
|
* https://just.systems
|
||||||
|
* https://neovim.io
|
||||||
|
* https://github.com/tmux/tmux/wiki
|
||||||
|
* https://opdavi.es/docker-examples
|
||||||
|
|
||||||
|
|
|
||||||
|
|
||||||
|
Me:
|
||||||
|
|
||||||
|
* https://www.oliverdavies.uk
|
Loading…
Reference in a new issue