feat: add various Docker services and configurations for Minecraft, Plex, Sabnzbd, and more

This commit is contained in:
Menno van Leeuwen 2024-11-14 20:39:11 +01:00
parent a439ccc355
commit e83ebe2d2c
Signed by: vleeuwenmenno
SSH Key Fingerprint: SHA256:OJFmjANpakwD3F2Rsws4GLtbdz1TJ5tkQF0RZmF0TRE
33 changed files with 2423 additions and 93 deletions

View File

@ -106,10 +106,10 @@ decrypt_folder() {
done done
} }
if [[ "$2" == "decrypt" ]]; then if [[ "$1" == "decrypt" ]]; then
printfe "%s\n" "cyan" "Decrypting secrets..." printfe "%s\n" "cyan" "Decrypting secrets..."
decrypt_folder ~/dotfiles/secrets decrypt_folder ~/dotfiles/secrets
elif [[ "$2" == "encrypt" ]]; then elif [[ "$1" == "encrypt" ]]; then
printfe "%s\n" "cyan" "Encrypting secrets..." printfe "%s\n" "cyan" "Encrypting secrets..."
encrypt_folder ~/dotfiles/secrets encrypt_folder ~/dotfiles/secrets
fi fi

View File

@ -0,0 +1,10 @@
[Flatpak Ref]
Name=io.ente.auth
Branch=stable
Title=io.ente.auth from flathub
IsRuntime=false
Url=https://dl.flathub.org/repo/
SuggestRemoteName=flathub
GPGKey=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
RuntimeRepo=https://dl.flathub.org/repo/flathub.flatpakrepo

View File

@ -16,90 +16,97 @@
else else
[ ./hosts/fallback.nix ]; [ ./hosts/fallback.nix ];
home.packages = with pkgs; [ home.packages =
# General packages with pkgs;
git [
gnupg # General packages
gh git
nixfmt-rfc-style gnupg
wget gh
fastfetch nixfmt-rfc-style
wget
fastfetch
# Package management # Package management
pipx pipx
devbox devbox
# Development SDKs/Toolkits # Development SDKs/Toolkits
gcc gcc
pkg-config pkg-config
gnumake gnumake
stdenv.cc stdenv.cc
rustc rustc
cargo cargo
cargo-edit cargo-edit
cargo-watch cargo-watch
cargo-audit cargo-audit
cargo-expand cargo-expand
cargo-tarpaulin cargo-tarpaulin
pyenv pyenv
act # GitHub Actions CLI act # GitHub Actions CLI
# File and directory operations # File and directory operations
eza # Modern ls eza # Modern ls
bat # Modern cat bat # Modern cat
zoxide # Smarter cd command zoxide # Smarter cd command
broot # Interactive directory navigator broot # Interactive directory navigator
du-dust # Modern du du-dust # Modern du
duf # Modern df duf # Modern df
zip zip
unzip unzip
bottom # Modern top/htop
glances # Advanced system monitoring tool
procs # Modern ps
hyperfine # Benchmarking tool
# Search and text processing # Search and text processing
ripgrep # Modern grep ripgrep # Modern grep
sd # Modern sed sd # Modern sed
choose # Modern cut choose # Modern cut
jq # JSON processor jq # JSON processor
yq # YAML processor yq # YAML processor
xsv # CSV processor xsv # CSV processor
# System monitoring and process management # System monitoring and process management
procs # Modern ps procs # Modern ps
bottom # Modern top/htop bottom # Modern top/htop
hyperfine # Benchmarking tool hyperfine # Benchmarking tool
bandwhich # Network utilization tool bandwhich # Network utilization tool
doggo # Modern dig doggo # Modern dig
gping # Ping with graph gping # Ping with graph
htop # Interactive process viewer htop # Interactive process viewer
# Development utilities # Development utilities
delta # Better git diff delta # Better git diff
difftastic # Structural diff tool difftastic # Structural diff tool
fzf # Fuzzy finder fzf # Fuzzy finder
tokei # Code statistics tokei # Code statistics
tealdeer # Modern tldr client tealdeer # Modern tldr client
lazygit # Terminal UI for git lazygit # Terminal UI for git
# Shell and terminal # Shell and terminal
starship # Cross-shell prompt starship # Cross-shell prompt
blesh # Bash ble.sh blesh # Bash ble.sh
zellij # Modern terminal multiplexer zellij # Modern terminal multiplexer
screen # Terminal multiplexer screen # Terminal multiplexer
# File viewers and processors # File viewers and processors
hexyl # Modern hexdump hexyl # Modern hexdump
chafa # Terminal image viewer chafa # Terminal image viewer
glow # Markdown renderer glow # Markdown renderer
# Editors # Editors
neovim neovim
nano nano
micro micro
# Lolz # Lolz
fortune fortune
cowsay cowsay
cmatrix cmatrix
figlet figlet
lolcat lolcat
]; ]
++ (with pkgs-unstable; [ ]);
} }

