Compare commits

...

7 Commits

44 changed files with 256 additions and 170 deletions

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

@ -5,12 +5,35 @@
inputs.flake-utils.url = "github:numtide/flake-utils";
outputs = { self, nixpkgs, flake-utils }:
(flake-utils.lib.eachDefaultSystem (system:
let pkgs = nixpkgs.legacyPackages.${system};
{
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 {
defaultPackage = pkgs.callPackage ./nix/build.nix { };
packages = {
inherit (pkgs) erambler iosevka iosevka-aile iosevka-etoile fonts;
};
defaultPackage = pkgs.erambler;
devShell = pkgs.callPackage ./nix/shell.nix { };
})) // {
nixosModule = import ./nix/server.nix { inherit self; };
};
});
}

View File

@ -1,13 +1,15 @@
{ pkgs, ... }:
{ pkgs, fonts, lndir, ... }:
with pkgs;
stdenv.mkDerivation {
name = "erambler-html";
src = ../.;
nativeBuildInputs = [ hugo ];
nativeBuildInputs = [ hugo fonts ];
buildPhase = "hugo";
installPhase = ''
mkdir $out
cp -R public/* public/.well-known $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]

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
@ -198,6 +209,8 @@ h6, .content h6
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');
}