mirror of
https://github.com/oqyude/nixos.git
synced 2026-10-11 14:27:26 +03:00
feat(devshells): add vtimeline devshell for the VeeamTimelineView project
Sister project at S:\Git\VeeamTimelineView has its own repo and gitea
remote; we keep its Nix env here in the home-fleet flake so the project
itself stays free of Nix.
`nix develop .#vtimeline` provides:
- nodejs_22 (Node 20 hit EOL 2026-04-30 and was removed from nixpkgs)
- python3 (Playwright webServer)
- chromium (used via PLAYWRIGHT_BROWSERS_PATH symlink farm, since
Playwright 1.40+ hard-codes a separate chrome-headless-shell path)
Shell banner points at ../VeeamTimelineView. The absolute project path
cannot be baked into the shellHook (Nix forbids escaping the flake source
dir at eval time); user is expected to `cd` themselves.
This commit is contained in:
@@ -0,0 +1,77 @@
|
|||||||
|
# Per-project devshells. Each entry here is a self-contained mkShell that
|
||||||
|
# can be entered with `nix develop .#<name>`.
|
||||||
|
#
|
||||||
|
# Why this lives in the nixos flake:
|
||||||
|
# vtimeline is a sibling project under /s/Git/VeeamTimelineView (not part
|
||||||
|
# of the NixOS configs). Keeping its devshell here avoids polluting the
|
||||||
|
# project itself with a flake, while still letting us `nix develop` into
|
||||||
|
# the same node/python/chromium toolchain that NixOS uses.
|
||||||
|
{ inputs, ... }@_flakeContext:
|
||||||
|
let
|
||||||
|
system = "x86_64-linux";
|
||||||
|
pkgs = import inputs.nixpkgs {
|
||||||
|
inherit system;
|
||||||
|
config = { allowUnfree = true; };
|
||||||
|
};
|
||||||
|
in
|
||||||
|
{
|
||||||
|
devShells.${system} = {
|
||||||
|
# `nix develop .#vtimeline` -> shell for testing the VeeamTimelineView
|
||||||
|
# project (Playwright + ESLint + Prettier over a vanilla-JS frontend).
|
||||||
|
vtimeline = pkgs.mkShell {
|
||||||
|
name = "vtimeline-devshell";
|
||||||
|
|
||||||
|
buildInputs = with pkgs; [
|
||||||
|
# nodejs_20 was removed from nixpkgs on 2026-07-13 after Node.js 20
|
||||||
|
# reached upstream EOL on 2026-04-30. nodejs_22 is the current LTS.
|
||||||
|
# VeeamTimelineView's package.json does not pin a Node version, so
|
||||||
|
# this is transparent to npm.
|
||||||
|
nodejs_22
|
||||||
|
python3
|
||||||
|
chromium
|
||||||
|
];
|
||||||
|
|
||||||
|
# `nodePackages.*` deliberately not added — they would pollute the
|
||||||
|
# shell globally. Anything npm-side goes through `npm install` in the
|
||||||
|
# project's own node_modules.
|
||||||
|
|
||||||
|
shellHook = ''
|
||||||
|
# Skip Playwright's own browser download — we use the system one.
|
||||||
|
export PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1
|
||||||
|
|
||||||
|
# Direct executable-path override (honoured by older Playwright and
|
||||||
|
# the `channel: "chromium"` code path).
|
||||||
|
export PLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH=${pkgs.chromium}/bin/chromium
|
||||||
|
|
||||||
|
# Playwright 1.40+ uses a separate "chrome-headless-shell" binary
|
||||||
|
# in headless mode and looks for it under a hard-coded path
|
||||||
|
# ($PLAYWRIGHT_BROWSERS_PATH/chromium_headless_shell-<rev>/...).
|
||||||
|
# We satisfy that lookup by symlinking the nixpkgs chromium into a
|
||||||
|
# fake registry directory.
|
||||||
|
export NIX_CHROMIUM=${pkgs.chromium}/bin/chromium
|
||||||
|
export PLAYWRIGHT_BROWSERS_PATH=$HOME/.cache/vtimeline-pw-browsers
|
||||||
|
mkdir -p "$PLAYWRIGHT_BROWSERS_PATH"
|
||||||
|
link_bin() {
|
||||||
|
local d="$PLAYWRIGHT_BROWSERS_PATH/$1"
|
||||||
|
mkdir -p "$d"
|
||||||
|
ln -sfn "$NIX_CHROMIUM" "$d/chrome-headless-shell"
|
||||||
|
ln -sfn "$NIX_CHROMIUM" "$d/chrome"
|
||||||
|
}
|
||||||
|
# Layouts derived from Playwright's EXECUTABLE_PATHS table for
|
||||||
|
# the chromium + chromium-headless-shell entries (linux-x64).
|
||||||
|
link_bin "chromium-1248/chrome-linux"
|
||||||
|
link_bin "chromium_headless_shell-1248/chrome-headless-shell-linux64"
|
||||||
|
|
||||||
|
# Convenience banner. The VeeamTimelineView project lives next to
|
||||||
|
# this flake repo (../VeeamTimelineView from the nixos checkout,
|
||||||
|
# i.e. S:\\Git\\VeeamTimelineView on Windows). We don't bake the
|
||||||
|
# path into the shellHook because Nix forbids escaping the flake
|
||||||
|
# source dir at eval time — print a hint and let the user `cd`.
|
||||||
|
echo "[vtimeline-devshell] node: $(command -v node)"
|
||||||
|
echo "[vtimeline-devshell] python: $(command -v python3)"
|
||||||
|
echo "[vtimeline-devshell] chrome: $NIX_CHROMIUM"
|
||||||
|
echo "[vtimeline-devshell] run: cd ../VeeamTimelineView && npm install && npm test"
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user