Compare commits
7 Commits
7723cb4502
...
208f792203
| Author | SHA1 | Date | |
|---|---|---|---|
|
208f792203
|
|||
|
cace817c36
|
|||
|
e20e91112f
|
|||
|
d7005b4e1c
|
|||
|
19f42d0fa3
|
|||
|
a76effd096
|
|||
|
d4c86b0417
|
47
CLAUDE.md
Normal file
47
CLAUDE.md
Normal file
@@ -0,0 +1,47 @@
|
||||
# CLAUDE.md
|
||||
|
||||
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
||||
|
||||
## Project Overview
|
||||
|
||||
Nix flake providing custom packages not available in nixpkgs. Tracks `nixos-unstable`. Uses `config.allowUnfree = true`.
|
||||
|
||||
## Build Commands
|
||||
|
||||
```bash
|
||||
# Build a specific package
|
||||
nix build .#packages.x86_64-linux.<package-name>
|
||||
|
||||
# Build all packages (x86_64-linux)
|
||||
./scripts/build-all.sh
|
||||
|
||||
# Validate flake
|
||||
nix flake check
|
||||
|
||||
# Update flake inputs
|
||||
nix flake update
|
||||
```
|
||||
|
||||
## Structure
|
||||
|
||||
- `flake.nix` — Defines all packages and per-package overlays. Packages are registered in `packages` and exposed via `overlays`.
|
||||
- `pkgs/<name>/default.nix` — Individual package definitions, called via `pkgs.callPackage` (or `pkgs.qt6Packages.callPackage` for Qt packages).
|
||||
- `scripts/` — Helper scripts (`build-all.sh`, `update-pob.sh`).
|
||||
|
||||
## Adding a New Package
|
||||
|
||||
1. Create `pkgs/<name>/default.nix` with the package derivation.
|
||||
2. Add the package to `packages` in `flake.nix` via `callPackage`.
|
||||
3. Add a per-package overlay in `flake.nix` `overlays` and include it in the `default` overlay if appropriate.
|
||||
|
||||
## Packaging Patterns Used
|
||||
|
||||
- **AppImage**: `appimageTools.wrapType2` (see `poe-sidekick`)
|
||||
- **Electron/Yarn**: `yarnConfigHook` + `yarnBuildHook` + `fetchYarnDeps` (see `awakened-poe-trade`)
|
||||
- **Qt6/Meson**: `qt6Packages.callPackage` + `wrapQtAppsHook` (see `path-of-building-*`)
|
||||
- **Rust/Cargo**: `rustPlatform.buildRustPackage` + `useFetchCargoVendor` (see `noita-entangled-worlds`)
|
||||
- **Binary/.NET**: `fetchurl` + `makeWrapper` with `makeLibraryPath` (see `vintagestory`)
|
||||
|
||||
## Commit Style
|
||||
|
||||
Imperative, prefixed with package name when relevant: `poe-sidekick: add package`, `Bump entangled worlds`.
|
||||
6
flake.lock
generated
6
flake.lock
generated
@@ -2,11 +2,11 @@
|
||||
"nodes": {
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1743583204,
|
||||
"narHash": "sha256-F7n4+KOIfWrwoQjXrL2wD9RhFYLs2/GGe/MQY1sSdlE=",
|
||||
"lastModified": 1772963539,
|
||||
"narHash": "sha256-9jVDGZnvCckTGdYT53d/EfznygLskyLQXYwJLKMPsZs=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "2c8d3f48d33929642c1c12cd243df4cc7d2ce434",
|
||||
"rev": "9dcb002ca1690658be4a04645215baea8b95f31d",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
||||
43
flake.nix
43
flake.nix
@@ -27,30 +27,54 @@
|
||||
{
|
||||
overlays = {
|
||||
default = final: prev: {
|
||||
awakened-poe-trade = self.packages.${prev.system}.awakened-poe-trade;
|
||||
path-of-building-beta = self.packages.${prev.system}.path-of-building-beta;
|
||||
vintagestory-unstable = self.packages.${prev.system}.vintagestory-unstable;
|
||||
inherit (self.packages.${prev.system})
|
||||
awakened-poe-trade
|
||||
path-of-building-beta
|
||||
path-of-building-poe2
|
||||
vintagestory-unstable
|
||||
noita-entangled-worlds
|
||||
poe-sidekick
|
||||
poe-sidekick-web
|
||||
forgejo-mcp
|
||||
;
|
||||
};
|
||||
awakened-poe-trade = final: prev: {
|
||||
awakened-poe-trade = self.packages.${prev.system}.awakened-poe-trade;
|
||||
inherit (self.packages.${prev.system}) awakened-poe-trade;
|
||||
};
|
||||
path-of-building-beta = final: prev: {
|
||||
awakened-poe-trade = self.packages.${prev.system}.path-of-building-beta;
|
||||
inherit (self.packages.${prev.system}) path-of-building-beta;
|
||||
};
|
||||
vintagestory-unstable = final: prev: {
|
||||
vintagestory-unstable = self.packages.${prev.system}.vintagestory-unstable;
|
||||
inherit (self.packages.${prev.system}) vintagestory-unstable;
|
||||
};
|
||||
noita-entangled-worlds = final: prev: {
|
||||
noita-entangled-worlds = self.packages.${prev.system}.noita-entangled-worlds;
|
||||
inherit (self.packages.${prev.system}) noita-entangled-worlds;
|
||||
};
|
||||
poe-sidekick = final: prev: {
|
||||
poe-sidekick = self.packages.${prev.system}.poe-sidekick;
|
||||
inherit (self.packages.${prev.system}) poe-sidekick;
|
||||
};
|
||||
poe-sidekick-web = final: prev: {
|
||||
poe-sidekick-web = self.packages.${prev.system}.poe-sidekick-web;
|
||||
inherit (self.packages.${prev.system}) poe-sidekick-web;
|
||||
};
|
||||
forgejo-mcp = final: prev: {
|
||||
inherit (self.packages.${prev.system}) forgejo-mcp;
|
||||
};
|
||||
};
|
||||
|
||||
formatter = forAllSystems ({ pkgs, ... }: pkgs.nixfmt-tree);
|
||||
|
||||
devShells = forAllSystems (
|
||||
{ pkgs }:
|
||||
{
|
||||
default = pkgs.mkShell {
|
||||
packages = [
|
||||
pkgs.nixfmt-tree
|
||||
pkgs.statix
|
||||
];
|
||||
};
|
||||
}
|
||||
);
|
||||
|
||||
packages = forAllSystems (
|
||||
{ pkgs }:
|
||||
{
|
||||
@@ -61,6 +85,7 @@
|
||||
noita-entangled-worlds = pkgs.callPackage ./pkgs/noita-entangled-worlds { };
|
||||
poe-sidekick = pkgs.callPackage ./pkgs/poe-sidekick { };
|
||||
poe-sidekick-web = pkgs.callPackage ./pkgs/poe-sidekick/web.nix { };
|
||||
forgejo-mcp = pkgs.callPackage ./pkgs/forgejo-mcp { };
|
||||
}
|
||||
);
|
||||
};
|
||||
|
||||
@@ -10,7 +10,8 @@
|
||||
libGL,
|
||||
nodejs,
|
||||
electron,
|
||||
xorg,
|
||||
libxtst,
|
||||
libxt,
|
||||
wayland,
|
||||
libglvnd,
|
||||
}:
|
||||
@@ -114,8 +115,8 @@ stdenv.mkDerivation (finalAttrs: {
|
||||
--set LD_LIBRARY_PATH "${
|
||||
lib.makeLibraryPath [
|
||||
libGL
|
||||
xorg.libXtst
|
||||
xorg.libXt
|
||||
libxtst
|
||||
libxt
|
||||
wayland
|
||||
libglvnd
|
||||
]
|
||||
|
||||
27
pkgs/forgejo-mcp/default.nix
Normal file
27
pkgs/forgejo-mcp/default.nix
Normal file
@@ -0,0 +1,27 @@
|
||||
{
|
||||
lib,
|
||||
buildGoModule,
|
||||
fetchFromGitea,
|
||||
}:
|
||||
|
||||
buildGoModule rec {
|
||||
pname = "forgejo-mcp";
|
||||
version = "2.14.0";
|
||||
|
||||
src = fetchFromGitea {
|
||||
domain = "codeberg.org";
|
||||
owner = "goern";
|
||||
repo = "forgejo-mcp";
|
||||
tag = "v${version}";
|
||||
hash = "sha256-jjwzc9bnuOG5j9frOGmJYv7oOnXRpns8pknonDezHGQ=";
|
||||
};
|
||||
|
||||
vendorHash = "sha256-j5o/FZBowQvcatw14Fvs/8CTM5ZtQR6kwlroctaeKuM=";
|
||||
|
||||
meta = {
|
||||
description = "Model Context Protocol server and CLI for interacting with the Forgejo API";
|
||||
homepage = "https://codeberg.org/goern/forgejo-mcp";
|
||||
license = lib.licenses.mit;
|
||||
mainProgram = "forgejo-mcp";
|
||||
};
|
||||
}
|
||||
@@ -27,7 +27,6 @@ let
|
||||
|
||||
sourceRoot = "${src.name}/noita-proxy";
|
||||
|
||||
useFetchCargoVendor = true;
|
||||
cargoHash = "sha256-TzUS6d6PopgGf2i1yVaXaXdzNrvfSz+Gv67BAtxYmb4=";
|
||||
buildInputs = [
|
||||
gtk3
|
||||
|
||||
@@ -64,7 +64,8 @@ stdenv.mkDerivation {
|
||||
qttools
|
||||
wrapQtAppsHook
|
||||
icoutils
|
||||
] ++ lib.optional stdenv.hostPlatform.isLinux copyDesktopItems;
|
||||
]
|
||||
++ lib.optional stdenv.hostPlatform.isLinux copyDesktopItems;
|
||||
|
||||
buildInputs = [
|
||||
qtbase
|
||||
|
||||
@@ -5,7 +5,9 @@
|
||||
makeWrapper,
|
||||
makeDesktopItem,
|
||||
copyDesktopItems,
|
||||
xorg,
|
||||
libx11,
|
||||
libxi,
|
||||
libxcursor,
|
||||
gtk2,
|
||||
sqlite,
|
||||
openal,
|
||||
@@ -35,25 +37,21 @@ stdenv.mkDerivation rec {
|
||||
|
||||
buildInputs = [ dotnet-runtime_8 ];
|
||||
|
||||
runtimeLibs = lib.makeLibraryPath (
|
||||
[
|
||||
gtk2
|
||||
sqlite
|
||||
openal
|
||||
cairo
|
||||
libGLU
|
||||
SDL2
|
||||
freealut
|
||||
libglvnd
|
||||
pipewire
|
||||
libpulseaudio
|
||||
]
|
||||
++ (with xorg; [
|
||||
libX11
|
||||
libXi
|
||||
libXcursor
|
||||
])
|
||||
);
|
||||
runtimeLibs = lib.makeLibraryPath [
|
||||
gtk2
|
||||
sqlite
|
||||
openal
|
||||
cairo
|
||||
libGLU
|
||||
SDL2
|
||||
freealut
|
||||
libglvnd
|
||||
pipewire
|
||||
libpulseaudio
|
||||
libx11
|
||||
libxi
|
||||
libxcursor
|
||||
];
|
||||
|
||||
desktopItems = [
|
||||
(makeDesktopItem {
|
||||
@@ -77,24 +75,23 @@ stdenv.mkDerivation rec {
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
preFixup =
|
||||
''
|
||||
sed -i 's/net7.0/net8.0/' $out/share/vintagestory/Vintagestory.runtimeconfig.json
|
||||
sed -i 's/7.0.0/8.0.11/' $out/share/vintagestory/Vintagestory.runtimeconfig.json
|
||||
preFixup = ''
|
||||
sed -i 's/net7.0/net8.0/' $out/share/vintagestory/Vintagestory.runtimeconfig.json
|
||||
sed -i 's/7.0.0/8.0.11/' $out/share/vintagestory/Vintagestory.runtimeconfig.json
|
||||
|
||||
makeWrapper ${dotnet-runtime_8}/bin/dotnet $out/bin/vintagestory \
|
||||
--prefix LD_LIBRARY_PATH : "${runtimeLibs}" \
|
||||
--add-flags $out/share/vintagestory/Vintagestory.dll
|
||||
makeWrapper ${dotnet-runtime_8}/bin/dotnet $out/bin/vintagestory-server \
|
||||
--prefix LD_LIBRARY_PATH : "${runtimeLibs}" \
|
||||
--add-flags $out/share/vintagestory/VintagestoryServer.dll
|
||||
''
|
||||
+ ''
|
||||
find "$out/share/vintagestory/assets/" -not -path "*/fonts/*" -regex ".*/.*[A-Z].*" | while read -r file; do
|
||||
local filename="$(basename -- "$file")"
|
||||
ln -sf "$filename" "''${file%/*}"/"''${filename,,}"
|
||||
done
|
||||
'';
|
||||
makeWrapper ${dotnet-runtime_8}/bin/dotnet $out/bin/vintagestory \
|
||||
--prefix LD_LIBRARY_PATH : "${runtimeLibs}" \
|
||||
--add-flags $out/share/vintagestory/Vintagestory.dll
|
||||
makeWrapper ${dotnet-runtime_8}/bin/dotnet $out/bin/vintagestory-server \
|
||||
--prefix LD_LIBRARY_PATH : "${runtimeLibs}" \
|
||||
--add-flags $out/share/vintagestory/VintagestoryServer.dll
|
||||
''
|
||||
+ ''
|
||||
find "$out/share/vintagestory/assets/" -not -path "*/fonts/*" -regex ".*/.*[A-Z].*" | while read -r file; do
|
||||
local filename="$(basename -- "$file")"
|
||||
ln -sf "$filename" "''${file%/*}"/"''${filename,,}"
|
||||
done
|
||||
'';
|
||||
|
||||
meta = with lib; {
|
||||
description = "In-development indie sandbox game about innovation and exploration";
|
||||
|
||||
Reference in New Issue
Block a user