ci: rework flake integration

Now Use flake part and integrate a build system using nix package building and treefmt-nix as a flake-part module
This commit is contained in:
Yorick Barbanneau 2025-01-07 00:56:34 +01:00
parent 440e26fb63
commit ffea2b6857
8 changed files with 268 additions and 79 deletions

34
nix/build.nix Normal file
View file

@ -0,0 +1,34 @@
{ inputs, ... }:
let
inherit (inputs.flake-parts.lib) mkPerSystemOption;
in
{
options.perSystem = mkPerSystemOption (
{
pkgs,
config,
...
}:
{
packages.default = pkgs.stdenvNoCC.mkDerivation {
name = "xiemeart";
src = ../.;
nativeBuildInputs = config.buildPackages;
configurePhase = ''
ln -snf ${config.pelicantheme} theme
ln -snf ${config.pelicanplugins} plugins
'';
buildPhase = ''
ls -la
mkdir -p output
pelican --verbose -o output/ 2>& 1>build.log
'';
installPhase = ''
mkdir -p $out/
cp build.log $out/
cp -r output/* $out/
'';
};
}
);
}

9
nix/default.nix Normal file
View file

@ -0,0 +1,9 @@
{ ... }:
{
imports = [
./treefmt.nix
./packages.nix
./devshell.nix
./build.nix
];
}

20
nix/devshell.nix Normal file
View file

@ -0,0 +1,20 @@
_: {
config.perSystem =
{
config,
inputs',
pkgs,
...
}:
{
devShells = {
default = pkgs.mkShell {
nativeBuildInputs = config.buildPackages ++ config.develPackages ++ config.deployPackages;
shellHook = ''
ln -snf ${config.pelicanplugins} plugins
ln -snf ${config.pelicantheme} theme
'';
};
};
};
}

105
nix/packages.nix Normal file
View file

@ -0,0 +1,105 @@
{
lib,
inputs,
...
}:
let
inherit (lib) mkOption mdDoc types;
inherit (inputs.flake-parts.lib) mkPerSystemOption;
in
{
options.perSystem = mkPerSystemOption (
{
pkgs,
config,
...
}:
{
options = {
buildPackages = mkOption {
description = mdDoc "Python package used in the project";
type = types.listOf types.package;
default = with pkgs; [
python311
python311Packages.markdown-include
python311Packages.pelican
python311Packages.typogrify
];
};
develPackages = mkOption {
description = mdDoc "Python package used to development";
type = types.listOf types.package;
default = with pkgs; [
convco
go-task
lefthook
python3Packages.invoke
python3Packages.livereload
shellcheck
shfmt
typos
];
};
deployPackages = mkOption {
description = mdDoc "Package use to deploy";
type = types.listOf types.package;
default = with pkgs; [
rsync
];
};
pelicanplugins = mkOption {
type = types.package;
description = mdDoc "Pelican plugins used in my blog";
default =
with pkgs;
stdenvNoCC.mkDerivation {
name = "pelicanplugins";
pname = "pelicanplugins";
version = "1.0.0";
sourceRoot = ".";
srcs = [
(pkgs.fetchFromGitHub {
name = "neighbors";
owner = "pelican-plugins";
repo = "neighbors";
rev = "60649ac6f3494d01a37b9c6d3d455f9dc2502d55";
hash = "sha256-c6etuRqve9xj6NhGRAim2A0ae8xv6mI/yez+suQuZ8U=";
})
(pkgs.fetchFromGitHub {
name = "markdown-include";
owner = "pelican-plugins";
repo = "markdown-include";
rev = "df0b3e55c45471283ca62d6e157b61a8caa35e37";
hash = "sha256-y0dIvyEYLbYqkm+6yJOUYI3apzEMJ/N/JUwWTqjdsNg=";
})
];
installPhase = ''
cp -r markdown-include/pelican/plugins/ $out/
cp -r neighbors/pelican/plugins/neighbors $out/
'';
};
};
pelicantheme = mkOption {
type = types.package;
description = mdDoc "My personnal Pelican theme";
default = (
with pkgs;
stdenvNoCC.mkDerivation {
name = "pelicantheme-atilla";
pname = "pelicantheme-atilla";
version = "main";
src = pkgs.fetchgit {
url = "https://git.epha.se/ephase/attila_pelican_theme";
rev = "c5923a4be38d9c646a9dc261fb0ba4f24fe5655a";
hash = "sha256-DaaumjR23pXrACRHX9FssxE56nV7vLRy7HjRclm6rgs=";
};
installPhase = ''
cp -r $src/ $out
'';
}
);
};
};
}
);
}

18
nix/treefmt.nix Normal file
View file

@ -0,0 +1,18 @@
_: {
config.perSystem =
{
config,
inputs',
pkgs,
...
}:
{
treefmt = {
programs = {
shfmt.enable = true;
alejandra.enable = true;
nixfmt.enable = true;
};
};
};
}