View File

@ -47,6 +47,7 @@
"code.desktop" "code.desktop"
"org.telegram.desktop.desktop" "org.telegram.desktop.desktop"
"spotify.desktop" "spotify.desktop"
"com.plexamp.Plexamp.desktop"
"vesktop.desktop" "vesktop.desktop"
"org.gnome.Geary.desktop" "org.gnome.Geary.desktop"
"org.gnome.Nautilus.desktop" "org.gnome.Nautilus.desktop"

View File

@ -0,0 +1,19 @@
{ config, pkgs, ... }:
{
environment.etc."docker/arr-stack/docker-compose.yml".source = ./arr-stack/docker-compose.yml;
systemd.services.arr-stack = {
description = "arr-stack Docker Compose Service";
after = [ "network-online.target" ];
wants = [ "network-online.target" ];
serviceConfig = {
ExecStart = "${pkgs.docker-compose}/bin/docker-compose -f /etc/docker/arr-stack/docker-compose.yml up";
ExecStop = "${pkgs.docker-compose}/bin/docker-compose -f /etc/docker/arr-stack/docker-compose.yml down";
WorkingDirectory = "/etc/docker/arr-stack";
Restart = "always";
RestartSec = 10;
};
wantedBy = [ "multi-user.target" ];
};
}

View File

@ -0,0 +1,97 @@
name: arr-stack
services:
radarr:
container_name: radarr
image: lscr.io/linuxserver/radarr:latest
environment:
- TZ=Europe/Amsterdam
ports:
- 7878:7878
extra_hosts:
- host.docker.internal:host-gateway
volumes:
- ./data/radarr-config:/config
- /mnt/20tb:/storage
restart: "unless-stopped"
sonarr:
image: linuxserver/sonarr:latest
container_name: sonarr
environment:
- TZ=Europe/Amsterdam
volumes:
- ./data/sonarr-config:/config
- /mnt/20tb:/storage
ports:
- 8989:8989
extra_hosts:
- host.docker.internal:host-gateway
restart: unless-stopped
lidarr:
image: linuxserver/lidarr:latest
environment:
- TZ=Europe/Amsterdam
ports:
- 8686:8686
extra_hosts:
- host.docker.internal:host-gateway
volumes:
- ./data/lidarr-config:/config
- /mnt/20tb:/storage
restart: unless-stopped
whisparr:
image: ghcr.io/hotio/whisparr:latest
environment:
- TZ=Europe/Amsterdam
ports:
- 8386:8686
extra_hosts:
- host.docker.internal:host-gateway
volumes:
- ./data/whisparr-config:/config
- /mnt/20tb:/storage
restart: unless-stopped
prowlarr:
container_name: prowlarr
image: linuxserver/prowlarr:latest
environment:
- TZ=Europe/Amsterdam
volumes:
- ./data/prowlarr-config:/config
extra_hosts:
- host.docker.internal:host-gateway
ports:
- 9696:9696
restart: unless-stopped
flaresolverr:
image: ghcr.io/flaresolverr/flaresolverr:latest
container_name: flaresolverr
environment:
- LOG_LEVEL=${LOG_LEVEL:-info}
- LOG_HTML=${LOG_HTML:-false}
- CAPTCHA_SOLVER=${CAPTCHA_SOLVER:-none}
- TZ=Europe/Amsterdam
ports:
- "8191:8191"
extra_hosts:
- host.docker.internal:host-gateway
restart: unless-stopped
overseerr:
image: lscr.io/linuxserver/overseerr:latest
container_name: overseerr
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/Amsterdam
volumes:
- ./data/overseerr-config:/config
ports:
- 5555:5055
extra_hosts:
- host.docker.internal:host-gateway
restart: unless-stopped

