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": {
|
"nodes": {
|
||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1743583204,
|
"lastModified": 1772963539,
|
||||||
"narHash": "sha256-F7n4+KOIfWrwoQjXrL2wD9RhFYLs2/GGe/MQY1sSdlE=",
|
"narHash": "sha256-9jVDGZnvCckTGdYT53d/EfznygLskyLQXYwJLKMPsZs=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "2c8d3f48d33929642c1c12cd243df4cc7d2ce434",
|
"rev": "9dcb002ca1690658be4a04645215baea8b95f31d",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|||||||
43
flake.nix
43
flake.nix
@@ -27,30 +27,54 @@
|
|||||||
{
|
{
|
||||||
overlays = {
|
overlays = {
|
||||||
default = final: prev: {
|
default = final: prev: {
|
||||||
awakened-poe-trade = self.packages.${prev.system}.awakened-poe-trade;
|
inherit (self.packages.${prev.system})
|
||||||
path-of-building-beta = self.packages.${prev.system}.path-of-building-beta;
|
awakened-poe-trade
|
||||||
vintagestory-unstable = self.packages.${prev.system}.vintagestory-unstable;
|
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 = 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: {
|
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 = 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 = 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 = 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 = 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 (
|
packages = forAllSystems (
|
||||||
{ pkgs }:
|
{ pkgs }:
|
||||||
{
|
{
|
||||||
@@ -61,6 +85,7 @@
|
|||||||
noita-entangled-worlds = pkgs.callPackage ./pkgs/noita-entangled-worlds { };
|
noita-entangled-worlds = pkgs.callPackage ./pkgs/noita-entangled-worlds { };
|
||||||
poe-sidekick = pkgs.callPackage ./pkgs/poe-sidekick { };
|
poe-sidekick = pkgs.callPackage ./pkgs/poe-sidekick { };
|
||||||
poe-sidekick-web = pkgs.callPackage ./pkgs/poe-sidekick/web.nix { };
|
poe-sidekick-web = pkgs.callPackage ./pkgs/poe-sidekick/web.nix { };
|
||||||
|
forgejo-mcp = pkgs.callPackage ./pkgs/forgejo-mcp { };
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -10,7 +10,8 @@
|
|||||||
libGL,
|
libGL,
|
||||||
nodejs,
|
nodejs,
|
||||||
electron,
|
electron,
|
||||||
xorg,
|
libxtst,
|
||||||
|
libxt,
|
||||||
wayland,
|
wayland,
|
||||||
libglvnd,
|
libglvnd,
|
||||||
}:
|
}:
|
||||||
@@ -114,8 +115,8 @@ stdenv.mkDerivation (finalAttrs: {
|
|||||||
--set LD_LIBRARY_PATH "${
|
--set LD_LIBRARY_PATH "${
|
||||||
lib.makeLibraryPath [
|
lib.makeLibraryPath [
|
||||||
libGL
|
libGL
|
||||||
xorg.libXtst
|
libxtst
|
||||||
xorg.libXt
|
libxt
|
||||||
wayland
|
wayland
|
||||||
libglvnd
|
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";
|
sourceRoot = "${src.name}/noita-proxy";
|
||||||
|
|
||||||
useFetchCargoVendor = true;
|
|
||||||
cargoHash = "sha256-TzUS6d6PopgGf2i1yVaXaXdzNrvfSz+Gv67BAtxYmb4=";
|
cargoHash = "sha256-TzUS6d6PopgGf2i1yVaXaXdzNrvfSz+Gv67BAtxYmb4=";
|
||||||
buildInputs = [
|
buildInputs = [
|
||||||
gtk3
|
gtk3
|
||||||
|
|||||||
@@ -64,7 +64,8 @@ stdenv.mkDerivation {
|
|||||||
qttools
|
qttools
|
||||||
wrapQtAppsHook
|
wrapQtAppsHook
|
||||||
icoutils
|
icoutils
|
||||||
] ++ lib.optional stdenv.hostPlatform.isLinux copyDesktopItems;
|
]
|
||||||
|
++ lib.optional stdenv.hostPlatform.isLinux copyDesktopItems;
|
||||||
|
|
||||||
buildInputs = [
|
buildInputs = [
|
||||||
qtbase
|
qtbase
|
||||||
|
|||||||
@@ -5,7 +5,9 @@
|
|||||||
makeWrapper,
|
makeWrapper,
|
||||||
makeDesktopItem,
|
makeDesktopItem,
|
||||||
copyDesktopItems,
|
copyDesktopItems,
|
||||||
xorg,
|
libx11,
|
||||||
|
libxi,
|
||||||
|
libxcursor,
|
||||||
gtk2,
|
gtk2,
|
||||||
sqlite,
|
sqlite,
|
||||||
openal,
|
openal,
|
||||||
@@ -35,25 +37,21 @@ stdenv.mkDerivation rec {
|
|||||||
|
|
||||||
buildInputs = [ dotnet-runtime_8 ];
|
buildInputs = [ dotnet-runtime_8 ];
|
||||||
|
|
||||||
runtimeLibs = lib.makeLibraryPath (
|
runtimeLibs = lib.makeLibraryPath [
|
||||||
[
|
gtk2
|
||||||
gtk2
|
sqlite
|
||||||
sqlite
|
openal
|
||||||
openal
|
cairo
|
||||||
cairo
|
libGLU
|
||||||
libGLU
|
SDL2
|
||||||
SDL2
|
freealut
|
||||||
freealut
|
libglvnd
|
||||||
libglvnd
|
pipewire
|
||||||
pipewire
|
libpulseaudio
|
||||||
libpulseaudio
|
libx11
|
||||||
]
|
libxi
|
||||||
++ (with xorg; [
|
libxcursor
|
||||||
libX11
|
];
|
||||||
libXi
|
|
||||||
libXcursor
|
|
||||||
])
|
|
||||||
);
|
|
||||||
|
|
||||||
desktopItems = [
|
desktopItems = [
|
||||||
(makeDesktopItem {
|
(makeDesktopItem {
|
||||||
@@ -77,24 +75,23 @@ stdenv.mkDerivation rec {
|
|||||||
runHook postInstall
|
runHook postInstall
|
||||||
'';
|
'';
|
||||||
|
|
||||||
preFixup =
|
preFixup = ''
|
||||||
''
|
sed -i 's/net7.0/net8.0/' $out/share/vintagestory/Vintagestory.runtimeconfig.json
|
||||||
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
|
||||||
sed -i 's/7.0.0/8.0.11/' $out/share/vintagestory/Vintagestory.runtimeconfig.json
|
|
||||||
|
|
||||||
makeWrapper ${dotnet-runtime_8}/bin/dotnet $out/bin/vintagestory \
|
makeWrapper ${dotnet-runtime_8}/bin/dotnet $out/bin/vintagestory \
|
||||||
--prefix LD_LIBRARY_PATH : "${runtimeLibs}" \
|
--prefix LD_LIBRARY_PATH : "${runtimeLibs}" \
|
||||||
--add-flags $out/share/vintagestory/Vintagestory.dll
|
--add-flags $out/share/vintagestory/Vintagestory.dll
|
||||||
makeWrapper ${dotnet-runtime_8}/bin/dotnet $out/bin/vintagestory-server \
|
makeWrapper ${dotnet-runtime_8}/bin/dotnet $out/bin/vintagestory-server \
|
||||||
--prefix LD_LIBRARY_PATH : "${runtimeLibs}" \
|
--prefix LD_LIBRARY_PATH : "${runtimeLibs}" \
|
||||||
--add-flags $out/share/vintagestory/VintagestoryServer.dll
|
--add-flags $out/share/vintagestory/VintagestoryServer.dll
|
||||||
''
|
''
|
||||||
+ ''
|
+ ''
|
||||||
find "$out/share/vintagestory/assets/" -not -path "*/fonts/*" -regex ".*/.*[A-Z].*" | while read -r file; do
|
find "$out/share/vintagestory/assets/" -not -path "*/fonts/*" -regex ".*/.*[A-Z].*" | while read -r file; do
|
||||||
local filename="$(basename -- "$file")"
|
local filename="$(basename -- "$file")"
|
||||||
ln -sf "$filename" "''${file%/*}"/"''${filename,,}"
|
ln -sf "$filename" "''${file%/*}"/"''${filename,,}"
|
||||||
done
|
done
|
||||||
'';
|
'';
|
||||||
|
|
||||||
meta = with lib; {
|
meta = with lib; {
|
||||||
description = "In-development indie sandbox game about innovation and exploration";
|
description = "In-development indie sandbox game about innovation and exploration";
|
||||||
|
|||||||
Reference in New Issue
Block a user