148 lines
4.8 KiB
Nix
148 lines
4.8 KiB
Nix
{
|
|
description = "Backlog.md - A markdown-based task management CLI tool";
|
|
|
|
inputs = {
|
|
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
|
flake-utils.url = "github:numtide/flake-utils";
|
|
bun2nix = {
|
|
url = "github:baileyluTCD/bun2nix";
|
|
inputs.nixpkgs.follows = "nixpkgs";
|
|
};
|
|
};
|
|
|
|
outputs = { self, nixpkgs, flake-utils, bun2nix }:
|
|
flake-utils.lib.eachDefaultSystem (system:
|
|
let
|
|
# Use baseline Bun for x86_64-linux to support older CPUs without AVX2
|
|
# This fixes issue #412 where users with older CPUs (i7-3770, i7-3612QE)
|
|
# get "Illegal instruction" errors during the build process.
|
|
#
|
|
# The baseline build targets Nehalem architecture (2008+) with SSE4.2
|
|
# instead of Haswell (2013+) with AVX2, allowing builds on older hardware.
|
|
#
|
|
# Using an overlay to replace the Bun package maintains full compatibility
|
|
# with the standard Bun package structure (thanks to @erdosxx for this solution).
|
|
pkgs = import nixpkgs {
|
|
inherit system;
|
|
overlays = if system == "x86_64-linux" then
|
|
let bunVersion = "1.2.23"; in [
|
|
(final: prev: {
|
|
bun = prev.bun.overrideAttrs (oldAttrs: {
|
|
src = prev.fetchurl {
|
|
url = "https://github.com/oven-sh/bun/releases/download/bun-v${bunVersion}/bun-linux-x64-baseline.zip";
|
|
sha256 = "017f89e19e1b40aa4c11a7cf671d3990cb51cc12288a43473238a019a8cafffc";
|
|
};
|
|
});
|
|
})
|
|
]
|
|
else
|
|
[];
|
|
};
|
|
|
|
# Read version from package.json
|
|
packageJson = builtins.fromJSON (builtins.readFile ./package.json);
|
|
version = packageJson.version;
|
|
|
|
ldLibraryPath = ''
|
|
LD_LIBRARY_PATH=${pkgs.lib.makeLibraryPath [
|
|
pkgs.stdenv.cc.cc.lib
|
|
]}''${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}
|
|
'';
|
|
|
|
backlog-md = bun2nix.lib.${system}.mkBunDerivation {
|
|
pname = "backlog";
|
|
inherit version;
|
|
src = ./.;
|
|
packageJson = ./package.json;
|
|
bunNix = ./bun.nix;
|
|
|
|
nativeBuildInputs = with pkgs; [ bun git rsync ];
|
|
|
|
preBuild = ''
|
|
export HOME=$TMPDIR
|
|
export HUSKY=0
|
|
export ${ldLibraryPath}
|
|
'';
|
|
|
|
buildPhase = ''
|
|
runHook preBuild
|
|
|
|
# Build the CLI tool with embedded version
|
|
# Note: CSS is pre-compiled and committed to git, no need to build here
|
|
bun build --compile --minify --define "__EMBEDDED_VERSION__=${version}" --outfile=dist/backlog src/cli.ts
|
|
|
|
runHook postBuild
|
|
'';
|
|
|
|
installPhase = ''
|
|
runHook preInstall
|
|
|
|
mkdir -p $out/bin
|
|
cp dist/backlog $out/bin/backlog
|
|
chmod +x $out/bin/backlog
|
|
|
|
runHook postInstall
|
|
'';
|
|
|
|
meta = with pkgs.lib; {
|
|
description = "A markdown-based task management CLI tool with Kanban board";
|
|
longDescription = ''
|
|
Backlog.md is a command-line tool for managing tasks and projects using markdown files.
|
|
It provides Kanban board visualization, task management, and integrates with Git workflows.
|
|
'';
|
|
homepage = "https://backlog.md";
|
|
changelog = "https://github.com/MrLesk/Backlog.md/releases";
|
|
license = licenses.mit;
|
|
maintainers = let
|
|
mrlesk = {
|
|
name = "MrLesk";
|
|
github = "MrLesk";
|
|
githubId = 181345848;
|
|
};
|
|
in
|
|
with maintainers; [ anpryl mrlesk ];
|
|
platforms = platforms.all;
|
|
mainProgram = "backlog";
|
|
};
|
|
};
|
|
in
|
|
{
|
|
packages = {
|
|
default = backlog-md;
|
|
"backlog-md" = backlog-md;
|
|
};
|
|
|
|
apps = {
|
|
default = flake-utils.lib.mkApp {
|
|
drv = backlog-md;
|
|
name = "backlog";
|
|
};
|
|
};
|
|
|
|
devShells.default = pkgs.mkShell {
|
|
packages = with pkgs; [
|
|
bun
|
|
bun2nix.packages.${system}.default
|
|
];
|
|
|
|
buildInputs = with pkgs; [
|
|
bun
|
|
nodejs_20
|
|
git
|
|
biome
|
|
];
|
|
|
|
shellHook = ''
|
|
export ${ldLibraryPath}
|
|
|
|
echo "Backlog.md development environment"
|
|
echo "Available commands:"
|
|
echo " bun i - Install dependencies"
|
|
echo " bun test - Run tests"
|
|
echo " bun run cli - Run CLI in development mode"
|
|
echo " bun run build - Build the CLI tool"
|
|
echo " bun run check - Run Biome checks"
|
|
'';
|
|
};
|
|
});
|
|
} |