Compare commits
24 Commits
972b9ef6be
...
8ef51cb9de
Author | SHA1 | Date |
---|---|---|
Jez Cope | 8ef51cb9de | |
Jez Cope | 72dc0ac56a | |
Jez Cope | 5830d2c6e2 | |
Jez Cope | 1dba4581e8 | |
Jez Cope | ff711a80e4 | |
Jez Cope | 6169653e0a | |
Jez Cope | e5ca41b07e | |
Jez Cope | 2d8fadb968 | |
Jez Cope | e075969731 | |
Jez Cope | 6d5821d60e | |
Jez Cope | 04faa08a1b | |
Jez Cope | fc93b217b3 | |
Jez Cope | 0f2716d4a6 | |
Jez Cope | d939b0b276 | |
Jez Cope | f98bd316d4 | |
Jez Cope | a250b03255 | |
Jez Cope | f11d7a5970 | |
Jez Cope | ac2d5e789c | |
Jez Cope | 4bbf073ae5 | |
Jez Cope | 434e9c84c9 | |
Jez Cope | ff7c015d70 | |
Jez Cope | c5e84d6387 | |
Jez Cope | a7be6d1b37 | |
Jez Cope | 1ef1c82b87 |
|
@ -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.
|
|
@ -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
|
|
@ -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.
|
||||
|
|
12
flake.lock
12
flake.lock
|
@ -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": {
|
||||
|
|
40
flake.nix
40
flake.nix
|
@ -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 { };
|
||||
});
|
||||
}
|
||||
|
|
|
@ -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"
|
||||
'';
|
||||
}
|
|
@ -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
|
||||
];
|
||||
};
|
||||
}
|
|
@ -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]
|
|
@ -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 ];
|
||||
}
|
|
@ -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
|
||||
];
|
||||
}
|
30
shell.nix
30
shell.nix
|
@ -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 ]; }
|
|
@ -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
|
||||
|
|
|
@ -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 }}
|
||||
|
|
|
@ -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');
|
||||
}
|
|
@ -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');
|
||||
}
|
|
@ -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');
|
||||
}
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue