attempts at mcsr
This commit is contained in:
parent
72b4b22594
commit
6b314f3992
10 changed files with 406 additions and 4 deletions
104
flake.lock
generated
104
flake.lock
generated
|
|
@ -1,5 +1,27 @@
|
|||
{
|
||||
"nodes": {
|
||||
"hjem": {
|
||||
"inputs": {
|
||||
"nix-darwin": "nix-darwin",
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
],
|
||||
"smfh": "smfh"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1767318528,
|
||||
"narHash": "sha256-I2zxtEafZbFbqXe71rjqwVeTDv8SIVLaSzQd39SwfwM=",
|
||||
"owner": "feel-co",
|
||||
"repo": "hjem",
|
||||
"rev": "8539013044624a257e8da370069107aea148e985",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "feel-co",
|
||||
"repo": "hjem",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"home-manager": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
|
|
@ -20,6 +42,27 @@
|
|||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nix-darwin": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"hjem",
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1765065051,
|
||||
"narHash": "sha256-b7W9WsvyMOkUScNxbzS45KEJp0iiqRPyJ1I3JBE+oEE=",
|
||||
"owner": "nix-darwin",
|
||||
"repo": "nix-darwin",
|
||||
"rev": "7e22bf538aa3e0937effcb1cee73d5f1bcc26f79",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-darwin",
|
||||
"repo": "nix-darwin",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nix-flatpak": {
|
||||
"locked": {
|
||||
"lastModified": 1767983141,
|
||||
|
|
@ -54,10 +97,71 @@
|
|||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"hjem": "hjem",
|
||||
"home-manager": "home-manager",
|
||||
"nix-flatpak": "nix-flatpak",
|
||||
"nixpkgs": "nixpkgs"
|
||||
}
|
||||
},
|
||||
"rust-overlay": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"hjem",
|
||||
"smfh",
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1763347184,
|
||||
"narHash": "sha256-6QH8hpCYJxifvyHEYg+Da0BotUn03BwLIvYo3JAxuqQ=",
|
||||
"owner": "oxalica",
|
||||
"repo": "rust-overlay",
|
||||
"rev": "08895cce80433978d5bfd668efa41c5e24578cbd",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "oxalica",
|
||||
"repo": "rust-overlay",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"smfh": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"hjem",
|
||||
"nixpkgs"
|
||||
],
|
||||
"rust-overlay": "rust-overlay",
|
||||
"systems": "systems"
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1763430012,
|
||||
"narHash": "sha256-06G7pXUdpMnUqR0JWWvV7sA8oNGOZU1cSLqQS1GMf7Y=",
|
||||
"owner": "feel-co",
|
||||
"repo": "smfh",
|
||||
"rev": "eddda76e3dd4c6deaea5f819f174fc16dbe70f90",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "feel-co",
|
||||
"repo": "smfh",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"systems": {
|
||||
"locked": {
|
||||
"lastModified": 1681028828,
|
||||
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-systems",
|
||||
"repo": "default",
|
||||
"type": "github"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
|
|
|
|||
|
|
@ -6,6 +6,8 @@
|
|||
home-manager.url = "github:nix-community/home-manager";
|
||||
home-manager.inputs.nixpkgs.follows = "nixpkgs";
|
||||
nix-flatpak.url = "github:gmodena/nix-flatpak/?ref=latest";
|
||||
hjem.url = "github:feel-co/hjem";
|
||||
hjem.inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
outputs =
|
||||
|
|
@ -33,12 +35,13 @@
|
|||
++ commonModules;
|
||||
};
|
||||
|
||||
# pc
|
||||
# pc
|
||||
nixosConfigurations.sandalphon = lib.nixosSystem {
|
||||
specialArgs = { inherit inputs; };
|
||||
modules = [
|
||||
./hosts/sandalphon/hardware-configuration.nix
|
||||
./hosts/sandalphon/configuration.nix
|
||||
./hosts/sandalphon/games.nix
|
||||
]
|
||||
++ commonModules;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -45,9 +45,6 @@ in
|
|||
};
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
prismlauncher # minecraft
|
||||
waywall # mcsr
|
||||
|
||||
r2modman
|
||||
];
|
||||
}
|
||||
|
|
|
|||
25
hosts/sandalphon/games.nix
Normal file
25
hosts/sandalphon/games.nix
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
imports = [ ./mcsr ];
|
||||
|
||||
# hardware = {
|
||||
# xone.enable = true;
|
||||
# xpadneo.enable = true;
|
||||
# };
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
prismlauncher # minecraft
|
||||
r2modman
|
||||
# osu-lazer-bin
|
||||
];
|
||||
|
||||
programs = {
|
||||
obs-studio = {
|
||||
enable = true;
|
||||
plugins = with pkgs.obs-studio-plugins; [
|
||||
obs-pipewire-audio-capture
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
46
hosts/sandalphon/mcsr/default.nix
Normal file
46
hosts/sandalphon/mcsr/default.nix
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
# credit to uku: https://git.uku3lig.net/uku/flake/src/branch/main/programs/mcsr
|
||||
{
|
||||
lib,
|
||||
pkgs,
|
||||
config,
|
||||
hjem,
|
||||
...
|
||||
}:
|
||||
|
||||
let
|
||||
ninjabrain-bot = pkgs.callPackage ./ninjabrain.nix { };
|
||||
waywork = pkgs.callPackage ./waywork.nix { };
|
||||
cfg = config.programs.waywall;
|
||||
in
|
||||
{
|
||||
options = {
|
||||
programs.waywall = {
|
||||
width = lib.mkOption {
|
||||
type = lib.types.int;
|
||||
default = 1920;
|
||||
};
|
||||
|
||||
height = lib.mkOption {
|
||||
type = lib.types.int;
|
||||
default = 1080;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
config = {
|
||||
environment.systemPackages = [ pkgs.waywall ];
|
||||
hjem.users.dea.files.".config/waywall/init.lua".text = ''
|
||||
package.path = package.path .. ";${waywork}/?.lua"
|
||||
local ninb_path = "${lib.getExe ninjabrain-bot}"
|
||||
local resolution = { w = ${toString cfg.width}, h = ${toString cfg.height} }
|
||||
local images = {
|
||||
eye_overlay = "${./eye-overlay.png}",
|
||||
thin = "${./yukata.jpg}",
|
||||
wide = "${./yukata.jpg}",
|
||||
tall = "${./yukata.jpg}",
|
||||
}
|
||||
-- end globals
|
||||
''
|
||||
+ builtins.readFile ./waywall.lua;
|
||||
};
|
||||
}
|
||||
BIN
hosts/sandalphon/mcsr/eye-overlay.png
Normal file
BIN
hosts/sandalphon/mcsr/eye-overlay.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 58 KiB |
51
hosts/sandalphon/mcsr/ninjabrain.nix
Normal file
51
hosts/sandalphon/mcsr/ninjabrain.nix
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
{
|
||||
lib,
|
||||
stdenvNoCC,
|
||||
fetchurl,
|
||||
libx11,
|
||||
libxinerama,
|
||||
libxkbcommon,
|
||||
libxt,
|
||||
makeWrapper,
|
||||
temurin-bin-17,
|
||||
}:
|
||||
stdenvNoCC.mkDerivation (finalAttrs: {
|
||||
pname = "ninjabrain-bot";
|
||||
version = "1.5.1";
|
||||
|
||||
src = fetchurl {
|
||||
url = "https://github.com/Ninjabrain1/Ninjabrain-Bot/releases/download/${finalAttrs.version}/Ninjabrain-Bot-${finalAttrs.version}.jar";
|
||||
hash = "sha256-Rxu9A2EiTr69fLBUImRv+RLC2LmosawIDyDPIaRcrdw=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ makeWrapper ];
|
||||
|
||||
dontUnpack = true;
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
install -Dm644 $src $out/share/ninjabrain-bot/ninjabrain-bot.jar
|
||||
|
||||
makeWrapper ${lib.getExe temurin-bin-17} $out/bin/ninjabrain-bot \
|
||||
--add-flags "-Dawt.useSystemAAFontSettings=on -jar $out/share/ninjabrain-bot/ninjabrain-bot.jar" \
|
||||
--prefix LD_LIBRARY_PATH : ${
|
||||
lib.makeLibraryPath [
|
||||
libx11
|
||||
libxinerama
|
||||
libxkbcommon
|
||||
libxt
|
||||
]
|
||||
}
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
|
||||
meta = {
|
||||
description = "Stronghold calculator for Minecraft speedrunning";
|
||||
homepage = "https://github.com/Ninjabrain1/Ninjabrain-Bot";
|
||||
license = lib.licenses.mit;
|
||||
platforms = lib.platforms.linux;
|
||||
mainProgram = "ninjabrain-bot";
|
||||
};
|
||||
})
|
||||
152
hosts/sandalphon/mcsr/waywall.lua
Normal file
152
hosts/sandalphon/mcsr/waywall.lua
Normal file
|
|
@ -0,0 +1,152 @@
|
|||
local waywall = require("waywall")
|
||||
local helpers = require("waywall.helpers")
|
||||
|
||||
local Scene = require("waywork.scene")
|
||||
local Modes = require("waywork.modes")
|
||||
local Keys = require("waywork.keys")
|
||||
local Processes = require("waywork.processes")
|
||||
|
||||
local scene = Scene.SceneManager.new(waywall)
|
||||
local ModeManager = Modes.ModeManager.new(waywall)
|
||||
|
||||
-- resolution is a magic global
|
||||
local thin_w = resolution.h * 0.28
|
||||
local tall_w = 384
|
||||
local tall_h = 16384
|
||||
|
||||
local e_src_scale = thin_w < 640 and 1 or 2
|
||||
local e_scale = 10
|
||||
local e_w = 49 * e_src_scale
|
||||
local e_h = 9 * e_src_scale
|
||||
|
||||
local eye_w = (resolution.w - tall_w) / 2
|
||||
local eye_h = (resolution.h * eye_w) / resolution.w
|
||||
local eye_dst = { x = 0, y = (resolution.h - eye_h) / 2, w = eye_w, h = eye_h }
|
||||
local mc_eye_w = 60
|
||||
local mc_eye_h = 580
|
||||
local mc_eye_x = (tall_w - mc_eye_w) / 2
|
||||
local mc_eye_y = (tall_h - mc_eye_h) / 2
|
||||
|
||||
-- https://arjuncgore.github.io/waywall-boat-eye-calc/
|
||||
-- https://github.com/Esensats/mcsr-calcsens
|
||||
local normal_sens = 13.117018998967824
|
||||
local tall_sens = 0.88486625532087
|
||||
|
||||
for _, name in ipairs({ "wide", "thin", "tall" }) do
|
||||
scene:register(name .. "_bg", {
|
||||
kind = "image",
|
||||
path = images[name],
|
||||
options = {
|
||||
dst = { x = 0, y = 0, w = resolution.w, h = resolution.h },
|
||||
depth = -1,
|
||||
},
|
||||
groups = { name },
|
||||
})
|
||||
end
|
||||
|
||||
local left_middle = (resolution.w - thin_w) / 4
|
||||
scene:register("e_counter", {
|
||||
kind = "mirror",
|
||||
options = {
|
||||
src = { x = 1 * e_src_scale, y = 37 * e_src_scale, w = e_w, h = e_h },
|
||||
dst = { x = left_middle - (e_w * e_scale / 2), y = resolution.h / 10.8, w = e_w * e_scale, h = e_h * e_scale },
|
||||
depth = 0,
|
||||
},
|
||||
groups = { "thin" },
|
||||
})
|
||||
|
||||
scene:register("eye_measure", {
|
||||
kind = "mirror",
|
||||
options = {
|
||||
src = { x = mc_eye_x, y = mc_eye_y, w = mc_eye_w, h = mc_eye_h },
|
||||
dst = eye_dst,
|
||||
depth = 0,
|
||||
},
|
||||
groups = { "tall" },
|
||||
})
|
||||
|
||||
scene:register("eye_overlay", {
|
||||
kind = "image",
|
||||
path = images.eye_overlay,
|
||||
options = { dst = eye_dst, depth = 1 },
|
||||
groups = { "tall" },
|
||||
})
|
||||
|
||||
function mode_guard()
|
||||
return not waywall.get_key("F3") and waywall.state().screen == "inworld" and waywall.state().inworld == "unpaused"
|
||||
end
|
||||
|
||||
ModeManager:define("thin", {
|
||||
width = thin_w,
|
||||
height = resolution.h,
|
||||
on_enter = function()
|
||||
scene:enable_group("thin", true)
|
||||
end,
|
||||
on_exit = function()
|
||||
scene:enable_group("thin", false)
|
||||
end,
|
||||
toggle_guard = mode_guard,
|
||||
})
|
||||
|
||||
ModeManager:define("wide", {
|
||||
width = resolution.w,
|
||||
height = resolution.h / 3.6,
|
||||
on_enter = function()
|
||||
scene:enable_group("wide", true)
|
||||
end,
|
||||
on_exit = function()
|
||||
scene:enable_group("wide", false)
|
||||
end,
|
||||
toggle_guard = mode_guard,
|
||||
})
|
||||
|
||||
ModeManager:define("tall", {
|
||||
width = tall_w,
|
||||
height = tall_h,
|
||||
on_enter = function()
|
||||
scene:enable_group("tall", true)
|
||||
waywall.set_sensitivity(tall_sens)
|
||||
end,
|
||||
on_exit = function()
|
||||
scene:enable_group("tall", false)
|
||||
waywall.set_sensitivity(0)
|
||||
end,
|
||||
toggle_guard = mode_guard,
|
||||
})
|
||||
|
||||
local ensure_ninjabrain = Processes.ensure_application(waywall, ninb_path)("ninjabrain.*\\.jar")
|
||||
waywall.listen("load", ensure_ninjabrain)
|
||||
|
||||
local config = {
|
||||
input = {
|
||||
layout = "fr",
|
||||
repeat_rate = 40,
|
||||
repeat_delay = 300,
|
||||
|
||||
sensitivity = normal_sens,
|
||||
confine_pointer = false,
|
||||
},
|
||||
theme = {
|
||||
background = "#303030ff",
|
||||
-- https://github.com/Smithay/smithay/issues/1894
|
||||
ninb_anchor = "top",
|
||||
},
|
||||
actions = Keys.actions({
|
||||
["Ctrl-Super-F"] = waywall.toggle_fullscreen,
|
||||
["*-N"] = function()
|
||||
return ModeManager:toggle("thin")
|
||||
end,
|
||||
["*-P"] = function()
|
||||
return ModeManager:toggle("tall")
|
||||
end,
|
||||
["*-G"] = function()
|
||||
return ModeManager:toggle("wide")
|
||||
end,
|
||||
["Ctrl-Shift-M"] = function()
|
||||
ensure_ninjabrain()
|
||||
helpers.toggle_floating()
|
||||
end,
|
||||
}),
|
||||
}
|
||||
|
||||
return config
|
||||
24
hosts/sandalphon/mcsr/waywork.nix
Normal file
24
hosts/sandalphon/mcsr/waywork.nix
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
{ stdenvNoCC, fetchFromGitHub }:
|
||||
stdenvNoCC.mkDerivation {
|
||||
pname = "waywork";
|
||||
version = "0-unstable-2025-11-29";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "Esensats";
|
||||
repo = "waywork";
|
||||
rev = "60ab89dfe32d894845a759a08cebd3d710262bcb";
|
||||
hash = "sha256-XF+FgnLRnn0MydVN3Qthg/CwC8p5+8jo0QhlpPpaWMc=";
|
||||
};
|
||||
|
||||
dontBuild = true;
|
||||
dontCheck = true;
|
||||
|
||||
installPhase = ''
|
||||
runHook preInstall
|
||||
|
||||
mkdir -p $out/waywork
|
||||
cp *.lua $out/waywork
|
||||
|
||||
runHook postInstall
|
||||
'';
|
||||
}
|
||||
BIN
hosts/sandalphon/mcsr/yukata.jpg
Executable file
BIN
hosts/sandalphon/mcsr/yukata.jpg
Executable file
Binary file not shown.
|
After Width: | Height: | Size: 593 KiB |
Loading…
Add table
Add a link
Reference in a new issue