Compare commits

...
Sign in to create a new pull request.

6 commits

18 changed files with 15601 additions and 8425 deletions

2
.git-blame-ignore-revs Normal file
View file

@ -0,0 +1,2 @@
# Switch to nixfmt formatting
82c1d22d3dd74fb5da489162a9d4caba9ab3baba

75
flake.lock generated
View file

@ -2,16 +2,18 @@
"nodes": { "nodes": {
"dream2nix": { "dream2nix": {
"inputs": { "inputs": {
"nixpkgs": "nixpkgs", "nixpkgs": [
"nixpkgs"
],
"purescript-overlay": "purescript-overlay", "purescript-overlay": "purescript-overlay",
"pyproject-nix": "pyproject-nix" "pyproject-nix": "pyproject-nix"
}, },
"locked": { "locked": {
"lastModified": 1735160684, "lastModified": 1763413832,
"narHash": "sha256-n5CwhmqKxifuD4Sq4WuRP/h5LO6f23cGnSAuJemnd/4=", "narHash": "sha256-dkqBwDXiv8MPoFyIvOuC4bVubAP+TlVZUkVMB78TTSg=",
"owner": "nix-community", "owner": "nix-community",
"repo": "dream2nix", "repo": "dream2nix",
"rev": "8ce6284ff58208ed8961681276f82c2f8f978ef4", "rev": "5658fba3a0b6b7d5cb0460b949651f64f644a743",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -28,11 +30,11 @@
"rust-analyzer-src": "rust-analyzer-src" "rust-analyzer-src": "rust-analyzer-src"
}, },
"locked": { "locked": {
"lastModified": 1737181903, "lastModified": 1763621140,
"narHash": "sha256-lvp77MhGzSN+ICd0MugppCjQR6cmlM2iAC5cjy2ZsaA=", "narHash": "sha256-nx0zy/+yR57FwloXmatf3CaXgzA4zJqIFbplnpaKn/Y=",
"owner": "nix-community", "owner": "nix-community",
"repo": "fenix", "repo": "fenix",
"rev": "ac79bb490b8c1af4bbc587b84c76f9527d6b14f7", "rev": "d4e14d370b4763c67ea02a39f01f5366297d61cb",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -59,34 +61,15 @@
}, },
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1729850857, "lastModified": 1763334038,
"narHash": "sha256-WvLXzNNnnw+qpFOmgaM3JUlNEH+T4s22b5i2oyyCpXE=", "narHash": "sha256-3FzFzhmeuKK2dLv6pm6rC1QTcukVe+xcLpKOrE5Fx5g=",
"owner": "NixOS", "rev": "4c8cdd5b1a630e8f72c9dd9bf582b1afb3127d2c",
"repo": "nixpkgs", "type": "tarball",
"rev": "41dea55321e5a999b17033296ac05fe8a8b5a257", "url": "https://releases.nixos.org/nixos/25.05/nixos-25.05.812880.4c8cdd5b1a63/nixexprs.tar.xz?lastModified=1763334038&rev=4c8cdd5b1a630e8f72c9dd9bf582b1afb3127d2c"
"type": "github"
}, },
"original": { "original": {
"owner": "NixOS", "type": "tarball",
"ref": "nixpkgs-unstable", "url": "https://channels.nixos.org/nixos-25.05/nixexprs.tar.xz"
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_2": {
"locked": {
"lastModified": 1737165118,
"narHash": "sha256-s40Kk/OulP3J/1JvC3VT16U4r/Xw6Qdi7SRw3LYkPWs=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "6a3ae7a5a12fb8cac2d59d7df7cbd95f9b2f0566",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-24.11",
"repo": "nixpkgs",
"type": "github"
} }
}, },
"purescript-overlay": { "purescript-overlay": {
@ -113,18 +96,22 @@
} }
}, },
"pyproject-nix": { "pyproject-nix": {
"flake": false, "inputs": {
"nixpkgs": [
"dream2nix",
"nixpkgs"
]
},
"locked": { "locked": {
"lastModified": 1702448246, "lastModified": 1752481895,
"narHash": "sha256-hFg5s/hoJFv7tDpiGvEvXP0UfFvFEDgTdyHIjDVHu1I=", "narHash": "sha256-luVj97hIMpCbwhx3hWiRwjP2YvljWy8FM+4W9njDhLA=",
"owner": "davhau", "owner": "pyproject-nix",
"repo": "pyproject.nix", "repo": "pyproject.nix",
"rev": "5a06a2697b228c04dd2f35659b4b659ca74f7aeb", "rev": "16ee295c25107a94e59a7fc7f2e5322851781162",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "davhau", "owner": "pyproject-nix",
"ref": "dream2nix",
"repo": "pyproject.nix", "repo": "pyproject.nix",
"type": "github" "type": "github"
} }
@ -133,17 +120,17 @@
"inputs": { "inputs": {
"dream2nix": "dream2nix", "dream2nix": "dream2nix",
"fenix": "fenix", "fenix": "fenix",
"nixpkgs": "nixpkgs_2" "nixpkgs": "nixpkgs"
} }
}, },
"rust-analyzer-src": { "rust-analyzer-src": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1737140097, "lastModified": 1763555010,
"narHash": "sha256-m4SN8DeKzsP10EQFS7+2zgGfCrMhTfTt1H0QRNesD08=", "narHash": "sha256-SG8PRrLir8RkXdyBm/NnuUo3WqS7HW6ltJLZnAWjBjA=",
"owner": "rust-lang", "owner": "rust-lang",
"repo": "rust-analyzer", "repo": "rust-analyzer",
"rev": "f61bfa4d7feb84d07538d361fe77d34a29e3b375", "rev": "636c3aa24ec6762347c334c030b5034c351d6e05",
"type": "github" "type": "github"
}, },
"original": { "original": {

130
flake.nix
View file

@ -2,8 +2,11 @@
description = "tlater.net web server"; description = "tlater.net web server";
inputs = { inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-24.11"; nixpkgs.url = "https://channels.nixos.org/nixos-25.05/nixexprs.tar.xz";
dream2nix.url = "github:nix-community/dream2nix"; dream2nix = {
url = "github:nix-community/dream2nix";
inputs.nixpkgs.follows = "nixpkgs";
};
fenix = { fenix = {
url = "github:nix-community/fenix"; url = "github:nix-community/fenix";
@ -11,70 +14,77 @@
}; };
}; };
outputs = { outputs =
self, {
nixpkgs, self,
dream2nix, nixpkgs,
fenix, dream2nix,
}: let fenix,
# At the moment, we only deploy to x86_64-linux. Update when we }:
# care about another platform. let
system = "x86_64-linux"; # At the moment, we only deploy to x86_64-linux. Update when we
pkgs = nixpkgs.legacyPackages.${system}; # care about another platform.
fenixPkgs = fenix.packages.${system}; system = "x86_64-linux";
ownPkgs = self.packages.${system}; pkgs = nixpkgs.legacyPackages.${system};
in { fenixPkgs = fenix.packages.${system};
packages.${system} = dream2nix.lib.importPackages { ownPkgs = self.packages.${system};
projectRoot = ./.; in
projectRootFile = "flake.nix"; {
packagesDir = ./packages; packages.${system} = dream2nix.lib.importPackages {
packageSets = { projectRoot = ./.;
nixpkgs = pkgs; projectRootFile = "flake.nix";
fenix = fenixPkgs; packagesDir = ./packages;
}; packageSets = {
}; nixpkgs = pkgs;
fenix = fenixPkgs;
apps.${system} = { };
default = let
inherit (ownPkgs) server templates;
inherit (pkgs) writeShellScript;
in {
type = "app";
program = builtins.toString (writeShellScript "tlaternet-webserver" ''
${server}/bin/tlaternet-webserver --template-directory ${templates}
'');
}; };
update = let apps.${system} = {
update-script = pkgs.callPackage ./nix/update.nix {inherit self;}; default =
in { let
type = "app"; inherit (ownPkgs) server templates;
program = "${update-script}/bin/update"; inherit (pkgs) writeShellScript;
in
{
type = "app";
program = builtins.toString (
writeShellScript "tlaternet-webserver" ''
${server}/bin/tlaternet-webserver --template-directory ${templates}
''
);
};
update =
let
update-script = pkgs.callPackage ./nix/update.nix { inherit self; };
in
{
type = "app";
program = "${update-script}/bin/update";
};
}; };
};
nixosModules.default = import ./nix/module.nix {inherit self system;}; nixosModules.default = import ./nix/module.nix { inherit self system; };
devShells.${system} = { devShells.${system} = {
server = pkgs.mkShell { server = pkgs.mkShell {
packages = [ packages = [
(fenixPkgs.stable.withComponents [ (fenixPkgs.stable.withComponents [
"rustc" "rustc"
"cargo" "cargo"
"rustfmt" "rustfmt"
"rust-std" "rust-std"
"rust-docs" "rust-docs"
"clippy" "clippy"
"rust-src" "rust-src"
"rust-analysis" "rust-analysis"
]) ])
fenixPkgs.rust-analyzer fenixPkgs.rust-analyzer
]; ];
};
}; };
};
checks.${system} = import ./nix/checks { checks.${system} = import ./nix/checks { inherit self pkgs; };
inherit self pkgs;
}; };
};
} }