View File

@ -1,12 +1,18 @@
{ ... }: { ... }:
{ {
imports = [ imports = [
./wireguard.nix ./arr-stack.nix
./duplicati.nix ./duplicati.nix
./factorio.nix ./factorio.nix
./gitea.nix
./golink.nix ./golink.nix
./immich.nix ./immich.nix
./minecraft.nix
./plex.nix
./sabnzbd.nix
./satisfactory.nix ./satisfactory.nix
./gitea.nix ./stash.nix
./torrent.nix
./wireguard.nix
]; ];
} }

View File

@ -6,8 +6,8 @@ services:
- TZ=Europe/Amsterdam - TZ=Europe/Amsterdam
- CLI_ARGS= - CLI_ARGS=
volumes: volumes:
- ./config:/config - ./data:/config
- /mnt:/source/mnt - /mnt/20tb:/mnt
- /etc/docker:/source/etc/docker - /etc/docker:/source/etc/docker
ports: ports:
- 8200:8200 - 8200:8200

View File

@ -17,12 +17,13 @@ services:
restart: "unless-stopped" restart: "unless-stopped"
environment: environment:
- "FACTORIO_VERSION=stable" - "FACTORIO_VERSION=stable"
- "RCON_PASS=458fc84534"
ports: ports:
- "5080:80" - "5080:80"
- "34197:34197/udp" - "34197:34197/udp"
volumes: volumes:
- "./fsm:/opt/fsm-data" - "./data/fsm:/opt/fsm-data"
- "./saves:/opt/factorio/saves" - "./data/saves:/opt/factorio/saves"
- "./mods:/opt/factorio/mods" - "./data/mods:/opt/factorio/mods"
- "./config:/opt/factorio/config" - "./data/config:/opt/factorio/config"
- "./mod_packs:/opt/fsm/mod_packs" - "./data/mod_packs:/opt/fsm/mod_packs"

View File

@ -3,7 +3,7 @@
# The location where your uploaded files are stored # The location where your uploaded files are stored
UPLOAD_LOCATION=/mnt/8tb/Photos/immich-library UPLOAD_LOCATION=/mnt/8tb/Photos/immich-library
# The location where your database files are stored # The location where your database files are stored
DB_DATA_LOCATION=./postgres DB_DATA_LOCATION=./data/postgres
# To set a timezone, uncomment the next line and change Etc/UTC to a TZ identifier from this list: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List # To set a timezone, uncomment the next line and change Etc/UTC to a TZ identifier from this list: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List
TZ=Europe/Amsterdam TZ=Europe/Amsterdam

View File

@ -0,0 +1,20 @@
{ config, pkgs, ... }:
{
environment.etc."docker/minecraft/docker-compose.yml".source = ./minecraft/docker-compose.yml;
environment.etc."docker/minecraft/shell.sh".source = ./minecraft/shell.sh;
systemd.services.minecraft = {
description = "minecraft Docker Compose Service";
after = [ "network-online.target" ];
wants = [ "network-online.target" ];
serviceConfig = {
ExecStart = "${pkgs.docker-compose}/bin/docker-compose -f /etc/docker/minecraft/docker-compose.yml up";
ExecStop = "${pkgs.docker-compose}/bin/docker-compose -f /etc/docker/minecraft/docker-compose.yml down";
WorkingDirectory = "/etc/docker/minecraft";
Restart = "always";
RestartSec = 10;
};
wantedBy = [ "multi-user.target" ];
};
}

