things
This commit is contained in:
@@ -42,6 +42,7 @@
|
||||
modules.pi-coding
|
||||
# modules.omp
|
||||
modules.podman
|
||||
modules.wivrn
|
||||
# <modules/ai/ollama-cuda>
|
||||
];
|
||||
nixos =
|
||||
@@ -76,16 +77,16 @@
|
||||
...
|
||||
}:
|
||||
{
|
||||
xdg.configFile."hypr/hyprland-local.lua" = {
|
||||
text = ''
|
||||
exec-once = hyprctl dispatch workspace 2 # shit solution to get quickshell on the right monitor
|
||||
workspace = name:2, monitor:DP-2
|
||||
input {
|
||||
kb_layout = "gb"
|
||||
follow_mouse = 2
|
||||
sensitivity = -0.5
|
||||
}
|
||||
'';
|
||||
xdg.configFile."hypr/hyprland-local.lua" = {
|
||||
text = ''
|
||||
exec-once = hyprctl dispatch workspace 2 # shit solution to get quickshell on the right monitor
|
||||
workspace = name:2, monitor:DP-2
|
||||
input {
|
||||
kb_layout = "gb"
|
||||
follow_mouse = 2
|
||||
sensitivity = -0.5
|
||||
}
|
||||
'';
|
||||
};
|
||||
home.packages = with pkgs; [
|
||||
equibop
|
||||
@@ -130,11 +131,11 @@
|
||||
nixpkgs.overlays = [
|
||||
# Skipping tests while upstream sorts it out, revert once
|
||||
# Hydra consistently builds openldap green.
|
||||
(final: prev: {
|
||||
openldap = prev.openldap.overrideAttrs (_: {
|
||||
doCheck = false;
|
||||
});
|
||||
})
|
||||
# (final: prev: {
|
||||
# openldap = prev.openldap.overrideAttrs (_: {
|
||||
# doCheck = false;
|
||||
# });
|
||||
# })
|
||||
];
|
||||
nixpkgs.config.allowUnfree = true;
|
||||
nixpkgs.config.problems.handlers = {
|
||||
|
||||
@@ -30,7 +30,8 @@
|
||||
};
|
||||
programs.home-manager.enable = true;
|
||||
};
|
||||
nixos = {lib, ...}: {
|
||||
nixos = { lib, ... }: {
|
||||
boot.kernelModules = [ "ntsync" ];
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
@@ -16,22 +16,6 @@
|
||||
home.packages = [
|
||||
pkgs.claude-code
|
||||
];
|
||||
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 = {
|
||||
enable = true;
|
||||
|
||||
|
||||
+102
-44
@@ -7,66 +7,101 @@
|
||||
{
|
||||
modules.pi-coding = {
|
||||
homeManager =
|
||||
{ pkgs, ... }:
|
||||
{ pkgs, config, ... }:
|
||||
{
|
||||
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;
|
||||
};
|
||||
secrets.opencode-go-zen-key = {
|
||||
# sopsFile = ./secrets.yaml;
|
||||
# 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
|
||||
set -x PI_LENS_STARTUP_MODE quick
|
||||
'';
|
||||
};
|
||||
programs.pi-coding-agent = {
|
||||
enable = true;
|
||||
extraPackages = [
|
||||
pkgs.nodejs
|
||||
# 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"
|
||||
];
|
||||
};
|
||||
}
|
||||
);
|
||||
# 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 = {
|
||||
"openrouter" = {
|
||||
"compat" = {
|
||||
"sendSessionAffinityHeaders" = true;
|
||||
};
|
||||
};
|
||||
"providers" = {
|
||||
"opencode-go" = {
|
||||
# "type" = "api_key";
|
||||
# "apiKey" = "$OPENCODE_GO_API_KEY";
|
||||
"compat" = {
|
||||
"supportsLongCacheRetention" = true;
|
||||
"sendSessionAffinityHeaders" = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
"litellm" = {
|
||||
"providers" = {
|
||||
"litellm" = {
|
||||
"displayName" = "scuggo";
|
||||
"baseUrl" = "https://9f5db439.fwds.scug.io";
|
||||
"baseUrl" = "https://ai-proxy.fwds.scug.io";
|
||||
"apiKey" = "$SCUG_IO_API_KEY";
|
||||
"compat" = {
|
||||
"sendSessionAffinityHeaders" = true;
|
||||
@@ -83,6 +118,7 @@
|
||||
"mcp" = {
|
||||
"enabled" = true;
|
||||
};
|
||||
"uiMode" = "fullscreen";
|
||||
"showCacheMissNotices" = true;
|
||||
"vstack" = {
|
||||
"extensionManager" = {
|
||||
@@ -110,7 +146,7 @@
|
||||
# "npm:pi-web-access"
|
||||
# "npm:@gotgenes/pi-permission-system"
|
||||
"npm:@vanillagreen/pi-extension-manager"
|
||||
"npm:@vanillagreen/pi-qol"
|
||||
# "npm:@vanillagreen/pi-qol"
|
||||
"npm:pi-vitals"
|
||||
"npm:pi-spark"
|
||||
"npm:@zhushanwen/pi-context-engineering"
|
||||
@@ -251,6 +287,28 @@
|
||||
};
|
||||
};
|
||||
};
|
||||
home.file.".pi/agent/auth.json" = {
|
||||
text = builtins.toJSON {
|
||||
"opencode-go" = {
|
||||
"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;
|
||||
# sendSessionAffinityHeaders = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
# pi-spark config
|
||||
home.file.".pi/agent/spark.json" = {
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
homeManager = {
|
||||
services.dunst = {
|
||||
enable = true;
|
||||
# systemd.enable = true;
|
||||
settings = {
|
||||
global = {
|
||||
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" = {
|
||||
source = pkgs.writeText "hyprland.lua" hlBindCode;
|
||||
};
|
||||
|
||||
@@ -3,56 +3,62 @@
|
||||
inputs,
|
||||
lib,
|
||||
...
|
||||
}: {
|
||||
}:
|
||||
{
|
||||
flake-file.inputs = {
|
||||
hyprland.url = "github:hyprwm/Hyprland";
|
||||
};
|
||||
modules.hyprland = {
|
||||
nixos = {pkgs, ...}: {
|
||||
imports = [inputs.hyprland.nixosModules.default];
|
||||
environment.systemPackages = with pkgs; [
|
||||
wayfreeze
|
||||
grim
|
||||
slurp
|
||||
wlogout
|
||||
ranger
|
||||
];
|
||||
programs.xwayland.enable = true;
|
||||
programs.hyprland = {
|
||||
enable = true;
|
||||
# withUWSM = true;
|
||||
# set the flake package
|
||||
package = inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.hyprland;
|
||||
# make sure to also set the portal package, so that they are in sync
|
||||
portalPackage =
|
||||
inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.xdg-desktop-portal-hyprland;
|
||||
};
|
||||
# gtk.enable = lib.mkForce false;
|
||||
xdg.portal = {
|
||||
enable = true;
|
||||
extraPortals = [
|
||||
inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.xdg-desktop-portal-hyprland
|
||||
nixos =
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
imports = [ inputs.hyprland.nixosModules.default ];
|
||||
environment.systemPackages = with pkgs; [
|
||||
wayfreeze
|
||||
grim
|
||||
slurp
|
||||
wlogout
|
||||
ranger
|
||||
];
|
||||
};
|
||||
environment.sessionVariables.NIXOS_OZONE_WL = "1";
|
||||
hardware.graphics = {
|
||||
# package = pkgs-unstable.mesa;
|
||||
programs.xwayland.enable = true;
|
||||
programs.hyprland = {
|
||||
enable = true;
|
||||
# withUWSM = true;
|
||||
# set the flake package
|
||||
package = inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.hyprland;
|
||||
# make sure to also set the portal package, so that they are in sync
|
||||
portalPackage =
|
||||
inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.xdg-desktop-portal-hyprland;
|
||||
};
|
||||
# gtk.enable = lib.mkForce false;
|
||||
xdg.portal = {
|
||||
enable = true;
|
||||
extraPortals = [
|
||||
inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.xdg-desktop-portal-hyprland
|
||||
];
|
||||
};
|
||||
environment.sessionVariables.NIXOS_OZONE_WL = "1";
|
||||
hardware.graphics = {
|
||||
# package = pkgs-unstable.mesa;
|
||||
|
||||
# if you also want 32-bit support (e.g for Steam)
|
||||
# enable32Bit = true;
|
||||
# package32 = pkgs-unstable.pkgsi686Linux.mesa;
|
||||
# if you also want 32-bit support (e.g for Steam)
|
||||
# enable32Bit = true;
|
||||
# package32 = pkgs-unstable.pkgsi686Linux.mesa;
|
||||
};
|
||||
};
|
||||
};
|
||||
homeManager = {pkgs, ...}: {
|
||||
gtk = {
|
||||
enable = true;
|
||||
homeManager =
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
gtk = {
|
||||
enable = true;
|
||||
};
|
||||
# backupFileExtension = "backupHM";
|
||||
wayland.windowManager.hyprland = {
|
||||
enable = true;
|
||||
systemd.enable = true;
|
||||
systemd.variables = [ "--all" ];
|
||||
configType = "lua";
|
||||
};
|
||||
};
|
||||
# backupFileExtension = "backupHM";
|
||||
wayland.windowManager.hyprland = {
|
||||
enable = true;
|
||||
systemd.variables = ["--all"];
|
||||
configType = "lua";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
@@ -2,7 +2,8 @@
|
||||
den,
|
||||
modules,
|
||||
...
|
||||
}: {
|
||||
}:
|
||||
{
|
||||
modules.kitty = {
|
||||
homeManager = {
|
||||
programs.kitty = {
|
||||
@@ -16,6 +17,9 @@
|
||||
background_opacity = 0.6;
|
||||
cursor_trail = 1;
|
||||
auto_reload_config = -1;
|
||||
input_delay = 1;
|
||||
repaint_delay = 2;
|
||||
wayland_enable_ime = "no";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
@@ -11,12 +11,17 @@
|
||||
{
|
||||
programs.quickshell = {
|
||||
systemd.enable = true;
|
||||
systemd.target = "hyprland-session.target";
|
||||
enable = true;
|
||||
activeConfig = "main";
|
||||
configs = {
|
||||
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,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]
|
||||
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]
|
||||
opencode-go-zen-key: ENC[AES256_GCM,data:fwgV/QK+4tpizC6J3evbGxD57BQCWn5Eyex7iIeNYCQHk6ZD8eTukqhUbLcfXyO4RQot3B1B2xbQVVBsuOWWcQYQKA==,iv:aKwQM8d0gP+MyuqWFk2VfOWDgKPcE/HAvL0I0r6o1nU=,tag:/AeSgscy0mxUMwoP8LaCXg==,type:str]
|
||||
sops:
|
||||
age:
|
||||
- enc: |
|
||||
@@ -69,7 +70,7 @@ sops:
|
||||
61QsSqCuJyEwSPpOzeWa5NChcCjitOUG1jEMsSHlpIslKA1P7g/P9g==
|
||||
-----END AGE ENCRYPTED FILE-----
|
||||
recipient: age1kc0xu0ue2nrrr7w4gam7wlzackv8jv243rxwwndgxjqklgtnp5csdtpgzp
|
||||
lastmodified: "2026-07-22T22:45:05Z"
|
||||
mac: ENC[AES256_GCM,data:jfbsnWcZ6yJSUbRn8VbONhj3oin1+DsHzJ590BbdPtikZwjD/0f06NQ86b0DI5/M+LKP4Dy5Cyf7xyJ99iWuOKbF9y12qK17IqMaNZCmPkw8Y+v7q38ESsW/Iizr3hfQ2L2GwJNTWsoifCeQphxGby7s2lKjMPYGKhYrgicZ5Fs=,iv:bbL+59d0S1fdfDInLS5z9Vx+AVW6nb0z2BNgZ+5PbUM=,tag:jJYnLsORyEuClRm/t4mwcA==,type:str]
|
||||
lastmodified: "2026-08-01T18:33:13Z"
|
||||
mac: ENC[AES256_GCM,data:sTTpvCTBPsY4OABqIvgujUT2+Yye+H44mxN3G3ybhoj05omgFajYN86sc3zL9vbiTl7SNxCWMkGCerCvS4QrtRZ0vRTNuYNkFPNHDKniSybbxKzjHqyXWGCOoNYqHW211ktB9vmiXQd+zYart87kUU6d6p2FrVDBLU03eQwJO6k=,iv:8zT8W34A8f/EXRYxFeK2PC2Ko6UrjFrPL5+lwNXpb4Q=,tag:WugeYbmrVcUZ9xVC+r3c7w==,type:str]
|
||||
unencrypted_suffix: _unencrypted
|
||||
version: 3.13.2
|
||||
version: 3.13.3
|
||||
|
||||
@@ -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
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user