Default keyboard shortcuts for Ghostty terminal emulator. Platform-specific differences are noted where applicable.
| Action | Windows/Linux | macOS |
|---|---|---|
| New window | Ctrl+Shift+N | Cmd+N |
| Close window | Alt+F4 | Cmd+Shift+W |
| # You should change "XX.XX.XX.XX" to you wireguard server | |
| # and set public-key,private-key,preshared-key,"YY.YY.YY.YY/YY" according to your config | |
| /interface/wireguard/add name=wg0 private-key="[PRIVATE_KEY_HERE]" | |
| /interface/wireguard/peers/add interface=wg0 endpoint-address=XX.XX.XX.XX endpoint-port=12321 public-key="[PUBLIC_KEY_HERE]" preshared-key="[PRESHARED_KEY_HERE]" persistent-keepalive=25s allowed-address=0.0.0.0/0 | |
| /ip/address/add interface=wg0 address=YY.YY.YY.YY/YY | |
| /ip/route/add dst-address=XX.XX.XX.XX comment=wgserver disabled=yes |
Wayland breaks everything! It is binary incompatible, provides no clear transition path with 1:1 replacements for everything in X11, and is even philosophically incompatible with X11. Hence, if you are interested in existing applications to "just work" without the need for adjustments, then you may be better off avoiding Wayland.
Wayland solves no issues I have but breaks almost everything I need. Even the most basic, most simple things (like xkill) - in this case with no obvious replacement. And usually it stays broken, because the Wayland folks mostly seem to care about Automotive, Gnome, maybe KDE - and alienating everyone else (e.g., people using just an X11 window manager or something like GNUstep) in the process.
| import plaster | |
| import sys | |
| def main(): | |
| if '--reload' in sys.argv: | |
| import hupper | |
| reloader = hupper.start_reloader(__name__ + '.main') | |
| reloader.watch_files(['site.ini']) | |
| loader = plaster.get_loader('site.ini', protocols=['wsgi']) |
First of all, please note that token expiration and revoking are two different things.
A JWT token that never expires is dangerous if the token is stolen then someone can always access the user's data.
Quoted from JWT RFC:
| from pyramid.authentication import BasicAuthAuthenticationPolicy | |
| from pyramid.authorization import ACLAuthorizationPolicy | |
| from pyramid.config import Configurator | |
| from pyramid.httpexceptions import HTTPForbidden | |
| from pyramid.httpexceptions import HTTPUnauthorized | |
| from pyramid.security import ALL_PERMISSIONS | |
| from pyramid.security import Allow | |
| from pyramid.security import Authenticated | |
| from pyramid.security import forget | |
| from pyramid.view import forbidden_view_config |
| CREATE TABLE accounts( | |
| id serial PRIMARY KEY, | |
| name VARCHAR(256) NOT NULL | |
| ); | |
| CREATE TABLE entries( | |
| id serial PRIMARY KEY, | |
| description VARCHAR(1024) NOT NULL, | |
| amount NUMERIC(20, 2) NOT NULL CHECK (amount > 0.0), | |
| -- Every entry is a credit to one account... |