View File

@ -0,0 +1,77 @@
name: minecraft
services:
upnp:
image: ghcr.io/vleeuwenmenno/auto-upnp:latest
restart: unless-stopped
network_mode: host
environment:
UPNP_DURATION: 86400 # 24 hours in seconds
PORTS: |
[
{"port": 25565, "protocol": "tcp"},
{"port": 25565, "protocol": "udp"},
{"port": 24454, "protocol": "udp"},
{"port": 3456, "protocol": "tcp"},
{"port": 19132, "protocol": "udp"}
]
paper:
image: itzg/minecraft-server
tty: true
stdin_open: true
ports:
- "25565:25565/tcp"
- "24454:24454/udp"
- "19132:19132/udp"
- "3456:8100/tcp"
environment:
EULA: "TRUE"
TYPE: "paper"
VERSION: 1.21.1
DIFFICULTY: "hard"
SERVER_NAME: "Paper Mostly Vanilla Server"
MOTD: "Paper Server (Supports 1.20.x and newer!)"
MEMORY: "32G"
MAX_PLAYERS: 32
VIEW_DISTANCE: 32
SPAWN_MONSTERS: true
SPAWN_ANIMALS: true
ENFORCE_SECURE_PROFILE: false
PLUGINS: |
https://cdn.modrinth.com/data/Jrmoreqs/versions/Ch2Vh0XL/AdvancedBackups-spigot-1.21-3.6.3.jar
https://cdn.modrinth.com/data/9eGKb6K1/versions/tA5pALYl/voicechat-bukkit-2.5.25.jar
https://cdn.modrinth.com/data/eBqOQXoA/versions/ndMZChDv/RecoveryTotem-1.0.1.jar
https://cdn.modrinth.com/data/fALzjamp/versions/ytBhnGfO/Chunky-Bukkit-1.4.28.jar
https://cdn.modrinth.com/data/P1OZGk5p/versions/ffAFJrjN/ViaVersion-5.1.1.jar
https://cdn.modrinth.com/data/NpvuJQoq/versions/kwAAl5BS/ViaBackwards-5.1.1.jar
https://cdn.modrinth.com/data/wKkoqHrH/versions/ohEXB7mE/Geyser-Spigot.jar
https://cdn.modrinth.com/data/Vebnzrzj/versions/cfNN7sys/LuckPerms-Bukkit-5.4.145.jar
https://cdn.modrinth.com/data/swbUV1cr/versions/DB0OeC5p/bluemap-5.4-spigot.jar
OPS: |
StarDebris
WHITELIST: |
StarDebris
Audi358
TechnikTake
MsPremium
Barny_8874
Ricky_2405
KinderKiller3000
ScherzkeksMiner
PauBau
QuickWitPhil
Draxonix
Zakomi
skintsoldier122
Krank4ever
Benjilami
Barny_8847
Destination456
xKizu
restart: unless-stopped
volumes:
- ./data:/data

View File

@ -0,0 +1,2 @@
#!/usr/bin/env bash
docker compose exec paper rcon-cli $@

View File

@ -0,0 +1,19 @@
{ config, pkgs, ... }:
{
environment.etc."docker/plex/docker-compose.yml".source = ./plex/docker-compose.yml;
systemd.services.plex = {
description = "plex Docker Compose Service";
after = [ "network-online.target" ];
wants = [ "network-online.target" ];
serviceConfig = {
ExecStart = "${pkgs.docker-compose}/bin/docker-compose -f /etc/docker/plex/docker-compose.yml up";
ExecStop = "${pkgs.docker-compose}/bin/docker-compose -f /etc/docker/plex/docker-compose.yml down";
WorkingDirectory = "/etc/docker/plex";
Restart = "always";
RestartSec = 10;
};
wantedBy = [ "multi-user.target" ];
};
}

