rebuilding nix files
This commit is contained in:
+333
-350
File diff suppressed because it is too large
Load Diff
+27
-44
@@ -1646,28 +1646,22 @@ It automatically pulls and prepares selected coding models (e.g., Qwen2.5-Coder
|
|||||||
{ config, pkgs, lib, flakeRoot, ... }:
|
{ config, pkgs, lib, flakeRoot, ... }:
|
||||||
|
|
||||||
let
|
let
|
||||||
# Path to the environment file containing OLLAMA_HOST and MISTRAL_API_KEY
|
# Path to environment file
|
||||||
AiRepoEnv = flakeRoot + "/assets/conf/apps/ai/ai.env";
|
AiRepoEnv = flakeRoot + "/assets/conf/apps/ai/ai.env";
|
||||||
# Path to the ZED configuration template
|
|
||||||
AiRepoConf = flakeRoot + "/assets/conf/apps/ai/ai.conf";
|
|
||||||
|
|
||||||
# Robust environment file parser
|
# Simple, reliable way to parse key=value pairs
|
||||||
envVars = lib.genAttrs (
|
parseEnv = lines:
|
||||||
builtins.map (
|
lib.foldl' (acc: line:
|
||||||
line: let
|
let
|
||||||
# Trim whitespace from the line
|
|
||||||
trimmed = builtins.trim line;
|
trimmed = builtins.trim line;
|
||||||
# Skip comments and empty lines
|
parts = builtins.split "=" trimmed;
|
||||||
isValid = trimmed != "" && (builtins.substr 0 1 trimmed) != "#";
|
in
|
||||||
# Split on first '=' only
|
if trimmed == "" || builtins.elemAt trimmed 0 == "#"
|
||||||
parts = if isValid then builtins.split "=" trimmed else [ ];
|
then acc
|
||||||
# Get key (first part) and trim whitespace
|
else builtins.add (builtins.elemAt parts 0) (builtins.elemAt parts 1) acc
|
||||||
key = if builtins.length parts > 0 then builtins.trim (builtins.elemAt parts 0) else null;
|
) { } (builtins.split "\n" (builtins.readFile (toString AiRepoEnv)));
|
||||||
# Get value (everything after first '=') and trim whitespace
|
|
||||||
value = if builtins.length parts > 1 then builtins.trim (builtins.concatStringsSep "=" (builtins.drop 1 parts)) else "";
|
envVars = parseEnv;
|
||||||
in { inherit key value; }
|
|
||||||
) (builtins.split "\n" (builtins.readFile (toString AiRepoEnv)))
|
|
||||||
) (entry: entry.key);
|
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
# Install required packages
|
# Install required packages
|
||||||
@@ -1676,13 +1670,13 @@ in
|
|||||||
pkgs.zed
|
pkgs.zed
|
||||||
];
|
];
|
||||||
|
|
||||||
# Set environment variables for the user session
|
# Set environment variables
|
||||||
home.sessionVariables = {
|
home.sessionVariables = {
|
||||||
OLLAMA_HOST = envVars.OLLAMA_HOST or "http://127.0.0.1:11434";
|
OLLAMA_HOST = envVars.OLLAMA_HOST or "http://127.0.0.1:11434";
|
||||||
MISTRAL_API_KEY = envVars.MISTRAL_API_KEY or "";
|
MISTRAL_API_KEY = envVars.MISTRAL_API_KEY or "";
|
||||||
};
|
};
|
||||||
|
|
||||||
# Configure Ollama as a user service
|
# Configure Ollama service
|
||||||
systemd.user.services.ollama = {
|
systemd.user.services.ollama = {
|
||||||
description = "Ollama service for local AI models";
|
description = "Ollama service for local AI models";
|
||||||
wantedBy = [ "default.target" ];
|
wantedBy = [ "default.target" ];
|
||||||
@@ -1690,9 +1684,7 @@ in
|
|||||||
|
|
||||||
serviceConfig = {
|
serviceConfig = {
|
||||||
Type = "forking";
|
Type = "forking";
|
||||||
ExecStart = ''
|
ExecStart = "${pkgs.ollama-vulkan}/bin/ollama serve";
|
||||||
${pkgs.ollama-vulkan}/bin/ollama serve
|
|
||||||
'';
|
|
||||||
ExecStartPost = ''
|
ExecStartPost = ''
|
||||||
sleep 5
|
sleep 5
|
||||||
${pkgs.ollama-vulkan}/bin/ollama pull codellama:70b
|
${pkgs.ollama-vulkan}/bin/ollama pull codellama:70b
|
||||||
@@ -1702,28 +1694,19 @@ in
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
# Generate ZED's settings.json
|
# ZED configuration
|
||||||
home.file.".config/zed/settings.json".text = lib.mkForce (
|
home.file.".config/zed/settings.json".text = lib.mkForce (
|
||||||
builtins.toJSON (
|
builtins.toJSON {
|
||||||
(builtins.fromJSON (builtins.readFile (toString AiRepoConf)))
|
mistral = {
|
||||||
// {
|
apiKey = envVars.MISTRAL_API_KEY or "";
|
||||||
mistral = {
|
defaultModel = "mistral-pro";
|
||||||
apiKey = envVars.MISTRAL_API_KEY or "";
|
};
|
||||||
defaultModel = "mistral-pro";
|
ollama = {
|
||||||
};
|
endpoint = envVars.OLLAMA_HOST or "http://127.0.0.1:11434";
|
||||||
ollama = {
|
defaultModel = "codellama:70b";
|
||||||
endpoint = envVars.OLLAMA_HOST or "http://127.0.0.1:11434";
|
};
|
||||||
defaultModel = "codellama:70b";
|
}
|
||||||
};
|
|
||||||
}
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
|
|
||||||
# Filter out null entries from envVars
|
|
||||||
home.file.".config/ai-env-test".text = lib.mkForce (
|
|
||||||
builtins.toJSON envVars
|
|
||||||
);
|
|
||||||
|
|
||||||
# --- Usage Notes ---
|
# --- Usage Notes ---
|
||||||
# 1. Pulling Additional Models:
|
# 1. Pulling Additional Models:
|
||||||
# To add more models later, run:
|
# To add more models later, run:
|
||||||
|
|||||||
@@ -1,28 +1,22 @@
|
|||||||
{ config, pkgs, lib, flakeRoot, ... }:
|
{ config, pkgs, lib, flakeRoot, ... }:
|
||||||
|
|
||||||
let
|
let
|
||||||
# Path to the environment file containing OLLAMA_HOST and MISTRAL_API_KEY
|
# Path to environment file
|
||||||
AiRepoEnv = flakeRoot + "/assets/conf/apps/ai/ai.env";
|
AiRepoEnv = flakeRoot + "/assets/conf/apps/ai/ai.env";
|
||||||
# Path to the ZED configuration template
|
|
||||||
AiRepoConf = flakeRoot + "/assets/conf/apps/ai/ai.conf";
|
|
||||||
|
|
||||||
# Robust environment file parser
|
# Simple, reliable way to parse key=value pairs
|
||||||
envVars = lib.genAttrs (
|
parseEnv = lines:
|
||||||
builtins.map (
|
lib.foldl' (acc: line:
|
||||||
line: let
|
let
|
||||||
# Trim whitespace from the line
|
|
||||||
trimmed = builtins.trim line;
|
trimmed = builtins.trim line;
|
||||||
# Skip comments and empty lines
|
parts = builtins.split "=" trimmed;
|
||||||
isValid = trimmed != "" && (builtins.substr 0 1 trimmed) != "#";
|
in
|
||||||
# Split on first '=' only
|
if trimmed == "" || builtins.elemAt trimmed 0 == "#"
|
||||||
parts = if isValid then builtins.split "=" trimmed else [ ];
|
then acc
|
||||||
# Get key (first part) and trim whitespace
|
else builtins.add (builtins.elemAt parts 0) (builtins.elemAt parts 1) acc
|
||||||
key = if builtins.length parts > 0 then builtins.trim (builtins.elemAt parts 0) else null;
|
) { } (builtins.split "\n" (builtins.readFile (toString AiRepoEnv)));
|
||||||
# Get value (everything after first '=') and trim whitespace
|
|
||||||
value = if builtins.length parts > 1 then builtins.trim (builtins.concatStringsSep "=" (builtins.drop 1 parts)) else "";
|
envVars = parseEnv;
|
||||||
in { inherit key value; }
|
|
||||||
) (builtins.split "\n" (builtins.readFile (toString AiRepoEnv)))
|
|
||||||
) (entry: entry.key);
|
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
# Install required packages
|
# Install required packages
|
||||||
@@ -31,13 +25,13 @@ in
|
|||||||
pkgs.zed
|
pkgs.zed
|
||||||
];
|
];
|
||||||
|
|
||||||
# Set environment variables for the user session
|
# Set environment variables
|
||||||
home.sessionVariables = {
|
home.sessionVariables = {
|
||||||
OLLAMA_HOST = envVars.OLLAMA_HOST or "http://127.0.0.1:11434";
|
OLLAMA_HOST = envVars.OLLAMA_HOST or "http://127.0.0.1:11434";
|
||||||
MISTRAL_API_KEY = envVars.MISTRAL_API_KEY or "";
|
MISTRAL_API_KEY = envVars.MISTRAL_API_KEY or "";
|
||||||
};
|
};
|
||||||
|
|
||||||
# Configure Ollama as a user service
|
# Configure Ollama service
|
||||||
systemd.user.services.ollama = {
|
systemd.user.services.ollama = {
|
||||||
description = "Ollama service for local AI models";
|
description = "Ollama service for local AI models";
|
||||||
wantedBy = [ "default.target" ];
|
wantedBy = [ "default.target" ];
|
||||||
@@ -45,9 +39,7 @@ in
|
|||||||
|
|
||||||
serviceConfig = {
|
serviceConfig = {
|
||||||
Type = "forking";
|
Type = "forking";
|
||||||
ExecStart = ''
|
ExecStart = "${pkgs.ollama-vulkan}/bin/ollama serve";
|
||||||
${pkgs.ollama-vulkan}/bin/ollama serve
|
|
||||||
'';
|
|
||||||
ExecStartPost = ''
|
ExecStartPost = ''
|
||||||
sleep 5
|
sleep 5
|
||||||
${pkgs.ollama-vulkan}/bin/ollama pull codellama:70b
|
${pkgs.ollama-vulkan}/bin/ollama pull codellama:70b
|
||||||
@@ -57,28 +49,19 @@ in
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
# Generate ZED's settings.json
|
# ZED configuration
|
||||||
home.file.".config/zed/settings.json".text = lib.mkForce (
|
home.file.".config/zed/settings.json".text = lib.mkForce (
|
||||||
builtins.toJSON (
|
builtins.toJSON {
|
||||||
(builtins.fromJSON (builtins.readFile (toString AiRepoConf)))
|
mistral = {
|
||||||
// {
|
apiKey = envVars.MISTRAL_API_KEY or "";
|
||||||
mistral = {
|
defaultModel = "mistral-pro";
|
||||||
apiKey = envVars.MISTRAL_API_KEY or "";
|
};
|
||||||
defaultModel = "mistral-pro";
|
ollama = {
|
||||||
};
|
endpoint = envVars.OLLAMA_HOST or "http://127.0.0.1:11434";
|
||||||
ollama = {
|
defaultModel = "codellama:70b";
|
||||||
endpoint = envVars.OLLAMA_HOST or "http://127.0.0.1:11434";
|
};
|
||||||
defaultModel = "codellama:70b";
|
}
|
||||||
};
|
|
||||||
}
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
|
|
||||||
# Filter out null entries from envVars
|
|
||||||
home.file.".config/ai-env-test".text = lib.mkForce (
|
|
||||||
builtins.toJSON envVars
|
|
||||||
);
|
|
||||||
|
|
||||||
# --- Usage Notes ---
|
# --- Usage Notes ---
|
||||||
# 1. Pulling Additional Models:
|
# 1. Pulling Additional Models:
|
||||||
# To add more models later, run:
|
# To add more models later, run:
|
||||||
|
|||||||
Reference in New Issue
Block a user