diff --git a/bin/actions/secrets.sh b/bin/actions/secrets.sh index 7f07833..1e0695a 100755 --- a/bin/actions/secrets.sh +++ b/bin/actions/secrets.sh @@ -106,10 +106,10 @@ decrypt_folder() { done } -if [[ "$2" == "decrypt" ]]; then +if [[ "$1" == "decrypt" ]]; then printfe "%s\n" "cyan" "Decrypting secrets..." decrypt_folder ~/dotfiles/secrets -elif [[ "$2" == "encrypt" ]]; then +elif [[ "$1" == "encrypt" ]]; then printfe "%s\n" "cyan" "Encrypting secrets..." encrypt_folder ~/dotfiles/secrets -fi \ No newline at end of file +fi diff --git a/config/flatpaks/io.ente.auth.flatpakref b/config/flatpaks/io.ente.auth.flatpakref new file mode 100644 index 0000000..50bdf9e --- /dev/null +++ b/config/flatpaks/io.ente.auth.flatpakref @@ -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 + diff --git a/config/home-manager/packages/common/packages.nix b/config/home-manager/packages/common/packages.nix index 768d090..53c936e 100644 --- a/config/home-manager/packages/common/packages.nix +++ b/config/home-manager/packages/common/packages.nix @@ -16,90 +16,97 @@ else [ ./hosts/fallback.nix ]; - home.packages = with pkgs; [ - # General packages - git - gnupg - gh - nixfmt-rfc-style - wget - fastfetch + home.packages = + with pkgs; + [ + # General packages + git + gnupg + gh + nixfmt-rfc-style + wget + fastfetch - # Package management - pipx - devbox + # Package management + pipx + devbox - # Development SDKs/Toolkits - gcc - pkg-config - gnumake - stdenv.cc - rustc - cargo - cargo-edit - cargo-watch - cargo-audit - cargo-expand - cargo-tarpaulin - pyenv - act # GitHub Actions CLI + # Development SDKs/Toolkits + gcc + pkg-config + gnumake + stdenv.cc + rustc + cargo + cargo-edit + cargo-watch + cargo-audit + cargo-expand + cargo-tarpaulin + pyenv + act # GitHub Actions CLI - # File and directory operations - eza # Modern ls - bat # Modern cat - zoxide # Smarter cd command - broot # Interactive directory navigator - du-dust # Modern du - duf # Modern df - zip - unzip + # File and directory operations + eza # Modern ls + bat # Modern cat + zoxide # Smarter cd command + broot # Interactive directory navigator + du-dust # Modern du + duf # Modern df + zip + unzip + bottom # Modern top/htop + glances # Advanced system monitoring tool + procs # Modern ps + hyperfine # Benchmarking tool - # Search and text processing - ripgrep # Modern grep - sd # Modern sed - choose # Modern cut - jq # JSON processor - yq # YAML processor - xsv # CSV processor + # Search and text processing + ripgrep # Modern grep + sd # Modern sed + choose # Modern cut + jq # JSON processor + yq # YAML processor + xsv # CSV processor - # System monitoring and process management - procs # Modern ps - bottom # Modern top/htop - hyperfine # Benchmarking tool - bandwhich # Network utilization tool - doggo # Modern dig - gping # Ping with graph - htop # Interactive process viewer + # System monitoring and process management + procs # Modern ps + bottom # Modern top/htop + hyperfine # Benchmarking tool + bandwhich # Network utilization tool + doggo # Modern dig + gping # Ping with graph + htop # Interactive process viewer - # Development utilities - delta # Better git diff - difftastic # Structural diff tool - fzf # Fuzzy finder - tokei # Code statistics - tealdeer # Modern tldr client - lazygit # Terminal UI for git + # Development utilities + delta # Better git diff + difftastic # Structural diff tool + fzf # Fuzzy finder + tokei # Code statistics + tealdeer # Modern tldr client + lazygit # Terminal UI for git - # Shell and terminal - starship # Cross-shell prompt - blesh # Bash ble.sh - zellij # Modern terminal multiplexer - screen # Terminal multiplexer + # Shell and terminal + starship # Cross-shell prompt + blesh # Bash ble.sh + zellij # Modern terminal multiplexer + screen # Terminal multiplexer - # File viewers and processors - hexyl # Modern hexdump - chafa # Terminal image viewer - glow # Markdown renderer + # File viewers and processors + hexyl # Modern hexdump + chafa # Terminal image viewer + glow # Markdown renderer - # Editors - neovim - nano - micro + # Editors + neovim + nano + micro - # Lolz - fortune - cowsay - cmatrix - figlet - lolcat - ]; + # Lolz + fortune + cowsay + cmatrix + figlet + lolcat + ] + ++ (with pkgs-unstable; [ ]); } diff --git a/config/home-manager/workstation/dconf.nix b/config/home-manager/workstation/dconf.nix index 6925fe0..a34b405 100644 --- a/config/home-manager/workstation/dconf.nix +++ b/config/home-manager/workstation/dconf.nix @@ -47,6 +47,7 @@ "code.desktop" "org.telegram.desktop.desktop" "spotify.desktop" + "com.plexamp.Plexamp.desktop" "vesktop.desktop" "org.gnome.Geary.desktop" "org.gnome.Nautilus.desktop" diff --git a/config/nixos/docker/arr-stack.nix b/config/nixos/docker/arr-stack.nix new file mode 100644 index 0000000..a7c6473 --- /dev/null +++ b/config/nixos/docker/arr-stack.nix @@ -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" ]; + }; +} diff --git a/config/nixos/docker/arr-stack/docker-compose.yml b/config/nixos/docker/arr-stack/docker-compose.yml new file mode 100644 index 0000000..446ba2f --- /dev/null +++ b/config/nixos/docker/arr-stack/docker-compose.yml @@ -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 diff --git a/config/nixos/docker/default.nix b/config/nixos/docker/default.nix index 546d704..8a5b0e9 100644 --- a/config/nixos/docker/default.nix +++ b/config/nixos/docker/default.nix @@ -1,12 +1,18 @@ { ... }: { imports = [ - ./wireguard.nix + ./arr-stack.nix ./duplicati.nix ./factorio.nix + ./gitea.nix ./golink.nix ./immich.nix + ./minecraft.nix + ./plex.nix + ./sabnzbd.nix ./satisfactory.nix - ./gitea.nix + ./stash.nix + ./torrent.nix + ./wireguard.nix ]; } diff --git a/config/nixos/docker/duplicati/docker-compose.yml b/config/nixos/docker/duplicati/docker-compose.yml index c4eaad5..7f3097a 100644 --- a/config/nixos/docker/duplicati/docker-compose.yml +++ b/config/nixos/docker/duplicati/docker-compose.yml @@ -6,8 +6,8 @@ services: - TZ=Europe/Amsterdam - CLI_ARGS= volumes: - - ./config:/config - - /mnt:/source/mnt + - ./data:/config + - /mnt/20tb:/mnt - /etc/docker:/source/etc/docker ports: - 8200:8200 diff --git a/config/nixos/docker/factorio/docker-compose.yml b/config/nixos/docker/factorio/docker-compose.yml index 635bc99..42ecaca 100644 --- a/config/nixos/docker/factorio/docker-compose.yml +++ b/config/nixos/docker/factorio/docker-compose.yml @@ -17,12 +17,13 @@ services: restart: "unless-stopped" environment: - "FACTORIO_VERSION=stable" + - "RCON_PASS=458fc84534" ports: - "5080:80" - "34197:34197/udp" volumes: - - "./fsm:/opt/fsm-data" - - "./saves:/opt/factorio/saves" - - "./mods:/opt/factorio/mods" - - "./config:/opt/factorio/config" - - "./mod_packs:/opt/fsm/mod_packs" + - "./data/fsm:/opt/fsm-data" + - "./data/saves:/opt/factorio/saves" + - "./data/mods:/opt/factorio/mods" + - "./data/config:/opt/factorio/config" + - "./data/mod_packs:/opt/fsm/mod_packs" diff --git a/config/nixos/docker/gitea/docker-compose.yml b/config/nixos/docker/gitea/docker-compose.yml index 3bafec0..7933041 100644 --- a/config/nixos/docker/gitea/docker-compose.yml +++ b/config/nixos/docker/gitea/docker-compose.yml @@ -6,7 +6,7 @@ services: network_mode: host environment: UPNP_DURATION: 86400 # 24 hours in seconds - PORTS: | + PORTS: | [ {"port": 22, "protocol": "tcp"}, {"port": 22, "protocol": "udp"} diff --git a/config/nixos/docker/immich/.env b/config/nixos/docker/immich/.env index 274c617..3302cc5 100644 --- a/config/nixos/docker/immich/.env +++ b/config/nixos/docker/immich/.env @@ -3,7 +3,7 @@ # The location where your uploaded files are stored UPLOAD_LOCATION=/mnt/8tb/Photos/immich-library # 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 TZ=Europe/Amsterdam diff --git a/config/nixos/docker/minecraft.nix b/config/nixos/docker/minecraft.nix new file mode 100644 index 0000000..91d7a2b --- /dev/null +++ b/config/nixos/docker/minecraft.nix @@ -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" ]; + }; +} diff --git a/config/nixos/docker/minecraft/docker-compose.yml b/config/nixos/docker/minecraft/docker-compose.yml new file mode 100644 index 0000000..9563feb --- /dev/null +++ b/config/nixos/docker/minecraft/docker-compose.yml @@ -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 diff --git a/config/nixos/docker/minecraft/shell.sh b/config/nixos/docker/minecraft/shell.sh new file mode 100755 index 0000000..658875c --- /dev/null +++ b/config/nixos/docker/minecraft/shell.sh @@ -0,0 +1,2 @@ +#!/usr/bin/env bash +docker compose exec paper rcon-cli $@ diff --git a/config/nixos/docker/plex.nix b/config/nixos/docker/plex.nix new file mode 100644 index 0000000..1629efd --- /dev/null +++ b/config/nixos/docker/plex.nix @@ -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" ]; + }; +} diff --git a/config/nixos/docker/plex/docker-compose.yml b/config/nixos/docker/plex/docker-compose.yml new file mode 100644 index 0000000..53130d0 --- /dev/null +++ b/config/nixos/docker/plex/docker-compose.yml @@ -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 diff --git a/config/nixos/docker/sabnzbd.nix b/config/nixos/docker/sabnzbd.nix new file mode 100644 index 0000000..3b4e0e8 --- /dev/null +++ b/config/nixos/docker/sabnzbd.nix @@ -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" ]; + }; +} diff --git a/config/nixos/docker/sabnzbd/docker-compose.yml b/config/nixos/docker/sabnzbd/docker-compose.yml new file mode 100644 index 0000000..29e9b95 --- /dev/null +++ b/config/nixos/docker/sabnzbd/docker-compose.yml @@ -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 diff --git a/config/nixos/docker/satisfactory/docker-compose.yml b/config/nixos/docker/satisfactory/docker-compose.yml index 5d6a59b..d86a244 100644 --- a/config/nixos/docker/satisfactory/docker-compose.yml +++ b/config/nixos/docker/satisfactory/docker-compose.yml @@ -32,8 +32,6 @@ services: - './data/certs/live/satisfactory.mvl.sh/privkey.pem:/config/gamefiles/FactoryGame/Certificates/private_key.pem' environment: - MAXPLAYERS=4 - - PGID=1000 - - PUID=1000 - ROOTLESS=false - STEAMBETA=false healthcheck: diff --git a/config/nixos/docker/stash.nix b/config/nixos/docker/stash.nix new file mode 100644 index 0000000..19ce5ae --- /dev/null +++ b/config/nixos/docker/stash.nix @@ -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" ]; + }; +} diff --git a/config/nixos/docker/stash/docker-compose.yml b/config/nixos/docker/stash/docker-compose.yml new file mode 100644 index 0000000..98d5115 --- /dev/null +++ b/config/nixos/docker/stash/docker-compose.yml @@ -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 diff --git a/config/nixos/docker/torrent.nix b/config/nixos/docker/torrent.nix new file mode 100644 index 0000000..9db62ba --- /dev/null +++ b/config/nixos/docker/torrent.nix @@ -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" ]; + }; +} diff --git a/config/nixos/docker/torrent/README.md b/config/nixos/docker/torrent/README.md new file mode 100644 index 0000000..e69de29 diff --git a/config/nixos/docker/torrent/docker-compose.yml b/config/nixos/docker/torrent/docker-compose.yml new file mode 100644 index 0000000..fc7e0f4 --- /dev/null +++ b/config/nixos/docker/torrent/docker-compose.yml @@ -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 diff --git a/config/nixos/docker/wireguard/docker-compose.yml b/config/nixos/docker/wireguard/docker-compose.yml index 2d9a2ee..c2c323f 100644 --- a/config/nixos/docker/wireguard/docker-compose.yml +++ b/config/nixos/docker/wireguard/docker-compose.yml @@ -19,7 +19,7 @@ services: environment: - PEERS=s24,pc,laptop volumes: - - ./config:/config + - ./data:/config ports: - 51820:51820/udp sysctls: diff --git a/config/nixos/packages/common/default.nix b/config/nixos/packages/common/default.nix index 2ab9eaa..b823b82 100644 --- a/config/nixos/packages/common/default.nix +++ b/config/nixos/packages/common/default.nix @@ -6,5 +6,7 @@ yubikey-manager trash-cli 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) ]; } diff --git a/config/nixos/packages/server/mennovanleeuwen.nl/.gitignore b/config/nixos/packages/server/mennovanleeuwen.nl/.gitignore new file mode 100644 index 0000000..7773828 --- /dev/null +++ b/config/nixos/packages/server/mennovanleeuwen.nl/.gitignore @@ -0,0 +1 @@ +dist/ \ No newline at end of file diff --git a/config/nixos/packages/server/mennovanleeuwen.nl/Makefile b/config/nixos/packages/server/mennovanleeuwen.nl/Makefile new file mode 100644 index 0000000..6a00907 --- /dev/null +++ b/config/nixos/packages/server/mennovanleeuwen.nl/Makefile @@ -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; \ No newline at end of file diff --git a/config/nixos/packages/server/mennovanleeuwen.nl/css/stylesheet.css b/config/nixos/packages/server/mennovanleeuwen.nl/css/stylesheet.css new file mode 100644 index 0000000..38f086d --- /dev/null +++ b/config/nixos/packages/server/mennovanleeuwen.nl/css/stylesheet.css @@ -0,0 +1,1662 @@ +@font-face { + font-family: KaTeX_AMS; + src: url(https://static.mvl.sh/fonts/KaTeX_AMS-Regular.38a68f7.woff2) format("woff2"), + url(https://static.mvl.sh/fonts/KaTeX_AMS-Regular.7d307e8.woff) format("woff"), + url(https://static.mvl.sh/fonts/KaTeX_AMS-Regular.2dbe16b.ttf) format("truetype"); + font-weight: 400; + font-style: normal; +} +@font-face { + font-family: KaTeX_Caligraphic; + src: url(https://static.mvl.sh/fonts/KaTeX_Caligraphic-Bold.342b296.woff2) format("woff2"), + url(https://static.mvl.sh/fonts/KaTeX_Caligraphic-Bold.9634168.woff) format("woff"), + url(https://static.mvl.sh/fonts/KaTeX_Caligraphic-Bold.33d2688.ttf) format("truetype"); + font-weight: 700; + font-style: normal; +} +@font-face { + font-family: KaTeX_Caligraphic; + src: url(https://static.mvl.sh/fonts/KaTeX_Caligraphic-Regular.b500497.woff2) + format("woff2"), + url(https://static.mvl.sh/fonts/KaTeX_Caligraphic-Regular.00029fb.woff) format("woff"), + url(https://static.mvl.sh/fonts/KaTeX_Caligraphic-Regular.5e7940b.ttf) format("truetype"); + font-weight: 400; + font-style: normal; +} +@font-face { + font-family: KaTeX_Fraktur; + src: url(https://static.mvl.sh/fonts/KaTeX_Fraktur-Bold.7a3757c.woff2) format("woff2"), + url(https://static.mvl.sh/fonts/KaTeX_Fraktur-Bold.4de87d4.woff) format("woff"), + url(https://static.mvl.sh/fonts/KaTeX_Fraktur-Bold.ed33012.ttf) format("truetype"); + font-weight: 700; + font-style: normal; +} +@font-face { + font-family: KaTeX_Fraktur; + src: url(https://static.mvl.sh/fonts/KaTeX_Fraktur-Regular.450cc4d.woff2) format("woff2"), + url(https://static.mvl.sh/fonts/KaTeX_Fraktur-Regular.dc4e330.woff) format("woff"), + url(https://static.mvl.sh/fonts/KaTeX_Fraktur-Regular.82d05fe.ttf) format("truetype"); + font-weight: 400; + font-style: normal; +} +@font-face { + font-family: KaTeX_Main; + src: url(https://static.mvl.sh/fonts/KaTeX_Main-Bold.78b0124.woff2) format("woff2"), + url(https://static.mvl.sh/fonts/KaTeX_Main-Bold.62c6975.woff) format("woff"), + url(https://static.mvl.sh/fonts/KaTeX_Main-Bold.2e1915b.ttf) format("truetype"); + font-weight: 700; + font-style: normal; +} +@font-face { + font-family: KaTeX_Main; + src: url(https://static.mvl.sh/fonts/KaTeX_Main-BoldItalic.c7213ce.woff2) format("woff2"), + url(https://static.mvl.sh/fonts/KaTeX_Main-BoldItalic.a2e3dcd.woff) format("woff"), + url(https://static.mvl.sh/fonts/KaTeX_Main-BoldItalic.0d817b4.ttf) format("truetype"); + font-weight: 700; + font-style: italic; +} +@font-face { + font-family: KaTeX_Main; + src: url(https://static.mvl.sh/fonts/KaTeX_Main-Italic.eea3267.woff2) format("woff2"), + url(https://static.mvl.sh/fonts/KaTeX_Main-Italic.081073f.woff) format("woff"), + url(https://static.mvl.sh/fonts/KaTeX_Main-Italic.767e06e.ttf) format("truetype"); + font-weight: 400; + font-style: italic; +} +@font-face { + font-family: KaTeX_Main; + src: url(https://static.mvl.sh/fonts/KaTeX_Main-Regular.f30e3b2.woff2) format("woff2"), + url(https://static.mvl.sh/fonts/KaTeX_Main-Regular.756fad0.woff) format("woff"), + url(https://static.mvl.sh/fonts/KaTeX_Main-Regular.689bbe6.ttf) format("truetype"); + font-weight: 400; + font-style: normal; +} +@font-face { + font-family: KaTeX_Math; + src: url(https://static.mvl.sh/fonts/KaTeX_Math-BoldItalic.753ca3d.woff2) format("woff2"), + url(https://static.mvl.sh/fonts/KaTeX_Math-BoldItalic.b3e80ff.woff) format("woff"), + url(https://static.mvl.sh/fonts/KaTeX_Math-BoldItalic.d9377b5.ttf) format("truetype"); + font-weight: 700; + font-style: italic; +} +@font-face { + font-family: KaTeX_Math; + src: url(https://static.mvl.sh/fonts/KaTeX_Math-Italic.2a39f38.woff2) format("woff2"), + url(https://static.mvl.sh/fonts/KaTeX_Math-Italic.67710bb.woff) format("woff"), + url(https://static.mvl.sh/fonts/KaTeX_Math-Italic.0343f93.ttf) format("truetype"); + font-weight: 400; + font-style: italic; +} +@font-face { + font-family: KaTeX_SansSerif; + src: url(https://static.mvl.sh/fonts/KaTeX_SansSerif-Bold.59b3773.woff2) format("woff2"), + url(https://static.mvl.sh/fonts/KaTeX_SansSerif-Bold.f28c4fa.woff) format("woff"), + url(https://static.mvl.sh/fonts/KaTeX_SansSerif-Bold.dfcc59a.ttf) format("truetype"); + font-weight: 700; + font-style: normal; +} +@font-face { + font-family: KaTeX_SansSerif; + src: url(https://static.mvl.sh/fonts/KaTeX_SansSerif-Italic.99ad93a.woff2) format("woff2"), + url(https://static.mvl.sh/fonts/KaTeX_SansSerif-Italic.9d0fdf5.woff) format("woff"), + url(https://static.mvl.sh/fonts/KaTeX_SansSerif-Italic.3ab5188.ttf) format("truetype"); + font-weight: 400; + font-style: italic; +} +@font-face { + font-family: KaTeX_SansSerif; + src: url(https://static.mvl.sh/fonts/KaTeX_SansSerif-Regular.badf359.woff2) format("woff2"), + url(https://static.mvl.sh/fonts/KaTeX_SansSerif-Regular.6c3bd5b.woff) format("woff"), + url(https://static.mvl.sh/fonts/KaTeX_SansSerif-Regular.d511ebc.ttf) format("truetype"); + font-weight: 400; + font-style: normal; +} +@font-face { + font-family: KaTeX_Script; + src: url(https://static.mvl.sh/fonts/KaTeX_Script-Regular.af7bc98.woff2) format("woff2"), + url(https://static.mvl.sh/fonts/KaTeX_Script-Regular.4edf4e0.woff) format("woff"), + url(https://static.mvl.sh/fonts/KaTeX_Script-Regular.082640c.ttf) format("truetype"); + font-weight: 400; + font-style: normal; +} +@font-face { + font-family: KaTeX_Size1; + src: url(https://static.mvl.sh/fonts/KaTeX_Size1-Regular.10ec8be.woff2) format("woff2"), + url(https://static.mvl.sh/fonts/KaTeX_Size1-Regular.35b9977.woff) format("woff"), + url(https://static.mvl.sh/fonts/KaTeX_Size1-Regular.2c2dc3b.ttf) format("truetype"); + font-weight: 400; + font-style: normal; +} +@font-face { + font-family: KaTeX_Size2; + src: url(https://static.mvl.sh/fonts/KaTeX_Size2-Regular.96a09bf.woff2) format("woff2"), + url(https://static.mvl.sh/fonts/KaTeX_Size2-Regular.9932a08.woff) format("woff"), + url(https://static.mvl.sh/fonts/KaTeX_Size2-Regular.114ad19.ttf) format("truetype"); + font-weight: 400; + font-style: normal; +} +@font-face { + font-family: KaTeX_Size3; + src: url(https://static.mvl.sh/fonts/KaTeX_Size3-Regular.2c2f0ef.woff2) format("woff2"), + url(https://static.mvl.sh/fonts/KaTeX_Size3-Regular.2afba15.woff) format("woff"), + url(https://static.mvl.sh/fonts/KaTeX_Size3-Regular.a287c06.ttf) format("truetype"); + font-weight: 400; + font-style: normal; +} +@font-face { + font-family: KaTeX_Size4; + src: url(https://static.mvl.sh/fonts/KaTeX_Size4-Regular.d5822f1.woff2) format("woff2"), + url(https://static.mvl.sh/fonts/KaTeX_Size4-Regular.f961545.woff) format("woff"), + url(https://static.mvl.sh/fonts/KaTeX_Size4-Regular.70174da.ttf) format("truetype"); + font-weight: 400; + font-style: normal; +} +@font-face { + font-family: KaTeX_Typewriter; + src: url(https://static.mvl.sh/fonts/KaTeX_Typewriter-Regular.641339e.woff2) format("woff2"), + url(https://static.mvl.sh/fonts/KaTeX_Typewriter-Regular.53dcf86.woff) format("woff"), + url(https://static.mvl.sh/fonts/KaTeX_Typewriter-Regular.35fe2cc.ttf) format("truetype"); + font-weight: 400; + font-style: normal; +} +.katex { + font: normal 1.21em KaTeX_Main, Times New Roman, serif; + line-height: 1.2; + text-indent: 0; + text-rendering: auto; + border-color: currentColor; +} +.katex * { + -ms-high-contrast-adjust: none !important; +} +.katex .katex-version:after { + content: "0.13.0"; +} +.katex .katex-mathml { + position: absolute; + clip: rect(1px, 1px, 1px, 1px); + padding: 0; + border: 0; + height: 1px; + width: 1px; + overflow: hidden; +} +.katex .katex-html > .newline { + display: block; +} +.katex .base { + position: relative; + white-space: nowrap; + width: -webkit-min-content; + width: -moz-min-content; + width: min-content; +} +.katex .base, +.katex .strut { + display: inline-block; +} +.katex .textbf { + font-weight: 700; +} +.katex .textit { + font-style: italic; +} +.katex .textrm { + font-family: KaTeX_Main; +} +.katex .textsf { + font-family: KaTeX_SansSerif; +} +.katex .texttt { + font-family: KaTeX_Typewriter; +} +.katex .mathnormal { + font-family: KaTeX_Math; + font-style: italic; +} +.katex .mathit { + font-family: KaTeX_Main; + font-style: italic; +} +.katex .mathrm { + font-style: normal; +} +.katex .mathbf { + font-family: KaTeX_Main; + font-weight: 700; +} +.katex .boldsymbol { + font-family: KaTeX_Math; + font-weight: 700; + font-style: italic; +} +.katex .amsrm, +.katex .mathbb, +.katex .textbb { + font-family: KaTeX_AMS; +} +.katex .mathcal { + font-family: KaTeX_Caligraphic; +} +.katex .mathfrak, +.katex .textfrak { + font-family: KaTeX_Fraktur; +} +.katex .mathtt { + font-family: KaTeX_Typewriter; +} +.katex .mathscr, +.katex .textscr { + font-family: KaTeX_Script; +} +.katex .mathsf, +.katex .textsf { + font-family: KaTeX_SansSerif; +} +.katex .mathboldsf, +.katex .textboldsf { + font-family: KaTeX_SansSerif; + font-weight: 700; +} +.katex .mathitsf, +.katex .textitsf { + font-family: KaTeX_SansSerif; + font-style: italic; +} +.katex .mainrm { + font-family: KaTeX_Main; + font-style: normal; +} +.katex .vlist-t { + display: inline-table; + table-layout: fixed; + border-collapse: collapse; +} +.katex .vlist-r { + display: table-row; +} +.katex .vlist { + display: table-cell; + vertical-align: bottom; + position: relative; +} +.katex .vlist > span { + display: block; + height: 0; + position: relative; +} +.katex .vlist > span > span { + display: inline-block; +} +.katex .vlist > span > .pstrut { + overflow: hidden; + width: 0; +} +.katex .vlist-t2 { + margin-right: -2px; +} +.katex .vlist-s { + display: table-cell; + vertical-align: bottom; + font-size: 1px; + width: 2px; + min-width: 2px; +} +.katex .vbox { + display: inline-flex; + flex-direction: column; + align-items: baseline; +} +.katex .hbox { + width: 100%; +} +.katex .hbox, +.katex .thinbox { + display: inline-flex; + flex-direction: row; +} +.katex .thinbox { + width: 0; + max-width: 0; +} +.katex .msupsub { + text-align: left; +} +.katex .mfrac > span > span { + text-align: center; +} +.katex .mfrac .frac-line { + display: inline-block; + width: 100%; + border-bottom-style: solid; +} +.katex .hdashline, +.katex .hline, +.katex .mfrac .frac-line, +.katex .overline .overline-line, +.katex .rule, +.katex .underline .underline-line { + min-height: 1px; +} +.katex .mspace { + display: inline-block; +} +.katex .clap, +.katex .llap, +.katex .rlap { + width: 0; + position: relative; +} +.katex .clap > .inner, +.katex .llap > .inner, +.katex .rlap > .inner { + position: absolute; +} +.katex .clap > .fix, +.katex .llap > .fix, +.katex .rlap > .fix { + display: inline-block; +} +.katex .llap > .inner { + right: 0; +} +.katex .clap > .inner, +.katex .rlap > .inner { + left: 0; +} +.katex .clap > .inner > span { + margin-left: -50%; + margin-right: 50%; +} +.katex .rule { + display: inline-block; + border: 0 solid; + position: relative; +} +.katex .hline, +.katex .overline .overline-line, +.katex .underline .underline-line { + display: inline-block; + width: 100%; + border-bottom-style: solid; +} +.katex .hdashline { + display: inline-block; + width: 100%; + border-bottom-style: dashed; +} +.katex .sqrt > .root { + margin-left: 0.27777778em; + margin-right: -0.55555556em; +} +.katex .fontsize-ensurer.reset-size1.size1, +.katex .sizing.reset-size1.size1 { + font-size: 1em; +} +.katex .fontsize-ensurer.reset-size1.size2, +.katex .sizing.reset-size1.size2 { + font-size: 1.2em; +} +.katex .fontsize-ensurer.reset-size1.size3, +.katex .sizing.reset-size1.size3 { + font-size: 1.4em; +} +.katex .fontsize-ensurer.reset-size1.size4, +.katex .sizing.reset-size1.size4 { + font-size: 1.6em; +} +.katex .fontsize-ensurer.reset-size1.size5, +.katex .sizing.reset-size1.size5 { + font-size: 1.8em; +} +.katex .fontsize-ensurer.reset-size1.size6, +.katex .sizing.reset-size1.size6 { + font-size: 2em; +} +.katex .fontsize-ensurer.reset-size1.size7, +.katex .sizing.reset-size1.size7 { + font-size: 2.4em; +} +.katex .fontsize-ensurer.reset-size1.size8, +.katex .sizing.reset-size1.size8 { + font-size: 2.88em; +} +.katex .fontsize-ensurer.reset-size1.size9, +.katex .sizing.reset-size1.size9 { + font-size: 3.456em; +} +.katex .fontsize-ensurer.reset-size1.size10, +.katex .sizing.reset-size1.size10 { + font-size: 4.148em; +} +.katex .fontsize-ensurer.reset-size1.size11, +.katex .sizing.reset-size1.size11 { + font-size: 4.976em; +} +.katex .fontsize-ensurer.reset-size2.size1, +.katex .sizing.reset-size2.size1 { + font-size: 0.83333333em; +} +.katex .fontsize-ensurer.reset-size2.size2, +.katex .sizing.reset-size2.size2 { + font-size: 1em; +} +.katex .fontsize-ensurer.reset-size2.size3, +.katex .sizing.reset-size2.size3 { + font-size: 1.16666667em; +} +.katex .fontsize-ensurer.reset-size2.size4, +.katex .sizing.reset-size2.size4 { + font-size: 1.33333333em; +} +.katex .fontsize-ensurer.reset-size2.size5, +.katex .sizing.reset-size2.size5 { + font-size: 1.5em; +} +.katex .fontsize-ensurer.reset-size2.size6, +.katex .sizing.reset-size2.size6 { + font-size: 1.66666667em; +} +.katex .fontsize-ensurer.reset-size2.size7, +.katex .sizing.reset-size2.size7 { + font-size: 2em; +} +.katex .fontsize-ensurer.reset-size2.size8, +.katex .sizing.reset-size2.size8 { + font-size: 2.4em; +} +.katex .fontsize-ensurer.reset-size2.size9, +.katex .sizing.reset-size2.size9 { + font-size: 2.88em; +} +.katex .fontsize-ensurer.reset-size2.size10, +.katex .sizing.reset-size2.size10 { + font-size: 3.45666667em; +} +.katex .fontsize-ensurer.reset-size2.size11, +.katex .sizing.reset-size2.size11 { + font-size: 4.14666667em; +} +.katex .fontsize-ensurer.reset-size3.size1, +.katex .sizing.reset-size3.size1 { + font-size: 0.71428571em; +} +.katex .fontsize-ensurer.reset-size3.size2, +.katex .sizing.reset-size3.size2 { + font-size: 0.85714286em; +} +.katex .fontsize-ensurer.reset-size3.size3, +.katex .sizing.reset-size3.size3 { + font-size: 1em; +} +.katex .fontsize-ensurer.reset-size3.size4, +.katex .sizing.reset-size3.size4 { + font-size: 1.14285714em; +} +.katex .fontsize-ensurer.reset-size3.size5, +.katex .sizing.reset-size3.size5 { + font-size: 1.28571429em; +} +.katex .fontsize-ensurer.reset-size3.size6, +.katex .sizing.reset-size3.size6 { + font-size: 1.42857143em; +} +.katex .fontsize-ensurer.reset-size3.size7, +.katex .sizing.reset-size3.size7 { + font-size: 1.71428571em; +} +.katex .fontsize-ensurer.reset-size3.size8, +.katex .sizing.reset-size3.size8 { + font-size: 2.05714286em; +} +.katex .fontsize-ensurer.reset-size3.size9, +.katex .sizing.reset-size3.size9 { + font-size: 2.46857143em; +} +.katex .fontsize-ensurer.reset-size3.size10, +.katex .sizing.reset-size3.size10 { + font-size: 2.96285714em; +} +.katex .fontsize-ensurer.reset-size3.size11, +.katex .sizing.reset-size3.size11 { + font-size: 3.55428571em; +} +.katex .fontsize-ensurer.reset-size4.size1, +.katex .sizing.reset-size4.size1 { + font-size: 0.625em; +} +.katex .fontsize-ensurer.reset-size4.size2, +.katex .sizing.reset-size4.size2 { + font-size: 0.75em; +} +.katex .fontsize-ensurer.reset-size4.size3, +.katex .sizing.reset-size4.size3 { + font-size: 0.875em; +} +.katex .fontsize-ensurer.reset-size4.size4, +.katex .sizing.reset-size4.size4 { + font-size: 1em; +} +.katex .fontsize-ensurer.reset-size4.size5, +.katex .sizing.reset-size4.size5 { + font-size: 1.125em; +} +.katex .fontsize-ensurer.reset-size4.size6, +.katex .sizing.reset-size4.size6 { + font-size: 1.25em; +} +.katex .fontsize-ensurer.reset-size4.size7, +.katex .sizing.reset-size4.size7 { + font-size: 1.5em; +} +.katex .fontsize-ensurer.reset-size4.size8, +.katex .sizing.reset-size4.size8 { + font-size: 1.8em; +} +.katex .fontsize-ensurer.reset-size4.size9, +.katex .sizing.reset-size4.size9 { + font-size: 2.16em; +} +.katex .fontsize-ensurer.reset-size4.size10, +.katex .sizing.reset-size4.size10 { + font-size: 2.5925em; +} +.katex .fontsize-ensurer.reset-size4.size11, +.katex .sizing.reset-size4.size11 { + font-size: 3.11em; +} +.katex .fontsize-ensurer.reset-size5.size1, +.katex .sizing.reset-size5.size1 { + font-size: 0.55555556em; +} +.katex .fontsize-ensurer.reset-size5.size2, +.katex .sizing.reset-size5.size2 { + font-size: 0.66666667em; +} +.katex .fontsize-ensurer.reset-size5.size3, +.katex .sizing.reset-size5.size3 { + font-size: 0.77777778em; +} +.katex .fontsize-ensurer.reset-size5.size4, +.katex .sizing.reset-size5.size4 { + font-size: 0.88888889em; +} +.katex .fontsize-ensurer.reset-size5.size5, +.katex .sizing.reset-size5.size5 { + font-size: 1em; +} +.katex .fontsize-ensurer.reset-size5.size6, +.katex .sizing.reset-size5.size6 { + font-size: 1.11111111em; +} +.katex .fontsize-ensurer.reset-size5.size7, +.katex .sizing.reset-size5.size7 { + font-size: 1.33333333em; +} +.katex .fontsize-ensurer.reset-size5.size8, +.katex .sizing.reset-size5.size8 { + font-size: 1.6em; +} +.katex .fontsize-ensurer.reset-size5.size9, +.katex .sizing.reset-size5.size9 { + font-size: 1.92em; +} +.katex .fontsize-ensurer.reset-size5.size10, +.katex .sizing.reset-size5.size10 { + font-size: 2.30444444em; +} +.katex .fontsize-ensurer.reset-size5.size11, +.katex .sizing.reset-size5.size11 { + font-size: 2.76444444em; +} +.katex .fontsize-ensurer.reset-size6.size1, +.katex .sizing.reset-size6.size1 { + font-size: 0.5em; +} +.katex .fontsize-ensurer.reset-size6.size2, +.katex .sizing.reset-size6.size2 { + font-size: 0.6em; +} +.katex .fontsize-ensurer.reset-size6.size3, +.katex .sizing.reset-size6.size3 { + font-size: 0.7em; +} +.katex .fontsize-ensurer.reset-size6.size4, +.katex .sizing.reset-size6.size4 { + font-size: 0.8em; +} +.katex .fontsize-ensurer.reset-size6.size5, +.katex .sizing.reset-size6.size5 { + font-size: 0.9em; +} +.katex .fontsize-ensurer.reset-size6.size6, +.katex .sizing.reset-size6.size6 { + font-size: 1em; +} +.katex .fontsize-ensurer.reset-size6.size7, +.katex .sizing.reset-size6.size7 { + font-size: 1.2em; +} +.katex .fontsize-ensurer.reset-size6.size8, +.katex .sizing.reset-size6.size8 { + font-size: 1.44em; +} +.katex .fontsize-ensurer.reset-size6.size9, +.katex .sizing.reset-size6.size9 { + font-size: 1.728em; +} +.katex .fontsize-ensurer.reset-size6.size10, +.katex .sizing.reset-size6.size10 { + font-size: 2.074em; +} +.katex .fontsize-ensurer.reset-size6.size11, +.katex .sizing.reset-size6.size11 { + font-size: 2.488em; +} +.katex .fontsize-ensurer.reset-size7.size1, +.katex .sizing.reset-size7.size1 { + font-size: 0.41666667em; +} +.katex .fontsize-ensurer.reset-size7.size2, +.katex .sizing.reset-size7.size2 { + font-size: 0.5em; +} +.katex .fontsize-ensurer.reset-size7.size3, +.katex .sizing.reset-size7.size3 { + font-size: 0.58333333em; +} +.katex .fontsize-ensurer.reset-size7.size4, +.katex .sizing.reset-size7.size4 { + font-size: 0.66666667em; +} +.katex .fontsize-ensurer.reset-size7.size5, +.katex .sizing.reset-size7.size5 { + font-size: 0.75em; +} +.katex .fontsize-ensurer.reset-size7.size6, +.katex .sizing.reset-size7.size6 { + font-size: 0.83333333em; +} +.katex .fontsize-ensurer.reset-size7.size7, +.katex .sizing.reset-size7.size7 { + font-size: 1em; +} +.katex .fontsize-ensurer.reset-size7.size8, +.katex .sizing.reset-size7.size8 { + font-size: 1.2em; +} +.katex .fontsize-ensurer.reset-size7.size9, +.katex .sizing.reset-size7.size9 { + font-size: 1.44em; +} +.katex .fontsize-ensurer.reset-size7.size10, +.katex .sizing.reset-size7.size10 { + font-size: 1.72833333em; +} +.katex .fontsize-ensurer.reset-size7.size11, +.katex .sizing.reset-size7.size11 { + font-size: 2.07333333em; +} +.katex .fontsize-ensurer.reset-size8.size1, +.katex .sizing.reset-size8.size1 { + font-size: 0.34722222em; +} +.katex .fontsize-ensurer.reset-size8.size2, +.katex .sizing.reset-size8.size2 { + font-size: 0.41666667em; +} +.katex .fontsize-ensurer.reset-size8.size3, +.katex .sizing.reset-size8.size3 { + font-size: 0.48611111em; +} +.katex .fontsize-ensurer.reset-size8.size4, +.katex .sizing.reset-size8.size4 { + font-size: 0.55555556em; +} +.katex .fontsize-ensurer.reset-size8.size5, +.katex .sizing.reset-size8.size5 { + font-size: 0.625em; +} +.katex .fontsize-ensurer.reset-size8.size6, +.katex .sizing.reset-size8.size6 { + font-size: 0.69444444em; +} +.katex .fontsize-ensurer.reset-size8.size7, +.katex .sizing.reset-size8.size7 { + font-size: 0.83333333em; +} +.katex .fontsize-ensurer.reset-size8.size8, +.katex .sizing.reset-size8.size8 { + font-size: 1em; +} +.katex .fontsize-ensurer.reset-size8.size9, +.katex .sizing.reset-size8.size9 { + font-size: 1.2em; +} +.katex .fontsize-ensurer.reset-size8.size10, +.katex .sizing.reset-size8.size10 { + font-size: 1.44027778em; +} +.katex .fontsize-ensurer.reset-size8.size11, +.katex .sizing.reset-size8.size11 { + font-size: 1.72777778em; +} +.katex .fontsize-ensurer.reset-size9.size1, +.katex .sizing.reset-size9.size1 { + font-size: 0.28935185em; +} +.katex .fontsize-ensurer.reset-size9.size2, +.katex .sizing.reset-size9.size2 { + font-size: 0.34722222em; +} +.katex .fontsize-ensurer.reset-size9.size3, +.katex .sizing.reset-size9.size3 { + font-size: 0.40509259em; +} +.katex .fontsize-ensurer.reset-size9.size4, +.katex .sizing.reset-size9.size4 { + font-size: 0.46296296em; +} +.katex .fontsize-ensurer.reset-size9.size5, +.katex .sizing.reset-size9.size5 { + font-size: 0.52083333em; +} +.katex .fontsize-ensurer.reset-size9.size6, +.katex .sizing.reset-size9.size6 { + font-size: 0.5787037em; +} +.katex .fontsize-ensurer.reset-size9.size7, +.katex .sizing.reset-size9.size7 { + font-size: 0.69444444em; +} +.katex .fontsize-ensurer.reset-size9.size8, +.katex .sizing.reset-size9.size8 { + font-size: 0.83333333em; +} +.katex .fontsize-ensurer.reset-size9.size9, +.katex .sizing.reset-size9.size9 { + font-size: 1em; +} +.katex .fontsize-ensurer.reset-size9.size10, +.katex .sizing.reset-size9.size10 { + font-size: 1.20023148em; +} +.katex .fontsize-ensurer.reset-size9.size11, +.katex .sizing.reset-size9.size11 { + font-size: 1.43981481em; +} +.katex .fontsize-ensurer.reset-size10.size1, +.katex .sizing.reset-size10.size1 { + font-size: 0.24108004em; +} +.katex .fontsize-ensurer.reset-size10.size2, +.katex .sizing.reset-size10.size2 { + font-size: 0.28929605em; +} +.katex .fontsize-ensurer.reset-size10.size3, +.katex .sizing.reset-size10.size3 { + font-size: 0.33751205em; +} +.katex .fontsize-ensurer.reset-size10.size4, +.katex .sizing.reset-size10.size4 { + font-size: 0.38572806em; +} +.katex .fontsize-ensurer.reset-size10.size5, +.katex .sizing.reset-size10.size5 { + font-size: 0.43394407em; +} +.katex .fontsize-ensurer.reset-size10.size6, +.katex .sizing.reset-size10.size6 { + font-size: 0.48216008em; +} +.katex .fontsize-ensurer.reset-size10.size7, +.katex .sizing.reset-size10.size7 { + font-size: 0.57859209em; +} +.katex .fontsize-ensurer.reset-size10.size8, +.katex .sizing.reset-size10.size8 { + font-size: 0.69431051em; +} +.katex .fontsize-ensurer.reset-size10.size9, +.katex .sizing.reset-size10.size9 { + font-size: 0.83317261em; +} +.katex .fontsize-ensurer.reset-size10.size10, +.katex .sizing.reset-size10.size10 { + font-size: 1em; +} +.katex .fontsize-ensurer.reset-size10.size11, +.katex .sizing.reset-size10.size11 { + font-size: 1.19961427em; +} +.katex .fontsize-ensurer.reset-size11.size1, +.katex .sizing.reset-size11.size1 { + font-size: 0.20096463em; +} +.katex .fontsize-ensurer.reset-size11.size2, +.katex .sizing.reset-size11.size2 { + font-size: 0.24115756em; +} +.katex .fontsize-ensurer.reset-size11.size3, +.katex .sizing.reset-size11.size3 { + font-size: 0.28135048em; +} +.katex .fontsize-ensurer.reset-size11.size4, +.katex .sizing.reset-size11.size4 { + font-size: 0.32154341em; +} +.katex .fontsize-ensurer.reset-size11.size5, +.katex .sizing.reset-size11.size5 { + font-size: 0.36173633em; +} +.katex .fontsize-ensurer.reset-size11.size6, +.katex .sizing.reset-size11.size6 { + font-size: 0.40192926em; +} +.katex .fontsize-ensurer.reset-size11.size7, +.katex .sizing.reset-size11.size7 { + font-size: 0.48231511em; +} +.katex .fontsize-ensurer.reset-size11.size8, +.katex .sizing.reset-size11.size8 { + font-size: 0.57877814em; +} +.katex .fontsize-ensurer.reset-size11.size9, +.katex .sizing.reset-size11.size9 { + font-size: 0.69453376em; +} +.katex .fontsize-ensurer.reset-size11.size10, +.katex .sizing.reset-size11.size10 { + font-size: 0.83360129em; +} +.katex .fontsize-ensurer.reset-size11.size11, +.katex .sizing.reset-size11.size11 { + font-size: 1em; +} +.katex .delimsizing.size1 { + font-family: KaTeX_Size1; +} +.katex .delimsizing.size2 { + font-family: KaTeX_Size2; +} +.katex .delimsizing.size3 { + font-family: KaTeX_Size3; +} +.katex .delimsizing.size4 { + font-family: KaTeX_Size4; +} +.katex .delimsizing.mult .delim-size1 > span { + font-family: KaTeX_Size1; +} +.katex .delimsizing.mult .delim-size4 > span { + font-family: KaTeX_Size4; +} +.katex .nulldelimiter { + display: inline-block; + width: 0.12em; +} +.katex .delimcenter, +.katex .op-symbol { + position: relative; +} +.katex .op-symbol.small-op { + font-family: KaTeX_Size1; +} +.katex .op-symbol.large-op { + font-family: KaTeX_Size2; +} +.katex .accent > .vlist-t, +.katex .op-limits > .vlist-t { + text-align: center; +} +.katex .accent .accent-body { + position: relative; +} +.katex .accent .accent-body:not(.accent-full) { + width: 0; +} +.katex .overlay { + display: block; +} +.katex .mtable .vertical-separator { + display: inline-block; + min-width: 1px; +} +.katex .mtable .arraycolsep { + display: inline-block; +} +.katex .mtable .col-align-c > .vlist-t { + text-align: center; +} +.katex .mtable .col-align-l > .vlist-t { + text-align: left; +} +.katex .mtable .col-align-r > .vlist-t { + text-align: right; +} +.katex .svg-align { + text-align: left; +} +.katex svg { + display: block; + position: absolute; + width: 100%; + height: inherit; + fill: currentColor; + stroke: currentColor; + fill-rule: nonzero; + fill-opacity: 1; + stroke-width: 1; + stroke-linecap: butt; + stroke-linejoin: miter; + stroke-miterlimit: 4; + stroke-dasharray: none; + stroke-dashoffset: 0; + stroke-opacity: 1; +} +.katex svg path { + stroke: none; +} +.katex img { + border-style: none; + min-width: 0; + min-height: 0; + max-width: none; + max-height: none; +} +.katex .stretchy { + width: 100%; + display: block; + position: relative; + overflow: hidden; +} +.katex .stretchy:after, +.katex .stretchy:before { + content: ""; +} +.katex .hide-tail { + width: 100%; + position: relative; + overflow: hidden; +} +.katex .halfarrow-left { + position: absolute; + left: 0; + width: 50.2%; + overflow: hidden; +} +.katex .halfarrow-right { + position: absolute; + right: 0; + width: 50.2%; + overflow: hidden; +} +.katex .brace-left { + position: absolute; + left: 0; + width: 25.1%; + overflow: hidden; +} +.katex .brace-center { + position: absolute; + left: 25%; + width: 50%; + overflow: hidden; +} +.katex .brace-right { + position: absolute; + right: 0; + width: 25.1%; + overflow: hidden; +} +.katex .x-arrow-pad { + padding: 0 0.5em; +} +.katex .cd-arrow-pad { + padding: 0 0.55556em 0 0.27778em; +} +.katex .mover, +.katex .munder, +.katex .x-arrow { + text-align: center; +} +.katex .boxpad { + padding: 0 0.3em; +} +.katex .fbox, +.katex .fcolorbox { + box-sizing: border-box; + border: 0.04em solid; +} +.katex .cancel-pad { + padding: 0 0.2em; +} +.katex .cancel-lap { + margin-left: -0.2em; + margin-right: -0.2em; +} +.katex .sout { + border-bottom-style: solid; + border-bottom-width: 0.08em; +} +.katex .angl { + box-sizing: border-content; + border-top: 0.049em solid; + border-right: 0.049em solid; + margin-right: 0.03889em; +} +.katex .anglpad { + padding: 0 0.03889em; +} +.katex .eqn-num:before { + counter-increment: a; + content: "(" counter(a) ")"; +} +.katex .mml-eqn-num:before { + counter-increment: b; + content: "(" counter(b) ")"; +} +.katex .mtr-glue { + width: 50%; +} +.katex .cd-vert-arrow { + display: inline-block; + position: relative; +} +.katex .cd-label-left { + display: inline-block; + position: absolute; + right: calc(50% + 0.3em); + text-align: left; +} +.katex .cd-label-right { + display: inline-block; + position: absolute; + left: calc(50% + 0.3em); + text-align: right; +} +.katex-display { + display: block; + margin: 1em 0; + text-align: center; +} +.katex-display > .katex { + display: block; + text-align: center; + white-space: nowrap; +} +.katex-display > .katex > .katex-html { + display: block; + position: relative; +} +.katex-display > .katex > .katex-html > .tag { + position: absolute; + right: 0; +} +.katex-display.leqno > .katex > .katex-html > .tag { + left: 0; + right: auto; +} +.katex-display.fleqn > .katex { + text-align: left; + padding-left: 2em; +} +body { + counter-reset: a b; +} +@font-face { + font-family: Lato; + font-style: normal; + font-weight: 400; + src: url(https://static.mvl.sh/fonts/lato-normal.27bd77b.woff) format("woff"); +} +@font-face { + font-family: Lato; + font-style: italic; + font-weight: 400; + src: url(https://static.mvl.sh/fonts/lato-normal-italic.f28f2d6.woff) format("woff"); +} +@font-face { + font-family: Lato; + font-style: normal; + font-weight: 600; + src: url(https://static.mvl.sh/fonts/lato-black.f80bda6.woff) format("woff"); +} +@font-face { + font-family: Lato; + font-style: italic; + font-weight: 600; + src: url(https://static.mvl.sh/fonts/lato-black-italic.798eafd.woff) format("woff"); +} +@font-face { + font-family: Roboto Mono; + font-style: normal; + font-weight: 400; + src: url(https://static.mvl.sh/fonts/RobotoMono-Regular.0b6a547.woff) format("woff"); +} +@font-face { + font-family: Roboto Mono; + font-style: normal; + font-weight: 600; + src: url(https://static.mvl.sh/fonts/RobotoMono-Bold.819f3b2.woff) format("woff"); +} +.prism *, +.token.pre.gfm * { + font-weight: inherit !important; +} +.prism .token.cdata, +.prism .token.comment, +.prism .token.doctype, +.prism .token.prolog, +.token.pre.gfm .token.cdata, +.token.pre.gfm .token.comment, +.token.pre.gfm .token.doctype, +.token.pre.gfm .token.prolog { + color: #708090; +} +.prism .token.punctuation, +.token.pre.gfm .token.punctuation { + color: #999; +} +.prism .namespace, +.token.pre.gfm .namespace { + opacity: 0.7; +} +.prism .token.boolean, +.prism .token.constant, +.prism .token.deleted, +.prism .token.number, +.prism .token.property, +.prism .token.symbol, +.prism .token.tag, +.token.pre.gfm .token.boolean, +.token.pre.gfm .token.constant, +.token.pre.gfm .token.deleted, +.token.pre.gfm .token.number, +.token.pre.gfm .token.property, +.token.pre.gfm .token.symbol, +.token.pre.gfm .token.tag { + color: #905; +} +.prism .token.attr-name, +.prism .token.builtin, +.prism .token.char, +.prism .token.inserted, +.prism .token.selector, +.prism .token.string, +.token.pre.gfm .token.attr-name, +.token.pre.gfm .token.builtin, +.token.pre.gfm .token.char, +.token.pre.gfm .token.inserted, +.token.pre.gfm .token.selector, +.token.pre.gfm .token.string { + color: #690; +} +.prism .language-css .token.string, +.prism .style .token.string, +.prism .token.entity, +.prism .token.operator, +.prism .token.url, +.token.pre.gfm .language-css .token.string, +.token.pre.gfm .style .token.string, +.token.pre.gfm .token.entity, +.token.pre.gfm .token.operator, +.token.pre.gfm .token.url { + color: #a67f59; +} +.prism .token.atrule, +.prism .token.attr-value, +.prism .token.keyword, +.token.pre.gfm .token.atrule, +.token.pre.gfm .token.attr-value, +.token.pre.gfm .token.keyword { + color: #07a; +} +.prism .token.function, +.token.pre.gfm .token.function { + color: #dd4a68; +} +.prism .token.important, +.prism .token.regex, +.prism .token.variable, +.token.pre.gfm .token.important, +.token.pre.gfm .token.regex, +.token.pre.gfm .token.variable { + color: #e90; +} +.prism .token.bold, +.prism .token.important, +.token.pre.gfm .token.bold, +.token.pre.gfm .token.important { + font-weight: 500; +} +.prism .token.italic, +.token.pre.gfm .token.italic { + font-style: italic; +} /*! normalize-scss | MIT/GPLv2 License | bit.ly/normalize-scss */ +html { + line-height: 1.15; + -ms-text-size-adjust: 100%; + -webkit-text-size-adjust: 100%; +} +body { + margin: 0; +} +article, +aside, +footer, +header, +nav, +section { + display: block; +} +h1 { + font-size: 2em; + margin: 0.67em 0; +} +figcaption, +figure { + display: block; +} +figure { + margin: 1em 40px; +} +hr { + box-sizing: content-box; + height: 0; + overflow: visible; +} +main { + display: block; +} +pre { + font-family: monospace, monospace; + font-size: 1em; +} +a { + background-color: transparent; + -webkit-text-decoration-skip: objects; +} +abbr[title] { + border-bottom: none; + text-decoration: underline; + text-decoration: underline dotted; +} +b, +strong { + font-weight: inherit; + font-weight: bolder; +} +code, +kbd, +samp { + font-family: monospace, monospace; + font-size: 1em; +} +dfn { + font-style: italic; +} +mark { + background-color: #ff0; + color: #000; +} +small { + font-size: 80%; +} +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} +sub { + bottom: -0.25em; +} +sup { + top: -0.5em; +} +audio, +video { + display: inline-block; +} +audio:not([controls]) { + display: none; + height: 0; +} +img { + border-style: none; +} +svg:not(:root) { + overflow: hidden; +} +button, +input, +optgroup, +select, +textarea { + font-family: sans-serif; + font-size: 100%; + line-height: 1.15; + margin: 0; +} +button { + overflow: visible; +} +button, +select { + text-transform: none; +} +[type="reset"], +[type="submit"], +button, +html [type="button"] { + -webkit-appearance: button; +} +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner, +button::-moz-focus-inner { + border-style: none; + padding: 0; +} +[type="button"]:-moz-focusring, +[type="reset"]:-moz-focusring, +[type="submit"]:-moz-focusring, +button:-moz-focusring { + outline: 1px dotted ButtonText; +} +input { + overflow: visible; +} +[type="checkbox"], +[type="radio"] { + box-sizing: border-box; + padding: 0; +} +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} +[type="search"] { + -webkit-appearance: textfield; + outline-offset: -2px; +} +[type="search"]::-webkit-search-cancel-button, +[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} +::-webkit-file-upload-button { + -webkit-appearance: button; + font: inherit; +} +fieldset { + padding: 0.35em 0.75em 0.625em; +} +legend { + box-sizing: border-box; + display: table; + max-width: 100%; + padding: 0; + color: inherit; + white-space: normal; +} +progress { + display: inline-block; + vertical-align: baseline; +} +textarea { + overflow: auto; +} +details { + display: block; +} +summary { + display: list-item; +} +menu { + display: block; +} +canvas { + display: inline-block; +} +[hidden], +template { + display: none; +} +body, +html { + color: rgba(0, 0, 0, 0.75); + font-size: 16px; + font-family: Lato, Helvetica Neue, Helvetica, sans-serif; + font-variant-ligatures: common-ligatures; + line-height: 1.67; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.app--dark .layout__panel--editor, +.app--dark .layout__panel--preview { + color: hsla(0, 0%, 100%, 0.75); +} +blockquote, +dl, +ol, +p, +pre, +ul { + margin: 1.2em 0; +} +h1, +h2, +h3, +h4, +h5, +h6 { + margin: 1.8em 0; + line-height: 1.33; +} +h1:after, +h2:after { + content: ""; + display: block; + position: relative; + top: 0.33em; + border-bottom: 1px solid hsla(0, 0%, 50%, 0.33); +} +ol ol, +ol ul, +ul ol, +ul ul { + margin: 0; +} +dt { + font-weight: 700; +} +a { + color: #0c93e4; + text-decoration: underline; + text-decoration-skip: ink; +} +a:focus, +a:hover { + text-decoration: none; +} +code, +pre, +samp { + font-family: Roboto Mono, Lucida Sans Typewriter, Lucida Console, monaco, + Courrier, monospace; + font-size: 0.85em; +} +code *, +pre *, +samp * { + font-size: inherit; +} +blockquote { + color: rgba(0, 0, 0, 0.5); + padding-left: 1.5em; + border-left: 5px solid rgba(0, 0, 0, 0.1); +} +.app--dark .layout__panel--editor blockquote, +.app--dark .layout__panel--preview blockquote { + color: hsla(0, 0%, 100%, 0.4); + border-left-color: hsla(0, 0%, 100%, 0.1); +} +code { + background-color: rgba(0, 0, 0, 0.05); + border-radius: 3px; + padding: 2px 4px; +} +hr { + border: 0; + border-top: 1px solid hsla(0, 0%, 50%, 0.33); + margin: 2em 0; +} +pre > code { + background-color: rgba(0, 0, 0, 0.05); + display: block; + padding: 0.5em; + -webkit-text-size-adjust: none; + overflow-x: auto; + white-space: pre; +} +.toc ul { + list-style-type: none; + padding-left: 20px; +} +table { + background-color: transparent; + border-collapse: collapse; + border-spacing: 0; +} +td, +th { + border-right: 1px solid #dcdcdc; + padding: 8px 12px; +} +td:last-child, +th:last-child { + border-right: 0; +} +td { + border-top: 1px solid #dcdcdc; +} +mark { + background-color: #f8f840; +} +kbd { + font-family: Lato, Helvetica Neue, Helvetica, sans-serif; + background-color: #fff; + border: 1px solid rgba(63, 63, 63, 0.25); + border-radius: 3px; + box-shadow: 0 1px 0 rgba(63, 63, 63, 0.25); + color: #333; + display: inline-block; + font-size: 0.8em; + margin: 0 0.1em; + padding: 0.1em 0.6em; + white-space: nowrap; +} +abbr[title] { + border-bottom: 1px dotted #777; + cursor: help; +} +img { + max-width: 100%; +} +.task-list-item { + list-style-type: none; +} +.task-list-item-checkbox { + margin: 0 0.2em 0 -1.3em; +} +.footnote { + font-size: 0.8em; + position: relative; + top: -0.25em; + vertical-align: top; +} +.page-break-after { + page-break-after: always; +} +.abc-notation-block { + overflow-x: auto !important; +} +.stackedit__html { + margin-bottom: 180px; + margin-left: auto; + margin-right: auto; + padding-left: 30px; + padding-right: 30px; + max-width: 750px; +} +.stackedit__toc ul { + padding: 0; +} +.stackedit__toc ul a { + margin: 0.5rem 0; + padding: 0.5rem 1rem; +} +.stackedit__toc ul ul { + color: #888; + font-size: 0.9em; +} +.stackedit__toc ul ul a { + margin: 0; + padding: 0.1rem 1rem; +} +.stackedit__toc li { + display: block; +} +.stackedit__toc a { + display: block; + color: inherit; + text-decoration: none; +} +.stackedit__toc a:active, +.stackedit__toc a:focus, +.stackedit__toc a:hover { + background-color: rgba(0, 0, 0, 0.075); + border-radius: 3px; +} +.stackedit__left { + position: fixed; + display: none; + width: 250px; + height: 100%; + top: 0; + left: 0; + overflow-x: hidden; + overflow-y: auto; + -webkit-overflow-scrolling: touch; + -ms-overflow-style: none; +} +@media (min-width: 1060px) { + .stackedit__left { + display: block; + } +} +.stackedit__right { + position: absolute; + right: 0; + top: 0; + left: 0; +} +@media (min-width: 1060px) { + .stackedit__right { + left: 250px; + } +} +.stackedit--pdf blockquote { + border-left-color: #ececec; +} +.stackedit--pdf .katex-mathml, +.stackedit--pdf annotation { + display: none; +} +.stackedit--pdf .stackedit__html { + padding-left: 0; + padding-right: 0; + max-width: none; +} diff --git a/config/nixos/packages/server/mennovanleeuwen.nl/index.md b/config/nixos/packages/server/mennovanleeuwen.nl/index.md new file mode 100644 index 0000000..e0706ac --- /dev/null +++ b/config/nixos/packages/server/mennovanleeuwen.nl/index.md @@ -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. diff --git a/config/nixos/packages/server/mennovanleeuwen.nl/template.html b/config/nixos/packages/server/mennovanleeuwen.nl/template.html new file mode 100644 index 0000000..24be16e --- /dev/null +++ b/config/nixos/packages/server/mennovanleeuwen.nl/template.html @@ -0,0 +1,13 @@ + + +
+ + +