nixos-conf/home.nix
2026-02-19 14:08:25 +02:00

482 lines
11 KiB
Nix

{
config,
pkgs,
system,
ghostty,
...
}:
# let
# vesktopNoFuses = pkgs.vesktop.overrideAttrs (old: {
# nativeBuildInputs = old.nativeBuildInputs ++ [ pkgs.jq ];
# postPatch = (old.postPatch or "") + ''
# tmp="$(mktemp)"
# jq 'del(.build.electronFuses)' package.json > "$tmp"
# mv "$tmp" package.json
# '';
# });
# in
{
imports = [
./custom/hm
];
gtk = {
enable = true;
colorScheme = "dark";
theme = {
name = "Adwaita-dark";
package = pkgs.gnome-themes-extra;
};
iconTheme = {
name = "Papirus-Dark";
package = pkgs.papirus-icon-theme;
};
cursorTheme = {
name = "macOS";
package = pkgs.apple-cursor;
size = 28;
};
};
home = {
stateVersion = "25.11";
pointerCursor = {
enable = true;
gtk.enable = true;
x11 = {
enable = true;
# defaultCursor = "";
};
dotIcons.enable = true;
package = pkgs.apple-cursor;
name = "macOS";
size = 26;
};
shell = {
enableFishIntegration = true;
};
packages = with pkgs; [
vlc
jq
xfce4-taskmanager
gparted
tor-browser
iperf
sshuttle
lmstudio
dig
libnotify
arch-install-scripts
### gaming
winetricks
wine
heroic
vintagestory
prismlauncher
winboat
# kdePackages.kdenlive
(python313.withPackages (
py: with py; [
huggingface-hub
haystack-ai
raganything
]
))
]
# anything-llm
# ]
;
### NEVER USE THIS GARBAGE
# flowblade pitivi koboldcpp
sessionVariables = {
DESKTOP = ":0";
OLLAMA_HOST = "10.20.0.201:11434";
};
};
xdg = {
configFile."xfce4/helpers.rc".text = ''
TerminalEmulator=ghostty
'';
mimeApps = {
enable = true;
defaultApplications = {
"text/html" = "firefox.desktop";
"x-scheme-handler/http" = "firefox.desktop";
"x-scheme-handler/https" = "firefox.desktop";
"x-scheme-handler/tg" = "org.telegram.desktop.desktop";
"x-scheme-handler/discord" = "vesktop.desktop";
"image/jpeg" = "swayimg.desktop";
"image/png" = "swayimg.desktop";
"image/webp" = "swayimg.desktop";
"application/zip" = "xarchiver.desktop";
};
};
configFile."obsidian/.keep".text = "";
};
systemd.user = {
startServices = "sd-switch";
services = {
prepare2watch = {
Unit = {
Description = "prepare videos to get later";
};
Service = {
Type = "oneshot";
WorkingDirectory = "${config.home.homeDirectory}/Downloads/1/";
ExecStart = ''
${pkgs.coreutils-full}/bin/stdbuf -oL -eL ${pkgs.util-linux}/bin/flock -n %t/prepare2watch.lock ${pkgs.fish}/bin/fish ./prepare2watch.fish
'';
};
};
};
paths = {
prepare2watch = {
Unit = {
Description = "Watch ${config.home.homeDirectory}/Downloads/1/list";
};
Path = {
PathChanged = "${config.home.homeDirectory}/Downloads/1/list";
PathModified = "${config.home.homeDirectory}/Downloads/1/list";
Unit = "prepare2watch.service";
};
Install = {
WantedBy = [ "default.target" ];
};
};
};
};
services = {
ollama = {
# enable = true;
# acceleration = vulkan;
package = pkgs.ollama-vulkan;
host = "10.20.0.201";
environmentVariables = {
OLLAMA_MAX_LOADED_MODELS = "1";
OLLAMA_NUM_PARALLEL = "1";
OLLAMA_FLASH_ATTENTION = "1";
OLLAMA_KV_CACHE_TYPE = "q8_0";
# OLLAMA_CONTEXT_LENGTH = "16000";
OLLAMA_MODELS = "/home/thek0tyara/Downloads/llm/ollama";
};
};
polkit-gnome.enable = true;
qdrant = {
enable = true;
dataDir = "/mnt/HDD_A_DATA/services/lib/qdrant";
settings = {
storage = {
# storage_path = "/mnt/HDD_A_DATA/services/lib/qdrant/storage";
# snapshots_path = "/mnt/HDD_A_DATA/services/lib/qdrant/snapshots";
hnsw_index = {
on_disk = true;
};
};
service = {
host = "127.0.0.1";
http_port = 6333;
grpc_port = 6334;
};
telemetry_disabled = true;
};
};
};
programs = {
### custom
n8n = {
# enable = true;
settings = {
N8N_HOST = "127.0.0.1";
N8N_PORT = 5678;
N8N_PROTOCOL = "http";
};
# environmentFile = ~/.config/n8n/secrets.env;
# extraArgs = [ ];
};
llama-cpp = {
enable = true;
package = pkgs.llama-cpp.override {
vulkanSupport = true;
rpcSupport = true;
};
defaultArgs = [
"--host"
"127.0.0.1"
"--port"
"8080"
"--jinja"
"-fa"
"on"
];
# eosStrings = [ "<|im_end|>" ];
presets = [
{
name = "codegeex4";
path = "/home/thek0tyara/Downloads/llm/codegeex4-all-9b.Q8_0.gguf";
eosStrings = [ "<|im_end|>" ];
}
];
};
opencode = {
enable = true;
settings = {
compaction = {
auto = true;
prune = true;
};
watcher = {
ignore = [
".git/**"
];
};
plugin = [
"@zenobius/opencode-skillful" # lazy load
];
default_agent = "plan";
tools = {
skill = false;
"qdrant_*" = false;
};
mcp = {
qdrant = {
type = "local";
command = [
"${pkgs.uv}/bin/uvx"
"-qq"
"mcp-server-qdrant"
];
enabled = true;
timeout = 5000;
environment = {
QDRANT_URL = "http://127.0.0.1:6333";
COLLECTION_NAME = "opencode_memory";
# Debug only:
# FASTMCP_LOG_LEVEL = "DEBUG";
# FASTMCP_DEBUG = "true";
};
};
};
# Agents: features retained, but only injected when invoked
agent = {
plan = {
mode = "primary";
tools = {
write = false;
edit = false;
bash = false;
skill = false;
"qdrant_*" = false;
};
};
build = {
mode = "primary";
tools = {
write = true;
edit = true;
bash = true;
skill = false;
"qdrant_*" = false;
};
};
memory = {
mode = "subagent";
description = "Opt-in semantic memory via Qdrant MCP";
tools = {
"qdrant_*" = true;
};
};
skills = {
mode = "subagent";
description = "Opt-in skills tool";
tools = {
skill = true;
};
};
};
theme = "opencode";
autoupdate = false;
share = "manual";
server = {
port = 4096;
hostname = "127.0.0.1";
};
provider = {
"ollama" = {
npm = "@ai-sdk/openai-compatible";
name = "Ollama (local)";
options = {
baseURL = "http://10.20.0.201:11434/v1";
};
models = {
"qwen2.5-coder:7b" = {
name = "qwen2.5-coder";
};
"qwen3:8b" = {
name = "qwen3";
};
};
};
};
};
rules = ''
# Global rules (thin)
- Prefer on-demand file loading over preloading large docs.
- Use MCP/skills only via dedicated subagents.
'';
};
### default
aria2.enable = true;
btop.enable = true;
command-not-found.enable = true;
direnv = {
enable = true;
nix-direnv.enable = true;
};
element-desktop = {
enable = true;
# settings = {};
};
eza = {
enable = true;
git = true;
icons = "auto";
};
fastfetch.enable = true;
firefox = {
enable = true;
package = pkgs.firefox;
languagePacks = [ "en-US" ];
};
fish = {
enable = true;
functions = {
fish_greeting = "";
nix-cleanup = ''
sudo nix-collect-garbage --delete-older-than 30d && \
sudo nix-store --optimise
'';
};
};
#
ghostty = {
enable = true;
package = ghostty.packages.${system}.default;
settings = {
theme = "dark";
term = "xterm-256color";
scrollback-limit = 1000000;
};
themes = {
dark = {
background = "171421";
# cursor-color = "f5e0dc";
foreground = "D0CFCC";
palette = [
"0=#171421"
"1=#C01C28"
"2=#26A269"
"3=#A2734C"
"4=#12488B"
"5=#A347BA"
"6=#2AA1B3"
"7=#D0CFCC"
"8=#5E5C64"
"9=#F66151"
"10=#33D17A"
"11=#E9AD0C"
"12=#2A7BDE"
"13=#C061CB"
"14=#33C7DE"
"15=#FFFFFF"
];
# selection-background = "171421";
# selection-foreground = "D0CFCC";
};
};
};
#
lutris = {
# enable = true;
# defaultWinePackage = pkgs.wineWowPackages.full;
runners = {
wine = {
settings = {
runner = {
# runner_executable = "${pkgs.wineWowPackages.full}/bin/wine";
};
system = {
game_path = "/home/thek0tyara/Documents/lutris";
disable_runtime = false;
prefer_system_libs = true;
};
};
};
};
};
nix-your-shell.enable = true;
obs-studio = {
enable = true;
plugins = with pkgs.obs-studio-plugins; [
wlrobs
obs-pipewire-audio-capture
];
};
obsidian.enable = true;
starship.enable = true;
swayimg.enable = true;
swaylock.enable = true;
uv = {
enable = true; # TODO move to nativeBuildInputs of needing
settings = {
python-downloads = "never";
python-preference = "only-system";
# pip.index-url = "https://pypi.org/simple";
};
};
vesktop = {
enable = true;
# package = vesktopNoFuses;
# settings = { TODO };
};
vscode.enable = true;
waybar.enable = true;
yt-dlp = {
enable = true;
package = pkgs.yt-dlp;
settings = {
embed-thumbnail = true;
downloader = "aria2c";
};
# extraConfig = ''
# --extractor-args "youtube:player_client=default,ios,-android_sdkless"
# '';
};
zed-editor = {
enable = true;
themes = {
"name" = "Ayu Dark";
};
};
};
}