mirror of
https://github.com/itme-brain/nixos.git
synced 2026-05-08 14:50:12 -04:00
162 lines
5.1 KiB
Nix
162 lines
5.1 KiB
Nix
{
|
|
description = "My Nix Configs";
|
|
|
|
inputs =
|
|
{
|
|
self.submodules = true;
|
|
nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.11";
|
|
nixpkgs-unstable.url = "github:NixOS/nixpkgs/nixos-unstable";
|
|
nur = {
|
|
url = "github:nix-community/NUR";
|
|
};
|
|
home-manager = {
|
|
url = "github:nix-community/home-manager/release-25.11";
|
|
inputs.nixpkgs.follows = "nixpkgs";
|
|
};
|
|
nixos-wsl = {
|
|
url = "github:nix-community/NixOS-WSL/2411.6.0";
|
|
inputs.nixpkgs.follows = "nixpkgs";
|
|
};
|
|
disko = {
|
|
url = "github:nix-community/disko";
|
|
inputs.nixpkgs.follows = "nixpkgs";
|
|
};
|
|
sops-nix = {
|
|
url = "github:Mic92/sops-nix";
|
|
inputs.nixpkgs.follows = "nixpkgs";
|
|
};
|
|
};
|
|
|
|
outputs = { self, nixpkgs, nixpkgs-unstable, nur, ... }@inputs:
|
|
let
|
|
openhandsCliVersion = "1.14.0";
|
|
python312SlimDigest = "sha256:804ddf3251a60bbf9c92e73b7566c40428d54d0e79d3428194edf40da6521286";
|
|
|
|
mkPkgs = system: import nixpkgs {
|
|
inherit system;
|
|
config = {
|
|
allowUnfree = true;
|
|
nvidia.acceptLicense = true;
|
|
};
|
|
overlays = [
|
|
nur.overlays.default
|
|
# Make unstable packages available as pkgs.unstable.*
|
|
(final: prev: {
|
|
unstable = import nixpkgs-unstable {
|
|
inherit system;
|
|
config.allowUnfree = true;
|
|
};
|
|
})
|
|
];
|
|
};
|
|
|
|
mkSystem = { path, system ? "x86_64-linux" }:
|
|
let pkgs = mkPkgs system;
|
|
in nixpkgs.lib.nixosSystem {
|
|
inherit system pkgs;
|
|
specialArgs = { inherit inputs; };
|
|
modules = [
|
|
inputs.sops-nix.nixosModules.sops
|
|
path
|
|
];
|
|
};
|
|
|
|
mkOpenHandsCli = pkgs: pkgs.writeShellApplication {
|
|
name = "openhands-cli";
|
|
runtimeInputs = with pkgs; [ docker coreutils ];
|
|
text = ''
|
|
set -euo pipefail
|
|
|
|
SANDBOX_VOLUMES="''${SANDBOX_VOLUMES:-$PWD:/workspace}"
|
|
STATE_DIR="''${OPENHANDS_STATE_DIR:-$HOME/.openhands}"
|
|
AGENT_SERVER_IMAGE_REPOSITORY="''${OPENHANDS_AGENT_SERVER_IMAGE_REPOSITORY:-ghcr.io/openhands/agent-server}"
|
|
AGENT_SERVER_IMAGE_TAG="''${OPENHANDS_AGENT_SERVER_IMAGE_TAG:-1.15.0-python}"
|
|
LLM_MODEL="''${OPENHANDS_LLM_MODEL:-openai/Qwen3-Coder-30B-A3B-Instruct-Q8_0.gguf}"
|
|
LLM_BASE_URL="''${OPENHANDS_LLM_BASE_URL:-http://192.168.0.23:8000/v1}"
|
|
LLM_API_KEY="''${OPENHANDS_LLM_API_KEY:-local-llm}"
|
|
LLM_TIMEOUT="''${OPENHANDS_LLM_TIMEOUT:-300}"
|
|
CLI_BASE_IMAGE="''${OPENHANDS_CLI_BASE_IMAGE:-python:3.12-slim@${python312SlimDigest}}"
|
|
CLI_VERSION="''${OPENHANDS_CLI_VERSION:-${openhandsCliVersion}}"
|
|
CLI_IMAGE="''${OPENHANDS_CLI_IMAGE:-local/openhands-cli:''${CLI_VERSION}}"
|
|
CONTAINER_NAME="''${OPENHANDS_CONTAINER_NAME:-openhands-cli-$(date +%Y%m%d%H%M%S)}"
|
|
|
|
mkdir -p "$STATE_DIR"
|
|
|
|
if ! docker image inspect "$CLI_IMAGE" >/dev/null 2>&1; then
|
|
docker build --pull \
|
|
--build-arg BASE_IMAGE="$CLI_BASE_IMAGE" \
|
|
--build-arg OPENHANDS_CLI_VERSION="$CLI_VERSION" \
|
|
-t "$CLI_IMAGE" - <<'EOF'
|
|
ARG BASE_IMAGE
|
|
FROM ''${BASE_IMAGE}
|
|
ARG OPENHANDS_CLI_VERSION
|
|
RUN pip install --no-cache-dir uv \
|
|
&& uv tool install --python 3.12 "openhands==''${OPENHANDS_CLI_VERSION}" \
|
|
&& ln -sf /root/.local/bin/openhands /usr/local/bin/openhands \
|
|
&& ln -sf /root/.local/bin/openhands-acp /usr/local/bin/openhands-acp
|
|
ENV PATH="/root/.local/bin:''${PATH}"
|
|
ENTRYPOINT ["openhands"]
|
|
EOF
|
|
fi
|
|
|
|
tty_flags=()
|
|
if [ -t 0 ] && [ -t 1 ]; then
|
|
tty_flags=(-it)
|
|
fi
|
|
|
|
exec docker run "''${tty_flags[@]}" --rm \
|
|
-e AGENT_SERVER_IMAGE_REPOSITORY="$AGENT_SERVER_IMAGE_REPOSITORY" \
|
|
-e AGENT_SERVER_IMAGE_TAG="$AGENT_SERVER_IMAGE_TAG" \
|
|
-e LLM_MODEL="$LLM_MODEL" \
|
|
-e LLM_BASE_URL="$LLM_BASE_URL" \
|
|
-e LLM_API_KEY="$LLM_API_KEY" \
|
|
-e LLM_TIMEOUT="$LLM_TIMEOUT" \
|
|
-e SANDBOX_USER_ID="$(id -u)" \
|
|
-e SANDBOX_VOLUMES="$SANDBOX_VOLUMES" \
|
|
-v /var/run/docker.sock:/var/run/docker.sock \
|
|
-v "$PWD":/workspace \
|
|
-v "$STATE_DIR":/root/.openhands \
|
|
-w /workspace \
|
|
--add-host host.docker.internal:host-gateway \
|
|
--name "$CONTAINER_NAME" \
|
|
"$CLI_IMAGE" \
|
|
"$@"
|
|
'';
|
|
};
|
|
|
|
in
|
|
{
|
|
nixosConfigurations = {
|
|
desktop = mkSystem { path = ./system/machines/desktop; };
|
|
server = mkSystem { path = ./system/machines/server; };
|
|
wsl = mkSystem { path = ./system/machines/wsl; };
|
|
};
|
|
|
|
devShells.x86_64-linux.default = with mkPkgs "x86_64-linux"; mkShell {
|
|
name = "devShell";
|
|
packages = [
|
|
just
|
|
rclone
|
|
ansible
|
|
|
|
age
|
|
sops
|
|
ssh-to-age
|
|
|
|
git
|
|
git-crypt
|
|
gnupg
|
|
|
|
yubikey-manager
|
|
age-plugin-yubikey
|
|
];
|
|
};
|
|
|
|
packages.x86_64-linux.openhands-cli = mkOpenHandsCli (mkPkgs "x86_64-linux");
|
|
|
|
apps.x86_64-linux.openhands-cli = {
|
|
type = "app";
|
|
program = "${self.packages.x86_64-linux.openhands-cli}/bin/openhands-cli";
|
|
};
|
|
};
|
|
}
|