View File

@ -0,0 +1,35 @@
services:
plex:
image: lscr.io/linuxserver/plex:latest
container_name: plex
network_mode: host
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [gpu]
environment:
- VERSION=docker
- PLEX_CLAIM=claim-sfTz4AWc_Uxhzfzz9fKS
- NVIDIA_VISIBLE_DEVICES=all
- NVIDIA_DRIVER_CAPABILITIES=compute,video,utility
volumes:
- ./data/plex:/config
- /mnt/20tb/Movies:/movies
- /mnt/20tb/TV_Shows:/tvshows
- /mnt/20tb/Music:/music
restart: unless-stopped
tautulli:
image: lscr.io/linuxserver/tautulli:latest
container_name: tautulli
environment:
- TZ=Europe/Amsterdam
volumes:
- ./data/tautulli:/config
ports:
- 8181:8181
restart: unless-stopped

View File

@ -0,0 +1,19 @@
{ config, pkgs, ... }:
{
environment.etc."docker/sabnzbd/docker-compose.yml".source = ./sabnzbd/docker-compose.yml;
systemd.services.sabnzbd = {
description = "sabnzbd Docker Compose Service";
after = [ "network-online.target" ];
wants = [ "network-online.target" ];
serviceConfig = {
ExecStart = "${pkgs.docker-compose}/bin/docker-compose -f /etc/docker/sabnzbd/docker-compose.yml up";
ExecStop = "${pkgs.docker-compose}/bin/docker-compose -f /etc/docker/sabnzbd/docker-compose.yml down";
WorkingDirectory = "/etc/docker/sabnzbd";
Restart = "always";
RestartSec = 10;
};
wantedBy = [ "multi-user.target" ];
};
}

View File

@ -0,0 +1,12 @@
services:
sabnzbd:
image: lscr.io/linuxserver/sabnzbd:latest
container_name: sabnzbd
environment:
- TZ=Europe/Amsterdam
volumes:
- ./data:/config
- /mnt/20tb:/storage
ports:
- 7788:8080
restart: unless-stopped

View File

@ -32,8 +32,6 @@ services:
- './data/certs/live/satisfactory.mvl.sh/privkey.pem:/config/gamefiles/FactoryGame/Certificates/private_key.pem' - './data/certs/live/satisfactory.mvl.sh/privkey.pem:/config/gamefiles/FactoryGame/Certificates/private_key.pem'
environment: environment:
- MAXPLAYERS=4 - MAXPLAYERS=4
- PGID=1000
- PUID=1000
- ROOTLESS=false - ROOTLESS=false
- STEAMBETA=false - STEAMBETA=false
healthcheck: healthcheck:

View File

@ -0,0 +1,19 @@
{ config, pkgs, ... }:
{
environment.etc."docker/stash/docker-compose.yml".source = ./stash/docker-compose.yml;
systemd.services.stash = {
description = "stash Docker Compose Service";
after = [ "network-online.target" ];
wants = [ "network-online.target" ];
serviceConfig = {
ExecStart = "${pkgs.docker-compose}/bin/docker-compose -f /etc/docker/stash/docker-compose.yml up";
ExecStop = "${pkgs.docker-compose}/bin/docker-compose -f /etc/docker/stash/docker-compose.yml down";
WorkingDirectory = "/etc/docker/stash";
Restart = "always";
RestartSec = 10;
};
wantedBy = [ "multi-user.target" ];
};
}

View File

