Compare commits
2 Commits
a512e2a078
...
168297aa8f
Author | SHA1 | Date |
---|---|---|
mat ess | 168297aa8f | |
mat ess | 130efc7383 |
|
@ -1,54 +1,52 @@
|
||||||
local Volume = { name: 'site', path: '/site' };
|
local PROD = 'production';
|
||||||
|
local STAGE = 'staging';
|
||||||
|
local VOLUME = { name: 'site', path: '/site' };
|
||||||
|
local NIX = 'nix --extra-experimental-features nix-command --extra-experimental-features flakes';
|
||||||
|
|
||||||
local WhenProd(prod) = if prod then {
|
local WhenProd(prod) = if prod then {
|
||||||
event: ['promote'],
|
event: ['promote'],
|
||||||
target: ['production'],
|
target: [PROD],
|
||||||
} else {
|
} else {
|
||||||
target: { exclude: ['production'] },
|
target: { exclude: [PROD] },
|
||||||
};
|
};
|
||||||
local NixStep(env) =
|
|
||||||
local prod = env == 'production';
|
local Step(env, name, cmds) =
|
||||||
local output = if prod then '' else ' .#staging-site';
|
local prod = env == PROD;
|
||||||
{
|
{
|
||||||
name: 'nix build ' + env,
|
name: name + ' ' + env,
|
||||||
image: 'nixos/nix:latest',
|
image: 'nixos/nix:latest',
|
||||||
volumes: [Volume],
|
volumes: [VOLUME],
|
||||||
commands: [
|
commands: cmds,
|
||||||
'$NIX build' + output,
|
when: WhenProd(prod),
|
||||||
|
};
|
||||||
|
|
||||||
|
local NixStep(env) =
|
||||||
|
local prod = env == PROD;
|
||||||
|
local output = if prod then '' else ' .#staging-site';
|
||||||
|
Step(env, 'nix build', [
|
||||||
|
NIX + ' build' + output,
|
||||||
'cp -r result/* /site/',
|
'cp -r result/* /site/',
|
||||||
],
|
]);
|
||||||
when: WhenProd(prod),
|
|
||||||
};
|
local DeployStep(env) =
|
||||||
local NetlifyStep(env) =
|
local prod = env == PROD;
|
||||||
local prod = env == 'production';
|
local options = if prod then '--prod' else '--alias staging';
|
||||||
{
|
Step(env, 'netlify deploy', [
|
||||||
name: 'netlify deploy ' + env,
|
NIX + ' profile install netlify-cli',
|
||||||
image: 'internetmat/drone-netlify:latest',
|
'netlify deploy -d /site ' + options,
|
||||||
pull: 'always',
|
]);
|
||||||
volumes: [Volume],
|
|
||||||
settings: {
|
|
||||||
token: { from_secret: 'netlify_token' },
|
|
||||||
site: { from_secret: 'netlify_site_id' },
|
|
||||||
alias: env,
|
|
||||||
path: '/site',
|
|
||||||
prod: prod,
|
|
||||||
},
|
|
||||||
when: WhenProd(prod),
|
|
||||||
};
|
|
||||||
{
|
{
|
||||||
kind: 'pipeline',
|
kind: 'pipeline',
|
||||||
type: 'docker',
|
type: 'docker',
|
||||||
name: 'default',
|
name: 'default',
|
||||||
|
|
||||||
environment: {
|
|
||||||
NIX: 'nix --extra-experimental-features nix-command --extra-experimental-features flakes',
|
|
||||||
},
|
|
||||||
|
|
||||||
volumes: [{ name: 'site', temp: {} }],
|
volumes: [{ name: 'site', temp: {} }],
|
||||||
|
|
||||||
steps: [
|
steps: [
|
||||||
NixStep('staging'),
|
NixStep(STAGE),
|
||||||
NixStep('production'),
|
NixStep(PROD),
|
||||||
NetlifyStep('staging'),
|
DeployStep(STAGE),
|
||||||
NetlifyStep('production'),
|
DeployStep(PROD),
|
||||||
],
|
],
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,3 +10,6 @@ static/style/fonts.css
|
||||||
|
|
||||||
# Local Netlify folder
|
# Local Netlify folder
|
||||||
.netlify
|
.netlify
|
||||||
|
|
||||||
|
# local pre-commit config
|
||||||
|
.pre-commit-config.yaml
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
[default.extend-words]
|
||||||
|
referer = "referer"
|
|
@ -126,7 +126,7 @@ If software builds are functions, then Nix flakes are pure functions. Indeed, th
|
||||||
builder.url = "...";
|
builder.url = "...";
|
||||||
source.url = "...";
|
source.url = "...";
|
||||||
};
|
};
|
||||||
ouputs = { self, builder, source }: {
|
outputs = { self, builder, source }: {
|
||||||
software = builder.build source;
|
software = builder.build source;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
110
flake.lock
110
flake.lock
|
@ -16,18 +16,32 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"flake-compat": {
|
||||||
|
"flake": false,
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1668681692,
|
||||||
|
"narHash": "sha256-Ht91NGdewz8IQLtWZ9LCeNXMSXHUss+9COoqu6JLmXU=",
|
||||||
|
"owner": "edolstra",
|
||||||
|
"repo": "flake-compat",
|
||||||
|
"rev": "009399224d5e398d03b22badca40a37ac85412a1",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "edolstra",
|
||||||
|
"repo": "flake-compat",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
"flake-parts": {
|
"flake-parts": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs": [
|
"nixpkgs-lib": "nixpkgs-lib"
|
||||||
"nixpkgs"
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1664385320,
|
"lastModified": 1668450977,
|
||||||
"narHash": "sha256-uSCHb9RUqHRjTpI8OzyaUuHckFnnxwZqlXEuo+yUpYQ=",
|
"narHash": "sha256-cfLhMhnvXn6x1vPm+Jow3RiFAUSCw/l1utktCw5rVA4=",
|
||||||
"owner": "hercules-ci",
|
"owner": "hercules-ci",
|
||||||
"repo": "flake-parts",
|
"repo": "flake-parts",
|
||||||
"rev": "45298bd207b26e1bcd030a0bb075aa2da29f8e30",
|
"rev": "d591857e9d7dd9ddbfba0ea02b43b927c3c0f1fa",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -36,6 +50,21 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"flake-utils": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1667395993,
|
||||||
|
"narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=",
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
"gitignore": {
|
"gitignore": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
|
@ -58,11 +87,11 @@
|
||||||
},
|
},
|
||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1665259268,
|
"lastModified": 1670064435,
|
||||||
"narHash": "sha256-ONFhHBLv5nZKhwV/F2GOH16197PbvpyWhoO0AOyktkU=",
|
"narHash": "sha256-+ELoY30UN+Pl3Yn7RWRPabykwebsVK/kYE9JsIsUMxQ=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "c5924154f000e6306030300592f4282949b2db6c",
|
"rev": "61a8a98e6d557e6dd7ed0cdb54c3a3e3bbc5e25c",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
@ -72,12 +101,73 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"nixpkgs-lib": {
|
||||||
|
"locked": {
|
||||||
|
"dir": "lib",
|
||||||
|
"lastModified": 1665349835,
|
||||||
|
"narHash": "sha256-UK4urM3iN80UXQ7EaOappDzcisYIuEURFRoGQ/yPkug=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "34c5293a71ffdb2fe054eb5288adc1882c1eb0b1",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"dir": "lib",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "nixos-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs-stable": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1671271954,
|
||||||
|
"narHash": "sha256-cSvu+bnvN08sOlTBWbBrKaBHQZq8mvk8bgpt0ZJ2Snc=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "d513b448cc2a6da2c8803e3c197c9fc7e67b19e3",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "nixos-22.05",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"pre-commit": {
|
||||||
|
"inputs": {
|
||||||
|
"flake-compat": "flake-compat",
|
||||||
|
"flake-utils": "flake-utils",
|
||||||
|
"gitignore": [
|
||||||
|
"gitignore"
|
||||||
|
],
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs"
|
||||||
|
],
|
||||||
|
"nixpkgs-stable": "nixpkgs-stable"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1671452357,
|
||||||
|
"narHash": "sha256-HqzXiQEegpRQ4VEl9pEPgHSIxhJrNJ27HfN1wOc7w2E=",
|
||||||
|
"owner": "cachix",
|
||||||
|
"repo": "pre-commit-hooks.nix",
|
||||||
|
"rev": "200790e9c77064c53eaf95805b013d96615ecc27",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "cachix",
|
||||||
|
"repo": "pre-commit-hooks.nix",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
"root": {
|
"root": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"caddyfile-syntax": "caddyfile-syntax",
|
"caddyfile-syntax": "caddyfile-syntax",
|
||||||
"flake-parts": "flake-parts",
|
"flake-parts": "flake-parts",
|
||||||
"gitignore": "gitignore",
|
"gitignore": "gitignore",
|
||||||
"nixpkgs": "nixpkgs"
|
"nixpkgs": "nixpkgs",
|
||||||
|
"pre-commit": "pre-commit"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
39
flake.nix
39
flake.nix
|
@ -4,19 +4,21 @@
|
||||||
inputs = {
|
inputs = {
|
||||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||||
flake-parts.url = "github:hercules-ci/flake-parts";
|
flake-parts.url = "github:hercules-ci/flake-parts";
|
||||||
flake-parts.inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
gitignore.url = "github:hercules-ci/gitignore.nix";
|
gitignore.url = "github:hercules-ci/gitignore.nix";
|
||||||
gitignore.inputs.nixpkgs.follows = "nixpkgs";
|
gitignore.inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
pre-commit.url = "github:cachix/pre-commit-hooks.nix";
|
||||||
|
pre-commit.inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
pre-commit.inputs.gitignore.follows = "gitignore";
|
||||||
|
|
||||||
caddyfile-syntax.url = "github:caddyserver/sublimetext";
|
caddyfile-syntax.url = "github:caddyserver/sublimetext";
|
||||||
caddyfile-syntax.flake = false;
|
caddyfile-syntax.flake = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
outputs = { self, flake-parts, gitignore, ... }@inputs:
|
outputs = { self, flake-parts, gitignore, pre-commit, ... }@inputs:
|
||||||
flake-parts.lib.mkFlake { inherit self; } {
|
flake-parts.lib.mkFlake { inherit self; } {
|
||||||
imports = [ ];
|
imports = [ pre-commit.flakeModule ];
|
||||||
systems = [ "x86_64-linux" "aarch64-darwin" ];
|
systems = [ "x86_64-linux" "aarch64-darwin" ];
|
||||||
perSystem = { config, self', inputs', pkgs, system, ... }:
|
perSystem = { config, pkgs, ... }:
|
||||||
let
|
let
|
||||||
inherit (gitignore.lib) gitignoreSource;
|
inherit (gitignore.lib) gitignoreSource;
|
||||||
inherit (pkgs.callPackage ./nix { }) fonts optimize-images update-date;
|
inherit (pkgs.callPackage ./nix { }) fonts optimize-images update-date;
|
||||||
|
@ -24,25 +26,23 @@
|
||||||
caddyfile-syntax = "${inputs.caddyfile-syntax}/Caddyfile.sublime-syntax";
|
caddyfile-syntax = "${inputs.caddyfile-syntax}/Caddyfile.sublime-syntax";
|
||||||
buildSite = { prod }:
|
buildSite = { prod }:
|
||||||
let
|
let
|
||||||
inherit (pkgs.lib) optionalString;
|
ifStaging = pkgs.lib.optionalString (!prod);
|
||||||
ifStaging = optionalString (!prod);
|
|
||||||
rev = if (self ? rev) then self.rev else "dirty";
|
|
||||||
in
|
in
|
||||||
''
|
''
|
||||||
optimize-images
|
optimize-images
|
||||||
zola build --drafts ${ifStaging "--base-url https://staging--mat-services.netlify.app"}
|
zola build --drafts ${ifStaging "--base-url https://staging--mat-services.netlify.app"}
|
||||||
# zola's ignored_content setting doesn't work in static/
|
# zola's ignored_content setting doesn't work in static/
|
||||||
rm -rf public/image/_favicon.svg
|
rm -rf public/image/_favicon.svg
|
||||||
convert public/image/favicon.svg -resize 256x256 public/favicon.ico
|
|
||||||
'';
|
'';
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
packages.default = with pkgs; stdenv.mkDerivation {
|
packages.default = with pkgs; stdenv.mkDerivation {
|
||||||
pname = "personal-site";
|
pname = "personal-site";
|
||||||
version = "2022-11-25";
|
version = "2022-12-21";
|
||||||
src = gitignoreSource ./.;
|
src = gitignoreSource ./.;
|
||||||
nativeBuildInputs = [ imagemagick optimize-images update-date zola ];
|
nativeBuildInputs = [ optimize-images update-date zola ];
|
||||||
configurePhase = copyFonts + ''
|
configurePhase = ''
|
||||||
|
${copyFonts}
|
||||||
mkdir -p extra/syntax
|
mkdir -p extra/syntax
|
||||||
cp ${caddyfile-syntax} extra/syntax
|
cp ${caddyfile-syntax} extra/syntax
|
||||||
'';
|
'';
|
||||||
|
@ -54,12 +54,25 @@
|
||||||
packages.staging-site = config.packages.default.overrideAttrs (_: {
|
packages.staging-site = config.packages.default.overrideAttrs (_: {
|
||||||
buildPhase = buildSite { prod = false; };
|
buildPhase = buildSite { prod = false; };
|
||||||
});
|
});
|
||||||
|
pre-commit.settings.hooks = {
|
||||||
|
# nix hooks
|
||||||
|
deadnix.enable = true;
|
||||||
|
nix-linter.enable = true;
|
||||||
|
nixpkgs-fmt.enable = true;
|
||||||
|
statix.enable = true;
|
||||||
|
# general hooks
|
||||||
|
typos.enable = true;
|
||||||
|
typos.excludes = [ "webp" "png" "svg" "ico" ];
|
||||||
|
};
|
||||||
devShells.default = with pkgs; mkShell {
|
devShells.default = with pkgs; mkShell {
|
||||||
packages = [ optimize-images update-date zola ];
|
packages = [ jsonnet netlify-cli optimize-images update-date zola ];
|
||||||
shellHook = linkFonts + ''
|
shellHook = ''
|
||||||
|
${config.pre-commit.installationScript}
|
||||||
|
${linkFonts}
|
||||||
mkdir -p extra/syntax
|
mkdir -p extra/syntax
|
||||||
ln -snf ${caddyfile-syntax} extra/syntax
|
ln -snf ${caddyfile-syntax} extra/syntax
|
||||||
'';
|
'';
|
||||||
|
inputsFrom = builtins.attrValues self.checks;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
, lib
|
, lib
|
||||||
, stdenv
|
, stdenv
|
||||||
, woff2
|
, woff2
|
||||||
, writeShellScriptBin
|
|
||||||
, writeText
|
, writeText
|
||||||
}:
|
}:
|
||||||
let
|
let
|
||||||
|
@ -45,7 +44,7 @@ rec {
|
||||||
name = "font-${pathName name}";
|
name = "font-${pathName name}";
|
||||||
src = fetchFromGitHub {
|
src = fetchFromGitHub {
|
||||||
inherit owner repo rev sha256;
|
inherit owner repo rev sha256;
|
||||||
sparseCheckout = path;
|
sparseCheckout = [ path ];
|
||||||
};
|
};
|
||||||
nativeBuildInputs = [ woff2 ];
|
nativeBuildInputs = [ woff2 ];
|
||||||
buildPhase = ''
|
buildPhase = ''
|
||||||
|
@ -61,7 +60,7 @@ rec {
|
||||||
font = fontDerivation fontSrc;
|
font = fontDerivation fontSrc;
|
||||||
};
|
};
|
||||||
fonts = map fetchFont fontSrcs;
|
fonts = map fetchFont fontSrcs;
|
||||||
mkFontCss = { font, name, fileName, cssVar }:
|
mkFontCss = { name, fileName, cssVar, ... }:
|
||||||
let path = pathName name; in ''
|
let path = pathName name; in ''
|
||||||
@font-face {
|
@font-face {
|
||||||
font-family: '${name}';
|
font-family: '${name}';
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
{ bc, libwebp, scour, writeShellScriptBin }:
|
{ bc, imagemagick, libwebp, scour, writeShellScriptBin }:
|
||||||
|
|
||||||
writeShellScriptBin "optimize-images" ''
|
writeShellScriptBin "optimize-images" ''
|
||||||
shopt -s globstar nullglob
|
shopt -s globstar nullglob
|
||||||
|
@ -14,4 +14,5 @@ writeShellScriptBin "optimize-images" ''
|
||||||
pct=$(${bc}/bin/bc <<< "scale=1; $newsize * 100 / $oldsize")
|
pct=$(${bc}/bin/bc <<< "scale=1; $newsize * 100 / $oldsize")
|
||||||
echo "size went from "$(($oldsize / 1024))"KB to "$(($newsize / 1024))"KB ("$pct"% as large as original)"
|
echo "size went from "$(($oldsize / 1024))"KB to "$(($newsize / 1024))"KB ("$pct"% as large as original)"
|
||||||
done
|
done
|
||||||
|
${imagemagick}/bin/convert static/image/favicon.svg -resize 256x256 static/favicon.ico
|
||||||
''
|
''
|
||||||
|
|
Binary file not shown.
After Width: | Height: | Size: 45 KiB |
Loading…
Reference in New Issue