Compare commits

...

2 Commits

Author SHA1 Message Date
doloro cce3c78ae5 a lot of meow 2026-08-03 11:04:49 +01:00
doloro 47c31cc539 things 2026-08-02 01:38:50 +01:00
16 changed files with 474 additions and 327 deletions
+33
View File
@@ -95,6 +95,39 @@ nix run .#sops-encrypt <file>
nix develop nix develop
``` ```
## Validating Config Changes
Standard validation sequence before relying on any edit to a `.nix` module (used for opencode, ai, and other module changes):
1. **Parse check** (fast, catches syntax/brace errors):
```bash
nix-instantiate --parse config/modules/ai/ai.nix >/dev/null && echo "PARSE OK"
```
2. **Hash verification** for any downloaded file pinned via `pkgs.fetchurl` — compute the sha256 locally and confirm it matches the `sha256` in the module:
```bash
nix hash file token-tracker.tsx # or: sha256sum token-tracker.tsx
```
3. **Flake evaluation** — full `nix flake check` may fail on unrelated pre-existing issues (e.g. `<den/primary-user>` not on NIX_PATH in pure mode). Distinguish pre-existing failures from edit-induced ones before touching the code. `nix flake show --impure` lists the configuration names (`nixosConfigurations: desktop, doloro-bootable, laptop, rpi5, wsl`).
4. **Runtime output check** — the generated config is a home-manager symlink into `/nix/store`. After a rebuild, confirm the live files actually contain the change:
```bash
readlink -f ~/.config/opencode/opencode.json # → /nix/store/...-opencode.json
rg -n "my-change" "$(readlink -f ~/.config/opencode/opencode.json)"
```
Also verify supporting files that the change depends on (plugins dir, extra packages, etc.):
```bash
ls -la ~/.config/opencode/plugins/ && readlink -f ~/.config/opencode/plugins/*.tsx
```
5. **Cache check** for npm-resolved opencode plugins — confirm opencode actually downloaded the package into its plugin cache:
```bash
ls ~/.cache/opencode/packages/ | rg "plugin-name"
```
If the package is absent or an old version, the plugin won't load regardless of config.
6. **Log check** — search opencode's log for plugin-load errors, filtering out your own tool-call noise:
```bash
rg -i "plugin" ~/.local/share/opencode/log/opencode.log | rg -v "evaluated permission" | tail -30
```
7. **Config is loaded once at startup** — a running opencode session keeps the config it loaded at launch. After changing any config file, restart opencode (and run a home-manager rebuild first) before expecting the change to take effect.
## Important Notes ## Important Notes
- `allowUnfree = true` globally for proprietary packages (Steam, Spotify, etc.) - `allowUnfree = true` globally for proprietary packages (Steam, Spotify, etc.)
+9 -8
View File
@@ -38,10 +38,12 @@
modules.spotify modules.spotify
# modules.easyeffects # modules.easyeffects
# modules.lavd # modules.lavd
modules.ai <modules/ai/secrets>
modules.pi-coding # modules.ai
modules.pi-coding # inactive: swapped to opencode
# modules.omp # modules.omp
modules.podman modules.podman
modules.wivrn
# <modules/ai/ollama-cuda> # <modules/ai/ollama-cuda>
]; ];
nixos = nixos =
@@ -103,7 +105,6 @@
krita krita
# (tetrio-desktop.override { withTetrioPlus = true; }) # (tetrio-desktop.override { withTetrioPlus = true; })
# bottles # bottles
# pi-coding-agent
# orca-slicer's wrapGAppsHook does not actually wrap the installed # orca-slicer's wrapGAppsHook does not actually wrap the installed
# binary, so neither the GSettings schema path nor the NVIDIA/zink # binary, so neither the GSettings schema path nor the NVIDIA/zink
# workaround env from `withNvidiaGLWorkaround` reach the process. # workaround env from `withNvidiaGLWorkaround` reach the process.
@@ -130,11 +131,11 @@
nixpkgs.overlays = [ nixpkgs.overlays = [
# Skipping tests while upstream sorts it out, revert once # Skipping tests while upstream sorts it out, revert once
# Hydra consistently builds openldap green. # Hydra consistently builds openldap green.
(final: prev: { # (final: prev: {
openldap = prev.openldap.overrideAttrs (_: { # openldap = prev.openldap.overrideAttrs (_: {
doCheck = false; # doCheck = false;
}); # });
}) # })
]; ];
nixpkgs.config.allowUnfree = true; nixpkgs.config.allowUnfree = true;
nixpkgs.config.problems.handlers = { nixpkgs.config.problems.handlers = {
+2 -1
View File
@@ -30,7 +30,8 @@
}; };
programs.home-manager.enable = true; programs.home-manager.enable = true;
}; };
nixos = {lib, ...}: { nixos = { lib, ... }: {
boot.kernelModules = [ "ntsync" ];
}; };
}; };
} }
+26 -17
View File
@@ -15,23 +15,8 @@
{ {
home.packages = [ home.packages = [
pkgs.claude-code pkgs.claude-code
pkgs.snip
]; ];
sops = {
secrets.scug-io-ai-key = {
# sopsFile = ./secrets.yaml;
# Decrypted file path (available at runtime, not eval time)
path = config.home.homeDirectory + "/.secrets/scug_io_api_key";
sopsFile = ../secrets/content/secrets.yaml;
};
};
programs.fish = {
shellInit = ''
if test -f "$HOME/.secrets/scug_io_api_key"
set -x SCUG_IO_API_KEY (cat "$HOME/.secrets/scug_io_api_key")
end
set -x PI_LENS_STARTUP_MODE quick
'';
};
programs.opencode = { programs.opencode = {
enable = true; enable = true;
@@ -55,9 +40,16 @@
"@xberg-io/opencode-xberg" "@xberg-io/opencode-xberg"
"@xberg-io/opencode-crawlberg" "@xberg-io/opencode-crawlberg"
"@xberg-io/opencode-html-to-markdown" "@xberg-io/opencode-html-to-markdown"
# "@xberg-io/opencode-liter-llm" "@xberg-io/opencode-liter-llm"
"opencode-plugin-litellm@latest" "opencode-plugin-litellm@latest"
"@xberg-io/opencode-tree-sitter-language-pack" "@xberg-io/opencode-tree-sitter-language-pack"
# Token slimming: filters shell command output via snip CLI
# (https://github.com/VincentHardouin/opencode-snip)
"opencode-snip@latest"
# Replace/extend the per-model system prompt via
# ~/.config/opencode/system-prompts.json
# (https://github.com/kmcquade/opencode-sysprompt-override-plugin)
"opencode-sysprompt-override@latest"
]; ];
provider.litellm = { provider.litellm = {
npm = "@ai-sdk/openai-compatible"; npm = "@ai-sdk/openai-compatible";
@@ -67,6 +59,23 @@
apiKey = "{env:SCUG_IO_API_KEY}"; apiKey = "{env:SCUG_IO_API_KEY}";
}; };
}; };
# Built-in OpenCode Go provider (https://opencode.ai/zen/go) —
# key from sops secret opencode-go-zen-key via $OPENCODE_GO_API_KEY
provider.opencode-go = {
options = {
apiKey = "{env:OPENCODE_GO_API_KEY}";
};
};
};
# TUI plugin: token-tracker (https://github.com/eserete/opencode-token-tracker)
tui = {
plugin = [ "./plugins/token-tracker.tsx" ];
};
};
xdg.configFile."opencode/plugins/token-tracker.tsx" = {
source = pkgs.fetchurl {
url = "https://raw.githubusercontent.com/eserete/opencode-token-tracker/main/token-tracker.tsx";
sha256 = "a1d56f6d86f512ca2e81653a57ff372c2ea0a3398bcdbebda6de9f9ed89ee45a";
}; };
}; };
}; };
+74
View File
@@ -0,0 +1,74 @@
// @ts-nocheck — jiti-loaded pi extension: package imports resolve via pi's
// extension loader aliases at runtime, not from this directory. No typecheck.
import fs from "node:fs";
import os from "node:os";
import path from "node:path";
import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
import { getBuiltinModels } from "@earendil-works/pi-ai/providers/all";
import type { Model } from "@earendil-works/pi-ai";
interface ProviderFilter {
/** Keep only models whose cost is all zero (free). */
freeOnly?: boolean;
/** Keep only these model ids. */
keep?: string[];
/** Drop these model ids. */
drop?: string[];
/** Keep only models whose id contains any of these substrings. */
keepIdContaining?: string[];
}
const isFree = (m: Model): boolean => {
const c = m.cost;
const baseFree =
c.input === 0 && c.output === 0 && c.cacheRead === 0 && c.cacheWrite === 0;
// A model with cost tiers is not free: tiers kick in above a token threshold.
return baseFree && !(c.tiers && c.tiers.length > 0);
};
const matches = (m: Model, f: ProviderFilter): boolean => {
if (f.freeOnly && !isFree(m)) return false;
if (f.keep && f.keep.length > 0 && !f.keep.includes(m.id)) return false;
if (f.drop && f.drop.includes(m.id)) return false;
if (f.keepIdContaining && f.keepIdContaining.length > 0) {
if (!f.keepIdContaining.some((s) => m.id.includes(s))) return false;
}
return true;
};
export default function (pi: ExtensionAPI): void {
const configPath = path.join(
os.homedir(),
".pi",
"agent",
"model-filters.json",
);
let config: { providers?: Record<string, ProviderFilter> };
try {
config = JSON.parse(fs.readFileSync(configPath, "utf8"));
} catch {
return; // no config, no-op
}
for (const [providerId, filter] of Object.entries(config.providers ?? {})) {
const all = getBuiltinModels(providerId);
if (all.length === 0) {
console.warn(
"[model-filter] no built-in catalog for provider: " + providerId,
);
continue;
}
const models = all.filter((m) => matches(m, filter));
// registerProvider with `models` replaces the provider's full model list;
// auth and streaming are inherited from the built-in provider.
pi.registerProvider(providerId, { models });
console.log(
"[model-filter] " +
providerId +
": " +
all.length +
" -> " +
models.length +
" models",
);
}
}
+75 -130
View File
@@ -7,7 +7,7 @@
{ {
modules.pi-coding = { modules.pi-coding = {
homeManager = homeManager =
{ pkgs, ... }: { pkgs, config, ... }:
{ {
programs.pi-coding-agent = { programs.pi-coding-agent = {
enable = true; enable = true;
@@ -15,58 +15,12 @@
pkgs.nodejs pkgs.nodejs
# pkgs.lean-lsp-mcp # pkgs.lean-lsp-mcp
]; ];
package = pkgs.pi-coding-agent.overrideAttrs (
new: old: {
version = "0.81.1";
src = pkgs.fetchFromGitHub {
owner = "earendil-works";
repo = "pi";
tag = "v${new.version}";
hash = "sha256-xo3uoR7HceOCL3wqoMcacOe8WXP1o7ReAXne5t6Hgao=";
};
npmDepsHash = "sha256-lzKQZbnITzgV9koucsMno6f61ubBLYUcwQEXtak1r1s=";
# npmDepsHash = pkgs.lib.fakeHash;
# npmDepsHash = "sha256-lDoj/94tjJd4ZGU9WgrMOqNSmdpeCljU4c6jGX+TSDY=";
npmDeps = pkgs.fetchNpmDeps {
inherit (new) src;
name = "pi-coding-agent-0.81.1-npm-deps";
hash = new.npmDepsHash;
};
modelData = pkgs.fetchurl {
url = "https://registry.npmjs.org/@earendil-works/pi-ai/-/pi-ai-${new.version}.tgz";
hash = "sha256-x53MD5DU370ZdNoz36P+OWZjGVpoM5sfVcEU2/ckDy8=";
# hash = pkgs.lib.fakeHash;
};
preConfigure = ''
mkdir -p packages/ai/src/providers/data
tar --extract --gzip --file=${new.modelData} \
--directory=packages/ai/src/providers/data \
--strip-components=4 \
package/dist/providers/data
'';
passthru.updateScript = pkgs.nix-update-script {
extraArgs = [
"--custom-dep"
"modelData"
];
};
}
);
settings = { settings = {
"openrouter" = {
"compat" = {
"sendSessionAffinityHeaders" = true;
};
};
"litellm" = { "litellm" = {
"providers" = { "providers" = {
"litellm" = { "litellm" = {
"displayName" = "scuggo"; "displayName" = "scuggo";
"baseUrl" = "https://9f5db439.fwds.scug.io"; "baseUrl" = "https://ai-proxy.fwds.scug.io";
"apiKey" = "$SCUG_IO_API_KEY"; "apiKey" = "$SCUG_IO_API_KEY";
"compat" = { "compat" = {
"sendSessionAffinityHeaders" = true; "sendSessionAffinityHeaders" = true;
@@ -83,37 +37,25 @@
"mcp" = { "mcp" = {
"enabled" = true; "enabled" = true;
}; };
"uiMode" = "fullscreen";
"showCacheMissNotices" = true; "showCacheMissNotices" = true;
"vstack" = { "vstack" = {
"extensionManager" = { "extensionManager" = {
"config" = { "config" = { };
"@vanillagreen/pi-qol" = {
"statusline.enabled" = false;
"showSessionNameTitle" = false;
"permissionGate" = {
"enabled" = true;
"commands" = "rm -Rf,rm -rf,sudo,chmod,chown,mkfs,dd,shutdown,reboot,poweroff";
"previewLines" = 12;
"previewChars" = 1200;
};
"thinkingLabel" = {
"text" = "🧠";
"showTimer" = true;
};
};
};
}; };
}; };
packages = [ packages = [
# "npm:@odinlayer/pi-provider-litellm" # "npm:@odinlayer/pi-provider-litellm"
"npm:pi-provider-litellm" "npm:pi-provider-litellm"
# "npm:pi-web-access" # Web search / content extraction (opencode-crawlberg + opencode-html-to-markdown equivalent)
"npm:pi-web-access"
# Local document parsing / OCR (opencode-xberg equivalent)
"npm:pi-docparser"
# "npm:@gotgenes/pi-permission-system" # "npm:@gotgenes/pi-permission-system"
"npm:@vanillagreen/pi-extension-manager" "npm:@vanillagreen/pi-extension-manager"
"npm:@vanillagreen/pi-qol" # "npm:@vanillagreen/pi-qol"
"npm:pi-vitals" "npm:pi-vitals"
"npm:pi-spark" "npm:pi-spark"
"npm:@zhushanwen/pi-context-engineering"
"npm:pi-caveman" "npm:pi-caveman"
"npm:@tmustier/pi-usage-extension" "npm:@tmustier/pi-usage-extension"
"npm:@heyhuynhgiabuu/pi-pretty" "npm:@heyhuynhgiabuu/pi-pretty"
@@ -121,62 +63,26 @@
# "npm:pi-lean-ctx" # "npm:pi-lean-ctx"
# "npm:@rohaquinlop/pi-deepseek-cache" # "npm:@rohaquinlop/pi-deepseek-cache"
"npm:pi-cache-optimizer" "npm:pi-cache-optimizer"
"npm:pi-opencode-go-cache"
]; ];
}; };
context = '' context = ''
[CORE TOOLING DOCTRINE OBEY WITHOUT EXCEPTION] Core Directive: precise execution, strict safety, long-term solutions.
1. Standards: hard fail unless overridden; files <=300 lines (refactor if exceeded); no hardcoding config/env/consts only; no defaults fail on missing config; no legacy/shims/auto-migrations, assume clean state; root fixes only, no cosmetic patches (report unrelated bugs).
2. Safety: never run destructive ops (rm, reset --hard, deletions) without explicit prior approval; respect sandbox mode (ro/write), request approval if blocked; new code = creative, existing code = minimal deltas (no style/rename drift).
3. Tools: todowrite for multi-step exactly one in_progress, update on completion; rg for search; outputs truncated (~256 lines/10KB), read large files in chunks (<250 lines); edit = trust tool, no re-read, no added headers/comments; build/test/lint before yielding, yield only after todowrite done.
4. Communication: AGENTS.md governs deepest file wins, user prompt overrides; 1-sentence next-action preamble before any tool call; final output GFM with clickable file refs (src/main.ts:50), no file://, technical/dense/impersonal.
[FILE OPERATIONS] [CORE TOOLING DOCTRINE]
- `read` (supports .nix, .ts, .js, .json, .yaml, .yml, .md, .html, .css, .sh, .bash, .c, .h, .rs, .go, .py, .rb, .lua, .toml, .cfg, .ini, .xml, .wasm, .wat, .wat, .webp, .bmp, .jpg, .png, .gif, .svg, .png, .ttf, .woff, .woff2): reads file content, truncates at 2000 lines / 50KB. Use offset/limit for large files. For images returns attachment. For text returns content. - Files: read truncates at 2000 lines/50KB (use offset/limit); write creates/overwrites/auto-parents; edit = smallest unique oldText, merge nearby, never include huge unchanged regions. Never cat/echo/tee/sed -i/head/tail for file content.
- `write` (supports any path): creates file if missing, overwrites if exists. Auto-creates parent dirs. Use for new files or full rewrites. - Search: rg -n for text; grep tool (glob filter) for content; find tool for glob discovery only.
- `edit` (supports any path): precise text replacement. Every edits[].oldText must match a unique, non-overlapping region. Merge nearby changes into single edit. Do NOT include large unchanged regions just to connect distant edits. Prefer smallest possible oldText for uniqueness. - Navigation: symbol_search module_report read_symbol/read_enclosing; never find + manual parsing.
- NEVER use `cat`, `echo`, `tee`, `sed -i`, `head`, `tail` for file content. These bypass the dispatch pipeline and lose context. - Diagnostics: lens_diagnostics (delta=this turn, all=session, full=project-wide before done); lsp_diagnostics before builds.
- NEVER use `find` on the nix store. It is DANGEROUS AND EVIL walks /nix/store with no pruning. Use `ls` on known store paths, `grep`, `symbol_search`, or `module_report` instead. - Context: recall_context(id) to recover compressed/expired/truncated content.
- bash: only for git/nix/builds/scripts/network/system mgmt; set timeout for long ops.
[TEXT SEARCH] - CRITICAL: never find on /nix/store unpruned walk locks up execution; ls known paths, ask user for unknown paths. ABSOLUTE.
- `rg` (ripgrep) for pattern matching in files. Flags: `-n` (line numbers), `-u` (respect .gitignore, default), `-i` (case-insensitive), `--no-heading` (suppress filename prefix). - You have a web-search tool. Use it sparingly but reach for it in situations where info isnt directly known. (i.e, "common problem" -> get from memory, think hard if needed, "hard problem that isnt in your training data or request for you to read docs for a lib or program" -> search online)
- NEVER combine `find` + `xargs grep` or `find` + `ls` + `grep`. `rg` is always available and respects .gitignore. - Searching for anything (including with wildcards ("/nix/store/*/**" or others)) isnt permitted at all. You must find paths inside the project, such a result/
- For glob-based file discovery: use `find` (the tool) with patterns like `*.ts`, `**/*.json`. This is fine `find` is the file-system tool, not the nix-store walker.
- For content search across files: `grep` with optional glob filter (e.g. `grep -rn "pattern" --glob="*.rs"`).
[CODE NAVIGATION]
- `symbol_search`: ranked BM25 identifier search over persisted word index. Answers "which files are relevant to <query>". Pair with `module_report` for file outline and `read_symbol` for symbol body.
- `module_report`: structured file outline returns each symbol's name/kind/signature/line-range, who-uses-this, risk flags, recommendedReads. Pass `blastRadius: true` for transitive dependents.
- `read_enclosing`: smallest enclosing symbol/callback for a given line. Use after `ast_grep_search`, diagnostics, or LSP locations when you need exact body without reading whole file.
- `lsp_diagnostics`: LSP-level errors/warnings/hints. Use BEFORE building. Supports paths (file or directory), severity filter, concurrency control.
- NEVER use `find` + manual parsing for code navigation. Always use symbol_search/module_report/read_symbol first.
[DIAGNOSTICS]
- `lens_diagnostics` (default: mode=delta, current turn's fixable warnings): fast, current-turn only. Use for "what needs fixing right now?"
- `lens_diagnostics` (mode=all): session diagnostics for ALL files edited this session. Shows blocking errors with messages, not just counts. Unedited files with pre-existing errors DO NOT appear.
- `lens_diagnostics` (mode=full): expensive project-wide LSP scan + cached runner diagnostics. Use before declaring work done. Bounded by slowest analyzer (~180s ceiling for trivy).
- `lsp_diagnostics`: LSP-only diagnostics. Use before builds to proactively catch type errors.
- NEVER use `grep` + manual diagnostic interpretation. Always route through lens_diagnostics/lsp_diagnostics.
[SHARED TOOLS]
- `recall_context(id)`: recall original content compressed by context engineering. Use when full content of expired/truncated/condensed tool result is needed.
- `bash`: execute shell commands. For text search: `rg -n`. For text extraction: `rg --output-format json`. For file operations: prefer `read`/`write`/`edit`. For system commands: git, nix, builds, scripts, network.
- `bash` with `timeout`: set timeout for long-running operations. Use for builds, nix operations, network requests.
[BEHAVIORAL CONSTRAINTS]
- Always prefer `read`/`write`/`edit` over any raw shell equivalent for file operations.
- Always prefer `rg` over `find` + `grep` for text search.
- Always prefer `symbol_search`/`module_report` over `find` + manual parsing for code navigation.
- Always prefer `lens_diagnostics`/`lsp_diagnostics` over `grep` + manual diagnostic interpretation.
- Use `bash` ONLY for commands that genuinely need a shell (git, nix, builds, scripts, network, system management).
- When editing files, always use `edit` (not `write` with partial content). `edit` is precise and tracks what changed.
- When creating new files or doing full rewrites, use `write`.
- When searching file contents, always use `grep`.
- When running builds, always check `lsp_diagnostics`/`lens_diagnostics` first.
- When declaring work done, always run `lens_diagnostics mode=full` to verify no blocking errors remain.
- When context is expired/truncated/condensed, use `recall_context(id)` to recover full content.
- When reading large files, use offset/limit to navigate never read entire 10000+ line files.
[CRITICAL RULES]
- NEVER use `find` on the nix store (/nix/store/*). It is DANGEROUS AND EVIL extremely expensive, slow, locks up execution.
- Use `ls` on known store paths. Use `grep`, `symbol_search`, or `module_report` for discovery.
- If you need to discover something, ask the user for the path rather than guessing.
- This rule is ABSOLUTE. No exceptions. No edge cases.
''; '';
}; };
@@ -251,6 +157,56 @@
}; };
}; };
}; };
home.file.".pi/agent/auth.json" = {
text = builtins.toJSON {
"opencode-go" = {
"type" = "api_key";
"key" = "$OPENCODE_GO_API_KEY";
};
"opencode" = {
"type" = "api_key";
"key" = "$OPENCODE_GO_API_KEY";
};
};
};
# Cache/routing compat overrides (provider-level minimal)
home.file.".pi/agent/models.json" = {
text = builtins.toJSON {
providers = {
"opencode-go" = {
compat = {
supportsLongCacheRetention = true;
};
};
};
};
};
# Restrict providers to a subset of their built-in models.
# Filter config: ~/.pi/agent/model-filters.json (see below).
home.file.".pi/agent/extensions/model-filter.ts" = {
source = ./model-filter.ts;
};
# Model filter config: per-provider filters applied by model-filter.ts
home.file.".pi/agent/model-filters.json" = {
text = builtins.toJSON {
providers = {
# opencode: only free models (all cost zero)
opencode = {
freeOnly = true;
};
};
};
};
# pi-web-access config: raw results, no curator / no AI summarising
home.file.".pi/web-search.json" = {
text = builtins.toJSON {
workflow = "none";
};
};
# pi-spark config # pi-spark config
home.file.".pi/agent/spark.json" = { home.file.".pi/agent/spark.json" = {
@@ -276,17 +232,6 @@
thinkingLevel = "medium"; thinkingLevel = "medium";
}; };
}; };
recap = {
idle = "5m";
provider = "openai-codex";
model = "gpt-5.4-mini";
thinkingLevel = "off";
};
title = {
provider = "openai-codex";
model = "gpt-5.4-mini";
thinkingLevel = "off";
};
}; };
}; };
}; };
+35
View File
@@ -0,0 +1,35 @@
{ modules, ... }:
{
modules.ai = {
provides = {
secrets = {
homeManager =
{ config, ... }:
{
sops = {
secrets.scug-io-ai-key = {
# Decrypted file path (available at runtime, not eval time)
path = config.home.homeDirectory + "/.secrets/scug_io_api_key";
sopsFile = ../secrets/content/secrets.yaml;
};
secrets.opencode-go-zen-key = {
# Decrypted file path (available at runtime, not eval time)
path = config.home.homeDirectory + "/.secrets/opencode-go-zen-key";
sopsFile = ../secrets/content/secrets.yaml;
};
};
programs.fish = {
shellInit = ''
if test -f "$HOME/.secrets/scug_io_api_key"
set -x SCUG_IO_API_KEY (cat "$HOME/.secrets/scug_io_api_key")
end
if test -f "$HOME/.secrets/opencode-go-zen-key"
set -x OPENCODE_GO_API_KEY (cat "$HOME/.secrets/opencode-go-zen-key")
end
'';
};
};
};
};
};
}
+1
View File
@@ -4,6 +4,7 @@
homeManager = { homeManager = {
services.dunst = { services.dunst = {
enable = true; enable = true;
# systemd.enable = true;
settings = { settings = {
global = { global = {
font = "Noto Nerd Font 8"; font = "Noto Nerd Font 8";
@@ -228,6 +228,10 @@
]; ];
}; };
}; };
# systemd.user.services.hyprpaper = {
# partOf = [ "hyprland-session.target" ];
# after = [ "hyprland-session.target" ];
# };
xdg.configFile."hypr/hyprland.lua" = { xdg.configFile."hypr/hyprland.lua" = {
source = pkgs.writeText "hyprland.lua" hlBindCode; source = pkgs.writeText "hyprland.lua" hlBindCode;
}; };
+11 -5
View File
@@ -3,13 +3,16 @@
inputs, inputs,
lib, lib,
... ...
}: { }:
{
flake-file.inputs = { flake-file.inputs = {
hyprland.url = "github:hyprwm/Hyprland"; hyprland.url = "github:hyprwm/Hyprland";
}; };
modules.hyprland = { modules.hyprland = {
nixos = {pkgs, ...}: { nixos =
imports = [inputs.hyprland.nixosModules.default]; { pkgs, ... }:
{
imports = [ inputs.hyprland.nixosModules.default ];
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
wayfreeze wayfreeze
grim grim
@@ -43,14 +46,17 @@
# package32 = pkgs-unstable.pkgsi686Linux.mesa; # package32 = pkgs-unstable.pkgsi686Linux.mesa;
}; };
}; };
homeManager = {pkgs, ...}: { homeManager =
{ pkgs, ... }:
{
gtk = { gtk = {
enable = true; enable = true;
}; };
# backupFileExtension = "backupHM"; # backupFileExtension = "backupHM";
wayland.windowManager.hyprland = { wayland.windowManager.hyprland = {
enable = true; enable = true;
systemd.variables = ["--all"]; systemd.enable = true;
systemd.variables = [ "--all" ];
configType = "lua"; configType = "lua";
}; };
}; };
+5 -1
View File
@@ -2,7 +2,8 @@
den, den,
modules, modules,
... ...
}: { }:
{
modules.kitty = { modules.kitty = {
homeManager = { homeManager = {
programs.kitty = { programs.kitty = {
@@ -16,6 +17,9 @@
background_opacity = 0.6; background_opacity = 0.6;
cursor_trail = 1; cursor_trail = 1;
auto_reload_config = -1; auto_reload_config = -1;
input_delay = 1;
repaint_delay = 2;
wayland_enable_ime = "no";
}; };
}; };
}; };
+5
View File
@@ -11,12 +11,17 @@
{ {
programs.quickshell = { programs.quickshell = {
systemd.enable = true; systemd.enable = true;
systemd.target = "hyprland-session.target";
enable = true; enable = true;
activeConfig = "main"; activeConfig = "main";
configs = { configs = {
main = config.lib.file.mkOutOfStoreSymlink "/home/doloro/dotfiles/config/modules/quickshell/quickshell"; main = config.lib.file.mkOutOfStoreSymlink "/home/doloro/dotfiles/config/modules/quickshell/quickshell";
}; };
}; };
# systemd.user.services.quickshell = {
# partOf = [ "hyprland-session.target" ];
# after = [ "hyprland-session.target" ];
# };
}; };
}; };
} }
+4 -3
View File
@@ -4,6 +4,7 @@ wakatime-scug-io-api-key: ENC[AES256_GCM,data:XQUccNW4210U8ZpHSGVcsdbAirzyTvmcy4
meow: ENC[AES256_GCM,data:JVzenw==,iv:oCOo9//r5s2K4pSeH5UNEj0LL+9h2yq0G0DPOfwjmyQ=,tag:0gu9FNOrjQ8fpB+B+RbGSg==,type:str] meow: ENC[AES256_GCM,data:JVzenw==,iv:oCOo9//r5s2K4pSeH5UNEj0LL+9h2yq0G0DPOfwjmyQ=,tag:0gu9FNOrjQ8fpB+B+RbGSg==,type:str]
meoww: ENC[AES256_GCM,data:WPeszDfMWxY=,iv:JJMOror5wj7cTNKfrUj2LDXlO3WCKzb7jk4AeZ0oD+Q=,tag:qs3oyM7K1FGy5cXvS6OHpQ==,type:str] meoww: ENC[AES256_GCM,data:WPeszDfMWxY=,iv:JJMOror5wj7cTNKfrUj2LDXlO3WCKzb7jk4AeZ0oD+Q=,tag:qs3oyM7K1FGy5cXvS6OHpQ==,type:str]
scug-io-ai-key: ENC[AES256_GCM,data:b2AT2+A5eoGa1eZsCYKDFg449sOgffDcQA==,iv:NDIS3x1unq6/UtjtsyBTHx5v12utagDA3BbNzs5v3L0=,tag:MhbJGATIDWyOZUqXqRAeVA==,type:str] scug-io-ai-key: ENC[AES256_GCM,data:b2AT2+A5eoGa1eZsCYKDFg449sOgffDcQA==,iv:NDIS3x1unq6/UtjtsyBTHx5v12utagDA3BbNzs5v3L0=,tag:MhbJGATIDWyOZUqXqRAeVA==,type:str]
opencode-go-zen-key: ENC[AES256_GCM,data:fwgV/QK+4tpizC6J3evbGxD57BQCWn5Eyex7iIeNYCQHk6ZD8eTukqhUbLcfXyO4RQot3B1B2xbQVVBsuOWWcQYQKA==,iv:aKwQM8d0gP+MyuqWFk2VfOWDgKPcE/HAvL0I0r6o1nU=,tag:/AeSgscy0mxUMwoP8LaCXg==,type:str]
sops: sops:
age: age:
- enc: | - enc: |
@@ -69,7 +70,7 @@ sops:
61QsSqCuJyEwSPpOzeWa5NChcCjitOUG1jEMsSHlpIslKA1P7g/P9g== 61QsSqCuJyEwSPpOzeWa5NChcCjitOUG1jEMsSHlpIslKA1P7g/P9g==
-----END AGE ENCRYPTED FILE----- -----END AGE ENCRYPTED FILE-----
recipient: age1kc0xu0ue2nrrr7w4gam7wlzackv8jv243rxwwndgxjqklgtnp5csdtpgzp recipient: age1kc0xu0ue2nrrr7w4gam7wlzackv8jv243rxwwndgxjqklgtnp5csdtpgzp
lastmodified: "2026-07-22T22:45:05Z" lastmodified: "2026-08-01T18:33:13Z"
mac: ENC[AES256_GCM,data:jfbsnWcZ6yJSUbRn8VbONhj3oin1+DsHzJ590BbdPtikZwjD/0f06NQ86b0DI5/M+LKP4Dy5Cyf7xyJ99iWuOKbF9y12qK17IqMaNZCmPkw8Y+v7q38ESsW/Iizr3hfQ2L2GwJNTWsoifCeQphxGby7s2lKjMPYGKhYrgicZ5Fs=,iv:bbL+59d0S1fdfDInLS5z9Vx+AVW6nb0z2BNgZ+5PbUM=,tag:jJYnLsORyEuClRm/t4mwcA==,type:str] mac: ENC[AES256_GCM,data:sTTpvCTBPsY4OABqIvgujUT2+Yye+H44mxN3G3ybhoj05omgFajYN86sc3zL9vbiTl7SNxCWMkGCerCvS4QrtRZ0vRTNuYNkFPNHDKniSybbxKzjHqyXWGCOoNYqHW211ktB9vmiXQd+zYart87kUU6d6p2FrVDBLU03eQwJO6k=,iv:8zT8W34A8f/EXRYxFeK2PC2Ko6UrjFrPL5+lwNXpb4Q=,tag:WugeYbmrVcUZ9xVC+r3c7w==,type:str]
unencrypted_suffix: _unencrypted unencrypted_suffix: _unencrypted
version: 3.13.2 version: 3.13.3
+1
View File
@@ -21,6 +21,7 @@
set -g status-fg white set -g status-fg white
set -g mouse on set -g mouse on
set -g extended-keys on set -g extended-keys on
set -g allow-passthrough on
''; '';
}; };
}; };
+61
View File
@@ -0,0 +1,61 @@
{ den, modules, ... }:
{
modules.wivrn = {
homeManager =
{ pkgs, ... }:
{
home.packages = with pkgs; [
wivrn
wayvr
];
};
nixos =
{ pkgs, lib, ... }:
{
services.wivrn = {
enable = true;
openFirewall = true;
autoStart = true;
highPriority = true;
# Low-latency encoder config
extraServerFlags = [ ];
monadoEnvironment = {
# Monado OpenXR runtime env vars
};
steam = {
enable = true;
importOXRRuntimes = true;
};
# Optimal config for low latency:
# - Vulkan encoder (newer kernels) or vaapi (AMD/Intel)
# - H265 codec (3ms overhead, better quality than H264)
# - 90Hz refresh rate (balance quality/battery)
# - 140% render resolution with quality supersampling
# - Up to 200Mbit/s bitrate on good networks
config.enable = true;
config.json = {
encoder = {
encoder = "nvenc";
codec = "h265";
};
# Enable mDNS discovery
"publish-service" = "avahi";
# High priority for async reprojection
highPriority = true;
};
};
# Include monado-vulkan-layers for VR rendering
environment.systemPackages = with pkgs; [
monado-vulkan-layers
];
};
};
}
Generated
+72 -106
View File
@@ -117,38 +117,6 @@
"type": "github" "type": "github"
} }
}, },
"cachyos-kernel": {
"flake": false,
"locked": {
"lastModified": 1784569577,
"narHash": "sha256-pmwdKRPSavZ98QJv/Xlbj2U60AZ/+P4aevLBZ71jDaA=",
"owner": "CachyOS",
"repo": "linux-cachyos",
"rev": "5ca2493c51b1cadec102c9c549345b43f669960b",
"type": "github"
},
"original": {
"owner": "CachyOS",
"repo": "linux-cachyos",
"type": "github"
}
},
"cachyos-kernel-patches": {
"flake": false,
"locked": {
"lastModified": 1783974915,
"narHash": "sha256-kReDG2emoGxaG0Lr8tt9jUuu1kQu07yAJZhVWfbwxYc=",
"owner": "CachyOS",
"repo": "kernel-patches",
"rev": "ea739d734ec179864b21446856315bc49f7c52fa",
"type": "github"
},
"original": {
"owner": "CachyOS",
"repo": "kernel-patches",
"type": "github"
}
},
"den": { "den": {
"locked": { "locked": {
"lastModified": 1775551420, "lastModified": 1775551420,
@@ -172,11 +140,11 @@
"treefmt-nix": "treefmt-nix" "treefmt-nix": "treefmt-nix"
}, },
"locked": { "locked": {
"lastModified": 1784874452, "lastModified": 1785395241,
"narHash": "sha256-tY44xXG2zeAXAEbxcLfspV0sr54aLQk334rHU+erlqw=", "narHash": "sha256-33LyV3D5zCpFXeh6L7QBe+Syb2zWPfeEFgaJb9E8ucU=",
"owner": "Mic92", "owner": "Mic92",
"repo": "direnv-instant", "repo": "direnv-instant",
"rev": "2d6dab5941c8472e6a14b641bde9d64bea1be1f5", "rev": "c4231a4244dde9b85fa6ee39535f28f525596cd3",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -284,11 +252,11 @@
}, },
"flake-file": { "flake-file": {
"locked": { "locked": {
"lastModified": 1784255282, "lastModified": 1785282747,
"narHash": "sha256-srM+PTqxfyvbQ0BevsOtP8vQv/Ox6OMtY4DktoDxLKg=", "narHash": "sha256-ZwdMXUu0Udb4yzI65+psyJeUF+wexByNEvTUSx1xjVs=",
"owner": "vic", "owner": "vic",
"repo": "flake-file", "repo": "flake-file",
"rev": "66ddd2f69a5c4677f0095c6f70eea1217dc45749", "rev": "56c46842d70754345c4a4581b8cbebe87b8fc067",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -478,11 +446,11 @@
"utils": "utils" "utils": "utils"
}, },
"locked": { "locked": {
"lastModified": 1784863038, "lastModified": 1785004096,
"narHash": "sha256-mWZeP4v2Fpx7EFyL2KnQKDt8JF5GokF/XtgA9RIEfMU=", "narHash": "sha256-8stbyRwnEwPMmni/U6iHGGBbi3uebfq60qlKXPgYwWI=",
"owner": "vikingnope", "owner": "vikingnope",
"repo": "helium-browser-nix-flake", "repo": "helium-browser-nix-flake",
"rev": "b282f9f276c6593e1e7f575d653e4ff2b4f71256", "rev": "b356d11eff33ec730a51f9c88d258fdd72efe587",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -498,11 +466,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1784877405, "lastModified": 1785496534,
"narHash": "sha256-W649GocILahx7Vb/JMx834217+OLKBrq014VmC/8+NM=", "narHash": "sha256-EASdusMYLuPhOCrE3LmsAGOvGhX3vnKBLxFvj9lI8tU=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "32de400b6ac9f43042bca706f4a64f6ad08117e8", "rev": "e8827fbbb12015a8dd9f66285aec79d655bcb9f6",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -586,11 +554,11 @@
"xdph": "xdph" "xdph": "xdph"
}, },
"locked": { "locked": {
"lastModified": 1784887189, "lastModified": 1785434837,
"narHash": "sha256-EcnF0oQE0QSL524UsCvvAtXU3GWd6QNyhMMldDT407g=", "narHash": "sha256-5xgKSbsFzLC9XvMH3iRhYuVBn4w0eo6LzuxY21uRIVw=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "Hyprland", "repo": "Hyprland",
"rev": "e820db90cf9a87db53690fd92ec328c2bd2f486d", "rev": "8668a5392179f99fb9ab3699ede233484bee0b51",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -835,11 +803,11 @@
"nixpkgs": "nixpkgs_5" "nixpkgs": "nixpkgs_5"
}, },
"locked": { "locked": {
"lastModified": 1784109236, "lastModified": 1785342502,
"narHash": "sha256-2scKSCd++nRhdi4WhPw7h8HqYraM1wvR/SvT+rBBV90=", "narHash": "sha256-qu4abwEmOHOzpdBUigpLfmHObkRgJp5sRjbnnyEKzSo=",
"owner": "JPyke3", "owner": "JPyke3",
"repo": "hytale-launcher-nix", "repo": "hytale-launcher-nix",
"rev": "1e3c190d0297fb0c28fee17a7204d41f4416f84e", "rev": "2bc2d0dd6fcd4c4a61d9ab33b2149b21286e79d1",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -905,11 +873,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1784576541, "lastModified": 1785501161,
"narHash": "sha256-rYziS/48KX8dhQtoLwUJxbMQb7rDiRm27zaxE72rhWw=", "narHash": "sha256-7RfISc8VQOaA3U85FIE6zYqkTAaF+b6RLnQvPAlAmts=",
"ref": "main", "ref": "main",
"rev": "10568239ced64ba5d249f4c85f1c9f7dda81d137", "rev": "3fee7b017c11b03421768580e201bbb94f6bd3e5",
"revCount": 79, "revCount": 80,
"type": "git", "type": "git",
"url": "https://git.scug.io/nikkuss/pkgs.git" "url": "https://git.scug.io/nikkuss/pkgs.git"
}, },
@@ -931,11 +899,11 @@
"xwayland-satellite-unstable": "xwayland-satellite-unstable" "xwayland-satellite-unstable": "xwayland-satellite-unstable"
}, },
"locked": { "locked": {
"lastModified": 1784874881, "lastModified": 1785494453,
"narHash": "sha256-u4jhSIf/Un0qZB+Cn3hTTaHSI20XeAxYbA5o4faqdJs=", "narHash": "sha256-nK6DCmFpPgaHweU2Y8BMxutfTihwXJ2XkxaoMZPBpMQ=",
"owner": "sodiboo", "owner": "sodiboo",
"repo": "niri-flake", "repo": "niri-flake",
"rev": "ef7a2a3d719af46b906c22a3ebfb7d65627b2cd2", "rev": "68414146fbe13d8fce7748cf2f4e9e46e4834e2e",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -979,18 +947,16 @@
}, },
"nix-cachyos-kernel": { "nix-cachyos-kernel": {
"inputs": { "inputs": {
"cachyos-kernel": "cachyos-kernel",
"cachyos-kernel-patches": "cachyos-kernel-patches",
"flake-compat": "flake-compat_2", "flake-compat": "flake-compat_2",
"flake-parts": "flake-parts_3", "flake-parts": "flake-parts_3",
"nixpkgs": "nixpkgs_6" "nixpkgs": "nixpkgs_6"
}, },
"locked": { "locked": {
"lastModified": 1784832578, "lastModified": 1785437982,
"narHash": "sha256-3gkkqfiKHxqqnfKuzmqgpb7atWcdxoYrpTrfNCQAWxY=", "narHash": "sha256-m0mLVZc4RmzlBMjPOFh+rnALT92jMXJqQtLBMP9jo90=",
"owner": "xddxdd", "owner": "xddxdd",
"repo": "nix-cachyos-kernel", "repo": "nix-cachyos-kernel",
"rev": "7c0ff5c1e38d6e3b63c003ce5e600cd3df3e48dd", "rev": "8dfc5b3a553819ba50f601d804a3df64360bd5d8",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -1021,11 +987,11 @@
"nixpkgs": "nixpkgs_7" "nixpkgs": "nixpkgs_7"
}, },
"locked": { "locked": {
"lastModified": 1784723954, "lastModified": 1785232496,
"narHash": "sha256-1CfD8ZUjCkTgjsneLZ/lxCHhgDfqxxE7/GX0MmsgiqA=", "narHash": "sha256-65EQYIRRpTdpH8lUiB6Mvo5uBkG60aBIzAJuALfx+O0=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixos-hardware", "repo": "nixos-hardware",
"rev": "a017f5b72210026af5b3ac5949f08d94380a6fbd", "rev": "2e790b0a6be8ec2b76174ac0931b8ff11919ec98",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -1104,11 +1070,11 @@
}, },
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1784497964, "lastModified": 1785318670,
"narHash": "sha256-vlHUuqAcbcH2RKmHbPiuQzbv1pnzzavXnI62RD0bqCU=", "narHash": "sha256-dN6Ou5x/+23FZLEpYP3IffO+NyJFzUlGumt1uu3MMaY=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "241313f4e8e508cb9b13278c2b0fa25b9ca27163", "rev": "0954f7ee2f6bb3dc7d4e3d0d8bcb8fd4bde4cfc5",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -1120,11 +1086,11 @@
}, },
"nixpkgs-darwin": { "nixpkgs-darwin": {
"locked": { "locked": {
"lastModified": 1784755387, "lastModified": 1784834831,
"narHash": "sha256-uxq8JKEE6bjRst96QKwH5snLXC5QkrqoY+CYuhGqGQg=", "narHash": "sha256-yj0LPLnsmYoLmA3FGANjeTEwej0/DHjZBXWnDQDUuIs=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "2b7a84e696b76759b60bea1eafd62fa34fb96a6e", "rev": "51fe96f9107566e6b8eeb7fc4ba696c01e548b04",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -1151,11 +1117,11 @@
}, },
"nixpkgs-master": { "nixpkgs-master": {
"locked": { "locked": {
"lastModified": 1784887191, "lastModified": 1785500885,
"narHash": "sha256-WMq80/S9JZoTOn7Cm61fx/dQeJU/l26xUGUX4EU+d0I=", "narHash": "sha256-iNwmTIXImHMnlXNG4EuTZOuvwt9qZAUM6GnRakZ5fc0=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "dae023c3459276c9c615b2f0f6448f2ef8365fe2", "rev": "24692924db907f18d3b4cf3ef52e7909b02ce40c",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -1183,11 +1149,11 @@
}, },
"nixpkgs_10": { "nixpkgs_10": {
"locked": { "locked": {
"lastModified": 1784796856, "lastModified": 1785454630,
"narHash": "sha256-wWFrV5/Qbm+lyt5x20E/bSbfJiGKMo4RCxZV8cl/WZI=", "narHash": "sha256-LQy14TZp77TwbQf40gg1V3jo8FwJG0jGDkAH+zRHqg8=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "e2587caef70cea85dd97d7daab492899902dbf5d", "rev": "1559d3daa3ecc813a650b79375ea61b6741b8746",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -1199,11 +1165,11 @@
}, },
"nixpkgs_11": { "nixpkgs_11": {
"locked": { "locked": {
"lastModified": 1784812282, "lastModified": 1784555310,
"narHash": "sha256-Na4aTmdz22ovtSvcvNKaRwEWkg801hDyX6t8JqvW+sE=", "narHash": "sha256-/FCliTPgiuV1owejZFNx3Ch9irdvkOfOFl+HHZ+DrtM=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "6d12004108e0e4a5cfa4bd83b14477f040b15773", "rev": "421eebfd0ec7bccd4abe826ce62d7e6e83129493",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -1247,11 +1213,11 @@
}, },
"nixpkgs_14": { "nixpkgs_14": {
"locked": { "locked": {
"lastModified": 1784356753, "lastModified": 1784796856,
"narHash": "sha256-zupdTm41be2fY8cexroEOGjopl3F2Gqs3gk7ieqaM3s=", "narHash": "sha256-vwxWgF+Gj276WznzGb1LxGsK/39HaQwgQXiU3EkC844=",
"rev": "61b7c44c4073f0b827768aff0049561b5110ea5a", "rev": "e2587caef70cea85dd97d7daab492899902dbf5d",
"type": "tarball", "type": "tarball",
"url": "https://releases.nixos.org/nixos/unstable/nixos-26.11pre1036777.61b7c44c4073/nixexprs.tar.xz" "url": "https://releases.nixos.org/nixos/unstable/nixos-26.11pre1040357.e2587caef70c/nixexprs.tar.xz"
}, },
"original": { "original": {
"type": "tarball", "type": "tarball",
@@ -1305,11 +1271,11 @@
}, },
"nixpkgs_5": { "nixpkgs_5": {
"locked": { "locked": {
"lastModified": 1783224372, "lastModified": 1785090369,
"narHash": "sha256-8i/87eeoqiGE4yOTjwSA3Eh/ziJRQEmd/unYU+K27sk=", "narHash": "sha256-m0pDuRJG7EDo9ri+4Ksu83VsI+PlxNC9lNBfydejce4=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "d407951447dcd00442e97087bf374aad70c04cea", "rev": "624af665418d3c65d544145b4d34ad696439570e",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -1321,11 +1287,11 @@
}, },
"nixpkgs_6": { "nixpkgs_6": {
"locked": { "locked": {
"lastModified": 1784800284, "lastModified": 1785382966,
"narHash": "sha256-aegW1E+2ZJbIWTi6lRGfUD77qclmKARWJvRolEWmY9s=", "narHash": "sha256-TzNPxZZV/qnV8U5fEtrvcMF/GppHnlWm16RDHddPOyE=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "e77b9866887df0d9759099cef8e2de0845e70451", "rev": "ba889d5db7c07eaf5cb8f37835d447d935c51b21",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -1387,11 +1353,11 @@
"systems": "systems_4" "systems": "systems_4"
}, },
"locked": { "locked": {
"lastModified": 1784814601, "lastModified": 1785364321,
"narHash": "sha256-T32JXjZ7kIbhBn8/Har171yGg6IBdl97cxAWameqZDE=", "narHash": "sha256-BLuHl+nZKb+FDq3GAM6L+UBEiyVepXANA31fT1F56pw=",
"owner": "nix-community", "owner": "nix-community",
"repo": "nixvim", "repo": "nixvim",
"rev": "f316e949e0ed9df0e1e0bf645c6dce721d4e230e", "rev": "acd69cc15d57004e8cb4495034320263a3d362ea",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -1430,11 +1396,11 @@
"nixpkgs": "nixpkgs_12" "nixpkgs": "nixpkgs_12"
}, },
"locked": { "locked": {
"lastModified": 1784883841, "lastModified": 1785431079,
"narHash": "sha256-BNUmV5FQJKIjEwSK2SnwTGLBo+aadSA4Nouu0OZ6qzs=", "narHash": "sha256-qeUK5296t82+fZR9cWWNLK/u1+ZEuBYmhJFWDtWzzc0=",
"ref": "main", "ref": "main",
"rev": "772a34e7b07bc2e10f290783a3a6f5f053888d08", "rev": "fef8579df5738a03eeac3b7ee0ac76a248903d7e",
"revCount": 304, "revCount": 331,
"type": "git", "type": "git",
"url": "https://git.molez.org/mandlm/omp-nix" "url": "https://git.molez.org/mandlm/omp-nix"
}, },
@@ -1634,11 +1600,11 @@
"systems": "systems_5" "systems": "systems_5"
}, },
"locked": { "locked": {
"lastModified": 1784481035, "lastModified": 1785048222,
"narHash": "sha256-nC0QN+GPTnA5i+WBx8S2rG8+VFh+EeBnEe5mU3hlAcQ=", "narHash": "sha256-LjFVfwxensz76SjnvofF1Jsw+xTLd8Qp31W0J6nh2XI=",
"owner": "Gerg-L", "owner": "Gerg-L",
"repo": "spicetify-nix", "repo": "spicetify-nix",
"rev": "a6baa7464f9b21a106dcfabb0bdcfe96fb434409", "rev": "17e524f330c282d31c32dfe076222d4a12277886",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -1843,11 +1809,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1784369104, "lastModified": 1785360170,
"narHash": "sha256-47cxbcZODibHv3rELFQ9vZly0vUNkND/atn/U7HLeb0=", "narHash": "sha256-XE1lKgQ3eIO3E7zWryqcRsax+mYXod/5RHBn4YaR9YE=",
"owner": "numtide", "owner": "numtide",
"repo": "treefmt-nix", "repo": "treefmt-nix",
"rev": "df3c0640565d04a0261253cdd89fce78ec50168a", "rev": "d1187f8bc71fb8aab02395869ec3f5c1920f75c0",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -1970,11 +1936,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1784354557, "lastModified": 1785480078,
"narHash": "sha256-z2XthIV/68GNghbqmaPVrShPIfMPwpZKTA47REKC5bA=", "narHash": "sha256-wWRW/Teo+58EMeTpVVEAqYid1qLzpB/PViQJCv7Xxvc=",
"owner": "youwen5", "owner": "youwen5",
"repo": "zen-browser-flake", "repo": "zen-browser-flake",
"rev": "239dc504b56eabcfc1dce945e7e22ca99694be89", "rev": "b7d4cc2778143a228675cd8bb7efdfa111638ac8",
"type": "github" "type": "github"
}, },
"original": { "original": {