@ -0,0 +1,28 @@
services:
stash:
image: stashapp/stash:latest
container_name: stash
restart: unless-stopped
ports:
- "9999:9999"
environment:
- STASH_STASH=/data/
- STASH_GENERATED=/generated/
- STASH_METADATA=/metadata/
- STASH_CACHE=/cache/
- STASH_PORT=9999
volumes:
- /etc/localtime:/etc/localtime:ro
## Keep configs, scrapers, and plugins here.
- ./data/config:/root/.stash
## Point this at your collection.
- /mnt/20tb/Stash:/data
## This is where your stash's metadata lives
- ./data/metadata:/metadata
## Any other cache content.
- ./data/cache:/cache
## Where to store binary blob data (scene covers, images)
- ./data/blobs:/blobs
## Where to store generated content (screenshots,previews,transcodes,sprites)
- ./data/generated:/generated

View File

@ -0,0 +1,19 @@
{ config, pkgs, ... }:
{
environment.etc."docker/torrent/docker-compose.yml".source = ./torrent/docker-compose.yml;
systemd.services.torrent = {
description = "Torrent Docker Compose Service";
after = [ "network-online.target" ];
wants = [ "network-online.target" ];
serviceConfig = {
ExecStart = "${pkgs.docker-compose}/bin/docker-compose -f /etc/docker/torrent/docker-compose.yml up";
ExecStop = "${pkgs.docker-compose}/bin/docker-compose -f /etc/docker/torrent/docker-compose.yml down";
WorkingDirectory = "/etc/docker/torrent";
Restart = "always";
RestartSec = 10;
};
wantedBy = [ "multi-user.target" ];
};
}

View File

View File

@ -0,0 +1,35 @@
services:
gluetun:
image: qmcgaw/gluetun:latest
container_name: gluetun
cap_add:
- NET_ADMIN
network_mode: bridge
ports:
- 6881:6881
- 6881:6881/udp
- 8085:8085
volumes:
- ./data/gluetun:/gluetun
environment:
- VPN_SERVICE_PROVIDER=${VPN_SERVICE_PROVIDER}
- OPENVPN_USER=${OPENVPN_USER}
- OPENVPN_PASSWORD=${OPENVPN_PASSWORD}
- SERVER_COUNTRIES=${SERVER_COUNTRIES}
restart: always
qbittorrent:
image: lscr.io/linuxserver/qbittorrent
container_name: qbittorrent
network_mode: "service:gluetun"
environment:
- PUID=1000
- PGID=1000
- WEBUI_PORT=8085
volumes:
- "/etc/localtime:/etc/localtime:ro"
- ./data/qbit:/config
- /mnt/20tb:/storage
depends_on:
- gluetun
restart: always

View File

@ -19,7 +19,7 @@ services:
environment: environment:
- PEERS=s24,pc,laptop - PEERS=s24,pc,laptop
volumes: volumes:
- ./config:/config - ./data:/config
ports: ports:
- 51820:51820/udp - 51820:51820/udp
sysctls: sysctls:

View File

@ -6,5 +6,7 @@
yubikey-manager yubikey-manager
trash-cli trash-cli
sqlite # Used for managing SQLite databases (Brave Settings etc.) sqlite # Used for managing SQLite databases (Brave Settings etc.)
xcp # Rust implementation of cp/mv command
pandoc # Document converter (Markdown, HTML, PDF etc.) (Mostly used for static site generators)
]; ];
} }

View File

@ -0,0 +1 @@
dist/

View File