View file

@ -1,9 +1,8 @@
{ pkgs, self }:
let
callPackage = pkgs.lib.callPackageWith (pkgs // { inherit self; });
in
{ {
pkgs, lintNix = callPackage ./lint-nix.nix { };
self, openHomepage = callPackage ./open-homepage.nix { };
}: let
callPackage = pkgs.lib.callPackageWith (pkgs // {inherit self;});
in {
lintNix = callPackage ./lint-nix.nix {};
openHomepage = callPackage ./open-homepage.nix {};
} }

View file

@ -2,26 +2,31 @@
self, self,
lib, lib,
stdenv, stdenv,
alejandra, nixfmt-rfc-style,
deadnix, deadnix,
statix, statix,
}: let }:
let
inherit (lib) sourceFilesBySuffices; inherit (lib) sourceFilesBySuffices;
in in
stdenv.mkDerivation { stdenv.mkDerivation {
dontPatch = true; dontPatch = true;
dontConfigure = true; dontConfigure = true;
dontBuild = true; dontBuild = true;
dontInstall = true; dontInstall = true;
doCheck = true; doCheck = true;
name = "lint-nix"; name = "lint-nix";
src = sourceFilesBySuffices self [".nix"]; src = sourceFilesBySuffices self [ ".nix" ];
checkInputs = [alejandra deadnix statix]; checkInputs = [
checkPhase = '' nixfmt-rfc-style
mkdir -p $out deadnix
alejandra --check . | tee $out/alejandra.log statix
deadnix --fail | tee $out/deadnix.log ];
statix check | tee $out/statix.log checkPhase = ''
''; mkdir -p $out
} nixfmt --strict --check . | tee $out/nixfmt.log
deadnix --fail | tee $out/deadnix.log
statix check | tee $out/statix.log
'';
}

