amaan can't into kernel
do 400 pushups per cache miss idiot
This commit is contained in:
parent
848ed62c5d
commit
4921973b9a
34 changed files with 3240 additions and 605 deletions
|
|
@ -3,24 +3,13 @@
|
|||
lib,
|
||||
getPkgs,
|
||||
config,
|
||||
mkWrappers,
|
||||
...
|
||||
}:
|
||||
let
|
||||
pal = config.rice.palette.hex;
|
||||
ui = config.rice.roles pal;
|
||||
|
||||
wrap =
|
||||
name: pkg: args:
|
||||
pkgs.symlinkJoin {
|
||||
inherit name;
|
||||
paths = [ pkg ];
|
||||
nativeBuildInputs = [ pkgs.makeWrapper ];
|
||||
postBuild = "wrapProgram $out/bin/${name} ${args}";
|
||||
};
|
||||
|
||||
wrapXdg =
|
||||
name: pkg: configDir:
|
||||
wrap name pkg ''--set XDG_CONFIG_HOME "${configDir}"'';
|
||||
inherit (mkWrappers pkgs) wrap wrapXdg;
|
||||
|
||||
lazygitConfig = pkgs.writeText "lazygit-config.yml" ''
|
||||
gui:
|
||||
|
|
@ -68,55 +57,12 @@ let
|
|||
theme "nix-rice"
|
||||
'';
|
||||
|
||||
btopConfig = pkgs.writeText "btop.conf" ''
|
||||
color_theme = "nix-rice"
|
||||
'';
|
||||
btopThemeDir = pkgs.runCommand "btop-themes" { } ''
|
||||
mkdir -p $out
|
||||
cp ${pkgs.writeText "nix-rice.theme" ''
|
||||
theme[main_bg]="${ui.bg}"
|
||||
theme[main_fg]="${ui.fg}"
|
||||
theme[title]="${ui.fg}"
|
||||
theme[hi_fg]="${ui.accent}"
|
||||
theme[selected_bg]="${ui.surface}"
|
||||
theme[selected_fg]="${ui.fg}"
|
||||
theme[inactive_fg]="${ui.muted}"
|
||||
theme[graph_text]="${ui.fg}"
|
||||
theme[meter_bg]="${ui.overlay}"
|
||||
theme[proc_misc]="${ui.primary}"
|
||||
theme[cpu_box]="${ui.primary}"
|
||||
theme[mem_box]="${ui.accent}"
|
||||
theme[net_box]="${pal.normal.green}"
|
||||
theme[proc_box]="${pal.normal.magenta}"
|
||||
theme[div_line]="${ui.overlay}"
|
||||
theme[temp_start]="${pal.normal.green}"
|
||||
theme[temp_mid]="${ui.highlight}"
|
||||
theme[temp_end]="${ui.error}"
|
||||
theme[cpu_start]="${ui.primary}"
|
||||
theme[cpu_mid]="${ui.accent}"
|
||||
theme[cpu_end]="${ui.highlight}"
|
||||
theme[free_start]="${pal.normal.green}"
|
||||
theme[free_mid]="${ui.accent}"
|
||||
theme[free_end]="${ui.primary}"
|
||||
theme[cached_start]="${ui.primary}"
|
||||
theme[cached_mid]="${ui.accent}"
|
||||
theme[cached_end]="${pal.normal.green}"
|
||||
theme[available_start]="${pal.normal.green}"
|
||||
theme[available_mid]="${ui.accent}"
|
||||
theme[available_end]="${ui.highlight}"
|
||||
theme[used_start]="${ui.highlight}"
|
||||
theme[used_mid]="${ui.error}"
|
||||
theme[used_end]="${pal.bright.red}"
|
||||
theme[download_start]="${pal.normal.green}"
|
||||
theme[download_mid]="${ui.accent}"
|
||||
theme[download_end]="${ui.primary}"
|
||||
theme[upload_start]="${ui.highlight}"
|
||||
theme[upload_mid]="${pal.bright.red}"
|
||||
theme[upload_end]="${ui.error}"
|
||||
theme[process_start]="${ui.primary}"
|
||||
theme[process_mid]="${ui.accent}"
|
||||
theme[process_end]="${pal.normal.green}"
|
||||
''} $out/nix-rice.theme
|
||||
btopConfigDir = pkgs.runCommand "btop-xdg" { } ''
|
||||
mkdir -p $out/btop
|
||||
cp ${pkgs.writeText "btop.conf" ''
|
||||
color_theme = "TTY"
|
||||
update_ms = 100
|
||||
''} $out/btop/btop.conf
|
||||
'';
|
||||
in
|
||||
{
|
||||
|
|
@ -124,16 +70,26 @@ in
|
|||
inherit (pkgs)
|
||||
curl
|
||||
eza
|
||||
git
|
||||
gitMinimal
|
||||
ripgrep
|
||||
fd
|
||||
ouch
|
||||
btop
|
||||
bat
|
||||
;
|
||||
lazygit = wrap "lazygit" pkgs.lazygit ''--add-flags "--use-config-file=${lazygitConfig}"'';
|
||||
zellij = wrap "zellij" pkgs.zellij ''--add-flags "--config-dir ${zellijConfig}"'';
|
||||
# btop = wrap "btop" pkgs.btop ''--add-flags "--config ${btopConfig} --themes-dir ${btopThemeDir}"'';
|
||||
lazygit = wrap {
|
||||
name = "lazygit";
|
||||
pkg = pkgs.lazygit;
|
||||
args = [ "--use-config-file=${lazygitConfig}" ];
|
||||
};
|
||||
zellij = wrap {
|
||||
name = "zellij";
|
||||
pkg = pkgs.zellij;
|
||||
args = [ "--config-dir ${zellijConfig}" ];
|
||||
envs = {
|
||||
SHELL = "${config.users.defaultUserShell}/bin/nu";
|
||||
};
|
||||
};
|
||||
btop = wrapXdg "btop" pkgs.btop btopConfigDir;
|
||||
};
|
||||
|
||||
environment.variables.BAT_THEME = "ansi";
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
{ lib, ... }:
|
||||
{ inputs, lib, ... }:
|
||||
{
|
||||
imports = [ inputs.nixos-core.nixosModules.default ];
|
||||
system.activationScripts.users = lib.mkForce "";
|
||||
system.disableInstallerTools = true;
|
||||
programs.less.lessopen = null;
|
||||
boot.enableContainers = false;
|
||||
|
|
@ -7,4 +9,30 @@
|
|||
environment.defaultPackages = lib.mkDefault [ ];
|
||||
documentation.info.enable = false;
|
||||
system.tools.nixos-option.enable = false;
|
||||
system.tools.nixos-generate-config.enable = lib.mkDefault false;
|
||||
system.nixos-core.enable = true;
|
||||
# system.nixos-core.components.userGroupsActivation.enable = false;
|
||||
nixpkgs.overlays = [
|
||||
(final: prev: {
|
||||
xdg-utils = final.symlinkJoin {
|
||||
name = "xdg-utils-handlr-shim-${prev.handlr-regex.version or "0"}";
|
||||
paths = [
|
||||
final.xdg-user-dirs
|
||||
(final.writeShellScriptBin "xdg-open" ''exec ${final.handlr-regex}/bin/handlr open "$@"'')
|
||||
(final.writeShellScriptBin "xdg-mime" ''exec ${final.handlr-regex}/bin/handlr mime "$@"'')
|
||||
(final.writeShellScriptBin "xdg-settings" ''exec ${final.handlr-regex}/bin/handlr get "$@"'')
|
||||
(final.writeShellScriptBin "xdg-email" ''exec ${final.handlr-regex}/bin/handlr open "mailto:$*"'')
|
||||
|
||||
(final.writeShellScriptBin "xdg-desktop-menu" "exit 0")
|
||||
(final.writeShellScriptBin "xdg-desktop-icon" "exit 0")
|
||||
(final.writeShellScriptBin "xdg-icon-resource" "exit 0")
|
||||
(final.writeShellScriptBin "xdg-screensaver" "exit 0")
|
||||
];
|
||||
meta = {
|
||||
description = "xdg-utils shim backed by handlr-regex (perl-free)";
|
||||
mainProgram = "xdg-open";
|
||||
};
|
||||
};
|
||||
})
|
||||
];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,8 +6,10 @@
|
|||
man-pages-posix
|
||||
;
|
||||
};
|
||||
|
||||
documentation.dev.enable = true;
|
||||
documentation.man.enable = true;
|
||||
documentation.enable = true;
|
||||
documentation = {
|
||||
dev.enable = false;
|
||||
man.enable = true;
|
||||
enable = true;
|
||||
nixos.enable = false;
|
||||
};
|
||||
}
|
||||
|
|
|
|||
164
common/mime-types.nix
Normal file
164
common/mime-types.nix
Normal file
|
|
@ -0,0 +1,164 @@
|
|||
{
|
||||
config,
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
let
|
||||
# Most packages use pname as their desktop ID; override the exceptions
|
||||
deskOf = pkg: "${pkg.pname or pkg.name}.desktop";
|
||||
desktopIds = {
|
||||
pdfReader = "org.pwmt.zathura.desktop";
|
||||
musicPlayer = "org.strawberrymusicplayer.strawberry.desktop";
|
||||
ebookReader = "com.github.johnfactotum.Foliate.desktop";
|
||||
officeSuite = {
|
||||
writer = "libreoffice-writer.desktop";
|
||||
calc = "libreoffice-calc.desktop";
|
||||
impress = "libreoffice-impress.desktop";
|
||||
draw = "libreoffice-draw.desktop";
|
||||
};
|
||||
};
|
||||
desk = appName: desktopIds.${appName} or (deskOf config.apps.${appName});
|
||||
in
|
||||
{
|
||||
xdg.mime.defaultApplications = {
|
||||
# web
|
||||
"text/html" = desk "browser";
|
||||
"application/xhtml+xml" = desk "browser";
|
||||
"x-scheme-handler/http" = desk "browser";
|
||||
"x-scheme-handler/https" = desk "browser";
|
||||
"x-scheme-handler/ftp" = desk "browser";
|
||||
"x-scheme-handler/about" = desk "browser";
|
||||
"x-scheme-handler/unknown" = desk "browser";
|
||||
|
||||
# mail
|
||||
"x-scheme-handler/mailto" = desk "mailClient";
|
||||
"message/rfc822" = desk "mailClient";
|
||||
"application/mbox" = desk "mailClient";
|
||||
|
||||
# text / code
|
||||
"text/plain" = desk "editor";
|
||||
"text/markdown" = desk "editor";
|
||||
"application/json" = desk "editor";
|
||||
"application/xml" = desk "editor";
|
||||
"text/xml" = desk "editor";
|
||||
"application/javascript" = desk "editor";
|
||||
"text/javascript" = desk "editor";
|
||||
"text/x-python" = desk "editor";
|
||||
"text/x-script.python" = desk "editor";
|
||||
"text/x-shellscript" = desk "editor";
|
||||
"text/x-csrc" = desk "editor";
|
||||
"text/x-chdr" = desk "editor";
|
||||
"text/x-c++src" = desk "editor";
|
||||
"text/x-c++hdr" = desk "editor";
|
||||
"text/x-rust" = desk "editor";
|
||||
"text/x-go" = desk "editor";
|
||||
"text/x-java" = desk "editor";
|
||||
"text/x-haskell" = desk "editor";
|
||||
"text/x-nix" = desk "editor";
|
||||
"text/x-lua" = desk "editor";
|
||||
"text/x-toml" = desk "editor";
|
||||
"text/x-yaml" = desk "editor";
|
||||
"text/yaml" = desk "editor";
|
||||
|
||||
# directories
|
||||
"inode/directory" = desk "fm";
|
||||
|
||||
# archives
|
||||
"application/zip" = desk "archive";
|
||||
"application/x-zip-compressed" = desk "archive";
|
||||
"application/x-tar" = desk "archive";
|
||||
"application/gzip" = desk "archive";
|
||||
"application/x-gzip" = desk "archive";
|
||||
"application/x-bzip2" = desk "archive";
|
||||
"application/x-xz" = desk "archive";
|
||||
"application/x-7z-compressed" = desk "archive";
|
||||
"application/x-rar" = desk "archive";
|
||||
"application/x-rar-compressed" = desk "archive";
|
||||
"application/x-lzip" = desk "archive";
|
||||
"application/x-lzma" = desk "archive";
|
||||
"application/x-zstd" = desk "archive";
|
||||
"application/zstd" = desk "archive";
|
||||
|
||||
# pdf
|
||||
"application/pdf" = desk "pdfReader";
|
||||
"application/x-pdf" = desk "pdfReader";
|
||||
|
||||
# images
|
||||
"image/jpeg" = desk "imageViewer";
|
||||
"image/png" = desk "imageViewer";
|
||||
"image/gif" = desk "imageViewer";
|
||||
"image/webp" = desk "imageViewer";
|
||||
"image/avif" = desk "imageViewer";
|
||||
"image/jxl" = desk "imageViewer";
|
||||
"image/bmp" = desk "imageViewer";
|
||||
"image/x-bmp" = desk "imageViewer";
|
||||
"image/tiff" = desk "imageViewer";
|
||||
"image/x-tiff" = desk "imageViewer";
|
||||
"image/svg+xml" = desk "imageViewer";
|
||||
"image/x-portable-bitmap" = desk "imageViewer";
|
||||
"image/x-portable-pixmap" = desk "imageViewer";
|
||||
"image/vnd.microsoft.icon" = desk "imageViewer";
|
||||
"image/x-icon" = desk "imageViewer";
|
||||
|
||||
# video
|
||||
"video/mp4" = desk "videoPlayer";
|
||||
"video/mpeg" = desk "videoPlayer";
|
||||
"video/x-matroska" = desk "videoPlayer";
|
||||
"video/webm" = desk "videoPlayer";
|
||||
"video/x-msvideo" = desk "videoPlayer";
|
||||
"video/vnd.avi" = desk "videoPlayer";
|
||||
"video/quicktime" = desk "videoPlayer";
|
||||
"video/x-flv" = desk "videoPlayer";
|
||||
"video/3gpp" = desk "videoPlayer";
|
||||
"video/ogg" = desk "videoPlayer";
|
||||
"video/x-ogm+ogg" = desk "videoPlayer";
|
||||
"video/x-ms-wmv" = desk "videoPlayer";
|
||||
|
||||
# audio
|
||||
"audio/mpeg" = desk "musicPlayer";
|
||||
"audio/mp3" = desk "musicPlayer";
|
||||
"audio/ogg" = desk "musicPlayer";
|
||||
"audio/flac" = desk "musicPlayer";
|
||||
"audio/x-flac" = desk "musicPlayer";
|
||||
"audio/wav" = desk "musicPlayer";
|
||||
"audio/x-wav" = desk "musicPlayer";
|
||||
"audio/aac" = desk "musicPlayer";
|
||||
"audio/mp4" = desk "musicPlayer";
|
||||
"audio/x-m4a" = desk "musicPlayer";
|
||||
"audio/vorbis" = desk "musicPlayer";
|
||||
"audio/x-vorbis+ogg" = desk "musicPlayer";
|
||||
"audio/opus" = desk "musicPlayer";
|
||||
"audio/x-opus+ogg" = desk "musicPlayer";
|
||||
"audio/x-ape" = desk "musicPlayer";
|
||||
"audio/x-wavpack" = desk "musicPlayer";
|
||||
"audio/aiff" = desk "musicPlayer";
|
||||
"audio/x-aiff" = desk "musicPlayer";
|
||||
|
||||
# ebooks
|
||||
"application/epub+zip" = desk "ebookReader";
|
||||
"application/x-mobipocket-ebook" = desk "ebookReader";
|
||||
"application/x-fictionbook+xml" = desk "ebookReader";
|
||||
"application/x-fictionbook" = desk "ebookReader";
|
||||
"application/x-cbz" = desk "ebookReader";
|
||||
"application/x-cbr" = desk "ebookReader";
|
||||
"image/vnd.djvu" = desk "ebookReader";
|
||||
"image/x-djvu" = desk "ebookReader";
|
||||
|
||||
# office — open document
|
||||
"application/vnd.oasis.opendocument.text" = desktopIds.officeSuite.writer;
|
||||
"application/vnd.oasis.opendocument.text-template" = desktopIds.officeSuite.writer;
|
||||
"application/vnd.oasis.opendocument.spreadsheet" = desktopIds.officeSuite.calc;
|
||||
"application/vnd.oasis.opendocument.spreadsheet-template" = desktopIds.officeSuite.calc;
|
||||
"application/vnd.oasis.opendocument.presentation" = desktopIds.officeSuite.impress;
|
||||
"application/vnd.oasis.opendocument.presentation-template" = desktopIds.officeSuite.impress;
|
||||
"application/vnd.oasis.opendocument.graphics" = desktopIds.officeSuite.draw;
|
||||
# office — microsoft
|
||||
"application/msword" = desktopIds.officeSuite.writer;
|
||||
"application/vnd.openxmlformats-officedocument.wordprocessingml.document" = desktopIds.officeSuite.writer;
|
||||
"application/vnd.ms-excel" = desktopIds.officeSuite.calc;
|
||||
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" = desktopIds.officeSuite.calc;
|
||||
"text/csv" = desktopIds.officeSuite.calc;
|
||||
"application/vnd.ms-powerpoint" = desktopIds.officeSuite.impress;
|
||||
"application/vnd.openxmlformats-officedocument.presentationml.presentation" = desktopIds.officeSuite.impress;
|
||||
};
|
||||
}
|
||||
|
|
@ -1,4 +1,5 @@
|
|||
{
|
||||
pkgs,
|
||||
inputs,
|
||||
...
|
||||
}:
|
||||
|
|
@ -6,12 +7,20 @@
|
|||
imports = [
|
||||
inputs.angrr.nixosModules.angrr
|
||||
];
|
||||
nix = {
|
||||
package = pkgs.nixVersions.nix_2_31;
|
||||
optimise = {
|
||||
automatic = true;
|
||||
dates = "weekly";
|
||||
persistent = true;
|
||||
|
||||
nix.gc = {
|
||||
automatic = true;
|
||||
dates = "weekly";
|
||||
persistent = true;
|
||||
options = "--delete-older-than 14d";
|
||||
};
|
||||
gc = {
|
||||
automatic = true;
|
||||
dates = "weekly";
|
||||
persistent = true;
|
||||
options = "--delete-older-than 14d";
|
||||
};
|
||||
};
|
||||
|
||||
services.angrr = {
|
||||
|
|
|
|||
|
|
@ -1,13 +1,14 @@
|
|||
{
|
||||
inputs,
|
||||
getFlakePkg,
|
||||
config,
|
||||
...
|
||||
}:
|
||||
{
|
||||
nix.settings.plugin-files = [
|
||||
"${getFlakePkg inputs.nix-scope-plugin}/lib/nix/plugins/libnix-scope-plugin.so"
|
||||
imports = [
|
||||
inputs.nix-shorturl-plugin.nixosModules.default
|
||||
inputs.nix-scope-plugin.nixosModules.default
|
||||
];
|
||||
imports = [ inputs.nix-shorturl-plugin.nixosModules.default ];
|
||||
nix.shorturls = {
|
||||
enable = true;
|
||||
schemes = {
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ scope "nix.settings" {
|
|||
# "https://cache.atagen.co"
|
||||
# "https://cache.privatevoid.net"
|
||||
"https://cache.flox.dev"
|
||||
# "https://cache.amaanq.com"
|
||||
"https://cache.amaanq.com"
|
||||
"https://cache.nixos-cuda.org"
|
||||
"https://niri.cachix.org"
|
||||
];
|
||||
|
|
@ -20,7 +20,7 @@ scope "nix.settings" {
|
|||
# "cache.atagen.co:SOUkNQxuu/eQ7FcI8nlUe7FpV27e7YjQlDQdn8HTUnw="
|
||||
# "cache.privatevoid.net:SErQ8bvNWANeAvtsOESUwVYr2VJynfuc9JRwlzTTkVg="
|
||||
"flox-cache-public-1:7F4OyH7ZCnFhcze3fJdfyXYLQw/aV7GEed86nQ7IsOs="
|
||||
# "cache.amaanq.com:H0iXsEEFsvUNtWb5v9V8Kss+L4F/tnXwDHXcY+xbmKk="
|
||||
"cache.amaanq.com:H0iXsEEFsvUNtWb5v9V8Kss+L4F/tnXwDHXcY+xbmKk="
|
||||
"cache.nixos-cuda.org:74DUi4Ye579gUqzH4ziL9IyiJBlDpMRn9MBN8oNan9M="
|
||||
"niri.cachix.org-1:Wv0OmO7PsuocRKzfDoJ3mulSl7Z6oezYhGhR+3W2964="
|
||||
];
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
{ lib, mainUser, ... }:
|
||||
{
|
||||
services.userborn.enable = lib.mkDefault true;
|
||||
nix.settings.trusted-users = [ mainUser ];
|
||||
users.users.${mainUser} = {
|
||||
isNormalUser = true;
|
||||
|
|
|
|||
424
flake.lock
generated
424
flake.lock
generated
|
|
@ -25,11 +25,11 @@
|
|||
"treefmt-nix": "treefmt-nix"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1774023259,
|
||||
"narHash": "sha256-08QDVfScqZOrBhNdm8VUy1nIBnNgsnUhf7vHKKVdelw=",
|
||||
"lastModified": 1776730547,
|
||||
"narHash": "sha256-X0ZdetAsg4TaoKm6wGyzaZ/X2TlQFWQLHAUaMWDr+7A=",
|
||||
"owner": "linyinfeng",
|
||||
"repo": "angrr",
|
||||
"rev": "9e327b2fa6e548ea9bebdabb667a09ce682aef0c",
|
||||
"rev": "bb5cdadcce3e4406fbf79e7f3bcfea59794075cf",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -54,12 +54,15 @@
|
|||
}
|
||||
},
|
||||
"bunker": {
|
||||
"inputs": {
|
||||
"nixpkgs": "nixpkgs_2"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1774155802,
|
||||
"narHash": "sha256-W8QitI0AoI9CgRzNKoAwrGQTekhF45a0G9YeG3JLXck=",
|
||||
"lastModified": 1777267575,
|
||||
"narHash": "sha256-58VFXbVR76Lk96qIXU4zkyQgBUVm25kShazR5uSfQgQ=",
|
||||
"owner": "amaanq",
|
||||
"repo": "bunker-patches",
|
||||
"rev": "1d6c5b0102797e6281e24311181781323b64c01d",
|
||||
"rev": "27bf12d2e5e17d8932d9c043a605d8733a167b6c",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -70,11 +73,11 @@
|
|||
},
|
||||
"crane": {
|
||||
"locked": {
|
||||
"lastModified": 1766194365,
|
||||
"narHash": "sha256-4AFsUZ0kl6MXSm4BaQgItD0VGlEKR3iq7gIaL7TjBvc=",
|
||||
"lastModified": 1775839657,
|
||||
"narHash": "sha256-SPm9ck7jh3Un9nwPuMGbRU04UroFmOHjLP56T10MOeM=",
|
||||
"owner": "ipetkov",
|
||||
"repo": "crane",
|
||||
"rev": "7d8ec2c71771937ab99790b45e6d9b93d15d9379",
|
||||
"rev": "7cf72d978629469c4bd4206b95c402514c1f6000",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -83,25 +86,19 @@
|
|||
"type": "github"
|
||||
}
|
||||
},
|
||||
"culr": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
],
|
||||
"systems": "systems"
|
||||
},
|
||||
"crane_2": {
|
||||
"locked": {
|
||||
"lastModified": 1769663733,
|
||||
"narHash": "sha256-wXko1Dptg1eof0MQMy/3oXt2QLjUVaQVSY5nIOcOiks=",
|
||||
"ref": "refs/heads/master",
|
||||
"rev": "bf1e3adeeba5534db64d8ba6b7aa3abb036c2c01",
|
||||
"revCount": 71,
|
||||
"type": "git",
|
||||
"url": "https://git.lobotomise.me/atagen/culr"
|
||||
"lastModified": 1776635034,
|
||||
"narHash": "sha256-OEOJrT3ZfwbChzODfIH4GzlNTtOFuZFWPtW7jIeR8xU=",
|
||||
"owner": "ipetkov",
|
||||
"repo": "crane",
|
||||
"rev": "dc7496d8ea6e526b1254b55d09b966e94673750f",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"type": "git",
|
||||
"url": "https://git.lobotomise.me/atagen/culr"
|
||||
"owner": "ipetkov",
|
||||
"repo": "crane",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"fenix": {
|
||||
|
|
@ -167,11 +164,11 @@
|
|||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1772408722,
|
||||
"narHash": "sha256-rHuJtdcOjK7rAHpHphUb1iCvgkU3GpfvicLMwwnfMT0=",
|
||||
"lastModified": 1775087534,
|
||||
"narHash": "sha256-91qqW8lhL7TLwgQWijoGBbiD4t7/q75KTi8NxjVmSmA=",
|
||||
"owner": "hercules-ci",
|
||||
"repo": "flake-parts",
|
||||
"rev": "f20dc5d9b8027381c474144ecabc9034d6a839a3",
|
||||
"rev": "3107b77cd68437b9a76194f0f7f9c55f2329ca5b",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -201,24 +198,6 @@
|
|||
"type": "github"
|
||||
}
|
||||
},
|
||||
"flake-parts_3": {
|
||||
"inputs": {
|
||||
"nixpkgs-lib": "nixpkgs-lib_2"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1772408722,
|
||||
"narHash": "sha256-rHuJtdcOjK7rAHpHphUb1iCvgkU3GpfvicLMwwnfMT0=",
|
||||
"owner": "hercules-ci",
|
||||
"repo": "flake-parts",
|
||||
"rev": "f20dc5d9b8027381c474144ecabc9034d6a839a3",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "hercules-ci",
|
||||
"repo": "flake-parts",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"git-hooks-nix": {
|
||||
"inputs": {
|
||||
"flake-compat": "flake-compat_2",
|
||||
|
|
@ -266,14 +245,14 @@
|
|||
},
|
||||
"helium": {
|
||||
"inputs": {
|
||||
"nixpkgs": "nixpkgs_2"
|
||||
"nixpkgs": "nixpkgs_3"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1774471299,
|
||||
"narHash": "sha256-2c5vpl2WUUvXR4VPMjzKnGxdnVfkjblmd06Le0s/pMI=",
|
||||
"lastModified": 1776646564,
|
||||
"narHash": "sha256-/v9Hy6wnIu4RIEOkzL6Wy1WpBDkst9GMn+hXJLC2C7U=",
|
||||
"owner": "amaanq",
|
||||
"repo": "helium-flake",
|
||||
"rev": "9dce150ececbf2996d356b96d90fe8468cca8871",
|
||||
"rev": "a7c9452dbc7977c35409aeff4eb71c8730e1e466",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -285,7 +264,7 @@
|
|||
"hudcore": {
|
||||
"inputs": {
|
||||
"nix-systems": "nix-systems",
|
||||
"nixpkgs": "nixpkgs_3"
|
||||
"nixpkgs": "nixpkgs_4"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1774692528,
|
||||
|
|
@ -304,6 +283,7 @@
|
|||
"inshellah": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"bunker",
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
|
|
@ -341,6 +321,7 @@
|
|||
"inputs": {
|
||||
"nix-systems": "nix-systems_2",
|
||||
"nixpkgs": [
|
||||
"bunker",
|
||||
"nixpkgs"
|
||||
],
|
||||
"unf": "unf"
|
||||
|
|
@ -362,7 +343,7 @@
|
|||
"naersk": {
|
||||
"inputs": {
|
||||
"fenix": "fenix",
|
||||
"nixpkgs": "nixpkgs_7"
|
||||
"nixpkgs": "nixpkgs_8"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1768908532,
|
||||
|
|
@ -380,7 +361,7 @@
|
|||
},
|
||||
"ndg": {
|
||||
"inputs": {
|
||||
"nixpkgs": "nixpkgs_4"
|
||||
"nixpkgs": "nixpkgs_5"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1773478949,
|
||||
|
|
@ -399,6 +380,7 @@
|
|||
"nil": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"bunker",
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
|
|
@ -420,17 +402,17 @@
|
|||
"inputs": {
|
||||
"niri-stable": "niri-stable",
|
||||
"niri-unstable": "niri-unstable",
|
||||
"nixpkgs": "nixpkgs_6",
|
||||
"nixpkgs": "nixpkgs_7",
|
||||
"nixpkgs-stable": "nixpkgs-stable",
|
||||
"xwayland-satellite-stable": "xwayland-satellite-stable",
|
||||
"xwayland-satellite-unstable": "xwayland-satellite-unstable"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1774539534,
|
||||
"narHash": "sha256-kRKybUNiXTivTZSUnqwXHCY4GRD3e+Nu+1Mb8jf2HCI=",
|
||||
"lastModified": 1776879043,
|
||||
"narHash": "sha256-M9RjuowtoqQbFRdQAm2P6GjFwgHjRcnWYcB7ChSjDms=",
|
||||
"owner": "sodiboo",
|
||||
"repo": "niri-flake",
|
||||
"rev": "975e9c55001333df0ddab36d938372c14917998a",
|
||||
"rev": "535ebbe038039215a5d1c6c0c67f833409a5be96",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -476,9 +458,10 @@
|
|||
"naersk": "naersk",
|
||||
"niri": "niri_2",
|
||||
"nixpkgs": [
|
||||
"bunker",
|
||||
"nixpkgs"
|
||||
],
|
||||
"systems": "systems_2"
|
||||
"systems": "systems"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1772457471,
|
||||
|
|
@ -497,11 +480,11 @@
|
|||
"niri-unstable": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1773130184,
|
||||
"narHash": "sha256-3bwx4WqCB06yfQIGB+OgIckOkEDyKxiTD5pOo4Xz2rI=",
|
||||
"lastModified": 1776853441,
|
||||
"narHash": "sha256-mSxfoEs7DiDhMCBzprI/1K7UXzMISuGq0b7T06LVJXE=",
|
||||
"owner": "YaLTeR",
|
||||
"repo": "niri",
|
||||
"rev": "b07bde3ee82dd73115e6b949e4f3f63695da35ea",
|
||||
"rev": "74d2b18603366b98ec9045ecf4a632422f472365",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -534,11 +517,11 @@
|
|||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1773000227,
|
||||
"narHash": "sha256-zm3ftUQw0MPumYi91HovoGhgyZBlM4o3Zy0LhPNwzXE=",
|
||||
"lastModified": 1775037210,
|
||||
"narHash": "sha256-KM2WYj6EA7M/FVZVCl3rqWY+TFV5QzSyyGE2gQxeODU=",
|
||||
"owner": "nix-darwin",
|
||||
"repo": "nix-darwin",
|
||||
"rev": "da529ac9e46f25ed5616fd634079a5f3c579135f",
|
||||
"rev": "06648f4902343228ce2de79f291dd5a58ee12146",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -570,14 +553,14 @@
|
|||
},
|
||||
"nix-index-database": {
|
||||
"inputs": {
|
||||
"nixpkgs": "nixpkgs_8"
|
||||
"nixpkgs": "nixpkgs_9"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1774156144,
|
||||
"narHash": "sha256-gdYe9wTPl4ignDyXUl1LlICWj41+S0GB5lG1fKP17+A=",
|
||||
"lastModified": 1776829403,
|
||||
"narHash": "sha256-oHVcvP2Ahhj1KUsEzp+2BQF55/r5VSa3QxdPdwE1p00=",
|
||||
"owner": "Mic92",
|
||||
"repo": "nix-index-database",
|
||||
"rev": "55b588747fa3d7fc351a11831c4b874dab992862",
|
||||
"rev": "c43246d4e9e506178b69baed075d797ec2d873e2",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -591,9 +574,9 @@
|
|||
"flake-parts": "flake-parts_2",
|
||||
"git-hooks-nix": "git-hooks-nix",
|
||||
"kitty-themes-src": "kitty-themes-src",
|
||||
"nixpkgs": "nixpkgs_9",
|
||||
"nixpkgs": "nixpkgs_10",
|
||||
"nixpkgs-lib": "nixpkgs-lib",
|
||||
"systems": "systems_3"
|
||||
"systems": "systems_2"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1768817933,
|
||||
|
|
@ -612,15 +595,16 @@
|
|||
"nix-scope-plugin": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"bunker",
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1772011628,
|
||||
"narHash": "sha256-rhpsfs+/9zVr3HVqniwHyRSr92ga4J4mczFdHr1PN4s=",
|
||||
"lastModified": 1776947301,
|
||||
"narHash": "sha256-9jl+jsqh16I4hgjqV2YTuIQivjNBY9yW6Z2vhh9H1tk=",
|
||||
"ref": "refs/heads/main",
|
||||
"rev": "0e5218513ec92ee751e7a0dc854082106b77473c",
|
||||
"revCount": 1,
|
||||
"rev": "70b537244df3f83523e82629b3c8cc1b0dea9c55",
|
||||
"revCount": 4,
|
||||
"type": "git",
|
||||
"url": "https://git.lobotomise.me/atagen/nix-scope-plugin"
|
||||
},
|
||||
|
|
@ -632,15 +616,16 @@
|
|||
"nix-shorturl-plugin": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"bunker",
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1771986085,
|
||||
"narHash": "sha256-M7koECMnoi+7eI0yGj+Rxiu9gC/hdbJtwUR0AyTuFsY=",
|
||||
"lastModified": 1776947322,
|
||||
"narHash": "sha256-99Lh4XMng3ZbUFw2ISrS8ax/Q7E1fD8KGX4AA6odk48=",
|
||||
"ref": "refs/heads/main",
|
||||
"rev": "807c3b0094963bb78198643b62b78e2a0c916230",
|
||||
"revCount": 1,
|
||||
"rev": "7fbcc8744d68f74a7439957fbc1d7eb8668c024d",
|
||||
"revCount": 4,
|
||||
"type": "git",
|
||||
"url": "https://git.lobotomise.me/atagen/nix-shorturl-plugin"
|
||||
},
|
||||
|
|
@ -679,13 +664,34 @@
|
|||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixos-core": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"bunker",
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1776982365,
|
||||
"narHash": "sha256-3KuTDkbIZsv/luigCj4dHi+3a5dQRmDV8j1zYyE0A1Q=",
|
||||
"owner": "feel-co",
|
||||
"repo": "nixos-core",
|
||||
"rev": "c8297e1d2acadc1e690b7875f408a60c04c6d01a",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "feel-co",
|
||||
"repo": "nixos-core",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1773821835,
|
||||
"narHash": "sha256-TJ3lSQtW0E2JrznGVm8hOQGVpXjJyXY2guAxku2O9A4=",
|
||||
"lastModified": 1776548001,
|
||||
"narHash": "sha256-ZSK0NL4a1BwVbbTBoSnWgbJy9HeZFXLYQizjb2DPF24=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "b40629efe5d6ec48dd1efba650c797ddbd39ace0",
|
||||
"rev": "b12141ef619e0a9c1c84dc8c684040326f27cdcc",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -710,28 +716,13 @@
|
|||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs-lib_2": {
|
||||
"locked": {
|
||||
"lastModified": 1772328832,
|
||||
"narHash": "sha256-e+/T/pmEkLP6BHhYjx6GmwP5ivonQQn0bJdH9YrRB+Q=",
|
||||
"owner": "nix-community",
|
||||
"repo": "nixpkgs.lib",
|
||||
"rev": "c185c7a5e5dd8f9add5b2f8ebeff00888b070742",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-community",
|
||||
"repo": "nixpkgs.lib",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs-stable": {
|
||||
"locked": {
|
||||
"lastModified": 1774388614,
|
||||
"narHash": "sha256-tFwzTI0DdDzovdE9+Ras6CUss0yn8P9XV4Ja6RjA+nU=",
|
||||
"lastModified": 1776734388,
|
||||
"narHash": "sha256-vl3dkhlE5gzsItuHoEMVe+DlonsK+0836LIRDnm6MXQ=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "1073dad219cb244572b74da2b20c7fe39cb3fa9e",
|
||||
"rev": "10e7ad5bbcb421fe07e3a4ad53a634b0cd57ffac",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -743,11 +734,11 @@
|
|||
},
|
||||
"nixpkgs-stable_2": {
|
||||
"locked": {
|
||||
"lastModified": 1774388614,
|
||||
"narHash": "sha256-tFwzTI0DdDzovdE9+Ras6CUss0yn8P9XV4Ja6RjA+nU=",
|
||||
"lastModified": 1776734388,
|
||||
"narHash": "sha256-vl3dkhlE5gzsItuHoEMVe+DlonsK+0836LIRDnm6MXQ=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "1073dad219cb244572b74da2b20c7fe39cb3fa9e",
|
||||
"rev": "10e7ad5bbcb421fe07e3a4ad53a634b0cd57ffac",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -759,26 +750,26 @@
|
|||
},
|
||||
"nixpkgs_10": {
|
||||
"locked": {
|
||||
"lastModified": 1774597904,
|
||||
"narHash": "sha256-3lqVgn9FTxmYypvNX7PL5m8U89jD2darWa+3RomXsok=",
|
||||
"owner": "NixOS",
|
||||
"lastModified": 1768810879,
|
||||
"narHash": "sha256-6RrqzfHu3e4vvRaDRY0muyl/BkFzCEPfwXmYY8iRjSw=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "c2e2c66a1bc800d99cb85b54a9b7a0bdd06432c5",
|
||||
"rev": "0ef1c5b62bec8b182affa76ff079d80a2ba026ba",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_11": {
|
||||
"locked": {
|
||||
"lastModified": 1766309749,
|
||||
"narHash": "sha256-3xY8CZ4rSnQ0NqGhMKAy5vgC+2IVK0NoVEzDoOh4DA4=",
|
||||
"lastModified": 1775710090,
|
||||
"narHash": "sha256-ar3rofg+awPB8QXDaFJhJ2jJhu+KqN/PRCXeyuXR76E=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "a6531044f6d0bef691ea18d4d4ce44d0daa6e816",
|
||||
"rev": "4c1018dae018162ec878d42fec712642d214fdfa",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -789,22 +780,6 @@
|
|||
}
|
||||
},
|
||||
"nixpkgs_12": {
|
||||
"locked": {
|
||||
"lastModified": 1769018530,
|
||||
"narHash": "sha256-MJ27Cy2NtBEV5tsK+YraYr2g851f3Fl1LpNHDzDX15c=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "88d3861acdd3d2f0e361767018218e51810df8a1",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nixos",
|
||||
"ref": "nixos-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_13": {
|
||||
"locked": {
|
||||
"lastModified": 1766651565,
|
||||
"narHash": "sha256-QEhk0eXgyIqTpJ/ehZKg9IKS7EtlWxF3N7DXy42zPfU=",
|
||||
|
|
@ -820,7 +795,35 @@
|
|||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_13": {
|
||||
"locked": {
|
||||
"lastModified": 1775350496,
|
||||
"narHash": "sha256-uuw97G2Qm6C7rdrkq4zBzwLo0oA35flYijyMy65w/8c=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "9341c707a0f78d80c73e1b403d98d728eda607ac",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_2": {
|
||||
"locked": {
|
||||
"lastModified": 1776877367,
|
||||
"narHash": "sha256-wMN1gM00sUQ2KC9CNr/XEOGdfOrl67PabIRv9AYayTo=",
|
||||
"rev": "0726a0ecb6d4e08f6adced58726b95db924cef57",
|
||||
"type": "tarball",
|
||||
"url": "https://releases.nixos.org/nixos/unstable/nixos-26.05pre985613.0726a0ecb6d4/nixexprs.tar.xz"
|
||||
},
|
||||
"original": {
|
||||
"type": "tarball",
|
||||
"url": "https://channels.nixos.org/nixos-unstable/nixexprs.tar.xz"
|
||||
}
|
||||
},
|
||||
"nixpkgs_3": {
|
||||
"locked": {
|
||||
"lastModified": 1770562336,
|
||||
"narHash": "sha256-ub1gpAONMFsT/GU2hV6ZWJjur8rJ6kKxdm9IlCT0j84=",
|
||||
|
|
@ -836,7 +839,7 @@
|
|||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_3": {
|
||||
"nixpkgs_4": {
|
||||
"locked": {
|
||||
"lastModified": 1746397377,
|
||||
"narHash": "sha256-5oLdRa3vWSRbuqPIFFmQBGGUqaYZBxX+GGtN9f/n4lU=",
|
||||
|
|
@ -852,7 +855,7 @@
|
|||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_4": {
|
||||
"nixpkgs_5": {
|
||||
"locked": {
|
||||
"lastModified": 1773282481,
|
||||
"narHash": "sha256-oFe06TmOy8UUT1f7xMHqDpSYq2Fy1mkIsXZUvdnyfeY=",
|
||||
|
|
@ -865,7 +868,7 @@
|
|||
"url": "https://channels.nixos.org/nixos-unstable/nixexprs.tar.xz"
|
||||
}
|
||||
},
|
||||
"nixpkgs_5": {
|
||||
"nixpkgs_6": {
|
||||
"locked": {
|
||||
"lastModified": 1774078191,
|
||||
"narHash": "sha256-nyxxxW1/2ouu9dU0I02ul5pHrmUrE1JVFhfFlmYe3Lw=",
|
||||
|
|
@ -881,13 +884,13 @@
|
|||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_6": {
|
||||
"nixpkgs_7": {
|
||||
"locked": {
|
||||
"lastModified": 1774386573,
|
||||
"narHash": "sha256-4hAV26quOxdC6iyG7kYaZcM3VOskcPUrdCQd/nx8obc=",
|
||||
"lastModified": 1776548001,
|
||||
"narHash": "sha256-ZSK0NL4a1BwVbbTBoSnWgbJy9HeZFXLYQizjb2DPF24=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "46db2e09e1d3f113a13c0d7b81e2f221c63b8ce9",
|
||||
"rev": "b12141ef619e0a9c1c84dc8c684040326f27cdcc",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -897,7 +900,7 @@
|
|||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_7": {
|
||||
"nixpkgs_8": {
|
||||
"locked": {
|
||||
"lastModified": 1752077645,
|
||||
"narHash": "sha256-HM791ZQtXV93xtCY+ZxG1REzhQenSQO020cu6rHtAPk=",
|
||||
|
|
@ -913,13 +916,13 @@
|
|||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_8": {
|
||||
"nixpkgs_9": {
|
||||
"locked": {
|
||||
"lastModified": 1773821835,
|
||||
"narHash": "sha256-TJ3lSQtW0E2JrznGVm8hOQGVpXjJyXY2guAxku2O9A4=",
|
||||
"lastModified": 1776169885,
|
||||
"narHash": "sha256-l/iNYDZ4bGOAFQY2q8y5OAfBBtrDAaPuRQqWaFHVRXM=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "b40629efe5d6ec48dd1efba650c797ddbd39ace0",
|
||||
"rev": "4bd9165a9165d7b5e33ae57f3eecbcb28fb231c9",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -929,24 +932,10 @@
|
|||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs_9": {
|
||||
"locked": {
|
||||
"lastModified": 1768810879,
|
||||
"narHash": "sha256-6RrqzfHu3e4vvRaDRY0muyl/BkFzCEPfwXmYY8iRjSw=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "0ef1c5b62bec8b182affa76ff079d80a2ba026ba",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"qstn": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"bunker",
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
|
|
@ -967,6 +956,7 @@
|
|||
"qtengine": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"bunker",
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
|
|
@ -990,7 +980,6 @@
|
|||
"angrr": "angrr",
|
||||
"arbys": "arbys",
|
||||
"bunker": "bunker",
|
||||
"culr": "culr",
|
||||
"helium": "helium",
|
||||
"hudcore": "hudcore",
|
||||
"inshellah": "inshellah",
|
||||
|
|
@ -1003,13 +992,16 @@
|
|||
"nix-rice": "nix-rice",
|
||||
"nix-scope-plugin": "nix-scope-plugin",
|
||||
"nix-shorturl-plugin": "nix-shorturl-plugin",
|
||||
"nixpkgs": "nixpkgs_10",
|
||||
"nixos-core": "nixos-core",
|
||||
"nixpkgs": [
|
||||
"bunker",
|
||||
"nixpkgs"
|
||||
],
|
||||
"nixpkgs-stable": "nixpkgs-stable_2",
|
||||
"qstn": "qstn",
|
||||
"qtengine": "qtengine",
|
||||
"run0-shim": "run0-shim",
|
||||
"stash": "stash",
|
||||
"stasis": "stasis",
|
||||
"tuigreet": "tuigreet",
|
||||
"wry": "wry",
|
||||
"yoke": "yoke"
|
||||
|
|
@ -1019,16 +1011,17 @@
|
|||
"inputs": {
|
||||
"nix-github-actions": "nix-github-actions",
|
||||
"nixpkgs": [
|
||||
"bunker",
|
||||
"nixpkgs"
|
||||
],
|
||||
"treefmt-nix": "treefmt-nix_2"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1774550565,
|
||||
"narHash": "sha256-5MLZTT9UDFJeOrtp+VKEkWSwLsx0ZMHkuPlcLPFoxlE=",
|
||||
"lastModified": 1774702115,
|
||||
"narHash": "sha256-iZ0HSQwjr9nYpVn10ZI4zQTdqvSggfxhXZ1c4oSZnuc=",
|
||||
"owner": "lordgrimmauld",
|
||||
"repo": "run0-sudo-shim",
|
||||
"rev": "ef368ac5a90d0cc1977deae10f4cf7373c36786c",
|
||||
"rev": "c9e06e2f220ab2fcf2228d4315c0a7fc2dc6e438",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -1054,17 +1047,38 @@
|
|||
"type": "github"
|
||||
}
|
||||
},
|
||||
"rust-overlay": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"tuigreet",
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1776654897,
|
||||
"narHash": "sha256-Vqi4AiJVCcBGn/RmBtRCgyH5rCxqm/w0xV9diJWF1Ic=",
|
||||
"owner": "oxalica",
|
||||
"repo": "rust-overlay",
|
||||
"rev": "25d75be8139815a53560745fa060909777495105",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "oxalica",
|
||||
"repo": "rust-overlay",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"stash": {
|
||||
"inputs": {
|
||||
"crane": "crane",
|
||||
"nixpkgs": "nixpkgs_11"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1775243632,
|
||||
"narHash": "sha256-aN31z1Pf0Aaz1r0PgtHFYBBM3QFDtnd7hiL7xGGpQLM=",
|
||||
"lastModified": 1776783630,
|
||||
"narHash": "sha256-FxNTnfZTH96ptne2wH5N4DzctdTHy75cPepZaVNQwck=",
|
||||
"owner": "notashelf",
|
||||
"repo": "stash",
|
||||
"rev": "f139bda7b296e66998cc3077026cf18abfc9709d",
|
||||
"rev": "4d3c99368fdb9373f0d7423de1a9642ae0c11745",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -1073,25 +1087,6 @@
|
|||
"type": "github"
|
||||
}
|
||||
},
|
||||
"stasis": {
|
||||
"inputs": {
|
||||
"flake-parts": "flake-parts_3",
|
||||
"nixpkgs": "nixpkgs_12"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1774290684,
|
||||
"narHash": "sha256-1EsUpXEqL1bV3M1QiLFieynYqVpQY+vkqB98R6M0pIk=",
|
||||
"owner": "saltnpepper97",
|
||||
"repo": "stasis",
|
||||
"rev": "1375c3afd6941fa874a5666974feecdf6644e55f",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "saltnpepper97",
|
||||
"repo": "stasis",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"systems": {
|
||||
"locked": {
|
||||
"lastModified": 1689347949,
|
||||
|
|
@ -1108,21 +1103,6 @@
|
|||
}
|
||||
},
|
||||
"systems_2": {
|
||||
"locked": {
|
||||
"lastModified": 1689347949,
|
||||
"narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=",
|
||||
"owner": "nix-systems",
|
||||
"repo": "default-linux",
|
||||
"rev": "31732fcf5e8fea42e59c2488ad31a0e651500f68",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-systems",
|
||||
"repo": "default-linux",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"systems_3": {
|
||||
"locked": {
|
||||
"lastModified": 1681028828,
|
||||
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||
|
|
@ -1137,7 +1117,7 @@
|
|||
"type": "github"
|
||||
}
|
||||
},
|
||||
"systems_4": {
|
||||
"systems_3": {
|
||||
"locked": {
|
||||
"lastModified": 1689347949,
|
||||
"narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=",
|
||||
|
|
@ -1160,11 +1140,11 @@
|
|||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1773297127,
|
||||
"narHash": "sha256-6E/yhXP7Oy/NbXtf1ktzmU8SdVqJQ09HC/48ebEGBpk=",
|
||||
"lastModified": 1775636079,
|
||||
"narHash": "sha256-pc20NRoMdiar8oPQceQT47UUZMBTiMdUuWrYu2obUP0=",
|
||||
"owner": "numtide",
|
||||
"repo": "treefmt-nix",
|
||||
"rev": "71b125cd05fbfd78cab3e070b73544abe24c5016",
|
||||
"rev": "790751ff7fd3801feeaf96d7dc416a8d581265ba",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
|
@ -1196,27 +1176,25 @@
|
|||
},
|
||||
"tuigreet": {
|
||||
"inputs": {
|
||||
"nixpkgs": "nixpkgs_13"
|
||||
"crane": "crane_2",
|
||||
"nixpkgs": "nixpkgs_12",
|
||||
"rust-overlay": "rust-overlay"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1772641147,
|
||||
"narHash": "sha256-ejqi9ujkralaPmvC3xY99NnhajNAyjPg3Nf72asKQno=",
|
||||
"owner": "notashelf",
|
||||
"repo": "tuigreet",
|
||||
"rev": "fa44a85b65fb86984cb17de05208b46d1bd1b407",
|
||||
"type": "github"
|
||||
"lastModified": 1777107181,
|
||||
"narHash": "sha256-zC0gTr/Rlz0lPH+LiH/UAeZgzLqr2Az270CB0xERGbI=",
|
||||
"path": "/home/bolt/code/etc/tuigreet",
|
||||
"type": "path"
|
||||
},
|
||||
"original": {
|
||||
"owner": "notashelf",
|
||||
"repo": "tuigreet",
|
||||
"rev": "fa44a85b65fb86984cb17de05208b46d1bd1b407",
|
||||
"type": "github"
|
||||
"path": "/home/bolt/code/etc/tuigreet",
|
||||
"type": "path"
|
||||
}
|
||||
},
|
||||
"unf": {
|
||||
"inputs": {
|
||||
"ndg": "ndg",
|
||||
"nixpkgs": "nixpkgs_5"
|
||||
"nixpkgs": "nixpkgs_6"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1760178630,
|
||||
|
|
@ -1234,22 +1212,17 @@
|
|||
},
|
||||
"wry": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
]
|
||||
"nixpkgs": "nixpkgs_13"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1775563304,
|
||||
"narHash": "sha256-+2lylj1Aw6tFCH9w6Ua+jcYTAPU3Btx8giV0tySdIw4=",
|
||||
"ref": "refs/heads/master",
|
||||
"rev": "7aea0095e991a7b5b52e6109ee79a9deb8550d7b",
|
||||
"revCount": 2084,
|
||||
"type": "git",
|
||||
"url": "ssh://git@git.kosslan.dev/wry/jay"
|
||||
"lastModified": 1776171180,
|
||||
"narHash": "sha256-hmf6U/73HgOgigs26zcpfVCQEZTDNWBi7whDNcYpBXo=",
|
||||
"path": "/home/bolt/code/wry",
|
||||
"type": "path"
|
||||
},
|
||||
"original": {
|
||||
"type": "git",
|
||||
"url": "ssh://git@git.kosslan.dev/wry/jay"
|
||||
"path": "/home/bolt/code/wry",
|
||||
"type": "path"
|
||||
}
|
||||
},
|
||||
"xwayland-satellite-stable": {
|
||||
|
|
@ -1288,9 +1261,10 @@
|
|||
"yoke": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"bunker",
|
||||
"nixpkgs"
|
||||
],
|
||||
"systems": "systems_4"
|
||||
"systems": "systems_3"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1772106982,
|
||||
|
|
|
|||
45
flake.nix
45
flake.nix
|
|
@ -4,7 +4,8 @@
|
|||
outputs = _: { };
|
||||
|
||||
inputs = {
|
||||
nixpkgs.url = "github:NixOS/nixpkgs";
|
||||
# nixpkgs.url = "github:NixOS/nixpkgs";
|
||||
nixpkgs.follows = "bunker/nixpkgs";
|
||||
nixpkgs-stable.url = "github:NixOS/nixpkgs/nixos-25.11";
|
||||
|
||||
nix-index-database.url = "github:Mic92/nix-index-database";
|
||||
|
|
@ -13,12 +14,7 @@
|
|||
|
||||
meat = {
|
||||
url = "atagen:meat";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
culr = {
|
||||
url = "atagen:culr";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
inputs.nixpkgs.follows = "bunker/nixpkgs";
|
||||
};
|
||||
|
||||
hudcore.url = "atagen:hudcore-plymouth";
|
||||
|
|
@ -26,7 +22,7 @@
|
|||
|
||||
niri-tag = {
|
||||
url = "atagen:niri-tag";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
inputs.nixpkgs.follows = "bunker/nixpkgs";
|
||||
};
|
||||
|
||||
angrr.url = "github:linyinfeng/angrr";
|
||||
|
|
@ -35,7 +31,7 @@
|
|||
|
||||
qstn = {
|
||||
url = "atagen:qstn";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
inputs.nixpkgs.follows = "bunker/nixpkgs";
|
||||
};
|
||||
|
||||
__flake-compat = {
|
||||
|
|
@ -45,55 +41,58 @@
|
|||
|
||||
yoke = {
|
||||
url = "atagen:yoke";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
inputs.nixpkgs.follows = "bunker/nixpkgs";
|
||||
};
|
||||
|
||||
run0-shim = {
|
||||
url = "github:lordgrimmauld/run0-sudo-shim";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
inputs.nixpkgs.follows = "bunker/nixpkgs";
|
||||
};
|
||||
|
||||
bunker.url = "amaan:bunker-patches";
|
||||
|
||||
stasis.url = "github:saltnpepper97/stasis";
|
||||
|
||||
niri-s76.url = "atagen:niri-s76-bridge";
|
||||
|
||||
helium.url = "amaan:helium-flake";
|
||||
|
||||
nil = {
|
||||
url = "github:atagen/nil";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
inputs.nixpkgs.follows = "bunker/nixpkgs";
|
||||
};
|
||||
|
||||
nix-scope-plugin = {
|
||||
url = "atagen:nix-scope-plugin";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
inputs.nixpkgs.follows = "bunker/nixpkgs";
|
||||
};
|
||||
|
||||
nix-shorturl-plugin = {
|
||||
url = "atagen:nix-shorturl-plugin";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
inputs.nixpkgs.follows = "bunker/nixpkgs";
|
||||
};
|
||||
|
||||
stash.url = "github:notashelf/stash";
|
||||
wry = {
|
||||
url = "kosslan:wry/jay";
|
||||
# url = "path:/home/bolt/code/wry";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
# url = "kosslan:wry/jay";
|
||||
url = "path:/home/bolt/code/wry";
|
||||
# inputs.nixpkgs.follows = "bunker/nixpkgs";
|
||||
};
|
||||
|
||||
tuigreet.url = "github:notashelf/tuigreet/fa44a85b65fb86984cb17de05208b46d1bd1b407";
|
||||
# tuigreet.url = "github:notashelf/tuigreet";
|
||||
tuigreet.url = "path:/home/bolt/code/etc/tuigreet";
|
||||
|
||||
inshellah = {
|
||||
# url = "path:/home/bolt/code/inshellah";
|
||||
url = "atagen:inshellah";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
inputs.nixpkgs.follows = "bunker/nixpkgs";
|
||||
};
|
||||
|
||||
qtengine = {
|
||||
url = "github:kossLAN/qtengine";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
inputs.nixpkgs.follows = "bunker/nixpkgs";
|
||||
};
|
||||
|
||||
nixos-core = {
|
||||
url = "github:feel-co/nixos-core";
|
||||
inputs.nixpkgs.follows = "bunker/nixpkgs";
|
||||
};
|
||||
|
||||
};
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@ scope "boot" {
|
|||
maxGenerations = 5;
|
||||
};
|
||||
plymouth = {
|
||||
enable = true;
|
||||
enable = false;
|
||||
inherit (config.rice.plymouth) theme themePackages font;
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
/nix/store/bc2v8k5620k5p57ggrxy6i5w6pay9kis-Colours.qml
|
||||
/nix/store/1ajn9faiksanmy64n7sg4xjqij1cc5qc-Colours.qml
|
||||
|
|
@ -5,6 +5,7 @@
|
|||
mainUser,
|
||||
getPkgs,
|
||||
config,
|
||||
getFlakePkg,
|
||||
...
|
||||
}:
|
||||
let
|
||||
|
|
@ -13,8 +14,8 @@ let
|
|||
let
|
||||
grim = lib.getExe pkgs.grim;
|
||||
slurp = lib.getExe pkgs.slurp;
|
||||
wl-copy = lib.getExe' pkgs.wl-clipboard-rs "wl-copy";
|
||||
wl-paste = lib.getExe' pkgs.wl-clipboard-rs "wl-paste";
|
||||
wl-copy = lib.getExe' (getFlakePkg inputs.stash) "wl-copy";
|
||||
wl-paste = lib.getExe' (getFlakePkg inputs.stash) "wl-paste";
|
||||
in
|
||||
pkgs.writeScriptBin "shotta" ''
|
||||
#! /usr/bin/env nu
|
||||
|
|
@ -29,28 +30,12 @@ in
|
|||
environment.systemPackages = getPkgs {
|
||||
inherit shotta;
|
||||
inherit (pkgs.kdePackages) qtbase qtdeclarative;
|
||||
inherit (pkgs) wl-clipboard quickshell;
|
||||
inherit (pkgs) quickshell;
|
||||
};
|
||||
|
||||
imports = [
|
||||
inputs.stasis.nixosModules.default
|
||||
inputs.stash.nixosModules.default
|
||||
];
|
||||
services.stasis = {
|
||||
enable = false;
|
||||
extraConfig = ''
|
||||
default:
|
||||
dpms_off:
|
||||
timeout 300
|
||||
command "niri msg action power-off-monitors"
|
||||
end
|
||||
suspend:
|
||||
timeout 600
|
||||
command "systemctl suspend"
|
||||
end
|
||||
end
|
||||
'';
|
||||
};
|
||||
|
||||
services.stash-clipboard = {
|
||||
enable = true;
|
||||
|
|
|
|||
|
|
@ -104,6 +104,7 @@ in
|
|||
config.programs.niri = {
|
||||
enable = true;
|
||||
package = niri;
|
||||
useNautilus = false;
|
||||
};
|
||||
|
||||
config.services.niri-tag = {
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ in
|
|||
|
||||
services.greetd = {
|
||||
enable = true;
|
||||
settings.default_session.command = "${lib.getExe (getFlakePkg inputs.tuigreet)} --sessions /etc/greetd/wayland-sessions --remember-session";
|
||||
settings.default_session.command = "${lib.getExe (getFlakePkg inputs.tuigreet)} --sessions /etc/greetd/wayland-sessions --remember-session --animation doom";
|
||||
};
|
||||
|
||||
environment.etc."greetd/wayland-sessions/wry.desktop".text = ''
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@
|
|||
|
||||
programs.git = {
|
||||
enable = true;
|
||||
package = pkgs.gitMinimal;
|
||||
config = {
|
||||
user = {
|
||||
name = "atagen";
|
||||
|
|
|
|||
|
|
@ -1,9 +1,11 @@
|
|||
{
|
||||
pkgs,
|
||||
config,
|
||||
mkWrappers,
|
||||
...
|
||||
}:
|
||||
let
|
||||
inherit (mkWrappers pkgs) wrap;
|
||||
ui = config.rice.roles config.rice.palette.hex;
|
||||
zathuraConfigDir = pkgs.runCommand "zathura-config" { } ''
|
||||
mkdir -p $out
|
||||
|
|
@ -44,14 +46,10 @@ let
|
|||
set index-active-bg "${ui.secondary}"
|
||||
''} $out/zathurarc
|
||||
'';
|
||||
zathuraWrapped = pkgs.symlinkJoin {
|
||||
zathuraWrapped = wrap {
|
||||
name = "zathura";
|
||||
paths = [ pkgs.zathura ];
|
||||
nativeBuildInputs = [ pkgs.makeWrapper ];
|
||||
postBuild = ''
|
||||
wrapProgram $out/bin/zathura \
|
||||
--add-flags "--config-dir=${zathuraConfigDir}"
|
||||
'';
|
||||
pkg = pkgs.zathura;
|
||||
args = [ "--config-dir=${zathuraConfigDir}" ];
|
||||
};
|
||||
in
|
||||
with pkgs;
|
||||
|
|
@ -59,7 +57,7 @@ scope "apps" {
|
|||
officeSuite = libreoffice;
|
||||
mailClient = thunderbird;
|
||||
noteTaking = obsidian;
|
||||
ebookReader = foliate;
|
||||
# ebookReader = foliate; # contains perl
|
||||
pdfReader = zathuraWrapped;
|
||||
calculator = mate-calc;
|
||||
}
|
||||
|
|
|
|||
1902
graphical/foot-tabs.patch
Normal file
1902
graphical/foot-tabs.patch
Normal file
File diff suppressed because it is too large
Load diff
|
|
@ -1,10 +1,13 @@
|
|||
{
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
{
|
||||
xdg.autostart.enable = lib.mkForce false;
|
||||
|
||||
xdg.portal.extraPortals = lib.mkForce [ pkgs.xdg-desktop-portal-gtk ];
|
||||
|
||||
environment.pathsToLink = [
|
||||
"/share/xdg-desktop-portal"
|
||||
"/share/applications"
|
||||
|
|
|
|||
|
|
@ -4,6 +4,6 @@
|
|||
|
||||
services.scx = {
|
||||
enable = true;
|
||||
scheduler = "scx_bpfland";
|
||||
scheduler = "scx_lavd";
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,177 +0,0 @@
|
|||
{
|
||||
pkgs,
|
||||
lib,
|
||||
mainUser,
|
||||
...
|
||||
}:
|
||||
let
|
||||
clodTools = with pkgs; [
|
||||
bash
|
||||
procps
|
||||
ripgrep
|
||||
socat
|
||||
bubblewrap
|
||||
];
|
||||
mkClod =
|
||||
{
|
||||
confDir ? null,
|
||||
suffix ? null,
|
||||
}:
|
||||
let
|
||||
version = "2.1.81";
|
||||
runtimeDeps = lib.makeBinPath clodTools;
|
||||
|
||||
patchScript = pkgs.writeScript "patch-claude-src" ''
|
||||
#!${pkgs.python3}/bin/python3
|
||||
import re, sys
|
||||
W = rb"[\w$]+"
|
||||
data = open(sys.argv[1], "rb").read()
|
||||
|
||||
pat = (rb"let (" + W + rb")=(" + W + rb")\((" + W + rb'),"CLAUDE\.md"\);'
|
||||
rb"(" + W + rb")\.push\(\.\.\.(" + W + rb')\(\1,"Project",([^)]+)\)\)')
|
||||
def agents(m):
|
||||
v, pj, d, a, lf, rest = [m.group(i) for i in range(1, 7)]
|
||||
return (b'for(let _f of["CLAUDE.md","AGENTS.md"]){let ' + v + b"=" + pj
|
||||
+ b"(" + d + b",_f);" + a + b".push(..." + lf + b"(" + v
|
||||
+ b',"Project",' + rest + b"))}")
|
||||
data, n = re.subn(pat, agents, data)
|
||||
sys.stderr.write(f"AGENTS.md: {n} site(s)\n")
|
||||
|
||||
data = data.replace(
|
||||
b'case"macos":return"/Library/Application Support/ClaudeCode"',
|
||||
b'case"macos":return"/etc/claude-code"',
|
||||
)
|
||||
|
||||
# Enable hard-disabled slash commands: /btw, /files, /tag
|
||||
for anchor, label in [
|
||||
(b'name:"btw",description:"Ask a quick side question', b"/btw"),
|
||||
(b'name:"files",description:"List all files currently in context"', b"/files"),
|
||||
(b'name:"tag",userFacingName', b"/tag"),
|
||||
]:
|
||||
pos = data.find(anchor)
|
||||
if pos < 0:
|
||||
sys.stderr.write(f"{label.decode()}: NOT FOUND\n"); continue
|
||||
window = data[pos:pos+500]
|
||||
patched = window.replace(b"isEnabled:()=>!1", b"isEnabled:()=>!0", 1)
|
||||
data = data[:pos] + patched + data[pos+500:]
|
||||
sys.stderr.write(f"{label.decode()}: enabled\n")
|
||||
|
||||
# Bypass e2() for thinkback (e2 returns false when DISABLE_TELEMETRY is set)
|
||||
data = data.replace(
|
||||
b'e2("tengu_thinkback")',
|
||||
b'!0||"tengu_thinkback"',
|
||||
)
|
||||
sys.stderr.write("thinkback: force-enabled\n")
|
||||
|
||||
# Enable custom keybindings (qA default is false, flip to true)
|
||||
data = data.replace(
|
||||
b'qA("tengu_keybinding_customization_release",!1)',
|
||||
b'qA("tengu_keybinding_customization_release",!0)',
|
||||
)
|
||||
sys.stderr.write("keybindings: force-enabled\n")
|
||||
|
||||
# Force-enable remote control / bridge feature gate
|
||||
data = data.replace(
|
||||
b'function ek(){return qA("tengu_ccr_bridge",!1)}',
|
||||
b'function ek(){return!0} ',
|
||||
)
|
||||
sys.stderr.write("remote-control: force-enabled\n")
|
||||
|
||||
# Fix Deno-compile bridge spawn: Deno compiled binaries intercept --flags
|
||||
# as V8 flags. Rewrite spawn to go through env(1) which breaks the Deno
|
||||
# runtime's flag parsing.
|
||||
data = data.replace(
|
||||
b'let O=iHz(A.execPath,$,',
|
||||
b'let O=iHz("env",["--",A.execPath,...$],',
|
||||
)
|
||||
sys.stderr.write("bridge-spawn: patched via env(1)\n")
|
||||
|
||||
# Kill claude-developer-platform bundled skill (~400 tokens/turn dead weight)
|
||||
data = data.replace(
|
||||
b'name:"claude-developer-platform",description:`',
|
||||
b'name:"claude-developer-platform",isEnabled:()=>!1,description:`',
|
||||
)
|
||||
sys.stderr.write("claude-developer-platform: killed\n")
|
||||
|
||||
pat = (rb"context_window:\{total_input_tokens:(" + W + rb"\(\)),"
|
||||
rb"total_output_tokens:(" + W + rb"\(\)),"
|
||||
rb"context_window_size:(" + W + rb"),"
|
||||
rb"current_usage:(" + W + rb"),"
|
||||
rb"used_percentage:(" + W + rb")\.used,"
|
||||
rb"remaining_percentage:\5\.remaining\}")
|
||||
rl = re.search(rb"(" + W + rb')=\{status:"allowed",unifiedRateLimitFallbackAvailable:!1,isUsingOverage:!1\}', data)
|
||||
m = re.search(pat, data)
|
||||
if m and rl:
|
||||
ci, co, sz, u, p, r = *[m.group(i) for i in range(1, 6)], rl.group(1)
|
||||
data = data.replace(m[0],
|
||||
b"context_window:{...(" + u + b"||{}),"
|
||||
b"context_window_size:" + sz + b",current_usage:" + u + b","
|
||||
b"used_percentage:" + p + b".used,remaining_percentage:" + p + b".remaining,"
|
||||
b"rate_limit:" + r + b",s_in:" + ci + b",s_out:" + co + b"}")
|
||||
|
||||
open(sys.argv[1], "wb").write(data)
|
||||
'';
|
||||
in
|
||||
pkgs.writeShellScriptBin "claude${lib.optionalString (suffix != null) "-${suffix}"}" ''
|
||||
set -euo pipefail
|
||||
export DISABLE_AUTOUPDATER=1
|
||||
export DISABLE_INSTALLATION_CHECKS=1
|
||||
export USE_BUILTIN_RIPGREP=0
|
||||
export PATH="${runtimeDeps}:${pkgs.deno}/bin:$PATH"
|
||||
|
||||
CACHE="''${XDG_CACHE_HOME:-$HOME/.cache}/claude-code"
|
||||
BIN="$CACHE/claude-${version}"
|
||||
${lib.optionalString (confDir != null) "export CLAUDE_CONFIG_DIR=\"$HOME/${confDir}\""}
|
||||
|
||||
if [ ! -x "$BIN" ]; then
|
||||
mkdir -p "$CACHE"
|
||||
DENO_DIR="$CACHE/.deno"
|
||||
export DENO_DIR
|
||||
deno cache "npm:@anthropic-ai/claude-code@${version}"
|
||||
${patchScript} "$DENO_DIR/npm/registry.npmjs.org/@anthropic-ai/claude-code/${version}/cli.js"
|
||||
deno compile --allow-all --output "$BIN" "npm:@anthropic-ai/claude-code@${version}" 2>&1
|
||||
rm -rf "$DENO_DIR"
|
||||
fi
|
||||
|
||||
exec "$BIN" "$@"
|
||||
'';
|
||||
claude-code = mkClod { };
|
||||
in
|
||||
(scope "apps" {
|
||||
"slop" = claude-code;
|
||||
})
|
||||
// {
|
||||
# required for loader
|
||||
programs.nix-ld = {
|
||||
enable = true;
|
||||
libraries = [ pkgs.stdenv.cc.cc.lib ];
|
||||
};
|
||||
# experiment with our own sandboxing
|
||||
# security.yoke.wrappers =
|
||||
# let
|
||||
# basePaths = [
|
||||
# "wrx=/home/${mainUser}/.claude.json:/home/${mainUser}/.claude-code:/home/${mainUser}/.cache/claude-code:$PWD/.claude"
|
||||
# "rx=/"
|
||||
# ];
|
||||
# base = {
|
||||
# package = claude-code;
|
||||
# executable = "claude";
|
||||
# retainEnv = true;
|
||||
# unrestrictTcp = true;
|
||||
# extraPackages = clodTools;
|
||||
# };
|
||||
# in
|
||||
# {
|
||||
# clod-cuck = base // {
|
||||
# pathRules = basePaths + [ "rx=$PWD" ];
|
||||
# };
|
||||
# clod = base // {
|
||||
# pathRules = basePaths ++ [
|
||||
# "wrx=/home/${mainUser}"
|
||||
# ];
|
||||
# addPwd = true;
|
||||
# unrestrictSockets = true;
|
||||
# unrestrictSignals = true;
|
||||
# };
|
||||
# };
|
||||
}
|
||||
126
graphical/llm/launcher.nu
Normal file
126
graphical/llm/launcher.nu
Normal file
|
|
@ -0,0 +1,126 @@
|
|||
def detect-platform []: nothing -> string {
|
||||
let os = $nu.os-info.name | str downcase
|
||||
let arch = $nu.os-info.arch | str downcase
|
||||
|
||||
let norm_arch = match $arch {
|
||||
"x86_64" | "x64" | "amd64" => "x64"
|
||||
"aarch64" | "arm64" => "arm64"
|
||||
_ => { error make { msg: $"unsupported arch: ($arch)" } }
|
||||
}
|
||||
|
||||
match $os {
|
||||
"linux" => {
|
||||
let musl_ld = $"/lib/ld-musl-($arch).so.1"
|
||||
let suffix = if ($musl_ld | path exists) { "-musl" } else { "" }
|
||||
$"linux-($norm_arch)($suffix)"
|
||||
}
|
||||
"macos" | "darwin" => $"darwin-($norm_arch)"
|
||||
"windows" => { error make { msg: "windows unsupported by this launcher" } }
|
||||
_ => { error make { msg: $"unsupported os: ($os)" } }
|
||||
}
|
||||
}
|
||||
|
||||
def build-binary [version: string, binary_path: string, cache: string] {
|
||||
let platform = detect-platform
|
||||
let pkg = $"@anthropic-ai/claude-code-($platform)"
|
||||
let tarball_url = $"https://registry.npmjs.org/($pkg)/-/claude-code-($platform)-($version).tgz"
|
||||
|
||||
let tgz_dir = $cache | path join "tgz"
|
||||
mkdir $tgz_dir
|
||||
let tgz = $tgz_dir | path join $"claude-code-($platform)-($version).tgz"
|
||||
|
||||
if not ($tgz | path exists) {
|
||||
print --stderr $"(ansi cyan)fetch:(ansi reset) ($tarball_url)"
|
||||
http get --raw $tarball_url | save --force --raw $tgz
|
||||
}
|
||||
|
||||
let workdir = $cache | path join $"build-($version)"
|
||||
rm -rf $workdir
|
||||
mkdir $workdir
|
||||
|
||||
run-external $env._TAR "-xzf" $tgz "-C" $workdir
|
||||
let native_bin = $workdir | path join "package" "claude"
|
||||
if not ($native_bin | path exists) {
|
||||
error make { msg: $"lift: ($native_bin) missing after tar extract" }
|
||||
}
|
||||
|
||||
let cli = $workdir | path join "cli.cjs"
|
||||
run-external $env._LIFT_SCRIPT $native_bin $cli
|
||||
run-external $env._PATCH_SCRIPT $cli
|
||||
|
||||
# Bun's bundler keeps a handful of http/ws/schema libs as runtime-external.
|
||||
# Deno has no equivalent provision — drop a package.json next to cli.cjs,
|
||||
# resolve deps into a local node_modules/, and bundle that tree into the
|
||||
# executable via --include.
|
||||
cp --force $env._EXTERNAL_PACKAGE_JSON ($workdir | path join "package.json")
|
||||
|
||||
cd $workdir
|
||||
$env.DENO_DIR = ($workdir | path join ".deno")
|
||||
run-external $env._DENO "install" "--node-modules-dir=auto"
|
||||
run-external $env._DENO "compile" "--allow-all" "--no-check" "--node-modules-dir=auto" "--include=node_modules" "--output" $binary_path "cli.cjs"
|
||||
|
||||
# nushell refuses to delete a directory you're currently inside
|
||||
cd $cache
|
||||
rm -rf $workdir
|
||||
}
|
||||
|
||||
def main --wrapped [...args] {
|
||||
let cache = $env
|
||||
| get --optional "XDG_CACHE_HOME"
|
||||
| default ($env.HOME | path join ".cache")
|
||||
| path join "claude-code"
|
||||
mkdir $cache
|
||||
|
||||
let config_dir = $env | get --optional "CLAUDE_CONFIG_DIR" | default (
|
||||
$env
|
||||
| get --optional "XDG_CONFIG_HOME"
|
||||
| default ($env.HOME | path join ".config")
|
||||
| path join "claude"
|
||||
)
|
||||
mkdir $config_dir
|
||||
|
||||
# Sync declarative settings into writable config dir
|
||||
cp --force $env._SETTINGS_JSON ($config_dir | path join "settings.json")
|
||||
|
||||
let version = do {
|
||||
let version_file = $cache | path join "latest-version"
|
||||
let stale = try { (date now) - (ls $version_file | get 0.modified) > 6hr } catch { true }
|
||||
|
||||
if not $stale { return (try { open $version_file } catch { "" }) }
|
||||
|
||||
let version = try {
|
||||
http get --max-time 5sec https://registry.npmjs.org/@anthropic-ai/claude-code/latest
|
||||
| get version
|
||||
} catch {
|
||||
print --stderr $"(ansi yellow_bold)warn:(ansi reset) version cache stale, can't re-fetch"
|
||||
return ""
|
||||
}
|
||||
|
||||
try {
|
||||
$version | save --force $version_file
|
||||
}
|
||||
$version
|
||||
}
|
||||
|
||||
let binary_path = if ($version | is-empty) {
|
||||
print --stderr $"(ansi yellow_bold)warn:(ansi reset) falling back to latest binary"
|
||||
|
||||
try {
|
||||
glob ($cache | path join "claude-*") | sort | last
|
||||
} catch {
|
||||
print --stderr $"(ansi red_bold)error:(ansi reset) no binary found"
|
||||
exit 67
|
||||
}
|
||||
} else {
|
||||
$cache | path join $"claude-($version)"
|
||||
}
|
||||
|
||||
if not ($binary_path | path exists) {
|
||||
build-binary $version $binary_path $cache
|
||||
}
|
||||
|
||||
$env.PATH = ($env.PATH | prepend ($env._RUNTIME_DEPS | split row ":"))
|
||||
$env._ENV_JSON | load-env
|
||||
|
||||
exec $binary_path ...$args
|
||||
}
|
||||
92
graphical/llm/lift-claude-bun.py
Normal file
92
graphical/llm/lift-claude-bun.py
Normal file
|
|
@ -0,0 +1,92 @@
|
|||
from __future__ import annotations
|
||||
|
||||
# Extract the cli.js bundle from a bun --compile --bytecode executable.
|
||||
#
|
||||
# Starting with @anthropic-ai/claude-code 2.1.113 the npm package stopped
|
||||
# shipping cli.js and instead publishes platform-specific tarballs that contain
|
||||
# a bun-compiled ELF (~226 MB). The JavaScript is still fully embedded in the
|
||||
# binary as plaintext — the @bytecode marker just means a V8 parse-cache lives
|
||||
# alongside it, not instead of it.
|
||||
#
|
||||
# Layout of each CJS module inside the bun SEA payload:
|
||||
# // @bun[ @bytecode] @bun-cjs\n
|
||||
# (function(exports, require, module, __filename, __dirname) {<BODY>})\n
|
||||
# \x00/$bunfs/root/<next-module-name>\x00...
|
||||
#
|
||||
# Claude Code ships three real modules in the tail region (past 0x6000000):
|
||||
# the main cli (~12 MB), then two tiny native-loader stubs for the optional
|
||||
# image-processor.node and audio-capture.node. Only the first is interesting.
|
||||
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
# Skip over .rodata / .text — those contain `// @bun` string literals (error
|
||||
# messages, help text) that would confuse the scanner. The first real module
|
||||
# sat at ~0xd333ec8 in 2.1.113; staying well below that survives future growth.
|
||||
SCAN_FROM: int = 0x6000000
|
||||
|
||||
HEADERS: list[bytes] = [
|
||||
b"// @bun @bytecode @bun-cjs\n(function(exports, require, module, __filename, __dirname) {",
|
||||
b"// @bun @bun-cjs\n(function(exports, require, module, __filename, __dirname) {",
|
||||
]
|
||||
|
||||
CJS_OPEN: bytes = b"(function(exports, require, module, __filename, __dirname) {"
|
||||
CJS_END: bytes = b"})\n\x00"
|
||||
|
||||
|
||||
def find_main_module(data: bytes) -> tuple[int, int]:
|
||||
for header in HEADERS:
|
||||
start = data.find(header, SCAN_FROM)
|
||||
if start >= 0:
|
||||
break
|
||||
else:
|
||||
sys.exit("lift: no bun CJS module header found past 0x6000000")
|
||||
|
||||
end = data.find(CJS_END, start)
|
||||
if end < 0:
|
||||
sys.exit("lift: could not find module terminator (})\\n\\x00)")
|
||||
return start, end + 3 # include })\n, exclude trailing NUL
|
||||
|
||||
|
||||
def unwrap(mod: bytes) -> bytes:
|
||||
nl = mod.find(b"\n")
|
||||
if nl < 0:
|
||||
sys.exit("lift: module has no header newline")
|
||||
body = mod[nl + 1 :]
|
||||
if not body.startswith(CJS_OPEN):
|
||||
sys.exit("lift: module does not open with expected CJS wrapper")
|
||||
body = body[len(CJS_OPEN) :]
|
||||
# tail is either `})\n` or `})`
|
||||
if body.endswith(b"})\n"):
|
||||
body = body[:-3]
|
||||
elif body.endswith(b"})"):
|
||||
body = body[:-2]
|
||||
else:
|
||||
sys.exit("lift: module does not end with `})` wrapper close")
|
||||
return body
|
||||
|
||||
|
||||
def main() -> None:
|
||||
if len(sys.argv) != 3:
|
||||
sys.exit("usage: lift-claude-bun <claude-binary> <output.cjs>")
|
||||
|
||||
binary = Path(sys.argv[1])
|
||||
output = Path(sys.argv[2])
|
||||
|
||||
data = binary.read_bytes()
|
||||
start, end = find_main_module(data)
|
||||
body = unwrap(data[start:end])
|
||||
|
||||
# Sanity: the real claude-code cli.js always contains this legal banner.
|
||||
if b"Anthropic" not in body[:4096]:
|
||||
sys.exit("lift: extracted body is missing Anthropic banner — layout changed?")
|
||||
|
||||
output.write_bytes(body)
|
||||
sys.stderr.write(
|
||||
f"lifted {len(body):,} bytes from {binary.name} "
|
||||
f"(module @ {start:#x}..{end:#x}) -> {output}\n"
|
||||
)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
152
graphical/llm/llm.nix
Normal file
152
graphical/llm/llm.nix
Normal file
|
|
@ -0,0 +1,152 @@
|
|||
{
|
||||
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
let
|
||||
inherit (lib) optionals;
|
||||
settings = {
|
||||
"$schema" = "https://json.schemastore.org/claude-code-settings.json";
|
||||
|
||||
env = {
|
||||
CLAUDE_BASH_NO_LOGIN = "1";
|
||||
CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING = "1";
|
||||
CLAUDE_CODE_DISABLE_FEEDBACK_SURVEY = "1";
|
||||
CLAUDE_CODE_DISABLE_TERMINAL_TITLE = "1";
|
||||
CLAUDE_CODE_EAGER_FLUSH = "1";
|
||||
CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS = "1";
|
||||
CLAUDE_CODE_FORCE_GLOBAL_CACHE = "1";
|
||||
CLAUDE_CODE_HIDE_ACCOUNT_INFO = "1";
|
||||
CLAUDE_CODE_MAX_TOOL_USE_CONCURRENCY = "20";
|
||||
CLAUDE_CODE_PLAN_V2_AGENT_COUNT = "5";
|
||||
CLAUDE_CODE_PLAN_V2_EXPLORE_AGENT_COUNT = "5";
|
||||
DISABLE_AUTO_COMPACT = "1";
|
||||
DISABLE_AUTOUPDATER = "1";
|
||||
DISABLE_COST_WARNINGS = "1";
|
||||
DISABLE_ERROR_REPORTING = "1";
|
||||
DISABLE_INSTALLATION_CHECKS = "1";
|
||||
DISABLE_TELEMETRY = "1";
|
||||
ENABLE_MCP_LARGE_OUTPUT_FILES = "1";
|
||||
ENABLE_TOOL_SEARCH = "auto:5";
|
||||
MAX_THINKING_TOKENS = "31999";
|
||||
MCP_CONNECTION_NONBLOCKING = "1";
|
||||
UV_THREADPOOL_SIZE = "16";
|
||||
};
|
||||
|
||||
attribution = {
|
||||
commit = "";
|
||||
pr = "";
|
||||
};
|
||||
|
||||
permissions = {
|
||||
allow = [
|
||||
"Read"
|
||||
];
|
||||
defaultMode = "bypassPermissions";
|
||||
};
|
||||
|
||||
statusLine = {
|
||||
type = "command";
|
||||
command = "/etc/claude/statusline-command.nu";
|
||||
};
|
||||
|
||||
enabledPlugins = {
|
||||
"clangd-lsp@claude-plugins-official" = true;
|
||||
"rust-analyzer-lsp@claude-plugins-official" = true;
|
||||
"context7@claude-plugins-official" = true;
|
||||
"code-review@claude-plugins-official" = true;
|
||||
"linear@claude-plugins-official" = true;
|
||||
};
|
||||
|
||||
skipWebFetchPreflight = true;
|
||||
|
||||
spinnerVerbs = {
|
||||
mode = "replace";
|
||||
verbs = [
|
||||
"Redeeming"
|
||||
"Clodding"
|
||||
"Tokenmaxxing"
|
||||
"Slopping"
|
||||
"Clanking"
|
||||
"Churning"
|
||||
"Forgetting"
|
||||
"Splurging"
|
||||
"Ignoring GPL"
|
||||
"Increasing ram prices"
|
||||
];
|
||||
};
|
||||
|
||||
cleanupPeriodDays = 90;
|
||||
alwaysThinkingEnabled = true;
|
||||
remoteControlAtStartup = true;
|
||||
showClearContextOnPlanAccept = true;
|
||||
skipDangerousModePermissionPrompt = true;
|
||||
};
|
||||
|
||||
settingsJson = pkgs.writeText "claude-settings.json" (builtins.toJSON settings);
|
||||
|
||||
runtimeDeps = lib.makeBinPath ([
|
||||
pkgs.bash
|
||||
pkgs.procps
|
||||
pkgs.ripgrep
|
||||
pkgs.bubblewrap
|
||||
pkgs.socat
|
||||
]);
|
||||
|
||||
patchScript = pkgs.writeScript "patch-claude-src" ''
|
||||
#!${pkgs.python3}/bin/python3
|
||||
${builtins.readFile ./patch-claude-src.py}
|
||||
'';
|
||||
|
||||
liftScript = pkgs.writeScript "lift-claude-bun" ''
|
||||
#!${pkgs.python3}/bin/python3
|
||||
${builtins.readFile ./lift-claude-bun.py}
|
||||
'';
|
||||
|
||||
externalPackageJson = pkgs.writeText "claude-code-external-package.json" (
|
||||
builtins.toJSON {
|
||||
name = "claude-code-lifted";
|
||||
type = "commonjs";
|
||||
dependencies = {
|
||||
ws = "^8";
|
||||
undici = "^6";
|
||||
node-fetch = "^3";
|
||||
ajv = "^8";
|
||||
ajv-formats = "^3";
|
||||
yaml = "^2";
|
||||
};
|
||||
}
|
||||
);
|
||||
|
||||
mkClod =
|
||||
suffix:
|
||||
let
|
||||
finalSuffix = "-${suffix}";
|
||||
in
|
||||
pkgs.writeScriptBin "claude${finalSuffix}" ''
|
||||
#!${pkgs.nushell}/bin/nu --no-config-file
|
||||
|
||||
$env._SETTINGS_JSON = "${settingsJson}"
|
||||
$env._DENO = "${pkgs.deno}/bin/deno"
|
||||
$env._PATCH_SCRIPT = "${patchScript}"
|
||||
$env._LIFT_SCRIPT = "${liftScript}"
|
||||
$env._EXTERNAL_PACKAGE_JSON = "${externalPackageJson}"
|
||||
$env._TAR = "${pkgs.gnutar}/bin/tar"
|
||||
$env._RUNTIME_DEPS = "${runtimeDeps}"
|
||||
$env._ENV_JSON = ${lib.strings.toJSON settings.env}
|
||||
$env.CLAUDE_CONFIG_DIR = ("~/.claude${finalSuffix}" | path expand)
|
||||
|
||||
${builtins.readFile ./launcher.nu}
|
||||
'';
|
||||
in
|
||||
{
|
||||
environment.systemPackages = [
|
||||
(mkClod "lillis")
|
||||
(mkClod "amaan")
|
||||
];
|
||||
|
||||
environment.etc."claude/statusline-command.nu".source = ./statusline-command.nu;
|
||||
|
||||
programs.nix-ld.enable = true;
|
||||
}
|
||||
231
graphical/llm/patch-claude-src.py
Normal file
231
graphical/llm/patch-claude-src.py
Normal file
|
|
@ -0,0 +1,231 @@
|
|||
from __future__ import annotations
|
||||
|
||||
import re
|
||||
import sys
|
||||
from collections.abc import Callable
|
||||
from pathlib import Path
|
||||
from typing import Union
|
||||
|
||||
type Replacement = Union[bytes, Callable[[re.Match[bytes]], bytes]]
|
||||
|
||||
W: bytes = rb"[\w$]+"
|
||||
# Qualified name: matches `FN` and also `NS.FN` (e.g. `Lf.join`, `Oc7.spawn`).
|
||||
# Since 2.1.113 bun's bundler emits more member-style calls for path/spawn helpers.
|
||||
Q: bytes = rb"[\w$]+(?:\.[\w$]+)*"
|
||||
data: bytes = Path(sys.argv[1]).read_bytes()
|
||||
|
||||
SEARCH_WINDOW: int = 500
|
||||
|
||||
|
||||
def log(msg: str) -> None:
|
||||
sys.stderr.write(msg + "\n")
|
||||
|
||||
|
||||
def patch(label: str, pattern: bytes, replacement: Replacement) -> None:
|
||||
global data
|
||||
data, n = re.subn(pattern, replacement, data)
|
||||
log(f"{label} ({n})")
|
||||
|
||||
|
||||
def replace(label: str, old: bytes, new: bytes) -> None:
|
||||
global data
|
||||
n: int = data.count(old)
|
||||
if n == 0:
|
||||
log(f"{label}: NOT FOUND")
|
||||
return
|
||||
data = data.replace(old, new)
|
||||
log(f"{label} ({n})")
|
||||
|
||||
|
||||
def flip_gates(gates: list[tuple[bytes, str]]) -> None:
|
||||
"""Flip all gate defaults from false to true in a single regex pass."""
|
||||
global data
|
||||
gate_keys: list[bytes] = [g for g, _ in gates]
|
||||
labels: dict[bytes, str] = dict(gates)
|
||||
alternation: bytes = b"|".join(re.escape(g) for g in gate_keys)
|
||||
pat: bytes = W + rb'\("(' + alternation + rb')",!1\)'
|
||||
flipped: set[bytes] = set()
|
||||
|
||||
def replacer(m: re.Match[bytes]) -> bytes:
|
||||
flipped.add(m.group(1))
|
||||
return m[0].replace(b",!1)", b",!0)")
|
||||
|
||||
data, n = re.subn(pat, replacer, data)
|
||||
log(f"feature gates: {n} flipped across {len(flipped)} gates")
|
||||
for key in gate_keys:
|
||||
status = "ok" if key in flipped else "MISSED"
|
||||
log(f" {labels[key]} [{status}]")
|
||||
|
||||
|
||||
# --- AGENTS.md support ---
|
||||
# The CLAUDE.md loader only reads CLAUDE.md. Patch it to also load AGENTS.md
|
||||
# from the same directories. Pattern: let VAR=ME(DIR,"CLAUDE.md");ARR.push(...await XE(VAR,"Project",ARG,BOOL))
|
||||
|
||||
agents_pat: bytes = (
|
||||
rb"let (" + W + rb")=(" + Q + rb")\((" + W + rb'),"CLAUDE\.md"\);'
|
||||
rb"(" + W + rb")\.push\(\.\.\.await (" + W + rb")\(\1,\"Project\",(" + W + rb"),(" + W + rb")\)\)"
|
||||
)
|
||||
|
||||
|
||||
def agents_repl(m: re.Match[bytes]) -> bytes:
|
||||
var, join_fn, dir_, arr, load_fn, arg, flag = [m.group(i) for i in range(1, 8)]
|
||||
return (
|
||||
b'for(let _f of["CLAUDE.md","AGENTS.md"]){let '
|
||||
+ var + b"=" + join_fn + b"(" + dir_ + b",_f);"
|
||||
+ arr + b".push(...await " + load_fn + b"(" + var + b',"Project",' + arg + b"," + flag + b"))}"
|
||||
)
|
||||
|
||||
|
||||
patch("agents.md loader", agents_pat, agents_repl)
|
||||
|
||||
# --- macOS config path ---
|
||||
|
||||
replace(
|
||||
"macOS config path",
|
||||
b'case"macos":return"/Library/Application Support/ClaudeCode"',
|
||||
b'case"macos":return"/etc/claude-code"',
|
||||
)
|
||||
|
||||
# --- Enable hard-disabled slash commands ---
|
||||
|
||||
slash_commands: list[tuple[bytes, str]] = [
|
||||
(b'name:"btw",description:"Ask a quick side question', "/btw"),
|
||||
(b'name:"bridge-kick",description:"Inject bridge failure states', "/bridge-kick"),
|
||||
(b'name:"files",description:"List all files currently in context"', "/files"),
|
||||
]
|
||||
|
||||
for anchor, label in slash_commands:
|
||||
pos: int = data.find(anchor)
|
||||
if pos < 0:
|
||||
log(f"slash command {label}: NOT FOUND")
|
||||
continue
|
||||
window: bytes = data[pos : pos + SEARCH_WINDOW]
|
||||
patched: bytes = window.replace(b"isEnabled:()=>!1", b"isEnabled:()=>!0", 1)
|
||||
if patched == window:
|
||||
log(f"slash command {label}: isEnabled not found in window")
|
||||
continue
|
||||
data = data[:pos] + patched + data[pos + SEARCH_WINDOW :]
|
||||
log(f"slash command {label}: enabled")
|
||||
|
||||
# --- Bypass telemetry gate in feature flag checker ---
|
||||
# The chain is: h8(featureGate) bails to default if !Qo(); Qo()=Ew6();
|
||||
# Ew6()=!Cq6(); Cq6() returns true when on bedrock/vertex/foundry OR when
|
||||
# user-facing telemetry is disabled (s_1()/equivalent). Drop the trailing
|
||||
# telemetry-disabled check so feature gates still resolve with
|
||||
# DISABLE_TELEMETRY=1 while preserving the bedrock/vertex/foundry detection.
|
||||
# Anchor on the stable env-var literal CLAUDE_CODE_USE_BEDROCK; the obfuscated
|
||||
# function name (Cq6) and the trailing wrapper name (s_1) both rotate.
|
||||
|
||||
patch(
|
||||
"telemetry gate (drop telemetry-disabled check)",
|
||||
(
|
||||
rb"function (" + W + rb")\(\)\{return (" + W + rb")\(process\.env\.CLAUDE_CODE_USE_BEDROCK\)"
|
||||
rb"\|\|\2\(process\.env\.CLAUDE_CODE_USE_VERTEX\)"
|
||||
rb"\|\|\2\(process\.env\.CLAUDE_CODE_USE_FOUNDRY\)"
|
||||
rb"\|\|" + W + rb"\(\)\}"
|
||||
),
|
||||
lambda m: re.sub(rb"\|\|" + W + rb"\(\)\}$", b"||!1}", m[0]),
|
||||
)
|
||||
|
||||
# --- Restore 1h prompt cache TTL when telemetry is off ---
|
||||
# https://github.com/anthropics/claude-code/issues/45381
|
||||
# The GrowthBook allowlist for "ttl":"1h" cache_control falls back to the
|
||||
# default object when telemetry is off. Anthropic now ships
|
||||
# {allowlist:["repl_main_thread*","sdk","auto_mode"]} as the default (up
|
||||
# from the broken {} in earlier versions), so the TUI and SDK already get
|
||||
# 1h TTL — but batch agents and less-common query sources still miss.
|
||||
# Widen the default to ["*"] so everything matches.
|
||||
|
||||
patch(
|
||||
"1h prompt cache TTL fallback",
|
||||
rb'(' + W + rb')\("tengu_prompt_cache_1h_config",\{allowlist:\[[^\]]+\]\}\)\.allowlist\?\?\[\]',
|
||||
lambda m: m[1] + b'("tengu_prompt_cache_1h_config",{allowlist:["*"]}).allowlist??[]',
|
||||
)
|
||||
|
||||
# --- Fix Deno-compile bridge spawn ---
|
||||
# Deno-compiled binaries eat --flags as V8 args, so we route spawns through
|
||||
# env(1) to pass them as normal CLI flags instead.
|
||||
|
||||
patch(
|
||||
"deno bridge spawn fix",
|
||||
rb"let (" + W + rb")=(" + Q + rb")\((" + W + rb")\.execPath,(" + W + rb"),",
|
||||
lambda m: (
|
||||
b"let "
|
||||
+ m[1]
|
||||
+ b"="
|
||||
+ m[2]
|
||||
+ b'("env",["--",'
|
||||
+ m[3]
|
||||
+ b".execPath,..."
|
||||
+ m[4]
|
||||
+ b"],"
|
||||
),
|
||||
)
|
||||
|
||||
# --- Flip feature gates ---
|
||||
# DISABLE_TELEMETRY=1 prevents GrowthBook feature flag resolution, so all gates
|
||||
# fall back to their hardcoded defaults (false). Flip them to true.
|
||||
|
||||
Gate = tuple[bytes, str]
|
||||
|
||||
core_gates: list[Gate] = [
|
||||
(b"tengu_ccr_bridge", "remote control"),
|
||||
(b"tengu_bridge_system_init", "bridge SDK init on connect"),
|
||||
(b"tengu_bridge_client_presence_enabled", "bridge presence heartbeats"),
|
||||
(b"tengu_bridge_requires_action_details", "bridge rich tool-use payloads"),
|
||||
(b"tengu_remote_backend", "remote backend"),
|
||||
(b"tengu_immediate_model_command", "instant /model switching"),
|
||||
(b"tengu_fgts", "fine-grained tool streaming"),
|
||||
(b"tengu_auto_background_agents", "background agent timeout"),
|
||||
(b"tengu_plan_mode_interview_phase", "plan mode interview"),
|
||||
(b"tengu_surreal_dali", "scheduled agents/cron"),
|
||||
]
|
||||
|
||||
memory_gates: list[Gate] = [
|
||||
# (b"tengu_session_memory", "session memory"), # auto-memory; pollutes unrelated convos
|
||||
(b"tengu_pebble_leaf_prune", "message pruning"),
|
||||
(b"tengu_herring_clock", "team memory directory"),
|
||||
(b"tengu_passport_quail", "typed combined memory prompts"),
|
||||
(b"tengu_paper_halyard", "memory dedup in nested dirs"),
|
||||
]
|
||||
|
||||
ux_gates: list[Gate] = [
|
||||
(b"tengu_coral_fern", "grep hints in prompt"),
|
||||
(b"tengu_kairos_brief", "brief output mode"),
|
||||
(b"tengu_destructive_command_warning", "destructive command warnings"),
|
||||
(b"tengu_amber_prism", "permission denial context"),
|
||||
(b"tengu_hawthorn_steeple", "context windowing"),
|
||||
(b"tengu_loud_sugary_rock", "Opus 4.7 terse output guidance"),
|
||||
(b"tengu_verified_vs_assumed", "verified-vs-assumed reporting"),
|
||||
(b"tengu_pewter_brook", "fullscreen TUI default"),
|
||||
]
|
||||
|
||||
tool_gates: list[Gate] = [
|
||||
(b"tengu_chrome_auto_enable", "auto-enable chrome devtools"),
|
||||
(b"tengu_plum_vx3", "web search reranking"),
|
||||
# (b"tengu_moth_copse", "relevant memory recall"), # auto-recall; pollutes unrelated convos
|
||||
(b"tengu_cork_m4q", "batch command processing"),
|
||||
(b"tengu_harbor", "plugin marketplace"),
|
||||
(b"tengu_harbor_permissions", "plugin permissions"),
|
||||
(b"tengu_relay_chain_v1", "parallel command chaining guidance"),
|
||||
(b"tengu_edit_minimalanchor_jrn", "Edit tool minimal-anchor instructions"),
|
||||
(b"tengu_slate_reef", "Read tool clearer offset/limit docs"),
|
||||
(b"tengu_otk_slot_v1", "output-token escalation for complex tasks"),
|
||||
(b"tengu_onyx_basin_m1k", "subagent tool-result truncation"),
|
||||
(b"tengu_sub_nomdrep_q7k", "block subagent report .md writes"),
|
||||
(b"tengu_amber_sentinel", "Monitor tool for streaming bg scripts"),
|
||||
(b"tengu_miraculo_the_bard", "skip penguin-mode startup prefetch"),
|
||||
(b"tengu_noreread_q7m_velvet", "sharper 'wasted read' feedback"),
|
||||
]
|
||||
|
||||
flip_gates(core_gates + memory_gates + ux_gates + tool_gates)
|
||||
|
||||
# --- Bump background agent timeout from 120s to 240s ---
|
||||
|
||||
patch(
|
||||
"background agent timeout",
|
||||
rb'"tengu_auto_background_agents",![01]\)\)return 120000',
|
||||
lambda m: m[0].replace(b"120000", b"240000"),
|
||||
)
|
||||
|
||||
Path(sys.argv[1]).write_bytes(data)
|
||||
137
graphical/llm/statusline-command.nu
Normal file
137
graphical/llm/statusline-command.nu
Normal file
|
|
@ -0,0 +1,137 @@
|
|||
#!/usr/bin/env -S nu --no-config-file
|
||||
|
||||
def format-duration [ms: int] {
|
||||
let total_s = $ms // 1000
|
||||
let h = $total_s // 3600
|
||||
let m = ($total_s mod 3600) // 60
|
||||
let s = $total_s mod 60
|
||||
if $h > 0 {
|
||||
$"($h)h($m | fill -a r -w 2 -c '0')m($s | fill -a r -w 2 -c '0')s"
|
||||
} else if $m > 0 {
|
||||
$"($m)m($s | fill -a r -w 2 -c '0')s"
|
||||
} else {
|
||||
$"($s)s"
|
||||
}
|
||||
}
|
||||
|
||||
def color-for-pct [pct: number] {
|
||||
let pct_int = $pct | math floor | into int
|
||||
if $pct_int >= 80 {
|
||||
"\e[31m"
|
||||
} else if $pct_int >= 50 {
|
||||
"\e[33m"
|
||||
} else {
|
||||
"\e[32m"
|
||||
}
|
||||
}
|
||||
|
||||
def format-rate-limits [input: record] {
|
||||
let session_pct = try { $input | get rate_limits.five_hour.used_percentage } catch { null }
|
||||
let week_pct = try { $input | get rate_limits.seven_day.used_percentage } catch { null }
|
||||
|
||||
let session_part = if $session_pct != null {
|
||||
let c = color-for-pct $session_pct
|
||||
let v = $session_pct | math round --precision 0 | into int
|
||||
$"session: ($c)($v)%\e[0m"
|
||||
} else { "" }
|
||||
let week_part = if $week_pct != null {
|
||||
let c = color-for-pct $week_pct
|
||||
let v = $week_pct | math round --precision 0 | into int
|
||||
$"week: ($c)($v)%\e[0m"
|
||||
} else { "" }
|
||||
|
||||
[$session_part $week_part] | where {|x| $x | is-not-empty} | str join " "
|
||||
}
|
||||
|
||||
|
||||
# --- Main ---
|
||||
let input = (^cat | from json)
|
||||
|
||||
let usage_info = format-rate-limits $input
|
||||
|
||||
let model_name = ($input | get model?.display_name? | default ($input | get model?.id? | default "unknown"))
|
||||
let used_pct = ($input | get context_window?.used_percentage? | default null)
|
||||
let total_cost = ($input | get cost?.total_cost_usd? | default 0)
|
||||
let total_input = ($input | get context_window?.s_in? | default ($input | get context_window?.total_input_tokens? | default 0))
|
||||
let total_output = ($input | get context_window?.s_out? | default ($input | get context_window?.total_output_tokens? | default 0))
|
||||
let duration_ms = ($input | get cost?.total_duration_ms? | default 0)
|
||||
let api_duration_ms = ($input | get cost?.total_api_duration_ms? | default 0)
|
||||
let lines_added = ($input | get cost?.total_lines_added? | default 0)
|
||||
let lines_removed = ($input | get cost?.total_lines_removed? | default 0)
|
||||
let exceeds_200k = ($input | get exceeds_200k_tokens? | default false)
|
||||
|
||||
let cache_read = ($input | get context_window?.cache_read_tokens? | default 0)
|
||||
let cache_create = ($input | get context_window?.cache_creation_tokens? | default 0)
|
||||
|
||||
let total_tokens = $total_input + $total_output
|
||||
|
||||
def format-tokens [n: int] {
|
||||
if $n >= 1_000_000 {
|
||||
$"($n / 1_000_000.0 | math round --precision 1)M"
|
||||
} else if $n >= 1_000 {
|
||||
$"($n / 1_000.0 | math round --precision 1)k"
|
||||
} else {
|
||||
$"($n)"
|
||||
}
|
||||
}
|
||||
|
||||
let in_display = (format-tokens ($total_input | into int))
|
||||
let out_display = (format-tokens ($total_output | into int))
|
||||
let tok_display = $"($in_display)/($out_display)"
|
||||
|
||||
let cache_total = $cache_read + $cache_create
|
||||
let cache_display = if $cache_total > 0 {
|
||||
let cache_pct = ($cache_read * 100 / $cache_total | math round --precision 0 | into int)
|
||||
let cache_color = if $cache_pct >= 70 {
|
||||
"\e[32m"
|
||||
} else if $cache_pct >= 40 {
|
||||
"\e[33m"
|
||||
} else {
|
||||
"\e[31m"
|
||||
}
|
||||
$" cache:($cache_color)($cache_pct)%\e[0m"
|
||||
} else { "" }
|
||||
|
||||
let context_display = if $used_pct != null {
|
||||
let color = color-for-pct $used_pct
|
||||
let pct_str = $used_pct | math round --precision 1
|
||||
$"($color)($pct_str)%\e[0m"
|
||||
} else { "--" }
|
||||
|
||||
let cost_cents = ($total_cost * 100 | math round | into int)
|
||||
let cost_dollars = $cost_cents // 100
|
||||
let cost_frac = ($cost_cents mod 100 | math abs | into string | fill -a r -w 2 -c '0')
|
||||
let cost_display = $"$($cost_dollars).($cost_frac)"
|
||||
let elapsed_display = (format-duration ($duration_ms | into int))
|
||||
let wait_display = (format-duration ($api_duration_ms | into int))
|
||||
let churn_display = $"\e[32m+($lines_added)\e[0m/\e[31m-($lines_removed)\e[0m"
|
||||
let marker_200k = if $exceeds_200k { " | \e[31m!200k\e[0m" } else { "" }
|
||||
def format-cwd [dir: string] {
|
||||
if ($dir | is-empty) { return "" }
|
||||
let home = ($env.HOME? | default "")
|
||||
let display = if ($home | is-not-empty) and ($dir | str starts-with $home) {
|
||||
let rel = ($dir | str replace $home "" | str trim -l -c '/')
|
||||
$"~/($rel)"
|
||||
} else {
|
||||
$dir
|
||||
}
|
||||
let parts = ($display | split row "/")
|
||||
let shortened = if ($parts | length) <= 5 {
|
||||
$display
|
||||
} else {
|
||||
let tail = ($parts | last 5 | str join "/")
|
||||
$"…/($tail)"
|
||||
}
|
||||
$shortened
|
||||
}
|
||||
|
||||
let cwd_raw = ($input | get workspace?.current_dir? | default "")
|
||||
let cwd_display = if ($cwd_raw | is-not-empty) {
|
||||
let formatted = (format-cwd $cwd_raw)
|
||||
$" | ($formatted)"
|
||||
} else { "" }
|
||||
let quota_section = if ($usage_info | is-not-empty) {
|
||||
" | (usage) " + $usage_info
|
||||
} else { "" }
|
||||
|
||||
print -n $"($model_name) | Ctx: ($context_display) | ($tok_display)($cache_display) | ($cost_display) | t:($elapsed_display) w:($wait_display) | ($churn_display)($marker_200k)($quota_section)($cwd_display)"
|
||||
|
|
@ -1,9 +1,11 @@
|
|||
{
|
||||
config,
|
||||
pkgs,
|
||||
mkWrappers,
|
||||
...
|
||||
}:
|
||||
let
|
||||
inherit (mkWrappers pkgs) wrap;
|
||||
ui = config.rice.roles config.rice.palette.hex;
|
||||
imvConfig = pkgs.writeText "imv-config" ''
|
||||
[options]
|
||||
|
|
@ -12,14 +14,10 @@ let
|
|||
overlay_text_color=${ui.fg}
|
||||
overlay_background_color=${ui.surface}
|
||||
'';
|
||||
imvWrapped = pkgs.symlinkJoin {
|
||||
imvWrapped = wrap {
|
||||
name = "imv";
|
||||
paths = [ pkgs.imv ];
|
||||
nativeBuildInputs = [ pkgs.makeWrapper ];
|
||||
postBuild = ''
|
||||
wrapProgram $out/bin/imv \
|
||||
--set imv_config "${imvConfig}"
|
||||
'';
|
||||
pkg = pkgs.imv;
|
||||
envs = { imv_config = "${imvConfig}"; };
|
||||
};
|
||||
in
|
||||
with pkgs;
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@ let
|
|||
--set XDG_CONFIG_HOME "${rbwConfigDir}"
|
||||
done
|
||||
'';
|
||||
meta.mainProgram = "rbw";
|
||||
};
|
||||
in
|
||||
{
|
||||
|
|
|
|||
|
|
@ -10,12 +10,8 @@
|
|||
let
|
||||
inherit (config) rice;
|
||||
in
|
||||
(with pkgs.kdePackages; [
|
||||
[
|
||||
pkgs.gtk-engine-murrine
|
||||
breeze
|
||||
breeze.qt5
|
||||
])
|
||||
++ [
|
||||
rice.gtk-theme.package
|
||||
rice.fonts.sans.package
|
||||
rice.icons.package
|
||||
|
|
@ -27,7 +23,9 @@
|
|||
config = {
|
||||
theme = {
|
||||
colorScheme =
|
||||
let ui = config.rice.roles config.rice.palette.hex; in
|
||||
let
|
||||
ui = config.rice.roles config.rice.palette.hex;
|
||||
in
|
||||
pkgs.runCommand "theme.colors" { } ''
|
||||
sed \
|
||||
-e "s|@bg@|${ui.bg}|g" \
|
||||
|
|
@ -43,7 +41,7 @@
|
|||
> $out
|
||||
'';
|
||||
iconTheme = config.rice.icons.name;
|
||||
style = "breeze";
|
||||
style = "fusion";
|
||||
font = with config.rice.fonts.sans; {
|
||||
family = name;
|
||||
size = size;
|
||||
|
|
|
|||
|
|
@ -2,55 +2,74 @@
|
|||
pkgs,
|
||||
lib,
|
||||
config,
|
||||
mkWrappers,
|
||||
...
|
||||
}:
|
||||
(scope "apps.terminal" <| pkgs.foot)
|
||||
// scope "programs.foot" {
|
||||
enable = true;
|
||||
enableFishIntegration = true;
|
||||
settings = {
|
||||
main =
|
||||
let
|
||||
font =
|
||||
config.rice.fonts.monospace.name + ":size=" + (builtins.toString config.rice.fonts.monospace.size);
|
||||
in
|
||||
{
|
||||
inherit font;
|
||||
font-bold = font;
|
||||
font-italic = font;
|
||||
};
|
||||
bell = {
|
||||
system = true;
|
||||
urgent = true;
|
||||
notify = true;
|
||||
visual = true;
|
||||
};
|
||||
colors-dark =
|
||||
let
|
||||
pal = config.rice.palette.shortHex;
|
||||
in
|
||||
{
|
||||
background = pal.util.bg;
|
||||
foreground = pal.util.fg;
|
||||
regular0 = pal.normal.black;
|
||||
regular1 = pal.normal.red;
|
||||
regular2 = pal.normal.green;
|
||||
regular3 = pal.normal.yellow;
|
||||
regular4 = pal.normal.blue;
|
||||
regular5 = pal.normal.magenta;
|
||||
regular6 = pal.normal.cyan;
|
||||
regular7 = pal.normal.white;
|
||||
bright0 = pal.bright.black;
|
||||
bright1 = pal.bright.red;
|
||||
bright2 = pal.bright.green;
|
||||
bright3 = pal.bright.yellow;
|
||||
bright4 = pal.bright.blue;
|
||||
bright5 = pal.bright.magenta;
|
||||
bright6 = pal.bright.cyan;
|
||||
bright7 = pal.bright.white;
|
||||
let
|
||||
inherit (mkWrappers pkgs) wrap;
|
||||
font =
|
||||
config.rice.fonts.monospace.name + ":size=" + (builtins.toString config.rice.fonts.monospace.size);
|
||||
pal = config.rice.palette.shortHex;
|
||||
|
||||
selection-foreground = pal.util.fg_sel;
|
||||
selection-background = pal.util.bg_sel;
|
||||
};
|
||||
footConfig = pkgs.writeText "foot.ini" ''
|
||||
[main]
|
||||
font=${font}
|
||||
font-bold=${font}
|
||||
font-italic=${font}
|
||||
|
||||
[bell]
|
||||
system=yes
|
||||
urgent=yes
|
||||
notify=yes
|
||||
visual=yes
|
||||
|
||||
[colors-dark]
|
||||
background=${pal.util.bg}
|
||||
foreground=${pal.util.fg}
|
||||
regular0=${pal.normal.black}
|
||||
regular1=${pal.normal.red}
|
||||
regular2=${pal.normal.green}
|
||||
regular3=${pal.normal.yellow}
|
||||
regular4=${pal.normal.blue}
|
||||
regular5=${pal.normal.magenta}
|
||||
regular6=${pal.normal.cyan}
|
||||
regular7=${pal.normal.white}
|
||||
bright0=${pal.bright.black}
|
||||
bright1=${pal.bright.red}
|
||||
bright2=${pal.bright.green}
|
||||
bright3=${pal.bright.yellow}
|
||||
bright4=${pal.bright.blue}
|
||||
bright5=${pal.bright.magenta}
|
||||
bright6=${pal.bright.cyan}
|
||||
bright7=${pal.bright.white}
|
||||
selection-foreground=${pal.util.fg_sel}
|
||||
selection-background=${pal.util.bg_sel}
|
||||
|
||||
[tabs]
|
||||
enabled=yes
|
||||
position=bottom
|
||||
inherit-cwd=yes
|
||||
style=gradient
|
||||
label-padding=15
|
||||
height=26
|
||||
background=${pal.bright.black}
|
||||
foreground=${pal.util.fg}
|
||||
active-background=${pal.util.bg_sel}
|
||||
active-foreground=${pal.util.fg_sel}
|
||||
layout=floating
|
||||
tab-width=180
|
||||
tab-padding=10
|
||||
margin=8
|
||||
'';
|
||||
|
||||
footPatched = pkgs.foot.overrideAttrs (old: {
|
||||
patches = (old.patches or [ ]) ++ [ ./foot-tabs.patch ];
|
||||
});
|
||||
|
||||
foot = wrap {
|
||||
name = "foot";
|
||||
pkg = footPatched;
|
||||
args = [ "--config=${footConfig}" ];
|
||||
};
|
||||
}
|
||||
in
|
||||
scope "apps.terminal" foot
|
||||
|
|
|
|||
|
|
@ -6,9 +6,9 @@
|
|||
|
||||
bunker.kernel = {
|
||||
enable = true;
|
||||
cpuArch = "MZEN3";
|
||||
version = "6.19";
|
||||
hardened = false;
|
||||
lto = "none";
|
||||
version = "7.0";
|
||||
# cpuArch = "MZEN3";
|
||||
# hardened = false;
|
||||
# lto = "none";
|
||||
};
|
||||
}
|
||||
|
|
|
|||
15
hosts/quiver/ssh.nix
Normal file
15
hosts/quiver/ssh.nix
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
_: {
|
||||
services.openssh = {
|
||||
enable = true;
|
||||
listenAddresses = [
|
||||
{
|
||||
addr = "100.64.0.3";
|
||||
port = 22;
|
||||
}
|
||||
{
|
||||
addr = "192.168.20.7";
|
||||
port = 22;
|
||||
}
|
||||
];
|
||||
};
|
||||
}
|
||||
|
|
@ -20,6 +20,7 @@ in
|
|||
mainUser = info.username;
|
||||
machineName = name;
|
||||
getPkgs = builtins.attrValues;
|
||||
mkWrappers = import ./wrappers.nix lib;
|
||||
getFlakePkg = p: p.packages.${info.system}.default;
|
||||
getFlakePkg' = p: n: p.packages.${info.system}.${n};
|
||||
stdenv.hostPlatform = info.system;
|
||||
|
|
|
|||
20
lib/wrappers.nix
Normal file
20
lib/wrappers.nix
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
lib: pkgs:
|
||||
let
|
||||
wrap =
|
||||
{ name, pkg, args ? [ ], envs ? { } }:
|
||||
let
|
||||
argsStr = lib.concatStringsSep " " (map (a: ''--add-flags "${a}"'') args);
|
||||
envsStr = lib.concatStringsSep " " (lib.mapAttrsToList (k: v: ''--set ${k} "${v}"'') envs);
|
||||
in
|
||||
pkgs.symlinkJoin {
|
||||
inherit name;
|
||||
paths = [ pkg ];
|
||||
nativeBuildInputs = [ pkgs.makeWrapper ];
|
||||
postBuild = "wrapProgram $out/bin/${name} ${argsStr} ${envsStr}";
|
||||
};
|
||||
|
||||
wrapXdg =
|
||||
name: pkg: configDir:
|
||||
wrap { inherit name pkg; envs = { XDG_CONFIG_HOME = configDir; }; };
|
||||
in
|
||||
{ inherit wrap wrapXdg; }
|
||||
Loading…
Add table
Add a link
Reference in a new issue