@ -0,0 +1,12 @@
build:
cd ../; docker compose down;
rm -rf dist/
mkdir dist
pandoc index.md --template=template.html --metadata title="Resume - Menno Cornelis van Leeuwen" -o dist/index.html
pandoc index.md -o dist/index.pdf
mkdir dist/css/
cp css/stylesheet.css dist/css/stylesheet.css
cd ../; docker compose up -d;

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,84 @@
# Menno Cornelis van Leeuwen
## Contact Information
**Location:** Reguliersdwarsstraat 12A, 1947 GG, Beverwijk
**Phone:** +31 (06) 499-351-79
**Email:** menno@vleeuwen.me
**LinkedIn:** [linkedin.com/in/menno-v-44477b176/](https://www.linkedin.com/in/menno-v-44477b176/)
**GitHub:** [github.com/vleeuwenmenno](https://github.com/vleeuwenmenno)
## Summary
An enthusiastic software engineer who likes to learn new things and discover new oppertunities. Experienced in programming in Flutter, Dart, PHP and C#.
Although my current language of choice is Dart with the Flutter framework but I am open to anything to see what is beyond my horizon.
Aside from that I am also experienced in building, maintaining and repairing computer systems and networks.
## Skills
- **Programming Languages:** C# .NET, Flutter, Dart, PHP, Laravel
- **Tools & Technologies:** Git, Docker, Provider (Flutter), VS Code, Rider, PHP Storm
- **Methodologies:** Agile/Scrum, Object-Oriented Programming
## Experience
### **Software Engineer | Sandwave / Your.Online (Formerly TWS) | Nov 2021 Present**
- Worked in an agile/scrum environment, sparred with smaller teams.
- Implemented complex authentication flows with modern security practices.
- Guarded the dependencies
### **.NET / PHP Developer | Minty Media | Nov 2020 Oct-2021**
- Implemented API bridges between Bol.com and WooCommerce
- Setup CI/CD pipelines to streamline testing and deployment of applications
- Started the development of a full hosting panel solution including DNS Editor, Domain purchasing, VPS Options etc.
### **Flutter Developer | Bots.io (Formerly RevenYOU) | Mar 2019 Oct-2019**
- Spearheaded the development of the Bots.io App, with now more than 1M+ downloads.
- Implemented the skeleton of the app and sparred with UI designers to make it the best it can be.
### **All Round/Repair Technician/Sales | Com Today | Jan 2014 Mar 2019**
- Developed an in-house cashier program in PHP to track sales, expenses, stock and ongoing tasks.
- Worked on repairing computers, laptops, phones, and anything in between.
- Maintained stock, sold new systems to customers, and assisted customers with technical support.
## Education
### **MBO 4 Application & Media developer | Nova College in Beverwijk | Aug 2015 May 2019**
- Working with scrum/agile methodologies.
- Improved my existing self-thought knowledge in Object-oriented programming and design patterns.
- Using version control to manage code with Git and Subversion.
### **MBO 2 Occupation IT Employee | Nova College in Beverwijk | 2012 2014**
- Building, diagnosing and repairing computers.
- Completed multiple Cisco and Aries courses related to networking and computer technologies.
## Hobbies
- Astrophotography & image processing
- Beautiful photos of galaxies, nebula and star fields.
- Take a look at [astrobin.com/users/vleeuwenmenno](https://www.astrobin.com/users/vleeuwenmenno/) for my best work.
- Learning about cultures & languages while travelling
- Trying to go outside my comfort zone and speak another language while learning about their cultures.
- Creating endless programming test projects
- That sometimes evolve into something more
- FPV Freestyle Drones & Cinematic
- Building, flying and of course crashing drones, usually in the summer.
## References
Available upon request.

View File

@ -0,0 +1,13 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Resume - Menno Cornelis van Leeuwen</title>
<link rel="stylesheet" href="/css/stylesheet.css" />
</head>
<body class="stackedit">
<div class="stackedit__html">$body$</div>
</body>
</html>

View File

@ -0,0 +1,13 @@
{ pkgs, ... }:
{
# Resume/CV Website (Nginx)
services.nginx = {
enable = true;
virtualHosts."localhost:4203" = {
root = "/home/menno/dotfiles/config/nixos/packages/server/mennovanleeuwen.nl";
locations."/" = {
index = "index.html";
};
};
};
}

View File

@ -0,0 +1,119 @@
{ pkgs, ... }:
{
services.traefik = {
enable = true;
staticConfigOptions = {
entryPoints = {
web.address = ":80";
websecure.address = ":443";
};
certificatesResolvers.letsencrypt.acme = {
email = "menno@vleeuwen.me";
storage = "/var/lib/traefik/acme.json";
httpChallenge.entryPoint = "web";
};
};
dynamicConfigOptions = {
http = {
# Plex Media Server
routers.plex = {
rule = "Host(`plex.vleeuwen.me`)";
service = "plex";
entryPoints = [ "websecure" ];
tls.certResolver = "letsencrypt";
};
services.plex.loadBalancer.servers = [ { url = "http://127.0.0.1:32400"; } ];
# Tautulli (Plex Stats)
routers.tautulli = {
rule = "Host(`tautulli.vleeuwen.me`)";
service = "tautulli";
entryPoints = [ "websecure" ];
tls.certResolver = "letsencrypt";
};
services.tautulli.loadBalancer.servers = [ { url = "http://127.0.0.1:8181"; } ];
# Jellyfin
routers.jellyfin = {
rule = "Host(`jellyfin.vleeuwen.me`)";
service = "jellyfin";
entryPoints = [ "websecure" ];
tls.certResolver = "letsencrypt";
};
services.jellyfin.loadBalancer.servers = [ { url = "http://127.0.0.1:8096"; } ];
# Overseerr
routers.overseerr = {
rule = "Host(`overseerr.vleeuwen.me`)";
service = "overseerr";
entryPoints = [ "websecure" ];
tls.certResolver = "letsencrypt";
};
services.overseerr.loadBalancer.servers = [ { url = "http://127.0.0.1:5555"; } ];
# Immich (Google Photos alternative)
routers.immich = {
rule = "Host(`photos.vleeuwen.me`)";
service = "immich";
entryPoints = [ "websecure" ];
tls.certResolver = "letsencrypt";
};
services.immich.loadBalancer.servers = [ { url = "http://127.0.0.1:2283"; } ];
# Gitea Git Server
routers.gitea = {
rule = "Host(`git.mvl.sh`)";
service = "gitea";
entryPoints = [ "websecure" ];
tls.certResolver = "letsencrypt";
};
services.gitea.loadBalancer.servers = [ { url = "http://127.0.0.1:3030"; } ];
# Home Assistant
routers.homeassistant = {
rule = "Host(`home.vleeuwen.me`)";
service = "homeassistant";
entryPoints = [ "websecure" ];
tls.certResolver = "letsencrypt";
};
services.homeassistant.loadBalancer.servers = [ { url = "http://192.168.86.254:8123"; } ];
# InfluxDB for Home Assistant
routers.influxdb = {
rule = "Host(`influxdb.vleeuwen.me`)";
service = "influxdb";
entryPoints = [ "websecure" ];
tls.certResolver = "letsencrypt";
};
services.influxdb.loadBalancer.servers = [ { url = "http://192.168.86.254:8086"; } ];
# Bluemap for Minecraft
routers.bluemap = {
rule = "Host(`map.mvl.sh`)";
service = "bluemap";
entryPoints = [ "websecure" ];
tls.certResolver = "letsencrypt";
};
services.bluemap.loadBalancer.servers = [ { url = "http://127.0.0.1:3456"; } ];
# Factorio Server Manager
routers.factorio = {
rule = "Host(`fsm.mvl.sh`)";
service = "factorio";
entryPoints = [ "websecure" ];
tls.certResolver = "letsencrypt";
};
services.factorio.loadBalancer.servers = [ { url = "http://127.0.0.1:5080"; } ];
# Resume/CV Website
routers.personal-site = {
rule = "Host(`mennovanleeuwen.nl`)";
service = "personal-site";
entryPoints = [ "websecure" ];
tls.certResolver = "letsencrypt";
};
services.personal-site.loadBalancer.servers = [ { url = "http://127.0.0.1:4203"; } ];
};
};
};
}