78 lines
2.6 KiB
Nix
78 lines
2.6 KiB
Nix
{ config, lib, pkgs, ... }:
|
|
let
|
|
user = "dominik";
|
|
home = "/home/${user}";
|
|
npmPrefix = "${home}/.npm-global";
|
|
node = pkgs.nodejs; # or pkgs.nodejs_20
|
|
in {
|
|
home-manager.users.dominik = { config, lib, pkgs, ... }: {
|
|
home.packages = with pkgs; [
|
|
node
|
|
gnutar # provides `tar`
|
|
gzip # provides `gzip` used by tar
|
|
unzip
|
|
python314 # useful for codex model use
|
|
jq # useful for JSON processing
|
|
(pkgs.writeShellScriptBin "codex" ''
|
|
#!${pkgs.bash}/bin/bash
|
|
set -euo pipefail
|
|
|
|
# Required dirs
|
|
mkdir -p "$HOME/.cache/codex-tmp" "$HOME/.cache/xdg-runtime" "$HOME/.config" "$HOME/.cache" "$HOME/.local/share"
|
|
chmod 700 "$HOME/.cache/codex-tmp" "$HOME/.cache/xdg-runtime" "$HOME/.config" "$HOME/.local/share"
|
|
|
|
# Pass through cert vars if present (avoids TLS issues)
|
|
EXTRA_ENV=()
|
|
[ -n "''${SSL_CERT_FILE-}" ] && EXTRA_ENV+=(SSL_CERT_FILE="$SSL_CERT_FILE")
|
|
[ -n "''${NIX_SSL_CERT_FILE-}" ] && EXTRA_ENV+=(NIX_SSL_CERT_FILE="$NIX_SSL_CERT_FILE")
|
|
|
|
exec env -i \
|
|
HOME="$HOME" \
|
|
USER="''${USER:-$LOGNAME}" \
|
|
SHELL="''${SHELL:-${pkgs.bash}/bin/bash}" \
|
|
PATH="/run/current-system/sw/bin:/usr/bin:/bin" \
|
|
XDG_RUNTIME_DIR="$HOME/.cache/xdg-runtime" \
|
|
TMPDIR="$HOME/.cache/codex-tmp" \
|
|
XDG_CONFIG_HOME="$HOME/.config" \
|
|
XDG_CACHE_HOME="$HOME/.cache" \
|
|
XDG_DATA_HOME="$HOME/.local/share" \
|
|
"''${EXTRA_ENV[@]}" \
|
|
${npmPrefix}/bin/codex "$@"
|
|
'')
|
|
];
|
|
|
|
# Ensure ~/.npmrc with a user prefix (no sudo needed)
|
|
home.file.".npmrc"= {
|
|
text = ''
|
|
prefix=${npmPrefix}
|
|
'';
|
|
force = true;
|
|
};
|
|
|
|
|
|
# Ensure the npm bin dir is on PATH for all shells
|
|
home.sessionPath = [
|
|
"${npmPrefix}/bin"
|
|
];
|
|
|
|
# Nice-to-have: visible variables in the shell
|
|
home.sessionVariables = {
|
|
NPM_CONFIG_PREFIX = npmPrefix;
|
|
};
|
|
|
|
# Auto-install @openai/codex if it's not already there
|
|
# (idempotent on each `home-manager switch`)
|
|
home.activation.installCodexCli = lib.hm.dag.entryAfter [ "writeBoundary" ] ''
|
|
export PATH=${node}/bin:${pkgs.gnutar}/bin:${pkgs.gzip}/bin:${pkgs.unzip}/bin:${pkgs.curl}/bin:$PATH
|
|
mkdir -p ${npmPrefix}
|
|
if [ ! -x "${npmPrefix}/bin/codex" ]; then
|
|
echo "Installing @openai/codex globally..."
|
|
# --global uses prefix from ~/.npmrc; PATH has node for postinstall
|
|
${node}/bin/npm install -g @openai/codex
|
|
fi
|
|
'';
|
|
|
|
# home.file.".claude-code-router/config.json".source = ./claude-router.json;
|
|
};
|
|
}
|