niri, ocaml meat

This commit is contained in:
atagen 2024-11-23 17:20:39 +11:00
parent cd61813078
commit c470c63ab2
25 changed files with 583 additions and 756 deletions

799
flake.lock generated

File diff suppressed because it is too large Load diff

View file

@ -3,6 +3,7 @@
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
nixpkgs-stable.url = "github:NixOS/nixpkgs/nixos-24.05";
nur.url = "github:/nix-community/NUR";
@ -27,7 +28,6 @@
flatpaks.url = "github:gmodena/nix-flatpak";
madness.url = "github:antithesishq/madness";
nh.url = "github:viperML/nh";
@ -44,12 +44,11 @@
};
meat = {
url = "path:/home/bolt/code/meat";
url = "path:/home/bolt/code/meat-ocaml";
inputs.nixpkgs.follows = "nixpkgs";
inputs.lix.follows = "lix";
inputs.lix-module.follows = "lix-module";
inputs.nh.follows = "nh";
inputs.rust-overlay.follows = "rust-overlay";
};
comfyui.url = "path:./flakes/ComfyUI";
@ -69,6 +68,8 @@
murex-starship.url = "path:./flakes/murex-module-starship";
niri.url = "github:sodiboo/niri-flake";
ironbar.url = "github:JakeStanger/ironbar";
};
outputs = {
@ -79,10 +80,8 @@
flatpaks,
nix-index-database,
madness,
lix-module,
meat,
comfyui,
hyprland,
niri,
...
} @ inputs: let

View file

