Compare commits

...

24 Commits

Author SHA1 Message Date
Jez Cope 8ef51cb9de Update font css filenames in main.sass 2021-09-27 21:20:56 +01:00
Jez Cope 72dc0ac56a Remove talks page from navigation 2021-09-27 21:20:31 +01:00
Jez Cope 5830d2c6e2 Teach nix to build fonts instead of keeping them in-tree 2021-09-27 21:12:30 +01:00
Jez Cope 1dba4581e8 Hide tags if there are none 2021-09-27 19:27:36 +01:00
Jez Cope ff711a80e4 New page: projects 2021-09-26 20:19:07 +01:00
Jez Cope 6169653e0a Minor stylesheet tweaks and improvements 2021-09-26 20:18:57 +01:00
Jez Cope e5ca41b07e Make cactus comment text render correctly 2021-09-24 17:06:08 +01:00
Jez Cope 2d8fadb968 Switch back to static web root for nginx config 2021-09-24 09:31:09 +01:00
Jez Cope e075969731 Fix cactus comments formatting 2021-09-24 09:28:32 +01:00
Jez Cope 6d5821d60e Fix `#+tags[]:` metadata 2021-09-23 20:31:59 +01:00
Jez Cope 04faa08a1b Change post slug 2021-09-23 20:30:51 +01:00
Jez Cope fc93b217b3 Post: missing narratives (update #1) 2021-09-23 20:26:50 +01:00
Jez Cope 0f2716d4a6 Post: missing narratives 2021-09-23 20:12:54 +01:00
Jez Cope d939b0b276 Fix src location for nix build 2021-09-11 21:58:30 +01:00
Jez Cope f98bd316d4 Pass self to server.nix 2021-09-11 21:54:19 +01:00
Jez Cope a250b03255 Fix passing of self argument to server.nix 2021-09-11 21:49:56 +01:00
Jez Cope f11d7a5970 Refactor flake.nix parts into separate files 2021-09-11 21:46:46 +01:00
Jez Cope ac2d5e789c Include .well-known in nix build 2021-09-11 16:26:29 +01:00
Jez Cope 4bbf073ae5 Use defaultPackage as ngnix document root 2021-09-10 21:51:08 +01:00
Jez Cope 434e9c84c9 Add ... arg to nixosModule 2021-09-10 21:34:20 +01:00
Jez Cope ff7c015d70 Add config argument to nixosModule 2021-09-10 21:31:28 +01:00
Jez Cope c5e84d6387 Add server config to flake.nix 2021-09-10 21:25:46 +01:00
Jez Cope a7be6d1b37 Teach flake.nix to build website 2021-09-10 21:18:27 +01:00
Jez Cope 1ef1c82b87 Remove yaspin dependency 2021-09-10 19:17:59 +01:00
49 changed files with 354 additions and 199 deletions

View File

@ -11,3 +11,4 @@ deploy.yaml
resources
.direnv
.envrc
result

View File

@ -0,0 +1,36 @@
#+title: Request for input: the missing narrative of libraries in research software engineering
#+date: <2021-09-23 Thu>
#+tags[]: RSE Librarianship
#+slug: missing-narrative-libraries-rse
Last week I received an email from a friend inviting me to submit a video to a panel [[https://septembrse.github.io/#/event/L1001]['Missing narratives around diversity and inclusion in Research Software Engineering' hosted as part of SeptembRSE 2021]], the goals of which are:
1) help create inclusive communities in RSE by centring on intersectional voices
2) increase awareness of power imbalances that negatively impact multiple marginalised groups in research
3) provide a call-to-action for diversity and inclusion
# #+begin_quote
# I am writing to invite your contribution to a panel [[https://septembrse.github.io/#/event/L1001]['Missing narratives around diversity and inclusion in Research Software Engineering' hosted as part of SeptembRSE 2021]]. I would like to request you to make an audio/video submission (3-5 minutes) covering: (1) A brief introduction to who you are, (2) what missing narrative you want to highlight, and (3) some thoughts on what you, and others, might be able to do to make that happen.
# […]
# *Goal:* This panel aims to facilitate discussions to (1) help create inclusive communities in RSE by centring on intersectional voices, (2) increase awareness of power imbalances that negatively impact multiple marginalised groups in research, and (3) provide a call-to-action for diversity and inclusion. We will bring together experts who lead different efforts for improving diversity, equity and inclusion in academia, for example, training, recruitment, policy, data-led research, activism and so on.
# #+end_quote
/Obviously/ I'm always flattered to be asked my opinion, but I wasn't sure what a straight, cisgender, middle-class white man could offer to an event on diversity, so I had a chat with one of the organisers. We agreed that issues of race, gender, sexuality, disability and many more would be well covered by other speakers, and that I would focus on another narrative also frequently missing in discussions of Research Software Engineering (RSE): *librarians*.
Librarians are a diverse bunch, but we generally have some or more of the following skills, highly valuable to RSE: information management, metadata, digital preservation, teaching/training, communicating across disciplinary boundaries.
Now, I have my own views on this, but this is *not my narrative alone*, so I would be very grateful for your perspective, dear reader.
Some things that I've thought of so far:
- Librarianship is still perceived as a feminine profession, with all the expectations of quiet uncomplaining service that go along with that; this was neatly captured by the wonderful [[https://twitter.com/Fobettarh][Fobazi Ettarh (@Fobettarh)]] in the concept of [[https://fobaziettarh.com/2017/05/30/vocational-awe/][Vocational Awe]] (see also [[http://www.inthelibrarywiththeleadpipe.org/2018/vocational-awe/][Vocational Awe and Librarianship: The Lies We Tell Ourselves In the Library with the Lead Pipe]])
- Because of that, we're often used only to provide transactional services, but that makes very limited use of our professional knowledge and experience: we're much more effective as collaborators
- Librarianship itself is subject to many of the privileges and oppressions you might expect: while more gender-balanced (for example) than many professions, there are way too few librarians of colour, and it gets maler and whiter the closer you get to senior leadership
- Some university libraries have gone down the route of employing RSEs themselves. I know that St Andrews did at one point but I'm not sure if that's still the case
- The British Library certainly /does/ employ RSEs, as well as collaborating with RSEs in the [[https://www.turing.ac.uk/][Alan Turing Institute]], for projects like [[https://livingwithmachines.ac.uk/][Living With Machines]] (though we're hardly typical in having active research projects within the Library compared with most academic libraries)
- Some (many) dedicated RSE groups are actually really good at collaborating with library colleagues: I was always treated as a peer and collaborator by the RSE team at Sheffield, for example
*Please let me know what other perspectives on this I'm missing*, I don't want this to just be based on my own biased view. You can chime in via the usual methods: the comments below, via [[https://twitter.com/jezcope][Twitter]] or [[https://scholar.social/@petrichor][Mastodon]], via [[https://matrix.to/#/@jez:petrichor.me][Matrix]] or by email if you know it. I'll put the video somewhere public when it's done, and try to credit anyone who contributes either in the video or in a followup post.

99
content/projects.org Normal file
View File

@ -0,0 +1,99 @@
#+title: Projects
#+linktitle: projects
#+menu: main
#+type: page
I'm trying to move away from relying on any one [[https://en.wikipedia.org/wiki/Forge_(software)][forge]] (e.g. GitHub, GitLab, etc.) for project hosting, so here's a rundown of some of the little open source projects I have scattered around the web right now.
Some of them have their own issue trackers --- feel free to tell me about bugs or make pull requests there --- but you can also send me bugs, comments or patches at [[mailto:projects@erambler.co.uk][projects@erambler.co.uk]].
------------------------------------------------------------------------------
* Active
:PROPERTIES:
:ID: ae2de630-b353-4fa3-8139-a6cbb2709442
:END:
Projects that can be considered current: I may or may not have made any significant changes to them recently, but I certainly use them and I would love it if you did too!
** mxadm
A simple CLI interface to basic Matrix room admin tasks.
+ Source: [[https://tildegit.org/petrichor/mxadm]]
+ Rust crate: [[https://lib.rs/crates/mxadm][mxadm on lib.rs]]; [[https://crates.io/crates/mxadm][mxadm on crates.io]]
** Template iPython magics 🎩
This package provides simple IPython magics to render cells as templates in a variety of different templating languages. It currently supports [[https://www.makotemplates.org/][Mako]] and [[https://jinja.palletsprojects.com/][Jinja2]].
- Source: [[https://gitlab.com/jezcope/template-ipython-magic]]
- Python package: [[https://pypi.org/project/template-ipython-magic/][template-ipython-magic on PyPI]]
** remarkable-scripts
A small collection of useful scripts for users of [[https://remarkable.com/][reMarkable paper tablets]].
- Source: [[https://tildegit.org/petrichor/remarkable-scripts]]
# ** theme-bl-remark
------------------------------------------------------------------------------
* Dormant
Projects that I've started and done some work on, often to the point of a working prototype, and that I intend to develop further, but which haven't seen any love recently.
** pyrefine
Execute OpenRefine JSON scripts without OpenRefine (or Java).
- Source: [[https://github.com/jezcope/pyrefine]]
** csvy-python
Read CSVY (https://csvy.org/) data packages from Python.
- Source: [[https://github.com/jezcope/csvy-python]]
# ** sagadoc
# ** nix-gently
------------------------------------------------------------------------------
* Experiments & toys
Things that were done to try something out, or to do a very simple job that I no longer need.
- doi2oa
- altmedals2012
- runkeeper-data
- Shipton Mill queue checker
------------------------------------------------------------------------------
* Educational examples
Things that simply exist to demonstrate for others how a thing can be done.
- binder-nix-flakes
- zenodo-example-py
------------------------------------------------------------------------------
* Abandoned
Stuff that I started and used for a while, but which no longer serve any purpose for me. Feel free to learn from these or [[https://en.wikipedia.org/wiki/Fork_(software_development)][fork]] them as the basis for something of your own
- dropbox-conflicts-el :: An [[https://www.gnu.org/software/emacs/][emacs]] package to detect conflicted copies of files in your Dropbox on open. [[https://github.com/jezcope/dropbox-conflicts-el]]
# - beamer-uob
# - theme-sidmouth-nikola
# - theme-sidmouth-hugo
# - Org.tmbundle
# - nikola-series
# - chrome-scroll-back
# - sakaiws-ruby
# - OmniSync
# - minty

View File

@ -4,10 +4,10 @@ date: 2020-10-21 14:00:04 UTC+01:00
slug: talks
type: text
data: data/talks.yaml
menu:
main:
name: talks
weight: 50
# menu:
# main:
# name: talks
# weight: 50
---
Here is a selection of talks that I've given.

View File

@ -2,11 +2,11 @@
"nodes": {
"flake-utils": {
"locked": {
"lastModified": 1623875721,
"narHash": "sha256-A8BU7bjS5GirpAUv4QA+QnJ4CceLHkcXdRp4xITDB0s=",
"lastModified": 1631561581,
"narHash": "sha256-3VQMV5zvxaVLvqqUrNz3iJelLw30mIVSfZmAaauM3dA=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "f7e004a55b120c02ecb6219596820fcd32ca8772",
"rev": "7e5bf3925f6fbdfaf50a2a7ca0be2879c4261d19",
"type": "github"
},
"original": {
@ -17,11 +17,11 @@
},
"nixpkgs": {
"locked": {
"lastModified": 1624992828,
"narHash": "sha256-whhfrjqOa1BUQAQu4J0QSRUG+iZbTeJpnsl52kLPBfc=",
"lastModified": 1632768365,
"narHash": "sha256-dewSDOFvHS9mGXBOB8E4nciQ2QavKpsNRXMSnCKJOxE=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "520da1d00f26d2f4d31eb3cd3c5dc8b3a1e998c6",
"rev": "75b5e5ee2642c28687592c24420d2085c1238f4c",
"type": "github"
},
"original": {

View File

@ -1,15 +1,39 @@
{
description = "A very basic flake";
description = "Content and server config for erambler.co.uk";
inputs.nixpkgs.url = "github:NixOS/nixpkgs";
inputs.flake-utils.url = "github:numtide/flake-utils";
outputs = { self, nixpkgs, flake-utils }:
flake-utils.lib.eachDefaultSystem
(system:
let pkgs = nixpkgs.legacyPackages.${system}; in
{
devShell = import ./shell.nix { inherit pkgs; };
}
);
{
overlay = self: super:
let
pkgs = nixpkgs.legacyPackages.${super.system};
buildIosevka = pkgs.callPackage ./nix/iosevka.nix;
in rec {
iosevka = buildIosevka { set = "mnemosyne"; };
iosevka-aile = buildIosevka { set = "aile-mnemosyne"; };
iosevka-etoile = buildIosevka { set = "etoile-mnemosyne"; };
fonts = pkgs.symlinkJoin {
name = "mnemosyne-fonts";
paths = [ iosevka iosevka-aile iosevka-etoile ];
};
erambler = pkgs.callPackage ./nix/build.nix { inherit fonts; };
};
} // flake-utils.lib.eachDefaultSystem (system:
let
pkgs = import nixpkgs {
inherit system;
overlays = [ self.overlay ];
};
in {
packages = {
inherit (pkgs) erambler iosevka iosevka-aile iosevka-etoile fonts;
};
defaultPackage = pkgs.erambler;
devShell = pkgs.callPackage ./nix/shell.nix { };
});
}

15
nix/build.nix Normal file
View File

@ -0,0 +1,15 @@
{ pkgs, fonts, lndir, ... }:
with pkgs;
stdenv.mkDerivation {
name = "erambler-html";
src = ../.;
nativeBuildInputs = [ hugo fonts ];
buildPhase = "hugo";
installPhase = ''
mkdir $out
cp -R public/* public/.well-known "$out"
mkdir -p "$out/font"
${lndir}/bin/lndir -silent ${fonts} "$out/font"
'';
}

89
nix/iosevka.nix Normal file
View File

@ -0,0 +1,89 @@
{ stdenv, lib, nodejs, nodePackages, remarshal, ttfautohint-nox
, privateBuildPlan ? builtins.readFile ./private-build-plans.toml
, extraParameters ? null, set ? null }:
assert (privateBuildPlan != null) -> set != null;
assert (extraParameters != null) -> set != null;
let
# We don't know the attribute name for the Iosevka package as it
# changes not when our update script is run (which in turn updates
# node-packages.json, but when node-packages/generate.sh is run
# (which updates node-packages.nix).
#
# Doing it this way ensures that the package can always be built,
# although possibly an older version than ioseva-bin.
nodeIosevka =
(lib.findSingle (drv: drv ? packageName && drv.packageName == "iosevka")
(throw "no 'iosevka' package found in nodePackages")
(throw "multiple 'iosevka' packages found in nodePackages")
(lib.attrValues nodePackages)).override (drv: { dontNpmInstall = true; });
in stdenv.mkDerivation rec {
pname = if set != null then "iosevka-${set}" else "iosevka";
inherit (nodeIosevka) version src;
nativeBuildInputs = [ nodejs nodeIosevka remarshal ttfautohint-nox ];
buildPlan = if builtins.isAttrs privateBuildPlan then
builtins.toJSON { buildPlans.${pname} = privateBuildPlan; }
else
privateBuildPlan;
inherit extraParameters;
passAsFile = [ "buildPlan" "extraParameters" ];
configurePhase = ''
runHook preConfigure
${lib.optionalString (builtins.isAttrs privateBuildPlan) ''
remarshal -i "$buildPlanPath" -o private-build-plans.toml -if json -of toml
''}
${lib.optionalString (builtins.isString privateBuildPlan) ''
cp "$buildPlanPath" private-build-plans.toml
''}
${lib.optionalString (extraParameters != null) ''
echo -e "\n" >> params/parameters.toml
cat "$extraParametersPath" >> params/parameters.toml
''}
ln -s ${nodeIosevka}/lib/node_modules/iosevka/node_modules .
runHook postConfigure
'';
buildPhase = ''
runHook preBuild
npm run build --no-update-notifier -- --jCmd=$NIX_BUILD_CORES contents::$pname >/dev/null
runHook postBuild
'';
installPhase = ''
runHook preInstall
install -d "$out/ttf"
install -d "$out/woff2"
install "dist/$pname/ttf"/* "$out/ttf"
install "dist/$pname/woff2"/* "$out/woff2"
install "dist/$pname/$pname.css" "$out"
runHook postInstall
'';
enableParallelBuilding = true;
passthru = { updateScript = ./update-default.sh; };
meta = with lib; {
homepage = "https://be5invis.github.io/Iosevka";
downloadPage = "https://github.com/be5invis/Iosevka/releases";
description = ''
Slender monospace sans-serif and slab-serif typeface inspired by Pragmata
Pro, M+ and PF DIN Mono, designed to be the ideal font for programming.
'';
license = licenses.ofl;
platforms = platforms.all;
maintainers = with maintainers; [
cstrahan
jfrankenau
ttuegel
babariviere
rileyinman
AluisioASG
];
};
}

View File

@ -124,6 +124,10 @@ shape = "italic"
menu = "italic"
css = "italic"
[buildPlans.iosevka-mnemosyne.widths.normal]
shape = 500
menu = 5
css = "normal"
[buildPlans.iosevka-etoile-mnemosyne]

29
nix/server.nix Normal file
View File

@ -0,0 +1,29 @@
{ self }:
{ config, pkgs, ... }:
{
services.nginx = {
enable = true;
virtualHosts."erambler.co.uk" = {
enableACME = true;
forceSSL = true;
# root = self.defaultPackage.${pkgs.system};
root = "/srv/www/erambler.co.uk";
extraConfig = ''
rewrite ^/.well-known/(host-meta|webfinger).* https://fed.brid.gy$request_uri redirect;
'';
locations = {
"~ ^/(feed|rss)(\\.xml|/)".return = "301 /index.xml";
"~ ^/tags/([a-zA-Z-]+)\\.xml".return = "301 /tags/$1/index.xml";
"/index.xml".extraConfig = ''
add_header Link '<https://erambler.co.uk/rss.xml>; rel="self"';
'';
};
};
};
networking.firewall.allowedTCPPorts = [ 80 443 ];
}

11
nix/shell.nix Normal file
View File

@ -0,0 +1,11 @@
{ pkgs ? import <nixpkgs> { } }:
with pkgs;
mkShell {
buildInputs = [
(python38.withPackages
(py: with py; [ python invoke rich requests ruamel_yaml sh ]))
yarn
hugo
];
}

View File

@ -1,30 +0,0 @@
{ pkgs, ... }:
let
python = pkgs.python38;
my_yaspin = python.pkgs.buildPythonPackage rec {
pname = "yaspin";
version = "1.3.0";
src = python.pkgs.fetchPypi {
inherit pname version;
sha256 =
"cc37d35cc7f796dada6c37430b49e471ffa05d0686e6f8de36f83978b732df54";
};
doCheck = false;
meta = {
homepage = "https://github.com/pavdmyt/yaspin";
description = "Yet Another Terminal Spinner for Python";
};
};
pythonWithPackages = python.withPackages (py: [
py.python
# For locally-run tasks
py.invoke
py.rich
py.requests
py.ruamel_yaml
py.sh
my_yaspin
]);
in pkgs.mkShell { buildInputs = with pkgs; [ pythonWithPackages yarn hugo ]; }

View File

@ -1,8 +1,8 @@
@charset "utf-8"
@import url('../font/iosevka-aile.css')
@import url('../font/iosevka-etoile.css')
@import url('../font/iosevka.css')
@import url('../font/iosevka-aile-mnemosyne.css')
@import url('../font/iosevka-etoile-mnemosyne.css')
@import url('../font/iosevka-mnemosyne.css')
@function make-light($c)
@return scale-color($c, $lightness: 30%, $saturation: -25%)
@ -34,7 +34,7 @@ $link: $turquoise
@import '_code.scss'
body
font-size: 14px
font-size: 16px
h1, h2, h3, h4, h5, h6
font-family: $family-sans-serif
@ -54,11 +54,14 @@ h1
h2, .content h2
font-size: $size-medium
margin: 2em 0 1em;
&:before
content: "## "
h3, .content h3
margin: 2em 0 1em;
&:before
content: "### "
@ -82,7 +85,9 @@ h6, .content h6
text-decoration: underline
ul
*:marker
margin-left: 2ex
*::marker
font-weight: bold
list-style-type: "* "
@ -101,6 +106,12 @@ h6, .content h6
&.taxonomy-list.tags-list
column-count: 4
dt
font-weight: bold
font-style: italic
dd
margin-left: 2ex
.summary
@extend .hero
@extend .my-5
@ -191,5 +202,15 @@ h6, .content h6
ul
@extend .menu-list
.cactus-container
.cactus-editor
margin-bottom: 1em
.cactus-comment
padding-bottom: 1em
.cactus-comment-avatar
flex-shrink: 0
.cactus-message-text
@extend .content
#current
font-weight: bold

View File

@ -1,8 +1,8 @@
{{ if . }}
<div class="page-tags">
<strong>Tags:</strong>
{{ range . }}
<a href="{{ "/tags/" | relLangURL }}{{ . | urlize }}">[{{ . }}]</a>
{{ else }}
<em>None</em>
{{ end }}
</div>
{{ end }}

View File

@ -1,36 +0,0 @@
@font-face {
font-family: 'Iosevka Aile Web';
font-display: swap;
font-weight: 400;
font-stretch: normal;
font-style: normal;
src: url('woff2/iosevka-aile-mnemosyne-regular.woff2') format('woff2'), url('ttf/iosevka-aile-mnemosyne-regular.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Aile Web';
font-display: swap;
font-weight: 400;
font-stretch: normal;
font-style: italic;
src: url('woff2/iosevka-aile-mnemosyne-italic.woff2') format('woff2'), url('ttf/iosevka-aile-mnemosyne-italic.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Aile Web';
font-display: swap;
font-weight: 700;
font-stretch: normal;
font-style: normal;
src: url('woff2/iosevka-aile-mnemosyne-bold.woff2') format('woff2'), url('ttf/iosevka-aile-mnemosyne-bold.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Aile Web';
font-display: swap;
font-weight: 700;
font-stretch: normal;
font-style: italic;
src: url('woff2/iosevka-aile-mnemosyne-bolditalic.woff2') format('woff2'), url('ttf/iosevka-aile-mnemosyne-bolditalic.ttf') format('truetype');
}

View File

@ -1,36 +0,0 @@
@font-face {
font-family: 'Iosevka Etoile Web';
font-display: swap;
font-weight: 400;
font-stretch: normal;
font-style: normal;
src: url('woff2/iosevka-etoile-mnemosyne-regular.woff2') format('woff2'), url('ttf/iosevka-etoile-mnemosyne-regular.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Etoile Web';
font-display: swap;
font-weight: 400;
font-stretch: normal;
font-style: italic;
src: url('woff2/iosevka-etoile-mnemosyne-italic.woff2') format('woff2'), url('ttf/iosevka-etoile-mnemosyne-italic.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Etoile Web';
font-display: swap;
font-weight: 700;
font-stretch: normal;
font-style: normal;
src: url('woff2/iosevka-etoile-mnemosyne-bold.woff2') format('woff2'), url('ttf/iosevka-etoile-mnemosyne-bold.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Etoile Web';
font-display: swap;
font-weight: 700;
font-stretch: normal;
font-style: italic;
src: url('woff2/iosevka-etoile-mnemosyne-bolditalic.woff2') format('woff2'), url('ttf/iosevka-etoile-mnemosyne-bolditalic.ttf') format('truetype');
}

View File

@ -1,72 +0,0 @@
@font-face {
font-family: 'Iosevka Web';
font-display: swap;
font-weight: 400;
font-stretch: normal;
font-style: normal;
src: url('woff2/iosevka-mnemosyne-regular.woff2') format('woff2'), url('ttf/iosevka-mnemosyne-regular.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Web';
font-display: swap;
font-weight: 400;
font-stretch: expanded;
font-style: normal;
src: url('woff2/iosevka-mnemosyne-extended.woff2') format('woff2'), url('ttf/iosevka-mnemosyne-extended.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Web';
font-display: swap;
font-weight: 400;
font-stretch: normal;
font-style: italic;
src: url('woff2/iosevka-mnemosyne-italic.woff2') format('woff2'), url('ttf/iosevka-mnemosyne-italic.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Web';
font-display: swap;
font-weight: 400;
font-stretch: expanded;
font-style: italic;
src: url('woff2/iosevka-mnemosyne-extendeditalic.woff2') format('woff2'), url('ttf/iosevka-mnemosyne-extendeditalic.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Web';
font-display: swap;
font-weight: 700;
font-stretch: normal;
font-style: normal;
src: url('woff2/iosevka-mnemosyne-bold.woff2') format('woff2'), url('ttf/iosevka-mnemosyne-bold.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Web';
font-display: swap;
font-weight: 700;
font-stretch: expanded;
font-style: normal;
src: url('woff2/iosevka-mnemosyne-extendedbold.woff2') format('woff2'), url('ttf/iosevka-mnemosyne-extendedbold.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Web';
font-display: swap;
font-weight: 700;
font-stretch: normal;
font-style: italic;
src: url('woff2/iosevka-mnemosyne-bolditalic.woff2') format('woff2'), url('ttf/iosevka-mnemosyne-bolditalic.ttf') format('truetype');
}
@font-face {
font-family: 'Iosevka Web';
font-display: swap;
font-weight: 700;
font-stretch: expanded;
font-style: italic;
src: url('woff2/iosevka-mnemosyne-extendedbolditalic.woff2') format('woff2'), url('ttf/iosevka-mnemosyne-extendedbolditalic.ttf') format('truetype');
}