View file

@ -1,19 +1,16 @@
{ { self, nixosTest }:
self,
nixosTest,
}:
nixosTest { nixosTest {
name = "open-homepage"; name = "open-homepage";
nodes = { nodes = {
# Host with just the default configuration # Host with just the default configuration
defaults = { defaults = {
imports = [self.nixosModules.default]; imports = [ self.nixosModules.default ];
services.tlaternet-webserver.enable = true; services.tlaternet-webserver.enable = true;
}; };
host = { host = {
imports = [self.nixosModules.default]; imports = [ self.nixosModules.default ];
services.tlaternet-webserver = { services.tlaternet-webserver = {
enable = true; enable = true;
@ -23,10 +20,10 @@ nixosTest {
}; };
}; };
networking.firewall.allowedTCPPorts = [8080]; networking.firewall.allowedTCPPorts = [ 8080 ];
}; };
client = {}; client = { };
}; };
testScript = '' testScript = ''

View file

@ -1,18 +1,14 @@
{ { self, system }:
self, { config, lib, ... }:
system, let
}: {
config,
lib,
...
}: let
inherit (lib) mkEnableOption mkIf mkOption; inherit (lib) mkEnableOption mkIf mkOption;
inherit (lib.types) str int; inherit (lib.types) str int;
inherit (lib.strings) escapeShellArgs; inherit (lib.strings) escapeShellArgs;
inherit (self.packages.${system}) server templates; inherit (self.packages.${system}) server templates;
cfg = config.services.tlaternet-webserver; cfg = config.services.tlaternet-webserver;
in { in
{
options = { options = {
services.tlaternet-webserver = { services.tlaternet-webserver = {
enable = mkEnableOption "tlaternet web server"; enable = mkEnableOption "tlaternet web server";
@ -35,8 +31,8 @@ in {
config = mkIf cfg.enable { config = mkIf cfg.enable {
systemd.services.tlaternet-webserver = { systemd.services.tlaternet-webserver = {
description = "tlaternet webserver"; description = "tlaternet webserver";
wantedBy = ["multi-user.target"]; wantedBy = [ "multi-user.target" ];
after = ["network.target"]; after = [ "network.target" ];
script = escapeShellArgs [ script = escapeShellArgs [
"${server}/bin/tlaternet-webserver" "${server}/bin/tlaternet-webserver"
@ -60,14 +56,21 @@ in {
ProtectKernelModules = true; ProtectKernelModules = true;
ProtectKernelLogs = true; ProtectKernelLogs = true;
ProtectControlGroups = true; ProtectControlGroups = true;
RestrictAddressFamilies = ["AF_UNIX" "AF_INET" "AF_INET6"]; RestrictAddressFamilies = [
"AF_UNIX"
"AF_INET"
"AF_INET6"
];
RestrictNamespaces = true; RestrictNamespaces = true;
LockPersonality = true; LockPersonality = true;
MemoryDenyWriteExecute = true; MemoryDenyWriteExecute = true;
RestrictRealtime = true; RestrictRealtime = true;
RestrictSUIDSGID = true; RestrictSUIDSGID = true;
SystemCallArchitectures = "native"; SystemCallArchitectures = "native";
SystemCallFilter = ["@system-service" "~@privileged @resources @setuid @keyring"]; SystemCallFilter = [
"@system-service"
"~@privileged @resources @setuid @keyring"
];
}; };
}; };
}; };

View file

@ -6,20 +6,25 @@
git, git,
nix, nix,
yq-go, yq-go,
}: let }:
let
selfPackages = self.packages.${system}; selfPackages = self.packages.${system};
inherit (selfPackages.server.config.deps) cargo; inherit (selfPackages.server.config.deps) cargo;
inherit (selfPackages.templates.config.deps) npm; inherit (selfPackages.templates.config.deps) npm;
npm-check-updates = npm-check-updates =
(builtins.elemAt (lib.attrValues (builtins.elemAt (lib.attrValues selfPackages.templates.config.nodejs-granular-v3.deps.npm-check-updates) 0)
selfPackages.templates.config.nodejs-granular-v3.deps.npm-check-updates) .package-func.result;
0)
.package-func
.result;
in in
writeShellApplication { writeShellApplication {
name = "update"; name = "update";
runtimeInputs = [cargo git nix npm npm-check-updates yq-go]; runtimeInputs = [
text = builtins.readFile ./scripts/update.sh; cargo
} git
nix
npm
npm-check-updates
yq-go
];
text = builtins.readFile ./scripts/update.sh;
}

File diff suppressed because it is too large Load diff

View file

@ -1,16 +1,26 @@
{dream2nix, ...}: { { dream2nix, lib, ... }:
{
imports = [ imports = [
dream2nix.modules.dream2nix.rust-cargo-lock dream2nix.modules.dream2nix.rust-cargo-lock
dream2nix.modules.dream2nix.rust-cargo-vendor dream2nix.modules.dream2nix.rust-cargo-vendor
dream2nix.modules.dream2nix.rust-crane dream2nix.modules.dream2nix.rust-crane
]; ];
deps = {fenix, ...}: { deps =
deps.cargo = fenix.stable.minimalToolchain; { fenix, ... }:
}; {
deps.cargo = fenix.stable.minimalToolchain;
};
name = "tlaternet-webserver"; inherit
version = "0.1.0"; ((lib.pipe ./Cargo.toml [
builtins.readFile
builtins.fromTOML
]).package
)
name
version
;
mkDerivation = { mkDerivation = {
src = ./.; src = ./.;

View file

@ -3,28 +3,37 @@
config, config,
lib, lib,
... ...
}: { }:
{
imports = [ imports = [
dream2nix.modules.dream2nix.nodejs-package-json-v3 dream2nix.modules.dream2nix.nodejs-package-json-v3
dream2nix.modules.dream2nix.nodejs-granular-v3 dream2nix.modules.dream2nix.nodejs-granular-v3
dream2nix.modules.dream2nix.nodejs-devshell-v3 dream2nix.modules.dream2nix.nodejs-devshell-v3
]; ];
deps = {nixpkgs, ...}: { deps =
inherit (nixpkgs) pkg-config runCommandLocal rsync vips yj; { nixpkgs, ... }:
}; {
inherit (nixpkgs)
pkg-config
runCommandLocal
rsync
vips
yj
;
};
name = "tlaternet-templates"; name = "tlaternet-templates";
version = "0.1.0"; version = "0.1.0";
mkDerivation = { mkDerivation = {
src = config.deps.runCommandLocal "source" {nativeBuildInputs = [config.deps.yj];} '' src = config.deps.runCommandLocal "source" { nativeBuildInputs = [ config.deps.yj ]; } ''
cp -r ${./.} $out/ cp -r ${./.} $out/
chmod -R u+w $out chmod -R u+w $out
yj < $out/package.yaml > $out/package.json yj < $out/package.yaml > $out/package.json
''; '';
nativeBuildInputs = [config.deps.yj]; nativeBuildInputs = [ config.deps.yj ];
# The default phase (which is hidden in `preInstallPhases`) will # The default phase (which is hidden in `preInstallPhases`) will
# copy the full node_modules directory to the output, and symlink # copy the full node_modules directory to the output, and symlink
@ -32,7 +41,7 @@
# #
# Since this package's output is static HTML/JS, we do not want # Since this package's output is static HTML/JS, we do not want
# that. # that.
preInstallPhases = lib.mkForce []; preInstallPhases = lib.mkForce [ ];
installPhase = '' installPhase = ''
cp -r dist $out cp -r dist $out
''; '';

View file

@ -1 +0,0 @@
package-lock.json

10984
packages/templates/lock.json Normal file

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -7,55 +7,59 @@ private: true
dependencies: dependencies:
# Libraries # Libraries
gl-matrix: ^3.4.3 # To help with 3D math in WebGL code gl-matrix: ^3.4.4 # To help with 3D math in WebGL code
classnames: ^2.5.1 # To manage CSS class names in react code classnames: ^2.5.1 # To manage CSS class names in react code
# Fonts # Fonts
hack-font: ^3.3.0 hack-font: ^3.3.0
'@fontsource/arimo': ^5.0.18 '@fontsource/arimo': ^5.2.8
'@fontsource/nunito': ^5.0.16 '@fontsource/nunito': ^5.2.7
'@fortawesome/fontawesome-free': ^6.5.1 '@fortawesome/fontawesome-free': ^7.1.0
# Frameworks for static content # Frameworks for static content
bulma: ^0.9.4 bulma: ^1.0.4
# React-redux stuff # React-redux stuff
react: ^18.2.0 react: ^19.2.0
react-dom: ^18.2.0 react-dom: ^19.2.0
react-use-error-boundary: ^3.0.0 # TODO(tlater): Remove when react implement their own react-use-error-boundary: ^3.0.0 # TODO(tlater): Remove when react implement their own
redux: ^5.0.1 redux: ^5.0.1
'@reduxjs/toolkit': ^2.0.1 '@reduxjs/toolkit': ^2.10.1
react-redux: ^9.0.4 react-redux: ^9.2.0
devDependencies: devDependencies:
# Parcel & plugins # Parcel & plugins
parcel: ^2.10.3 parcel: ^2.16.1
'@parcel/transformer-sass': ^2.10.3 '@parcel/transformer-sass': ^2.16.1
'@parcel/transformer-glsl': ^2.10.3 '@parcel/transformer-glsl': ^2.16.1
# Build tools # Build tools
typescript: ^5.3.3 typescript: ^5.9.3
sass: ^1.69.6 sass: ^1.94.2
posthtml-extend: ^0.6.5 posthtml-extend: ^0.6.5
posthtml-favicons: ^1.4.0 posthtml-favicons: ^1.4.0
posthtml-include: ^1.7.4 posthtml-include: ^2.0.1
posthtml-markdownit: ^1.3.1 posthtml-markdownit: ^3.1.2
'@babel/preset-env': ^7.23.7 '@babel/preset-env': ^7.28.5
'@fontsource-utils/scss': ^0.2.2
'@fontsource-variable/arimo': ^5.2.8
'@fontsource-variable/nunito': ^5.2.7
# Type shims # Type shims
'@types/react-dom': ^18.2.18 '@types/react-dom': ^19.2.3
'@types/react-redux': ^7.1.33 '@types/react-redux': ^7.1.34
# Dev tools # Dev tools
npm-check-updates: ^16.14.12 npm-check-updates: ^19.1.2
prettier: ^3.1.1 prettier: ^3.6.2
typescript-language-server: ^4.2.0 typescript-language-server: ^5.1.3
typescript-eslint-language-service: ^5.0.5 typescript-eslint-language-service: ^5.0.5
eslint: ^8.56.0 eslint: ^9.39.1
'@typescript-eslint/parser': ^6.17.0 '@typescript-eslint/parser': ^8.47.0
'@typescript-eslint/eslint-plugin': ^6.17.0 '@typescript-eslint/eslint-plugin': ^8.47.0
vscode-langservers-extracted: ^4.8.0 vscode-langservers-extracted: ^4.10.0
scripts: scripts:
# Dev workflow # Dev workflow
@ -86,23 +90,23 @@ posthtml:
root: src root: src
posthtml-include: posthtml-include:
root: src root: src
posthtml-favicons: # posthtml-favicons:
root: src # root: src
outDir: ./dist/ # outDir: ./dist/
configuration: # configuration:
appName: tlater.net # appName: tlater.net
appShortName: tlater.net # appShortName: tlater.net
appDescription: tlater's home page # appDescription: tlater's home page
developerName: Tristan Daniël Maat # developerName: Tristan Daniël Maat
developerURL: https://tlater.net # developerURL: https://tlater.net
dir: auto # dir: auto
lang: en-US # lang: en-US
background: '#0f0f0f' # background: '#0f0f0f'
theme_color: '#99d1ce' # theme_color: '#99d1ce'
appleStatusBarStyle: black-translucent # appleStatusBarStyle: black-translucent
display: browser # display: browser
orientation: any # orientation: any
start_url: https://tlater.net # start_url: https://tlater.net
version: "1.0" # version: "1.0"
icons: # icons:
favicons: true # favicons: true

View file

@ -1,45 +1,52 @@
@use "sass:color"; @use "sass:color";
@use "./_fonts"; @use "./_fonts";
@import "~/node_modules/bulma/sass/utilities/initial-variables.sass";
@import "~/node_modules/bulma/sass/utilities/functions.sass";
$black: #0f0f0f; $black: #0f0f0f;
$grey-darker: #11151c;
$grey-light: #dddddd;
$white: #ffffff;
$red: #dc322f;
$orange: #d26937;
$yellow: #b58900;
$blue: #195466;
$cyan: #599cab;
$green: #2aa889; $green: #2aa889;
$grey-light: #dddddd;
$primary: #99d1ce; $primary: #99d1ce;
$link: $green;
$link-hover: color.scale($green, $lightness: +10%);
$link-active: color.scale($green, $lightness: +10%);
$link-focus: color.scale($green, $lightness: +10%);
$input-color: $grey-light;
$input-placeholder-color: $grey-light; // Some opacity is applied to this
$weight-normal: 400;
$scheme-main: $black;
$family-sans-serif: Nunito, $family-sans-serif;
$family-monospace: Hack, $family-monospace;
$text: $grey-light; $text: $grey-light;
$text-strong: $primary; $grey-darker: #11151c;
$label-color: $text;
$content-heading-color: $text; @use "bulma/sass" with (
$hr-background-color: $grey-light; $family-sans-serif: "Nunito",
$hr-height: 1px; $family-monospace: "Hack",
$black: $black,
$grey-darker: $grey-darker,
$grey-light: $grey-light,
$white: #ffffff,
$red: #dc322f,
$orange: #d26937,
$yellow: #b58900,
$blue: #195466,
$cyan: #599cab,
$green: $green,
$primary: $primary,
$link: $green,
// $link-hover: color.scale($green, $lightness: +10%),
// $link-active: color.scale($green, $lightness: +10%),
// $link-focus: color.scale($green, $lightness: +10%),
// $input-color: $grey-light,
$input-placeholder-color: $grey-light, // Some opacity is applied to this
$weight-normal: 400,
$scheme-main: $black,
$text: $grey-light,
$text-strong: $primary,
$label-color: $text,
$content-heading-color: $text,
$hr-background-color: $grey-light,
$hr-height: 1px,
$pre-background: $grey-darker
);
$pre-background: $grey-darker;
@import "~/node_modules/bulma"; @import "~/node_modules/bulma";
@import "./_navbar"; @import "./_navbar";

View file

@ -1,7 +1,11 @@
@use "~/node_modules/@fontsource/nunito/scss/mixins" as Nunito; @use "npm:@fontsource-utils/scss/src/mixins.scss" as fontsource with (
@use "~/node_modules/@fontsource/arimo/scss/mixins" as Arimo; $display: auto
);
@use "npm:@fontsource-variable/arimo/scss/metadata.scss" as arimo;
@use "npm:@fontsource-variable/nunito/scss/metadata.scss" as nunito;
@include Nunito.faces( @include fontsource.faces(
$metadata: nunito.$metadata,
$weights: ( $weights: (
300, 300,
400, 400,
@ -9,36 +13,36 @@
600, 600,
700, 700,
), ),
$display: auto, $subsets: latin,
$styles: ( $styles: (
normal, normal,
italic, italic,
), ),
$directory: "npm:@fontsource/nunito/files" $family: "Nunito",
$directory: "npm:@fontsource-variable/nunito/files"
); );
@include Arimo.faces( @include fontsource.faces(
$metadata: arimo.$metadata,
$weights: 400, $weights: 400,
$display: auto, $subsets: latin,
$styles: normal, $styles: normal,
$directory: "npm:@fontsource/arimo/files" $family: "Arimo",
$directory: "npm:@fontsource-variable/arimo/files"
); );
// Hack *does* come with its own CSS, but it's broken and hasn't seen // Hack *does* come with its own CSS, but it's broken and hasn't seen
// a release since https://github.com/source-foundry/Hack/issues/467 // a release since https://github.com/source-foundry/Hack/issues/467
// was resolved. // was resolved.
$variants: regular 400 normal, bold 700 normal, italic 400 italic, $variants: regular normal, bold normal, italic italic, bolditalic italic;
bolditalic 700 italic;
@each $name, $weight, $style in $variants { @each $name, $style in $variants {
@font-face { @font-face {
font-family: "Hack"; font-family: "Hack";
src: url("npm:hack-font/build/web/fonts/hack-#{$name}-subset.woff2?sha=3114f1256")
format("woff2"),
url("npm:hack-font/build/web/fonts/hack-#{$name}-subset.woff?sha=3114f1256")
format("woff");
font-weight: $weight;
font-style: $style; font-style: $style;
font-display: auto;
font-weight: 400 700;
src: url("npm:hack-font/build/web/fonts/hack-#{$name}-subset.woff2") format("woff2-variations");
} }
} }

View file

@ -5,17 +5,17 @@
font-family: Arimo; font-family: Arimo;
&:hover { &:hover {
background-color: $dark !important; // background-color: $dark !important;
color: $white !important; // color: $white !important;
} }
} }
& .navbar-start > .navbar-item { & .navbar-start > .navbar-item {
color: rgba($white, 0.75); // color: rgba($white, 0.75);
&:hover { &:hover {
background-color: $dark !important; // background-color: $dark !important;
color: $white !important; // color: $white !important;
} }
} }
} }

View file

@ -1,7 +1,9 @@
$fa-font-path: "npm:@fortawesome/fontawesome-free/webfonts"; @use "npm:@fortawesome/fontawesome-free/scss/_variables.scss" with (
$font-path: "npm:@fortawesome/fontawesome-free/webfonts",
);
@import "~/node_modules/@fortawesome/fontawesome-free/scss/fontawesome"; @use "npm:@fortawesome/fontawesome-free/scss/fontawesome";
@import "~/node_modules/@fortawesome/fontawesome-free/scss/solid"; @use "npm:@fortawesome/fontawesome-free/scss/solid";
.is-border-box { .is-border-box {
box-sizing: border-box !important; box-sizing: border-box !important;