@ -3,11 +3,11 @@
"gguf": {
"flake": false,
"locked": {
"lastModified": 1729651119,
"narHash": "sha256-1TLoQS8rcJ5Y4VcWk3mAGg7/+jnjF/VN9QkhU99nCC4=",
"lastModified": 1732317027,
"narHash": "sha256-NX0S1Uu28Ro9lLYKI+JzBy/Gz2mNiSVu8MsdQNpdfYk=",
"owner": "city96",
"repo": "ComfyUI-GGUF",
"rev": "6561064dcfb3dfa638e3739506acfd34924e1cc5",
"rev": "57562d54a57d4beda3a94fef6f354e090aa02a77",
"type": "github"
},
"original": {
@ -18,10 +18,10 @@
},
"nixpkgs": {
"locked": {
"lastModified": 1729880355,
"narHash": "sha256-RP+OQ6koQQLX5nw0NmcDrzvGL8HDLnyXt/jHhL1jwjM=",
"path": "/nix/store/wb6agba4kfsxpbnb5hzlq58vkjzvbsk6-source",
"rev": "18536bf04cd71abd345f9579158841376fdd0c5a",
"lastModified": 1732014248,
"narHash": "sha256-y/MEyuJ5oBWrWAic/14LaIr/u5E0wRVzyYsouYY3W6w=",
"path": "/nix/store/c9wv7i0af6mysmy65x6nvyfw5izzxv4g-source",
"rev": "23e89b7da85c3640bbc2173fe04f4bd114342367",
"type": "path"
},
"original": {

View file

@ -1,20 +1,20 @@
{
pkgs,
src,
...
pkgs,
src,
...
}:
pkgs.stdenvNoCC.mkDerivation {
pname = "comfyui-openpose-editor";
version = "dev-${builtins.toString src.lastModified}";
inherit src;
pname = "comfyui-openpose-editor";
version = "dev-${builtins.toString src.lastModified}";
inherit src;
patches = [
./openpose_no_update.patch
];
patches = [
./openpose_no_update.patch
];
installPhase = ''
mkdir -p $out
cp -r * $out/
cp js/* $out/
'';
installPhase = ''
mkdir -p $out
cp -r * $out/
cp js/* $out/
'';
}

View file

@ -1,23 +1,23 @@
{
pkgs,
src,
python3Packages,
...
pkgs,
src,
python3Packages,
...
}: let
inherit (python3Packages) tensorrt onnx;
inherit (python3Packages) tensorrt onnx;
in
pkgs.stdenvNoCC.mkDerivation {
pname = "comfyui-tensorrt";
version = "dev-${builtins.toString src.lastModified}";
src = src;
pkgs.stdenvNoCC.mkDerivation {
pname = "comfyui-tensorrt";
version = "dev-${builtins.toString src.lastModified}";
src = src;
propagatedBuildInputs = [
tensorrt
onnx
];
propagatedBuildInputs = [
tensorrt
onnx
];
installPhase = ''
mkdir -p $out
cp -r * $out
'';
}
installPhase = ''
mkdir -p $out
cp -r * $out
'';
}

View file

@ -3,11 +3,11 @@
"comfyui": {
"flake": false,
"locked": {
"lastModified": 1730402285,
"narHash": "sha256-Al5oTuy6LsVpfOLHJ6YkY1Suc3HEXc8eR7jKJszli5c=",
"lastModified": 1732327155,
"narHash": "sha256-3k+qoBQjMKMnnGbtpptWwLRrrtsYIW5qIeHtm/T5G9Q=",
"owner": "comfyanonymous",
"repo": "ComfyUI",
"rev": "cc9cf6d1bd957d764ad418258b61d7e08187573b",
"rev": "839ed3368efd0f61a2b986f57fe9e0698fd08e9f",
"type": "github"
},
"original": {
@ -18,10 +18,10 @@
},
"nixpkgs": {
"locked": {
"lastModified": 1729880355,
"narHash": "sha256-RP+OQ6koQQLX5nw0NmcDrzvGL8HDLnyXt/jHhL1jwjM=",
"path": "/nix/store/wb6agba4kfsxpbnb5hzlq58vkjzvbsk6-source",
"rev": "18536bf04cd71abd345f9579158841376fdd0c5a",
"lastModified": 1732014248,
"narHash": "sha256-y/MEyuJ5oBWrWAic/14LaIr/u5E0wRVzyYsouYY3W6w=",
"path": "/nix/store/c9wv7i0af6mysmy65x6nvyfw5izzxv4g-source",
"rev": "23e89b7da85c3640bbc2173fe04f4bd114342367",
"type": "path"
},
"original": {

View file

@ -1,8 +0,0 @@
{
pkgs,
src,
...
}:
pkgs.stdenvNoCC.mkDerivation {
inherit src;
}

View file

@ -1,10 +0,0 @@
{
outputs = { nixpkgs, ... }: let
pkgs = import nixpkgs {};
in {
packages.x86_64-linux.meat = pkgs.callPackage ./default.nix;
};
}

View file

@ -1,138 +0,0 @@
#!/usr/bin/env murex
config: set proc force-tty true
config: set proc strict-types true
args meat_args %{
AllowAdditional: true
Flags: {
--all: bool
-a: --all
}
}
catch {
err $meat_args.error
exit 1
}
function meat {
if { is-null $ENV.FLAKE } {
meat_print(NO RECIPE FOUND)
exit
}
$pd = $PWD
cd $ENV.FLAKE
meat_print "----- MEAT ----------------------------------------" true
$a = $args[Additional]
if { $a -> len } then {
meat_parse_cmd $a
} else {
meat_print_help
}
meat_print "---------------------------------------------------" true
cd $pd
}
function meat_print (t: str, !title: bool [false]) {
if {$title} {
out (
$t
)
} else {
out (
$t
)
}
}
function meat_parse_cmd (args: json) {
out args $args
out arglen $args -> count
out argscast $args -> cast json
out argscast $args -> cast json -> count
$cmd = $args[ 0 ]
out cmd $cmd
if { ${$args -> len} > 1 } then {
$opts = ${$args -> ![ 0 ]}
}
out opts $opts
switch $cmd {
case "yum" {
meat_print (CONSUMING DELICIOUS MEATS..)
nh os switch @opts
}
case "poke" {
meat_print (PREPARING SUSPICIOUS MEATS..)
nh os test @opts
}
case "cook" {
meat_print (PREPARING MEATS..)
nh os build @opts
}
case "fresh" {
meat_print (PROCESSING FRESH MEATS..)
meat_do_fresh $opts
}
case "look" {
meat_print (INSPECTING MEAT..)
nix flake info @opts
}
case "gut" {
meat_print (CLEANING MEAT STORES..)
nh clean all @opts
}
default { meat_print_help }
}
}
function meat_print_help {
out ( FRESH - HUNT LATEST MEATS
..N - HUNT LATEST SUBMEATS OF N
..-A - HUNT ALL SUBMEATS
YUM - CONSUME DELICIOUS MEATS
COOK - ONLY PREPARE MEATS
POKE - TASTE SUSPICIOUS MEATS
GUT - CLEAN MEAT STORES
LOOK - INSPECT MEAT)
}
function meat_do_fresh (!opts: str) {
# handle --all flag
if { $GLOBAL.args.flags.all } then {
recursive_update $ENV.FLAKE/flakes
cd $ENV.FLAKE
nix flake update
}
if { $opts } then {
# handle specified subflakes
$opts -> foreach subflake {
meat_print "GET NEW MEAT FOR $(subflake).."
recursive_update $ENV.FLAKE/flakes/$subflake
cd $ENV.FLAKE
nix flake update $subflake
}
}
# simple update
nix flake update
}
function recursive_update (path: str) {
if { $path.Exists } {
cd $path
# update subflakes
g */flake.nix -> foreach dir { recursive_update $dir }
# update this flake
$isflake = ${g flake.nix -> count} > 0
if { $isflake } then {
nix flake update
}
} else {
err "No such subflake at $path"
exit 1
}
}
$GLOBAL.args = $meat_args
meat

View file

@ -2,10 +2,10 @@
"nodes": {
"nixpkgs": {
"locked": {
"lastModified": 1729880355,
"narHash": "sha256-RP+OQ6koQQLX5nw0NmcDrzvGL8HDLnyXt/jHhL1jwjM=",
"path": "/nix/store/wb6agba4kfsxpbnb5hzlq58vkjzvbsk6-source",
"rev": "18536bf04cd71abd345f9579158841376fdd0c5a",
"lastModified": 1732014248,
"narHash": "sha256-y/MEyuJ5oBWrWAic/14LaIr/u5E0wRVzyYsouYY3W6w=",
"path": "/nix/store/c9wv7i0af6mysmy65x6nvyfw5izzxv4g-source",
"rev": "23e89b7da85c3640bbc2173fe04f4bd114342367",
"type": "path"
},
"original": {

View file

@ -2,10 +2,10 @@
"nodes": {
"nixpkgs": {
"locked": {
"lastModified": 1729880355,
"narHash": "sha256-RP+OQ6koQQLX5nw0NmcDrzvGL8HDLnyXt/jHhL1jwjM=",
"path": "/nix/store/wb6agba4kfsxpbnb5hzlq58vkjzvbsk6-source",
"rev": "18536bf04cd71abd345f9579158841376fdd0c5a",
"lastModified": 1732014248,
"narHash": "sha256-y/MEyuJ5oBWrWAic/14LaIr/u5E0wRVzyYsouYY3W6w=",
"path": "/nix/store/c9wv7i0af6mysmy65x6nvyfw5izzxv4g-source",
"rev": "23e89b7da85c3640bbc2173fe04f4bd114342367",
"type": "path"
},
"original": {

View file

@ -19,6 +19,7 @@ in {
./util/murex.nix
./util/name.nix
inputs.nix-index-database.hmModules.nix-index
inputs.ironbar.homeManagerModules.default
];
nix.gc = {
@ -57,7 +58,7 @@ in {
systemd.user.targets.tray = {
Unit = {
Description = "Home Manager System Tray";
Requires = ["graphical-session-pre.target"];
Requires = ["graphical-session.target"];
};
};
@ -90,6 +91,6 @@ in {
systemd.user.startServices = "sd-switch";
ezServices = {
ckb-next = "${getExe pkgs.ckb-next} -c -b";
ckb-next = "${getExe inputs.nixpkgs-stable.legacyPackages.x86_64-linux.ckb-next} -c -b";
};
}

View file

@ -14,6 +14,5 @@
nautilus
thunderbird
keepassxc
wofi
];
}

View file

@ -2,26 +2,33 @@
pkgs,
lib,
config,
inputs,
...
}: let
services = let
inherit (pkgs) ironbar swaynotificationcenter;
inherit (pkgs) swaynotificationcenter sway-audio-idle-inhibit;
in [
ironbar
swaynotificationcenter
sway-audio-idle-inhibit
];
errata = let
inherit (pkgs) anyrun;
inherit (pkgs) sirula avizo playerctl;
in [
anyrun
sirula
avizo
playerctl
];
extraServices = let
inherit (pkgs) swayidle swaylock swaybg systemd niri-unstable;
inherit (pkgs) swayidle swaybg systemd niri-unstable avizo;
in [
{
name = "swaybg";
value = "${lib.getExe swaybg} -m fill -i /home/${config.mainUser}/.nix/wallpaper.jpg";
}
{
name = "avizo-service";
value = "${lib.getExe' avizo "avizo-service"}";
}
{
name = "swayidle";
value = let
@ -30,27 +37,23 @@
systemctl = lib.getExe' systemd "systemctl";
in ''
${lib.getExe swayidle} -w \
timeout 1200 '${systemctl} suspend' \
timeout 601 '${niri} msg action power-off-monitors' \
timeout 600 '${lock} -f' \
timeout 1800 '${systemctl} suspend' \
timeout 600 '${niri} msg action power-off-monitors' \
timeout 599 '${lock} -f' \
before-sleep '${lock} -f'
'';
}
];
in {
home.packages = errata;
ezServices = let
attrify =
map (entry: {
name = "${entry.pname}";
ezServices = builtins.listToAttrs (
(map (entry: {
name = "${lib.strings.toLower entry.pname}";
value = "${lib.getExe entry}";
})
services;
in
builtins.listToAttrs (
attrify
++ extraServices
);
services)
++ extraServices
);
programs.niri.settings = let
inherit (lib) range nameValuePair mapAttrs';
inherit (builtins) listToAttrs replaceStrings;
@ -80,38 +83,45 @@ in {
}) (range 0 6));
in
{
"Mod+D".action.spawn = "anyrun";
"Mod+D".action.spawn = "sirula";
"Mod+F".action.spawn = "firefox";
"Mod+E".action.spawn = "nautilus";
"Mod+Return".action.spawn = "kitty";
"Mod+Shift+E".action.spawn = "wlogout";
"Mod+Equal".action.spawn = "keepassxc";
"Mod+Shift+Q".action = actions.close-window;
"Mod+Shift+S".action = actions.screenshot;
"Mod+R".action = actions.switch-preset-column-width;
"Mod+Shift+Space".action = actions.maximize-column;
"Mod+Shift+R".action = actions.maximize-column;
"XF86AudioRaiseVolume".action.spawn = ["volumectl" "-u" "up"];
"XF86AudioLowerVolume".action.spawn = ["volumectl" "-u" "down"];
"XF86AudioMute".action.spawn = ["volumectl" "toggle-mute"];
"XF86AudioStop".action.spawn = ["playerctl" "stop"];
"XF86AudioPlay".action.spawn = ["playerctl" "play-pause"];
"XF86AudioNext".action.spawn = ["playerctl" "next"];
"XF86AudioPrev".action.spawn = ["playerctl" "previous"];
}
// makeDirBind "Mod" "focus-window-or-workspace-$DIR" vBinds
// makeDirBind "Mod" "focus-column-or-monitor-$DIR" hBinds
// makeDirBind "Mod+Shift" "move-window-to-workspace-$DIR" vBinds
// makeDirBind "Mod+Shift" "move-column-$DIR-or-to-monitor-$DIR" hBinds
// makeDirBind "Mod+Ctrl" "consume-or-expel-window-$DIR" hBinds
// makeDirBind "Mod+Ctrl" "move-window-$DIR" vBinds
// makeWsBind "Mod" "focus-workspace"
// makeWsBind "Mod+Shift" "move-window-to-workspace";
prefer-no-csd = true;
outputs = {
"Unknown-1".enable = false;
"HDMI-A-2" = {
transform.rotation = 90;
scale = 1;
};
"DP-1" = {
variable-refresh-rate = true;
scale = 1;
};
"HDMI-A-2" = {
transform.rotation = 90;
scale = 1;
};
};
input = {
warp-mouse-to-focus = true;
workspace-auto-back-and-forth = true;
};
cursor = {
hide-after-inactive-ms = 5000;
@ -130,11 +140,87 @@ in {
0.5
(1.0 / 3.0)
];
focus-ring = let
pal = pkgs.lib.nix-rice.palette.toRgbHex pkgs.rice.palette;
in {
active = {color = pal.bright.yellow;};
inactive = {color = pal.normal.black;};
};
};
prefer-no-csd = true;
hotkey-overlay.skip-at-startup = true;
};
programs.swaylock = {
enable = true;
settings.color = (pkgs.lib.nix-rice.palette.toRGBShortHex pkgs.rice.palette).normal.black;
};
programs.ironbar = {
enable = true;
systemd = true;
config = {
monitors."DP-1" = {
position = "top";
height = 16;
start = [
{
type = "music";
player_type = "mpris";
}
];
center = [
{
type = "focused";
icon_size = 16;
truncate = "middle";
}
];
end = [
{type = "clock";}
{type = "tray";}
];
};
};
};
systemd.user.services.ironbar = {
Unit.PartOf = ["graphical-session.target"];
Unit.After = [
"graphical-session.target"
"niri.service"
];
Install.WantedBy = ["graphical-session.target"];
};
xdg.configFile = {
"sirula/config.toml".text = ''
exclusive = false
icon_size = 24
lines = 2
anchor_left = false
anchor_right = true
anchor_bottom = false
anchor_top = false
width = 320
height = 720
command_prefix = ":"
frequent_first = true
recent_first = true
term_command = "kitty {}"
'';
"sirula/style.css".text = let
pal = pkgs.lib.nix-rice.palette.toRgbHex pkgs.rice.palette;
in ''
#root-box {
background-color: ${pal.normal.black};
color: ${pal.normal.yellow};
font-family: '${pkgs.rice.fonts.sans.name}';
}
/* what's the name of the highlighted search text?
color: ${pal.normal.white};
*/
'';
};
}

View file

@ -1,5 +1,4 @@
{...}:
{
{...}: {
programs.atuin = {
enable = true;
enableZshIntegration = true;
@ -12,5 +11,4 @@
style = "compact";
};
};
}

View file

@ -37,6 +37,7 @@ in {
color14 = bright.cyan;
color15 = bright.white;
sync_to_monitor = "yes";
# shell = "elvish";
};
};
}

View file

@ -8,6 +8,7 @@
in {
programs.wlogout = {
enable = true;
package = pkgs.wleave;
layout = builtins.fromJSON (builtins.readFile ../dots/wlogout/layout);
style = with palette-hex; (builtins.replaceStrings
[
@ -34,4 +35,33 @@ in {
]
(builtins.readFile ../dots/wlogout/style.css));
};
# xdg.configFile = {
# "wleave/layout".text = builtins.readFile ../dots/wlogout/layout;
# "wleave/style.css".text = with palette-hex; (builtins.replaceStrings
# [
# "/usr/share/wlogout"
# "/etc/wlogout"
# "#WINBG"
# "#BTNCOL"
# "#BTNBG"
# "#BTNFOCUSBG"
# "#WINLOGO"
# ]
# [
# "${pkgs.wleave}/share/wleave"
# "${pkgs.wleave}/etc/wleave"
# util.bg
# bright.yellow
# util.bg
# normal.black
# (builtins.path {
# name = "winlogo";
# path = ../icons/winlogo.png;
# sha256 = "7c1ff96b553c7a7ca3a7b7cf8efe830ab7feea92355aed288a10ee7347c24108";
# })
# ]
# (builtins.readFile ../dots/wlogout/style.css));
# };
home.packages = [pkgs.wlogout];
}

View file

@ -15,17 +15,19 @@ in {
"https://cache.nixos.org"
"https://nix-community.cachix.org"
"https://helix.cachix.org"
"https://cosmic.cachix.org"
"https://cuda-maintainers.cachix.org"
"https://hyprland.cachix.org"
"https://cache.garnix.io"
"https://walker-git.cachix.org"
"https://anmonteiro.nix-cache.workers.dev"
];
trusted-public-keys = [
"cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY="
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
"helix.cachix.org-1:ejp9KQpR1FBI2onstMQ34yogDm4OgU2ru6lIwPvuCVs="
"cosmic.cachix.org-1:Dya9IyXD4xdBehWjrkPv6rtxpmMdRel02smYzA85dPE="
"cuda-maintainers.cachix.org-1:0dq3bujKpuEPMCX6U4WylrUDZ9JyUG0VpVZa7CNfq5E="
"hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="
"cache.garnix.io:CTFPyKSLcx5RMJKfLo5EEPUObbA78b0YQ2DTCJXqr9g="
"walker-git.cachix.org-1:vmC0ocfPWh0S/vRAQGtChuiZBTAe4wiKDeyyXM0/7pM="
"ocaml.nix-cache.com-1:/xI2h2+56rwFfKyyFVbkJSeGqSIYMC/Je+7XXqGKDIY="
];
};
}

View file

@ -54,22 +54,34 @@
./modules/docs.nix
./modules/nix-meta.nix
./modules/anal-retentive.nix
./modules/niri.nix
];
programs.niri = {
enable = true;
package = pkgs.niri-unstable;
};
hardware.enableRedistributableFirmware = true;
hardware.enableAllFirmware = true;
boot.tmp.useTmpfs = true;
services.libinput.enable = true;
services.udev.extraHwdb = ''
evdev:atkbd:*
KEYBOARD_KEY_3a=esc
'';
# services.xserver.xkb.options = "caps:swapescape";
services.xserver.xkb.extraLayouts."swap" = {
description = "caps swap";
languages = [ "eng" ];
symbolsFile = pkgs.writeText "keyboard" ''
xkb_symbols
{
include "us(basic)"
# busted as hell
# services.usbmuxd.enable = true; # for iphone
key <CAPS> {[ Escape ]};
}
'';
};
services.kmscon.useXkbConfig = true;
console.useXkbConfig = true;
services.libinput.enable = true;
hardware.graphics.enable = true;
hardware.graphics.enable32Bit = true;
@ -90,10 +102,8 @@
eza
git
jujutsu
];
services.atuin.enable = true;
programs.nh = {

View file

@ -1,8 +0,0 @@
{ pkgs, inputs, ...}:
{
programs.hyprland = {
enable = true;
package = inputs.hyprland.packages.x86_64-linux.hyprland;
portalPackage = inputs.hyprland.packages.x86_64-linux.xdg-desktop-portal-hyprland;
};
}

View file

@ -1,4 +1,18 @@
{pkgs, ...}: {
{
pkgs,
lib,
...
}: {
services.greetd = {
enable = true;
settings = {
default_session = let
tuigreet = "${lib.getExe pkgs.greetd.tuigreet}";
in {
command = "${tuigreet} -g yo -r";
};
};
};
programs.niri = {
enable = true;
package = pkgs.niri-unstable;

View file

@ -1,10 +1,11 @@
{pkgs, ...}: let
inherit (pkgs) murex zsh;
inherit (pkgs) murex zsh elvish;
in {
environment.pathsToLink = ["/share/zsh"];
programs.zsh.enable = true;
environment.systemPackages = [
murex
elvish
];
environment.shells = [murex];
users.defaultUserShell = murex;

View file

@ -3,6 +3,7 @@
lib,
pkgs,
mainUser,
inputs,
...
}: {
imports = [
@ -107,12 +108,15 @@
# };
# };
services.hardware.openrgb = {
enable = true;
motherboard = "amd";
};
# services.hardware.openrgb = {
# enable = true;
# motherboard = "amd";
# };
hardware.ckb-next.enable = true;
hardware.ckb-next= {
enable = true;
package = inputs.nixpkgs-stable.legacyPackages.x86_64-linux.ckb-next;
};
environment.systemPackages = with pkgs; [
wl-clipboard

View file

@ -9,8 +9,8 @@ in
src = pkgs.fetchFromGitHub {
owner = "nana-4";
repo = "materia-theme";
rev = "6e5850388a25f424b8193fe4523504d1dc364175";
sha256 = "sha256-I6hpH0VTmftU4+/pRbztuTQcBKcOFBFbNZXJL/2bcgU=";
rev = "d7f59a37ef51f893c28b55dc344146e04b2cd52c";
sha256 = "sha256-PnpFAmKEpfg3wBwShLYviZybWQQltcw7fpsQkTUZtww=";
};
buildInputs = with pkgs; [
sassc

View file

@ -1,5 +1,4 @@
final: prev:
let
final: prev: let
inherit (prev.lib.nix-rice) kitty-themes;
inherit (prev.lib.nix-rice.palette) toRGBShortHex toRgbHex;
# theme = kitty-themes.parseTheme ./op.pal;