Compare commits
29 Commits
34c0bf9616
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| 2913f0c8e1 | |||
| fb7c219cf2 | |||
| 581fa74f19 | |||
| 3f1f23391a | |||
| ddb0345587 | |||
| 99494b8777 | |||
| 4c385b2653 | |||
| f32d7d3643 | |||
| ab4c22592a | |||
| 869778df2a | |||
| 0a2ad32dfb | |||
| 230547eb92 | |||
| 3beb85c474 | |||
| 101331cbc9 | |||
| d803dd9dc8 | |||
| 509a9b49ed | |||
| a97ff2c46d | |||
| 6453bb62a1 | |||
| 67305549bc | |||
| 6ff14a1aa4 | |||
| 9a6d19b101 | |||
| 2494e8ce83 | |||
| f90f84b3f7 | |||
| 3db69c9e41 | |||
| ac55fa4426 | |||
| 5a195af336 | |||
| e0f79ae04b | |||
| 74d5ec1426 | |||
| 124e3fedfd |
@@ -1,6 +1,6 @@
|
|||||||
# Machines
|
# Machines
|
||||||
|
|
||||||
1. Ryu Dektop (Intel i9-14900KS / Nvidia 5090 / DDR5 64GB CL36@6000MTs)
|
1. Ryu Dektop (Intel i9-14900KS / Nvidia RTX 5090 / DDR5 64GB CL36@6000MTs)
|
||||||
```
|
```
|
||||||
deploy -s .#ryu
|
deploy -s .#ryu
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
inputs,
|
inputs,
|
||||||
nix-darwin,
|
nix-darwin,
|
||||||
overlays,
|
overlays,
|
||||||
|
nixpkgs,
|
||||||
...
|
...
|
||||||
}: (builtins.mapAttrs (
|
}: (builtins.mapAttrs (
|
||||||
name: device:
|
name: device:
|
||||||
@@ -11,6 +12,7 @@
|
|||||||
specialArgs = {
|
specialArgs = {
|
||||||
inherit device inputs;
|
inherit device inputs;
|
||||||
stablePkgs = inputs.nixpkgs-stable.legacyPackages.${device.system};
|
stablePkgs = inputs.nixpkgs-stable.legacyPackages.${device.system};
|
||||||
|
cratesNix = inputs.crates-nix.mkLib {pkgs = nixpkgs.legacyPackages.${device.system};};
|
||||||
};
|
};
|
||||||
modules = [
|
modules = [
|
||||||
inputs.home-manager.darwinModules.home-manager
|
inputs.home-manager.darwinModules.home-manager
|
||||||
|
|||||||
@@ -28,7 +28,7 @@
|
|||||||
extra-nix-path = nixpkgs=flake:nixpkgs
|
extra-nix-path = nixpkgs=flake:nixpkgs
|
||||||
builders-use-substitutes = true
|
builders-use-substitutes = true
|
||||||
'';
|
'';
|
||||||
package = pkgs.nixVersions.latest;
|
package = pkgs.nixVersions.nix_2_32;
|
||||||
buildMachines = [
|
buildMachines = [
|
||||||
../../builders/tako.nix
|
../../builders/tako.nix
|
||||||
../../builders/shiro.nix
|
../../builders/shiro.nix
|
||||||
|
|||||||
@@ -8,11 +8,8 @@
|
|||||||
"lunar"
|
"lunar"
|
||||||
"orcaslicer"
|
"orcaslicer"
|
||||||
"raycast"
|
"raycast"
|
||||||
"shapr3d"
|
|
||||||
"vlc"
|
|
||||||
"zed"
|
"zed"
|
||||||
"zen"
|
"zen"
|
||||||
"lm-studio"
|
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
{stablePkgs, ...}: {
|
{...}: {
|
||||||
services.tailscale = {
|
services.tailscale = {
|
||||||
enable = true;
|
enable = true;
|
||||||
# package = stablePkgs.tailscale;
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,12 +5,10 @@
|
|||||||
"docker-compose"
|
"docker-compose"
|
||||||
];
|
];
|
||||||
casks = [
|
casks = [
|
||||||
|
"1password"
|
||||||
"docker"
|
"docker"
|
||||||
"raycast"
|
"raycast"
|
||||||
"lunar"
|
"lunar"
|
||||||
"virtual-desktop-streamer"
|
|
||||||
"kicad"
|
|
||||||
"shapr3d"
|
|
||||||
"orcaslicer"
|
"orcaslicer"
|
||||||
"zed"
|
"zed"
|
||||||
"zen"
|
"zen"
|
||||||
|
|||||||
665
flake.lock
generated
665
flake.lock
generated
File diff suppressed because it is too large
Load Diff
17
flake.nix
17
flake.nix
@@ -189,11 +189,6 @@
|
|||||||
url = "github:uttarayan21/ddcbacklight";
|
url = "github:uttarayan21/ddcbacklight";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
command-runner = {
|
|
||||||
url = "github:uttarayan21/command-runner";
|
|
||||||
# url = "path:/home/servius/Projects/command-runner";
|
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
};
|
|
||||||
hyprmonitors = {
|
hyprmonitors = {
|
||||||
url = "git+https://git.darksailor.dev/servius/hyprmonitors";
|
url = "git+https://git.darksailor.dev/servius/hyprmonitors";
|
||||||
# url = "path:/home/servius/Projects/hyprmonitors";
|
# url = "path:/home/servius/Projects/hyprmonitors";
|
||||||
@@ -230,7 +225,14 @@
|
|||||||
url = "github:xatuke/handoff";
|
url = "github:xatuke/handoff";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
crates-nix.url = "github:uttarayan21/crates.nix";
|
crates-io-index = {
|
||||||
|
url = "git+https://github.com/rust-lang/crates.io-index?shallow=1";
|
||||||
|
flake = false;
|
||||||
|
};
|
||||||
|
crates-nix = {
|
||||||
|
url = "github:uttarayan21/crates.nix";
|
||||||
|
inputs.crates-io-index.follows = "crates-io-index";
|
||||||
|
};
|
||||||
headplane = {
|
headplane = {
|
||||||
url = "github:tale/headplane";
|
url = "github:tale/headplane";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
@@ -247,6 +249,9 @@
|
|||||||
url = "github:christo-auer/eilmeldung";
|
url = "github:christo-auer/eilmeldung";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
|
hytale-launcher = {
|
||||||
|
url = "github:JPyke3/hytale-launcher-nix";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
outputs = {
|
outputs = {
|
||||||
|
|||||||
@@ -12,10 +12,63 @@
|
|||||||
"Hasklug Nerd Font Mono"
|
"Hasklug Nerd Font Mono"
|
||||||
];
|
];
|
||||||
window-decoration = false;
|
window-decoration = false;
|
||||||
title = "";
|
title = "ghostty";
|
||||||
command = "fish";
|
command = "fish";
|
||||||
background-opacity = 0.8;
|
background-opacity = 0.8;
|
||||||
theme = "catppuccin-mocha";
|
theme = "catppuccin-mocha";
|
||||||
|
custom-shader = "~/.config/ghostty/shader.glsl";
|
||||||
|
# custom-shader = toString (pkgs.writeText "shader.glsl"
|
||||||
|
# /*
|
||||||
|
# glsl
|
||||||
|
# */
|
||||||
|
# ''
|
||||||
|
# const float CURSOR_ANIMATION_SPEED = 150.0; // ms
|
||||||
|
# const float TRAILING_CURSORS = 3.0;
|
||||||
|
# bool at_pos(vec2 fragCoord, vec2 pos, vec2 size) {
|
||||||
|
# return (pos.x <= fragCoord.x && fragCoord.x <= pos.x + size.x &&
|
||||||
|
# pos.y - size.y <= fragCoord.y && fragCoord.y <= pos.y);
|
||||||
|
# }
|
||||||
|
# void mainImage(out vec4 fragColor, in vec2 fragCoord) {
|
||||||
|
# // Normalized pixel coordinates (from 0 to 1)
|
||||||
|
# vec2 uv = fragCoord / iResolution.xy;
|
||||||
|
# vec2 current_cursor = iCurrentCursor.xy;
|
||||||
|
# vec2 previous_cursor = iPreviousCursor.xy;
|
||||||
|
# float time_passed = (iTime - iTimeCursorChange) * 1000.0; // in ms
|
||||||
|
#
|
||||||
|
# if (time_passed > CURSOR_ANIMATION_SPEED) {
|
||||||
|
# // No animation, just render normally
|
||||||
|
# fragColor = texture(iChannel0, uv);
|
||||||
|
# return;
|
||||||
|
# }
|
||||||
|
# // Animate cursor meovement
|
||||||
|
# vec4 col = texture(iChannel0, uv);
|
||||||
|
# // linear interpolation between current and previous cursor position based on time passed
|
||||||
|
# vec2 animated_cursor_pos = mix(previous_cursor, current_cursor, time_passed / CURSOR_ANIMATION_SPEED);
|
||||||
|
# // make 3 trailing cursors for smoother animation
|
||||||
|
# for (int i = 1; i <= int(TRAILING_CURSORS); i++) {
|
||||||
|
# float t = float(i) / TRAILING_CURSORS;
|
||||||
|
# vec2 trail_pos = mix(previous_cursor, current_cursor, (time_passed / CURSOR_ANIMATION_SPEED) * t);
|
||||||
|
# if (at_pos(fragCoord, trail_pos, iCurrentCursor.zw)) {
|
||||||
|
# col = mix(col, iCurrentCursorColor, t);
|
||||||
|
# }
|
||||||
|
# }
|
||||||
|
#
|
||||||
|
# // vec4 cursor_color = mix(iPreviousCursorColor, iCurrentCursorColor, time_passed / CURSOR_ANIMATION_SPEED);
|
||||||
|
# vec4 cursor_color = iCurrentCursorColor; // no color animation for now
|
||||||
|
# vec2 cursor_size = iCurrentCursor.zw;
|
||||||
|
# // check if fragCoord is within the animated cursor rectangle
|
||||||
|
# // y is in the negative direction
|
||||||
|
# // if (animated_cursor_pos.x <= fragCoord.x && fragCoord.x <= animated_cursor_pos.x + cursor_size.x &&
|
||||||
|
# // animated_cursor_pos.y - cursor_size.y <= fragCoord.y && fragCoord.y <= animated_cursor_pos.y) {
|
||||||
|
# // col = cursor_color;
|
||||||
|
# // }
|
||||||
|
# if (at_pos(fragCoord, animated_cursor_pos, cursor_size)) {
|
||||||
|
# col = cursor_color;
|
||||||
|
# }
|
||||||
|
#
|
||||||
|
# fragColor = col;
|
||||||
|
# }
|
||||||
|
# '');
|
||||||
};
|
};
|
||||||
systemd.enable = true;
|
systemd.enable = true;
|
||||||
themes = {
|
themes = {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{...}: {
|
{pkgs, ...}: {
|
||||||
programs.mpv = {
|
programs.mpv = {
|
||||||
enable = true;
|
enable = pkgs.stdenv.isLinux;
|
||||||
config = {
|
config = {
|
||||||
vo = "gpu-next";
|
vo = "gpu-next";
|
||||||
gpu-api = "vulkan";
|
gpu-api = "vulkan";
|
||||||
|
|||||||
@@ -2,12 +2,122 @@
|
|||||||
pkgs,
|
pkgs,
|
||||||
lib,
|
lib,
|
||||||
...
|
...
|
||||||
}: {
|
}: let
|
||||||
|
shadps4_qtlauncher = pkgs.fetchFromGitHub {
|
||||||
|
owner = "shadps4-emu";
|
||||||
|
repo = "shadps4-qtlauncher";
|
||||||
|
rev = "1f4e59f6110d5f991cead5a3e9f72671fced2c70";
|
||||||
|
sha256 = "sha256-AAxj3Eqp7iGJgRgJki/93fln5Z6ae8AydJLGZ6Dbb00=";
|
||||||
|
fetchSubmodules = true;
|
||||||
|
};
|
||||||
|
# diegolixShadps4 = pkgs.fetchFromGitHub {
|
||||||
|
# owner = "diegolix";
|
||||||
|
# repo = "shadps4-qtlauncher";
|
||||||
|
# rev = "a1b2c3d4e5f67890123456789abcdef01234567";
|
||||||
|
# sha256 = "sha256-PLACEHOLDERFORHASHVALUE1234567890ABCDEFGH=";
|
||||||
|
# fetchSubmodules = true;
|
||||||
|
# };
|
||||||
|
bblauncher = pkgs.fetchFromGitHub {
|
||||||
|
owner = "rainmakerv3";
|
||||||
|
repo = "BB_Launcher";
|
||||||
|
rev = "2280c90974d2d741ce927dfc88f0ecf98c8bd2df";
|
||||||
|
sha256 = "sha256-jPcIQp2EBAEiaTLvC/OBH0BgcfYv3zo2H7akHJSlPaI=";
|
||||||
|
fetchSubmodules = true;
|
||||||
|
};
|
||||||
|
in {
|
||||||
home.packages = lib.optionals pkgs.stdenv.isLinux [
|
home.packages = lib.optionals pkgs.stdenv.isLinux [
|
||||||
(pkgs.shadps4.overrideAttrs
|
(pkgs.shadps4.overrideAttrs
|
||||||
(oldAttrs: {
|
(oldAttrs: {
|
||||||
nativeBuildInputs = oldAttrs.nativeBuildInputs ++ [pkgs.cudatoolkit];
|
nativeBuildInputs = oldAttrs.nativeBuildInputs ++ [pkgs.cudatoolkit];
|
||||||
buildInputs = oldAttrs.buildInputs ++ [pkgs.cudatoolkit];
|
buildInputs = oldAttrs.buildInputs ++ [pkgs.cudatoolkit];
|
||||||
}))
|
}))
|
||||||
|
(pkgs.stdenv.mkDerivation {
|
||||||
|
pname = "shadps4-qt";
|
||||||
|
version = "1.0.0";
|
||||||
|
src = shadps4_qtlauncher;
|
||||||
|
nativeBuildInputs = [
|
||||||
|
pkgs.cmake
|
||||||
|
pkgs.pkg-config
|
||||||
|
pkgs.qt6.wrapQtAppsHook
|
||||||
|
];
|
||||||
|
buildInputs = [
|
||||||
|
pkgs.alsa-lib
|
||||||
|
pkgs.ffmpeg
|
||||||
|
pkgs.fmt
|
||||||
|
pkgs.glslang
|
||||||
|
pkgs.jack2
|
||||||
|
pkgs.libedit
|
||||||
|
pkgs.libevdev
|
||||||
|
pkgs.libpng
|
||||||
|
pkgs.libpulseaudio
|
||||||
|
pkgs.libxkbcommon
|
||||||
|
pkgs.openal
|
||||||
|
pkgs.openssl
|
||||||
|
pkgs.qt6.qtbase
|
||||||
|
pkgs.qt6.qtmultimedia
|
||||||
|
pkgs.qt6.qttools
|
||||||
|
pkgs.qt6.qtwayland
|
||||||
|
pkgs.SDL2
|
||||||
|
pkgs.sdl3
|
||||||
|
pkgs.sndio
|
||||||
|
pkgs.stb
|
||||||
|
pkgs.udev
|
||||||
|
pkgs.vulkan-headers
|
||||||
|
pkgs.vulkan-tools
|
||||||
|
pkgs.vulkan-utility-libraries
|
||||||
|
pkgs.wayland
|
||||||
|
pkgs.wayland-protocols
|
||||||
|
pkgs.xorg.libxcb
|
||||||
|
pkgs.xorg.xcbutil
|
||||||
|
pkgs.xorg.xcbutilkeysyms
|
||||||
|
pkgs.xorg.xcbutilwm
|
||||||
|
pkgs.zlib
|
||||||
|
];
|
||||||
|
})
|
||||||
|
|
||||||
|
(pkgs.stdenv.mkDerivation {
|
||||||
|
pname = "BBLauncher";
|
||||||
|
version = "1.0.0";
|
||||||
|
src = bblauncher;
|
||||||
|
nativeBuildInputs = [
|
||||||
|
pkgs.cmake
|
||||||
|
pkgs.pkg-config
|
||||||
|
pkgs.qt6.wrapQtAppsHook
|
||||||
|
];
|
||||||
|
buildInputs = [
|
||||||
|
pkgs.alsa-lib
|
||||||
|
pkgs.ffmpeg
|
||||||
|
pkgs.fmt
|
||||||
|
pkgs.glslang
|
||||||
|
pkgs.jack2
|
||||||
|
pkgs.libedit
|
||||||
|
pkgs.libevdev
|
||||||
|
pkgs.libpng
|
||||||
|
pkgs.libpulseaudio
|
||||||
|
pkgs.libxkbcommon
|
||||||
|
pkgs.openal
|
||||||
|
pkgs.openssl
|
||||||
|
pkgs.qt6.qtbase
|
||||||
|
pkgs.qt6.qtmultimedia
|
||||||
|
pkgs.qt6.qttools
|
||||||
|
pkgs.qt6.qtwayland
|
||||||
|
pkgs.qt6.qtwebview
|
||||||
|
pkgs.SDL2
|
||||||
|
pkgs.sdl3
|
||||||
|
pkgs.sndio
|
||||||
|
pkgs.stb
|
||||||
|
pkgs.udev
|
||||||
|
pkgs.vulkan-headers
|
||||||
|
pkgs.vulkan-tools
|
||||||
|
pkgs.vulkan-utility-libraries
|
||||||
|
pkgs.wayland
|
||||||
|
pkgs.wayland-protocols
|
||||||
|
pkgs.xorg.libxcb
|
||||||
|
pkgs.xorg.xcbutil
|
||||||
|
pkgs.xorg.xcbutilkeysyms
|
||||||
|
pkgs.xorg.xcbutilwm
|
||||||
|
pkgs.zlib
|
||||||
|
];
|
||||||
|
})
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,4 +12,7 @@
|
|||||||
autoStart = true;
|
autoStart = true;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
pulseaudio
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,12 +15,12 @@
|
|||||||
./scripts.nix
|
./scripts.nix
|
||||||
./services
|
./services
|
||||||
./accounts
|
./accounts
|
||||||
|
./fonts.nix
|
||||||
];
|
];
|
||||||
|
|
||||||
xdg.enable = true;
|
xdg.enable = true;
|
||||||
xdg.userDirs = {
|
xdg.userDirs = {
|
||||||
enable = device.isLinux;
|
enable = device.isLinux;
|
||||||
# music = "${config.home.homeDirectory}/Nextcloud/Music";
|
|
||||||
};
|
};
|
||||||
|
|
||||||
programs = {
|
programs = {
|
||||||
@@ -35,26 +35,6 @@
|
|||||||
username = device.user;
|
username = device.user;
|
||||||
homeDirectory = lib.mkForce device.home;
|
homeDirectory = lib.mkForce device.home;
|
||||||
|
|
||||||
file = {
|
|
||||||
".config/fish/themes".source = pkgs.catppuccinThemes.fish + "/themes";
|
|
||||||
".cargo/config.toml".text =
|
|
||||||
# toml
|
|
||||||
''
|
|
||||||
[alias]
|
|
||||||
lldb = ["with", "rust-lldb", "--"]
|
|
||||||
t = ["nextest", "run"]
|
|
||||||
|
|
||||||
[net]
|
|
||||||
git-fetch-with-cli = true
|
|
||||||
|
|
||||||
[registries.catscii]
|
|
||||||
index = "https://git.shipyard.rs/catscii/crate-index.git"
|
|
||||||
|
|
||||||
[http]
|
|
||||||
user-agent = "shipyard J0/QFq2Sa5y6nTxJQAb8t+e/3qLSub1/sa3zn0leZv6LKG/zmQcoikT9U3xPwbzp8hQ="
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
sessionVariables = {
|
sessionVariables = {
|
||||||
EDITOR = "nvim";
|
EDITOR = "nvim";
|
||||||
SHELL = "${pkgs.bash}/bin/bash";
|
SHELL = "${pkgs.bash}/bin/bash";
|
||||||
|
|||||||
20
home/fonts.nix
Normal file
20
home/fonts.nix
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
device,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
home.packages = with pkgs;
|
||||||
|
lib.optionals (!device.isServer) [
|
||||||
|
monaspace
|
||||||
|
nerd-fonts.fira-code
|
||||||
|
nerd-fonts.hasklug
|
||||||
|
nerd-fonts.symbols-only
|
||||||
|
noto-fonts
|
||||||
|
noto-fonts-cjk-sans
|
||||||
|
noto-fonts-color-emoji
|
||||||
|
liberation_ttf
|
||||||
|
fira-code
|
||||||
|
fira-code-symbols
|
||||||
|
mplus-outline-fonts.githubRelease
|
||||||
|
];
|
||||||
|
}
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
{
|
{
|
||||||
device,
|
device,
|
||||||
inputs,
|
inputs,
|
||||||
|
pkgs,
|
||||||
...
|
...
|
||||||
}: {
|
}: {
|
||||||
nixpkgs.config.allowUnfree = true;
|
nixpkgs.config.allowUnfree = true;
|
||||||
@@ -12,6 +13,7 @@
|
|||||||
inherit inputs;
|
inherit inputs;
|
||||||
inherit device;
|
inherit device;
|
||||||
stablePkgs = inputs.nixpkgs-stable.legacyPackages.${device.system};
|
stablePkgs = inputs.nixpkgs-stable.legacyPackages.${device.system};
|
||||||
|
cratesNix = inputs.crates-nix.mkLib {inherit pkgs;};
|
||||||
};
|
};
|
||||||
users.${device.user}.imports = [
|
users.${device.user}.imports = [
|
||||||
inputs.nixvim.homeModules.nixvim
|
inputs.nixvim.homeModules.nixvim
|
||||||
|
|||||||
@@ -1,4 +1,8 @@
|
|||||||
{config, ...}: {
|
{
|
||||||
|
pkgs,
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
sops = {
|
sops = {
|
||||||
secrets."llama/api_key" = {};
|
secrets."llama/api_key" = {};
|
||||||
secrets."openai/api_key" = {};
|
secrets."openai/api_key" = {};
|
||||||
@@ -16,25 +20,30 @@
|
|||||||
enableNushellIntegration = false;
|
enableNushellIntegration = false;
|
||||||
settings = {
|
settings = {
|
||||||
save_session = true;
|
save_session = true;
|
||||||
# model = "openai:gpt-4o";
|
model = "ryu:qwen3:30b-a3b";
|
||||||
model = "ryu:qwen3-coder-30b";
|
rag_embedding_model = "ryu:RobinBially/nomic-embed-text-8k";
|
||||||
rag_embedding_model = "ollama:RobinBially/nomic-embed-text-8k";
|
|
||||||
clients = [
|
clients = [
|
||||||
{
|
{
|
||||||
type = "openai-compatible";
|
type = "openai-compatible";
|
||||||
name = "mirai";
|
name = "ryu";
|
||||||
api_base = "https://ollama.darksailor.dev/v1";
|
api_base = "https://ollama.darksailor.dev/v1";
|
||||||
api_key_cmd = "cat ${config.sops.secrets."llama/api_key".path}";
|
api_key_cmd = "cat ${config.sops.secrets."llama/api_key".path}";
|
||||||
models = [
|
models = [
|
||||||
# {
|
|
||||||
# name = "RobinBially/nomic-embed-text-8k";
|
|
||||||
# type = "embedding";
|
|
||||||
# default_chunk_size = 8000;
|
|
||||||
# }
|
|
||||||
{
|
{
|
||||||
name = "gpt-oss-20b";
|
name = "gpt-oss:20b";
|
||||||
type = "chat";
|
type = "chat";
|
||||||
}
|
}
|
||||||
|
{
|
||||||
|
name = "qwen3:30b-a3b";
|
||||||
|
type = "chat";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
name = "RobinBially/nomic-embed-text-8k";
|
||||||
|
type = "embedding";
|
||||||
|
default_chunk_size = 1000;
|
||||||
|
max_tokens_per_chunk = 8192;
|
||||||
|
max_batch_size = 100;
|
||||||
|
}
|
||||||
# {
|
# {
|
||||||
# name = "deepseek-r1:14b";
|
# name = "deepseek-r1:14b";
|
||||||
# type = "chat";
|
# type = "chat";
|
||||||
@@ -45,42 +54,6 @@
|
|||||||
# }
|
# }
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
{
|
|
||||||
type = "openai-compatible";
|
|
||||||
name = "ryu";
|
|
||||||
api_base = "https://llama.ryu.darksailor.dev/v1";
|
|
||||||
models = [
|
|
||||||
{
|
|
||||||
name = "qwen3-coder-30b";
|
|
||||||
type = "chat";
|
|
||||||
}
|
|
||||||
# {
|
|
||||||
# name = "RobinBially/nomic-embed-text-8k";
|
|
||||||
# type = "embedding";
|
|
||||||
# default_chunk_size = 8000;
|
|
||||||
# }
|
|
||||||
# {
|
|
||||||
# name = "deepseek-r1:7b";
|
|
||||||
# type = "chat";
|
|
||||||
# }
|
|
||||||
# {
|
|
||||||
# name = "qwen3:30b-a3b";
|
|
||||||
# type = "chat";
|
|
||||||
# }
|
|
||||||
# {
|
|
||||||
# name = "deepseek-r1:14b";
|
|
||||||
# type = "chat";
|
|
||||||
# }
|
|
||||||
# {
|
|
||||||
# name = "qwen3:8b";
|
|
||||||
# type = "chat";
|
|
||||||
# }
|
|
||||||
# {
|
|
||||||
# name = "qwen3:14b";
|
|
||||||
# type = "chat";
|
|
||||||
# }
|
|
||||||
];
|
|
||||||
}
|
|
||||||
{
|
{
|
||||||
type = "gemini";
|
type = "gemini";
|
||||||
name = "gemini";
|
name = "gemini";
|
||||||
@@ -166,18 +139,29 @@
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
document_loaders = {
|
||||||
|
git =
|
||||||
|
/*
|
||||||
|
sh
|
||||||
|
*/
|
||||||
|
''sh -c "yek $1 --json | jq '[.[] | { path: .filename, contents: .content }]'"'';
|
||||||
|
};
|
||||||
};
|
};
|
||||||
roles = {
|
roles = {
|
||||||
"%git-commit%" =
|
"git-commit" =
|
||||||
/*
|
/*
|
||||||
md
|
md
|
||||||
*/
|
*/
|
||||||
''
|
''
|
||||||
---
|
---
|
||||||
model: ryu:qwen3-coder-30b
|
model: ryu:gpt-oss:20b
|
||||||
---
|
---
|
||||||
Your task is to generate a concise and informative commit message based on the provided diff. Use the conventional commit format, which includes a type (feat, fix, chore, docs, style, refactor, perf, test) and an optional scope. The message should be in the imperative mood and should not exceed 72 characters in the subject line. Do not under any circumstance include any additional text or explanations, just add the commit message.
|
Your task is to generate a concise and informative commit message based on the provided diff. Use the conventional commit format, which includes a type (feat, fix, chore, docs, style, refactor, perf, test) and an optional scope. The message should be in the imperative mood and should not exceed 72 characters in the subject line. Do not under any circumstance include any additional text or explanations, just add the commit message.
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
extraPackages = with pkgs; [
|
||||||
|
jq
|
||||||
|
yek
|
||||||
|
];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,9 +9,49 @@
|
|||||||
auto_sync = true;
|
auto_sync = true;
|
||||||
sync_frequency = "1m";
|
sync_frequency = "1m";
|
||||||
sync_address = "https://atuin.darksailor.dev";
|
sync_address = "https://atuin.darksailor.dev";
|
||||||
|
sync = {
|
||||||
|
records = true;
|
||||||
|
};
|
||||||
|
daemon = {
|
||||||
|
enabled = true;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
enable = true;
|
enable = true;
|
||||||
enableFishIntegration = true;
|
enableFishIntegration = true;
|
||||||
enableNushellIntegration = true;
|
enableNushellIntegration = true;
|
||||||
};
|
};
|
||||||
|
systemd.user.services.atuin-daemon = {
|
||||||
|
Unit = {
|
||||||
|
Description = "Atuin Daemon";
|
||||||
|
After = ["network.target"];
|
||||||
|
};
|
||||||
|
Install = {
|
||||||
|
WantedBy = ["default.target"];
|
||||||
|
};
|
||||||
|
Service = {
|
||||||
|
ExecStart = "${pkgs.atuin}/bin/atuin daemon";
|
||||||
|
Restart = "on-failure";
|
||||||
|
RestartSec = "10s";
|
||||||
|
# Environment = lib.mkForce "ATUIN_DATA_DIR=${device.home}/.local/share/atuin";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
launchd.agents.atuin-daemon = {
|
||||||
|
enable = true;
|
||||||
|
config = {
|
||||||
|
# A label for the service
|
||||||
|
Label = "dev.darksailor.atuin-daemon";
|
||||||
|
# The command to run
|
||||||
|
ProgramArguments = [
|
||||||
|
"${pkgs.atuin}/bin/atuin"
|
||||||
|
"daemon"
|
||||||
|
];
|
||||||
|
# Run the service when you log in
|
||||||
|
RunAtLoad = true;
|
||||||
|
# Keep the process alive, or restart if it dies
|
||||||
|
KeepAlive = true;
|
||||||
|
# Log files
|
||||||
|
StandardOutPath = "${device.home}/Library/Logs/atuin-daemon.log";
|
||||||
|
StandardErrorPath = "${device.home}/Library/Logs/atuin-daemon.error.log";
|
||||||
|
};
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
1
home/programs/binwalk.nix
Normal file
1
home/programs/binwalk.nix
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{pkgs, ...}: {home.packages = [pkgs.binwalk];}
|
||||||
27
home/programs/cargo.nix
Normal file
27
home/programs/cargo.nix
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
{
|
||||||
|
lib,
|
||||||
|
device,
|
||||||
|
cratesNix,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
lib.mkIf (!device.isServer) {
|
||||||
|
home.file.".cargo/config.toml".text =
|
||||||
|
# toml
|
||||||
|
''
|
||||||
|
[alias]
|
||||||
|
lldb = ["with", "rust-lldb", "--"]
|
||||||
|
t = ["nextest", "run"]
|
||||||
|
|
||||||
|
[net]
|
||||||
|
git-fetch-with-cli = true
|
||||||
|
|
||||||
|
[registries.kellnr]
|
||||||
|
index = "sparse+https://crates.darksailor.dev/api/v1/crates/"
|
||||||
|
|
||||||
|
[registry]
|
||||||
|
global-credential-providers = ["cargo:token", "/etc/profiles/per-user/fs0c131y/bin/cargo-credential-1password --account my.1password.com"]
|
||||||
|
'';
|
||||||
|
home.packages = [
|
||||||
|
(cratesNix.buildCrate "cargo-credential-1password" {})
|
||||||
|
];
|
||||||
|
}
|
||||||
@@ -54,7 +54,6 @@
|
|||||||
./yazi.nix
|
./yazi.nix
|
||||||
./yt-dlp.nix
|
./yt-dlp.nix
|
||||||
./zoxide.nix
|
./zoxide.nix
|
||||||
|
|
||||||
# ./bluetui.nix
|
# ./bluetui.nix
|
||||||
# ./goread.nix
|
# ./goread.nix
|
||||||
# ./helix.nix
|
# ./helix.nix
|
||||||
@@ -62,8 +61,6 @@
|
|||||||
# ./mpd.nix
|
# ./mpd.nix
|
||||||
# ./mpris-scrobbler.nix
|
# ./mpris-scrobbler.nix
|
||||||
# ./ncmpcpp.nix
|
# ./ncmpcpp.nix
|
||||||
# ./neomutt.nix
|
|
||||||
# ./neovim.nix
|
|
||||||
# ./newsboat.nix
|
# ./newsboat.nix
|
||||||
# ./nh.nix
|
# ./nh.nix
|
||||||
# ./omnix.nix
|
# ./omnix.nix
|
||||||
@@ -75,22 +72,8 @@
|
|||||||
# ./tuifeed.nix
|
# ./tuifeed.nix
|
||||||
# ./xh.nix
|
# ./xh.nix
|
||||||
# ./zellij.nix
|
# ./zellij.nix
|
||||||
|
./dysk.nix
|
||||||
|
./binwalk.nix
|
||||||
|
./cargo.nix
|
||||||
];
|
];
|
||||||
home.packages = with pkgs;
|
|
||||||
[]
|
|
||||||
++ lib.optionals (!device.isServer) [
|
|
||||||
monaspace
|
|
||||||
nerd-fonts.fira-code
|
|
||||||
nerd-fonts.hasklug
|
|
||||||
nerd-fonts.symbols-only
|
|
||||||
noto-fonts
|
|
||||||
noto-fonts-cjk-sans
|
|
||||||
noto-fonts-color-emoji
|
|
||||||
liberation_ttf
|
|
||||||
fira-code
|
|
||||||
fira-code-symbols
|
|
||||||
mplus-outline-fonts.githubRelease
|
|
||||||
]
|
|
||||||
++ lib.optionals device.isLinux []
|
|
||||||
++ lib.optionals device.isDarwin [];
|
|
||||||
}
|
}
|
||||||
|
|||||||
1
home/programs/dysk.nix
Normal file
1
home/programs/dysk.nix
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{pkgs, ...}: {home.packages = [pkgs.dysk];}
|
||||||
@@ -6,6 +6,9 @@
|
|||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
{
|
{
|
||||||
|
home.file = {
|
||||||
|
".config/fish/themes".source = pkgs.catppuccinThemes.fish + "/themes";
|
||||||
|
};
|
||||||
programs.fish = {
|
programs.fish = {
|
||||||
enable = true;
|
enable = true;
|
||||||
shellAbbrs = {
|
shellAbbrs = {
|
||||||
|
|||||||
@@ -12,4 +12,12 @@
|
|||||||
defaultSopsFormat = "yaml";
|
defaultSopsFormat = "yaml";
|
||||||
age.keyFile = "${config.home.homeDirectory}/.config/sops/age/keys.txt";
|
age.keyFile = "${config.home.homeDirectory}/.config/sops/age/keys.txt";
|
||||||
};
|
};
|
||||||
|
launchd.agents.sops-nix = pkgs.lib.mkIf pkgs.stdenv.isDarwin {
|
||||||
|
enable = true;
|
||||||
|
config = {
|
||||||
|
EnvironmentVariables = {
|
||||||
|
PATH = pkgs.lib.mkForce "/usr/bin:/bin:/usr/sbin:/sbin";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
{...}: {
|
{config, ...}: {
|
||||||
programs. yazi = {
|
programs. yazi = {
|
||||||
enable = true;
|
enable = true;
|
||||||
enableFishIntegration = true;
|
enableFishIntegration = true;
|
||||||
@@ -13,6 +13,9 @@
|
|||||||
}
|
}
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
preview = {
|
||||||
|
cache_dir = config.home.homeDirectory + "/.cache/yazi/previews";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,31 +0,0 @@
|
|||||||
{
|
|
||||||
config,
|
|
||||||
lib,
|
|
||||||
pkgs,
|
|
||||||
inputs,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
imports = [
|
|
||||||
inputs.command-runner.homeManagerModules.command-runner
|
|
||||||
];
|
|
||||||
services.command-runner = {
|
|
||||||
enable = true;
|
|
||||||
port = 5599;
|
|
||||||
database.path = "${config.home.homeDirectory}/.local/share/command-runner.db";
|
|
||||||
commands = let
|
|
||||||
hyprctl = "${pkgs.hyprland}/bin/hyprctl";
|
|
||||||
in
|
|
||||||
{
|
|
||||||
"display_on" = [hyprctl "-i" "{instance}" "dispatch" "dpms" "on"];
|
|
||||||
"display_off" = [hyprctl "-i" "{instance}" "dispatch" "dpms" "off"];
|
|
||||||
"display_toggle" = [hyprctl "-i" "{instance}" "dispatch" "dpms" "toggle"];
|
|
||||||
"display_status" = [hyprctl "-i" "{instance}" "-j" "monitors"];
|
|
||||||
"hyprland_instance" = [hyprctl "-j" "instances"];
|
|
||||||
}
|
|
||||||
// (builtins.foldl' (acc: elem: acc // elem) {} (lib.map (name: {
|
|
||||||
"display_on_${name}" = [hyprctl "-i" "{instance}" "dispatch" "dpms" "on" name];
|
|
||||||
"display_off_${name}" = [hyprctl "-i" "{instance}" "dispatch" "dpms" "off" name];
|
|
||||||
"display_toggle_${name}" = [hyprctl "-i" "{instance}" "dispatch" "dpms" "toggle" name];
|
|
||||||
}) ["HDMI-A-1" "DP-3" "DP-1"]));
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -2,24 +2,8 @@
|
|||||||
pkgs,
|
pkgs,
|
||||||
device,
|
device,
|
||||||
lib,
|
lib,
|
||||||
inputs,
|
|
||||||
...
|
...
|
||||||
}: {
|
}: {
|
||||||
systemd.user.services.onepassword-gui = lib.optionalAttrs (device.is "ryu") {
|
|
||||||
Unit = {
|
|
||||||
Description = "1Password GUI";
|
|
||||||
BindsTo = ["graphical-session.target"];
|
|
||||||
After = ["graphical-session-pre.target"];
|
|
||||||
};
|
|
||||||
|
|
||||||
Service = {
|
|
||||||
ExecStart = "${pkgs._1password-gui}/bin/1password";
|
|
||||||
Restart = "always";
|
|
||||||
};
|
|
||||||
Install = {
|
|
||||||
WantedBy = ["graphical-session.target"];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
home.packages = with pkgs;
|
home.packages = with pkgs;
|
||||||
lib.optionals (device.is "ryu") [
|
lib.optionals (device.is "ryu") [
|
||||||
nautilus
|
nautilus
|
||||||
|
|||||||
@@ -190,8 +190,8 @@
|
|||||||
];
|
];
|
||||||
bind = [
|
bind = [
|
||||||
# Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more
|
# Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more
|
||||||
"$mainMod, Return, exec, ${lib.getExe pkgs.wezterm}"
|
"$mainMod, Return, exec, ${lib.getExe pkgs.kitty}"
|
||||||
"$mainModShift, Return, exec, ${lib.getExe pkgs.kitty}"
|
"$mainModShift, Return, exec, ${lib.getExe pkgs.ghostty}"
|
||||||
# "$mainModShift, Return, exec, ${pkgs.foot}/bin/foot"
|
# "$mainModShift, Return, exec, ${pkgs.foot}/bin/foot"
|
||||||
"$mainModShift, Q, killactive,"
|
"$mainModShift, Q, killactive,"
|
||||||
"$mainModShift, s, exec, ${lib.getExe pkgs.hyprshot} -m region -o ~/Pictures/Screenshots/"
|
"$mainModShift, s, exec, ${lib.getExe pkgs.hyprshot} -m region -o ~/Pictures/Screenshots/"
|
||||||
|
|||||||
@@ -3,12 +3,11 @@
|
|||||||
lib,
|
lib,
|
||||||
device,
|
device,
|
||||||
...
|
...
|
||||||
}:
|
}: {
|
||||||
lib.optionalAttrs (device.is "ryu") {
|
|
||||||
xdg.portal = {
|
xdg.portal = {
|
||||||
enable = pkgs.stdenv.isLinux;
|
enable = device.is "ryu";
|
||||||
config = {
|
config = {
|
||||||
hyprland.default = ["kde" "hyprland"];
|
hyprland.default = ["hyprland"];
|
||||||
common.default = ["*" "hyprland"];
|
common.default = ["*" "hyprland"];
|
||||||
};
|
};
|
||||||
extraPortals = with pkgs; [
|
extraPortals = with pkgs; [
|
||||||
|
|||||||
5
justfile
5
justfile
@@ -1,12 +1,13 @@
|
|||||||
set dotenv-load
|
set dotenv-load
|
||||||
|
|
||||||
|
|
||||||
[macos]
|
[macos]
|
||||||
install:
|
install:
|
||||||
sudo nix run nix-darwin -- switch --flake .
|
sudo nix run nix-darwin -- switch --flake .
|
||||||
|
|
||||||
[linux]
|
[linux]
|
||||||
install:
|
install cores='32':
|
||||||
sudo nixos-rebuild switch --flake . --builders '' --max-jobs 1
|
sudo nixos-rebuild switch --flake . --builders '' --max-jobs 1 --cores {{cores}}
|
||||||
|
|
||||||
[macos]
|
[macos]
|
||||||
build:
|
build:
|
||||||
|
|||||||
@@ -81,6 +81,14 @@ in {
|
|||||||
type = lib.types.attrsOf lib.types.str;
|
type = lib.types.attrsOf lib.types.str;
|
||||||
description = "Roles for the AI chat clients";
|
description = "Roles for the AI chat clients";
|
||||||
};
|
};
|
||||||
|
extraPackages = mkOption {
|
||||||
|
type = lib.types.listOf lib.types.package;
|
||||||
|
default = [];
|
||||||
|
example = literalExpression "with pkgs; [ jq yek ];";
|
||||||
|
description = ''
|
||||||
|
Additional packages to install.
|
||||||
|
'';
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -99,7 +107,7 @@ in {
|
|||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
in {
|
in {
|
||||||
home.packages = mkIf cfg.enable [aichat-wrapped];
|
home.packages = mkIf cfg.enable ([aichat-wrapped] ++ cfg.extraPackages);
|
||||||
|
|
||||||
programs.fish.interactiveShellInit = mkIf cfg.enableFishIntegration fishIntegration;
|
programs.fish.interactiveShellInit = mkIf cfg.enableFishIntegration fishIntegration;
|
||||||
programs.bash.initExtra = mkIf cfg.enableBashIntegration bashIntegration;
|
programs.bash.initExtra = mkIf cfg.enableBashIntegration bashIntegration;
|
||||||
|
|||||||
@@ -358,17 +358,17 @@ in {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
folding.enable = true;
|
folding.enable = true;
|
||||||
grammarPackages =
|
# grammarPackages =
|
||||||
(with pkgs.tree-sitter-grammars; [
|
# (with pkgs.tree-sitter-grammars; [
|
||||||
tree-sitter-norg
|
# tree-sitter-norg
|
||||||
tree-sitter-norg-meta
|
# tree-sitter-norg-meta
|
||||||
tree-sitter-just
|
# tree-sitter-just
|
||||||
tree-sitter-nu
|
# tree-sitter-nu
|
||||||
tree-sitter-pest
|
# tree-sitter-pest
|
||||||
tree-sitter-slint
|
# tree-sitter-slint
|
||||||
])
|
# ])
|
||||||
++ pkgs.vimPlugins.nvim-treesitter.allGrammars;
|
# ++ pkgs.vimPlugins.nvim-treesitter.allGrammars;
|
||||||
nixGrammars = true;
|
# nixGrammars = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
telescope = {
|
telescope = {
|
||||||
@@ -548,6 +548,7 @@ in {
|
|||||||
pyright.enable = true;
|
pyright.enable = true;
|
||||||
slint_lsp.enable = true;
|
slint_lsp.enable = true;
|
||||||
wgsl_analyzer.enable = true;
|
wgsl_analyzer.enable = true;
|
||||||
|
glsl_analyzer.enable = true;
|
||||||
# sourcekit.enable = true;
|
# sourcekit.enable = true;
|
||||||
openscad_lsp.enable = true;
|
openscad_lsp.enable = true;
|
||||||
tinymist.enable = true;
|
tinymist.enable = true;
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
{pkgs, ...}: {
|
{pkgs, ...}: {
|
||||||
environment.systemPackages = with pkgs; [
|
environment.systemPackages = with pkgs; [
|
||||||
wlx-overlay-s
|
wayvr
|
||||||
wayvr-dashboard
|
# wlx-overlay-s
|
||||||
|
# wayvr-dashboard
|
||||||
# bs-manager
|
# bs-manager
|
||||||
monado-vulkan-layers
|
monado-vulkan-layers
|
||||||
# envision
|
# envision
|
||||||
|
|||||||
@@ -11,6 +11,7 @@
|
|||||||
./containers
|
./containers
|
||||||
./apps
|
./apps
|
||||||
./vms
|
./vms
|
||||||
|
./games
|
||||||
];
|
];
|
||||||
|
|
||||||
security.tpm2 = {
|
security.tpm2 = {
|
||||||
@@ -25,6 +26,7 @@
|
|||||||
withUWSM = true;
|
withUWSM = true;
|
||||||
xwayland.enable = true;
|
xwayland.enable = true;
|
||||||
};
|
};
|
||||||
|
uwsm.enable = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
systemd.services.NetworkManager-wait-online.enable = lib.mkForce false;
|
systemd.services.NetworkManager-wait-online.enable = lib.mkForce false;
|
||||||
@@ -67,7 +69,7 @@
|
|||||||
dates = "daily";
|
dates = "daily";
|
||||||
options = "--delete-older-than +5";
|
options = "--delete-older-than +5";
|
||||||
};
|
};
|
||||||
package = pkgs.nixVersions.latest; # deploy-rs doesn't work with nix >= 2.32
|
package = pkgs.nixVersions.nix_2_32; # deploy-rs doesn't work with nix >= 2.33
|
||||||
buildMachines = [
|
buildMachines = [
|
||||||
../../builders/tako.nix
|
../../builders/tako.nix
|
||||||
../../builders/shiro.nix
|
../../builders/shiro.nix
|
||||||
|
|||||||
@@ -2,12 +2,11 @@
|
|||||||
port = 3003;
|
port = 3003;
|
||||||
in {
|
in {
|
||||||
virtualisation.oci-containers = {
|
virtualisation.oci-containers = {
|
||||||
backend = "docker";
|
|
||||||
containers = {
|
containers = {
|
||||||
immich-machine-learning = {
|
immich-machine-learning = {
|
||||||
image = "ghcr.io/immich-app/immich-machine-learning:v${pkgs.immich.version}-cuda";
|
image = "ghcr.io/immich-app/immich-machine-learning:v${pkgs.immich.version}-cuda";
|
||||||
ports = [
|
ports = [
|
||||||
"0.0.0.0:${toString port}:3003"
|
"127.0.0.1:${toString port}:3003"
|
||||||
];
|
];
|
||||||
volumes = [
|
volumes = [
|
||||||
"model-cache:/cache"
|
"model-cache:/cache"
|
||||||
@@ -20,7 +19,4 @@ in {
|
|||||||
nvidia-docker
|
nvidia-docker
|
||||||
nvidia-container-toolkit
|
nvidia-container-toolkit
|
||||||
];
|
];
|
||||||
# services.caddy.virtualHosts."ml.ryu.darksailor.dev".extraConfig = ''
|
|
||||||
# reverse_proxy localhost:${toString port}
|
|
||||||
# '';
|
|
||||||
}
|
}
|
||||||
|
|||||||
5
nixos/ryu/games/default.nix
Normal file
5
nixos/ryu/games/default.nix
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
{...}: {
|
||||||
|
imports = [
|
||||||
|
./hytale.nix
|
||||||
|
];
|
||||||
|
}
|
||||||
499
nixos/ryu/games/hytale.nix
Normal file
499
nixos/ryu/games/hytale.nix
Normal file
@@ -0,0 +1,499 @@
|
|||||||
|
# {pkgs, ...}: let
|
||||||
|
# version = "2026.01.21-11273a4";
|
||||||
|
# hytale-launcher = pkgs.fetchzip {
|
||||||
|
# url = "https://launcher.hytale.com/builds/release/linux/amd64/hytale-launcher-${version}.zip";
|
||||||
|
# sha256 = "sha256-PPdYmLxAVyqSkhulZXLcaEuhofCHZ4JcDJXIQ+lBhFg=";
|
||||||
|
# };
|
||||||
|
# in {
|
||||||
|
# environment.systemPackages = with pkgs; [
|
||||||
|
# # (pkgs.buildFHSEnv {
|
||||||
|
# # pname = "hytale";
|
||||||
|
# # inherit version;
|
||||||
|
# # targetPkgs = p:
|
||||||
|
# # with p; [
|
||||||
|
# # # Launcher
|
||||||
|
# # libsoup_3
|
||||||
|
# # gdk-pixbuf
|
||||||
|
# # glib
|
||||||
|
# # gtk3
|
||||||
|
# # webkitgtk_4_1
|
||||||
|
# #
|
||||||
|
# # # Game
|
||||||
|
# # alsa-lib
|
||||||
|
# # icu
|
||||||
|
# # libGL
|
||||||
|
# # openssl
|
||||||
|
# # udev
|
||||||
|
# # xorg.libX11
|
||||||
|
# # xorg.libXcursor
|
||||||
|
# # xorg.libXrandr
|
||||||
|
# # xorg.libXi
|
||||||
|
# # ];
|
||||||
|
# # runScript = "${hytale-launcher}/hytale-launcher";
|
||||||
|
# # })
|
||||||
|
# hytale-launcher
|
||||||
|
# ];
|
||||||
|
# }
|
||||||
|
#
|
||||||
|
# { pkgs }:
|
||||||
|
#
|
||||||
|
# let
|
||||||
|
# # === AUTO-UPDATE MARKERS - DO NOT MODIFY FORMAT ===
|
||||||
|
# version = "2026.01.24-997c2cb";
|
||||||
|
# sha256 = "sha256-G+FFMOtLVPH2zaWQ87jymf6+JUAVFEKA4SMyuYE9MZ0=";
|
||||||
|
# # === END AUTO-UPDATE MARKERS ===
|
||||||
|
#
|
||||||
|
# pname = "hytale-launcher";
|
||||||
|
# downloadUrl = "https://launcher.hytale.com/builds/release/linux/amd64/hytale-launcher-${version}.zip";
|
||||||
|
#
|
||||||
|
# # Unwrapped derivation - extracts and patches the binary
|
||||||
|
# hytale-launcher-unwrapped = pkgs.stdenv.mkDerivation {
|
||||||
|
# pname = "${pname}-unwrapped";
|
||||||
|
# inherit version;
|
||||||
|
#
|
||||||
|
# src = pkgs.fetchurl {
|
||||||
|
# url = downloadUrl;
|
||||||
|
# inherit sha256;
|
||||||
|
# };
|
||||||
|
#
|
||||||
|
# nativeBuildInputs = with pkgs; [
|
||||||
|
# autoPatchelfHook
|
||||||
|
# unzip
|
||||||
|
# ];
|
||||||
|
#
|
||||||
|
# unpackPhase = ''
|
||||||
|
# runHook preUnpack
|
||||||
|
# unzip $src -d .
|
||||||
|
# runHook postUnpack
|
||||||
|
# '';
|
||||||
|
#
|
||||||
|
# buildInputs = with pkgs; [
|
||||||
|
# webkitgtk_4_1
|
||||||
|
# gtk3
|
||||||
|
# glib
|
||||||
|
# gdk-pixbuf
|
||||||
|
# libsoup_3
|
||||||
|
# cairo
|
||||||
|
# pango
|
||||||
|
# at-spi2-atk
|
||||||
|
# harfbuzz
|
||||||
|
# glibc
|
||||||
|
# ];
|
||||||
|
#
|
||||||
|
# runtimeDependencies = with pkgs; [
|
||||||
|
# libGL
|
||||||
|
# libxkbcommon
|
||||||
|
# xorg.libX11
|
||||||
|
# xorg.libXcomposite
|
||||||
|
# xorg.libXdamage
|
||||||
|
# xorg.libXext
|
||||||
|
# xorg.libXfixes
|
||||||
|
# xorg.libXrandr
|
||||||
|
# ];
|
||||||
|
#
|
||||||
|
# # No build phase needed - just unpack and install
|
||||||
|
# dontBuild = true;
|
||||||
|
#
|
||||||
|
# installPhase = ''
|
||||||
|
# runHook preInstall
|
||||||
|
#
|
||||||
|
# mkdir -p $out/lib/hytale-launcher
|
||||||
|
# install -m755 hytale-launcher $out/lib/hytale-launcher/
|
||||||
|
#
|
||||||
|
# runHook postInstall
|
||||||
|
# '';
|
||||||
|
#
|
||||||
|
# meta = with pkgs.lib; {
|
||||||
|
# description = "Official launcher for Hytale game (unwrapped)";
|
||||||
|
# homepage = "https://hytale.com";
|
||||||
|
# license = licenses.unfree;
|
||||||
|
# sourceProvenance = with sourceTypes; [ binaryNativeCode ];
|
||||||
|
# maintainers = [{
|
||||||
|
# name = "Jacob Pyke";
|
||||||
|
# email = "github@pyk.ee";
|
||||||
|
# github = "JPyke3";
|
||||||
|
# githubId = 13283054;
|
||||||
|
# }];
|
||||||
|
# platforms = [ "x86_64-linux" ];
|
||||||
|
# };
|
||||||
|
# };
|
||||||
|
#
|
||||||
|
# # FHS-wrapped derivation - allows self-updates to work
|
||||||
|
# hytale-launcher = pkgs.buildFHSEnv {
|
||||||
|
# name = "hytale-launcher";
|
||||||
|
# inherit version;
|
||||||
|
#
|
||||||
|
# targetPkgs = pkgs: with pkgs; [
|
||||||
|
# # Core dependencies
|
||||||
|
# hytale-launcher-unwrapped
|
||||||
|
#
|
||||||
|
# # WebKit/GTK stack (for launcher UI)
|
||||||
|
# webkitgtk_4_1
|
||||||
|
# gtk3
|
||||||
|
# glib
|
||||||
|
# gdk-pixbuf
|
||||||
|
# libsoup_3
|
||||||
|
# cairo
|
||||||
|
# pango
|
||||||
|
# at-spi2-atk
|
||||||
|
# harfbuzz
|
||||||
|
#
|
||||||
|
# # Graphics - OpenGL/Vulkan/EGL (for game client via SDL3)
|
||||||
|
# libGL
|
||||||
|
# libGLU
|
||||||
|
# libglvnd
|
||||||
|
# mesa
|
||||||
|
# vulkan-loader
|
||||||
|
# egl-wayland
|
||||||
|
#
|
||||||
|
# # X11 (SDL3 dlopens these)
|
||||||
|
# xorg.libX11
|
||||||
|
# xorg.libXcomposite
|
||||||
|
# xorg.libXdamage
|
||||||
|
# xorg.libXext
|
||||||
|
# xorg.libXfixes
|
||||||
|
# xorg.libXrandr
|
||||||
|
# xorg.libXcursor
|
||||||
|
# xorg.libXi
|
||||||
|
# xorg.libxcb
|
||||||
|
# xorg.libXScrnSaver
|
||||||
|
# xorg.libXinerama
|
||||||
|
# xorg.libXxf86vm
|
||||||
|
#
|
||||||
|
# # Wayland (SDL3 can use Wayland backend)
|
||||||
|
# wayland
|
||||||
|
# libxkbcommon
|
||||||
|
#
|
||||||
|
# # Audio (for game client via bundled OpenAL)
|
||||||
|
# alsa-lib
|
||||||
|
# pipewire
|
||||||
|
# pulseaudio
|
||||||
|
#
|
||||||
|
# # System libraries
|
||||||
|
# dbus
|
||||||
|
# fontconfig
|
||||||
|
# freetype
|
||||||
|
# glibc
|
||||||
|
# nspr
|
||||||
|
# nss
|
||||||
|
# systemd
|
||||||
|
# zlib
|
||||||
|
#
|
||||||
|
# # C++ runtime (needed by libNoesis.so, libopenal.so in game client)
|
||||||
|
# stdenv.cc.cc.lib
|
||||||
|
#
|
||||||
|
# # .NET runtime dependencies (HytaleClient is a .NET application)
|
||||||
|
# icu
|
||||||
|
# openssl
|
||||||
|
# krb5
|
||||||
|
#
|
||||||
|
# # TLS/SSL support for GLib networking (launcher)
|
||||||
|
# glib-networking
|
||||||
|
# cacert
|
||||||
|
# ];
|
||||||
|
#
|
||||||
|
# runScript = pkgs.writeShellScript "hytale-launcher-wrapper" ''
|
||||||
|
# # Hytale data directory
|
||||||
|
# LAUNCHER_DIR="''${XDG_DATA_HOME:-$HOME/.local/share}/Hytale"
|
||||||
|
# LAUNCHER_BIN="$LAUNCHER_DIR/hytale-launcher"
|
||||||
|
# BUNDLED_HASH_FILE="$LAUNCHER_DIR/.bundled_hash"
|
||||||
|
# BUNDLED_BIN="${hytale-launcher-unwrapped}/lib/hytale-launcher/hytale-launcher"
|
||||||
|
#
|
||||||
|
# mkdir -p "$LAUNCHER_DIR"
|
||||||
|
#
|
||||||
|
# # Compute hash of bundled binary to detect Nix package updates
|
||||||
|
# BUNDLED_HASH=$(sha256sum "$BUNDLED_BIN" | cut -d" " -f1)
|
||||||
|
#
|
||||||
|
# # Copy bundled binary if needed (new install or Nix package update)
|
||||||
|
# if [ ! -x "$LAUNCHER_BIN" ] || [ ! -f "$BUNDLED_HASH_FILE" ] || [ "$(cat "$BUNDLED_HASH_FILE")" != "$BUNDLED_HASH" ]; then
|
||||||
|
# install -m755 "$BUNDLED_BIN" "$LAUNCHER_BIN"
|
||||||
|
# echo "$BUNDLED_HASH" > "$BUNDLED_HASH_FILE"
|
||||||
|
# fi
|
||||||
|
#
|
||||||
|
# # Required environment variable from Flatpak metadata
|
||||||
|
# export WEBKIT_DISABLE_COMPOSITING_MODE=1
|
||||||
|
#
|
||||||
|
# # Enable GLib TLS backend (glib-networking)
|
||||||
|
# export GIO_MODULE_DIR=/usr/lib/gio/modules
|
||||||
|
#
|
||||||
|
# # SSL certificates
|
||||||
|
# export SSL_CERT_FILE=/etc/ssl/certs/ca-bundle.crt
|
||||||
|
#
|
||||||
|
# exec "$LAUNCHER_BIN" "$@"
|
||||||
|
# '';
|
||||||
|
#
|
||||||
|
# extraInstallCommands = ''
|
||||||
|
# # Install desktop file
|
||||||
|
# mkdir -p $out/share/applications
|
||||||
|
# cat > $out/share/applications/hytale-launcher.desktop << EOF
|
||||||
|
# [Desktop Entry]
|
||||||
|
# Name=Hytale Launcher
|
||||||
|
# Comment=Official launcher for Hytale
|
||||||
|
# Exec=$out/bin/hytale-launcher
|
||||||
|
# Icon=hytale-launcher
|
||||||
|
# Terminal=false
|
||||||
|
# Type=Application
|
||||||
|
# Categories=Game;
|
||||||
|
# Keywords=hytale;game;launcher;hypixel;
|
||||||
|
# StartupWMClass=com.hypixel.HytaleLauncher
|
||||||
|
# EOF
|
||||||
|
#
|
||||||
|
# '';
|
||||||
|
#
|
||||||
|
# meta = with pkgs.lib; {
|
||||||
|
# description = "Official launcher for Hytale game";
|
||||||
|
# longDescription = ''
|
||||||
|
# The official launcher for Hytale, developed by Hypixel Studios.
|
||||||
|
# This package wraps the launcher from the official distribution,
|
||||||
|
# providing FHS compatibility for self-updates.
|
||||||
|
# '';
|
||||||
|
# homepage = "https://hytale.com";
|
||||||
|
# license = licenses.unfree;
|
||||||
|
# sourceProvenance = with sourceTypes; [ binaryNativeCode ];
|
||||||
|
# maintainers = [{
|
||||||
|
# name = "Jacob Pyke";
|
||||||
|
# email = "github@pyk.ee";
|
||||||
|
# github = "JPyke3";
|
||||||
|
# githubId = 13283054;
|
||||||
|
# }];
|
||||||
|
# platforms = [ "x86_64-linux" ];
|
||||||
|
# mainProgram = "hytale-launcher";
|
||||||
|
# };
|
||||||
|
# };
|
||||||
|
#
|
||||||
|
# in {
|
||||||
|
# inherit hytale-launcher hytale-launcher-unwrapped;
|
||||||
|
# }
|
||||||
|
{pkgs, ...}: let
|
||||||
|
# === AUTO-UPDATE MARKERS - DO NOT MODIFY FORMAT ===
|
||||||
|
version = "2026.01.24-997c2cb";
|
||||||
|
sha256 = "sha256-G+FFMOtLVPH2zaWQ87jymf6+JUAVFEKA4SMyuYE9MZ0=";
|
||||||
|
# === END AUTO-UPDATE MARKERS ===
|
||||||
|
|
||||||
|
pname = "hytale-launcher";
|
||||||
|
downloadUrl = "https://launcher.hytale.com/builds/release/linux/amd64/hytale-launcher-${version}.zip";
|
||||||
|
|
||||||
|
# Unwrapped derivation - extracts and patches the binary
|
||||||
|
hytale-launcher-unwrapped = pkgs.stdenv.mkDerivation {
|
||||||
|
pname = "${pname}-unwrapped";
|
||||||
|
inherit version;
|
||||||
|
|
||||||
|
src = pkgs.fetchurl {
|
||||||
|
url = downloadUrl;
|
||||||
|
inherit sha256;
|
||||||
|
};
|
||||||
|
|
||||||
|
nativeBuildInputs = with pkgs; [
|
||||||
|
autoPatchelfHook
|
||||||
|
unzip
|
||||||
|
];
|
||||||
|
|
||||||
|
unpackPhase = ''
|
||||||
|
runHook preUnpack
|
||||||
|
unzip $src -d .
|
||||||
|
runHook postUnpack
|
||||||
|
'';
|
||||||
|
|
||||||
|
buildInputs = with pkgs; [
|
||||||
|
webkitgtk_4_1
|
||||||
|
gtk3
|
||||||
|
glib
|
||||||
|
gdk-pixbuf
|
||||||
|
libsoup_3
|
||||||
|
cairo
|
||||||
|
pango
|
||||||
|
at-spi2-atk
|
||||||
|
harfbuzz
|
||||||
|
glibc
|
||||||
|
];
|
||||||
|
|
||||||
|
runtimeDependencies = with pkgs; [
|
||||||
|
libGL
|
||||||
|
libxkbcommon
|
||||||
|
# xorg.libX11
|
||||||
|
# xorg.libXcomposite
|
||||||
|
# xorg.libXdamage
|
||||||
|
# xorg.libXext
|
||||||
|
# xorg.libXfixes
|
||||||
|
# xorg.libXrandr
|
||||||
|
];
|
||||||
|
|
||||||
|
# No build phase needed - just unpack and install
|
||||||
|
dontBuild = true;
|
||||||
|
|
||||||
|
installPhase = ''
|
||||||
|
runHook preInstall
|
||||||
|
|
||||||
|
mkdir -p $out/lib/hytale-launcher
|
||||||
|
install -m755 hytale-launcher $out/lib/hytale-launcher/
|
||||||
|
|
||||||
|
runHook postInstall
|
||||||
|
'';
|
||||||
|
|
||||||
|
meta = with pkgs.lib; {
|
||||||
|
description = "Official launcher for Hytale game (unwrapped)";
|
||||||
|
homepage = "https://hytale.com";
|
||||||
|
license = licenses.unfree;
|
||||||
|
sourceProvenance = with sourceTypes; [binaryNativeCode];
|
||||||
|
maintainers = [
|
||||||
|
{
|
||||||
|
name = "Jacob Pyke";
|
||||||
|
email = "github@pyk.ee";
|
||||||
|
github = "JPyke3";
|
||||||
|
githubId = 13283054;
|
||||||
|
}
|
||||||
|
];
|
||||||
|
platforms = ["x86_64-linux"];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# FHS-wrapped derivation - allows self-updates to work
|
||||||
|
hytale-launcher = pkgs.buildFHSEnv {
|
||||||
|
name = "hytale-launcher";
|
||||||
|
inherit version;
|
||||||
|
|
||||||
|
targetPkgs = pkgs:
|
||||||
|
with pkgs; [
|
||||||
|
# Core dependencies
|
||||||
|
hytale-launcher-unwrapped
|
||||||
|
|
||||||
|
# WebKit/GTK stack (for launcher UI)
|
||||||
|
webkitgtk_4_1
|
||||||
|
gtk3
|
||||||
|
glib
|
||||||
|
gdk-pixbuf
|
||||||
|
libsoup_3
|
||||||
|
cairo
|
||||||
|
pango
|
||||||
|
at-spi2-atk
|
||||||
|
harfbuzz
|
||||||
|
|
||||||
|
# Graphics - OpenGL/Vulkan/EGL (for game client via SDL3)
|
||||||
|
libGL
|
||||||
|
libGLU
|
||||||
|
libglvnd
|
||||||
|
mesa
|
||||||
|
vulkan-loader
|
||||||
|
egl-wayland
|
||||||
|
|
||||||
|
# X11 (SDL3 dlopens these)
|
||||||
|
# xorg.libX11
|
||||||
|
# xorg.libXcomposite
|
||||||
|
# xorg.libXdamage
|
||||||
|
# xorg.libXext
|
||||||
|
# xorg.libXfixes
|
||||||
|
# xorg.libXrandr
|
||||||
|
# xorg.libXcursor
|
||||||
|
# xorg.libXi
|
||||||
|
# xorg.libxcb
|
||||||
|
# xorg.libXScrnSaver
|
||||||
|
# xorg.libXinerama
|
||||||
|
# xorg.libXxf86vm
|
||||||
|
|
||||||
|
# Wayland (SDL3 can use Wayland backend)
|
||||||
|
wayland
|
||||||
|
libxkbcommon
|
||||||
|
|
||||||
|
# Audio (for game client via bundled OpenAL)
|
||||||
|
alsa-lib
|
||||||
|
pipewire
|
||||||
|
pulseaudio
|
||||||
|
|
||||||
|
# System libraries
|
||||||
|
dbus
|
||||||
|
fontconfig
|
||||||
|
freetype
|
||||||
|
glibc
|
||||||
|
nspr
|
||||||
|
nss
|
||||||
|
systemd
|
||||||
|
zlib
|
||||||
|
|
||||||
|
# C++ runtime (needed by libNoesis.so, libopenal.so in game client)
|
||||||
|
stdenv.cc.cc.lib
|
||||||
|
|
||||||
|
# .NET runtime dependencies (HytaleClient is a .NET application)
|
||||||
|
icu
|
||||||
|
openssl
|
||||||
|
krb5
|
||||||
|
|
||||||
|
# TLS/SSL support for GLib networking (launcher)
|
||||||
|
glib-networking
|
||||||
|
cacert
|
||||||
|
];
|
||||||
|
|
||||||
|
runScript = pkgs.writeShellScript "hytale-launcher-wrapper" ''
|
||||||
|
# Hytale data directory
|
||||||
|
LAUNCHER_DIR="''${XDG_DATA_HOME:-$HOME/.local/share}/Hytale"
|
||||||
|
LAUNCHER_BIN="$LAUNCHER_DIR/hytale-launcher"
|
||||||
|
BUNDLED_HASH_FILE="$LAUNCHER_DIR/.bundled_hash"
|
||||||
|
BUNDLED_BIN="${hytale-launcher-unwrapped}/lib/hytale-launcher/hytale-launcher"
|
||||||
|
|
||||||
|
mkdir -p "$LAUNCHER_DIR"
|
||||||
|
|
||||||
|
# Compute hash of bundled binary to detect Nix package updates
|
||||||
|
BUNDLED_HASH=$(sha256sum "$BUNDLED_BIN" | cut -d" " -f1)
|
||||||
|
|
||||||
|
# Copy bundled binary if needed (new install or Nix package update)
|
||||||
|
if [ ! -x "$LAUNCHER_BIN" ] || [ ! -f "$BUNDLED_HASH_FILE" ] || [ "$(cat "$BUNDLED_HASH_FILE")" != "$BUNDLED_HASH" ]; then
|
||||||
|
install -m755 "$BUNDLED_BIN" "$LAUNCHER_BIN"
|
||||||
|
echo "$BUNDLED_HASH" > "$BUNDLED_HASH_FILE"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Required environment variable from Flatpak metadata
|
||||||
|
export WEBKIT_DISABLE_COMPOSITING_MODE=1
|
||||||
|
|
||||||
|
# Enable GLib TLS backend (glib-networking)
|
||||||
|
export GIO_MODULE_DIR=/usr/lib/gio/modules
|
||||||
|
|
||||||
|
# SSL certificates
|
||||||
|
export SSL_CERT_FILE=/etc/ssl/certs/ca-bundle.crt
|
||||||
|
|
||||||
|
exec "$LAUNCHER_BIN" "$@"
|
||||||
|
'';
|
||||||
|
|
||||||
|
extraInstallCommands = ''
|
||||||
|
# Install desktop file
|
||||||
|
mkdir -p $out/share/applications
|
||||||
|
cat > $out/share/applications/hytale-launcher.desktop << EOF
|
||||||
|
[Desktop Entry]
|
||||||
|
Name=Hytale Launcher
|
||||||
|
Comment=Official launcher for Hytale
|
||||||
|
Exec=$out/bin/hytale-launcher
|
||||||
|
Icon=hytale-launcher
|
||||||
|
Terminal=false
|
||||||
|
Type=Application
|
||||||
|
Categories=Game;
|
||||||
|
Keywords=hytale;game;launcher;hypixel;
|
||||||
|
StartupWMClass=com.hypixel.HytaleLauncher
|
||||||
|
EOF
|
||||||
|
|
||||||
|
'';
|
||||||
|
|
||||||
|
meta = with pkgs.lib; {
|
||||||
|
description = "Official launcher for Hytale game";
|
||||||
|
longDescription = ''
|
||||||
|
The official launcher for Hytale, developed by Hypixel Studios.
|
||||||
|
This package wraps the launcher from the official distribution,
|
||||||
|
providing FHS compatibility for self-updates.
|
||||||
|
'';
|
||||||
|
homepage = "https://hytale.com";
|
||||||
|
license = licenses.unfree;
|
||||||
|
sourceProvenance = with sourceTypes; [binaryNativeCode];
|
||||||
|
maintainers = [
|
||||||
|
{
|
||||||
|
name = "Jacob Pyke";
|
||||||
|
email = "github@pyk.ee";
|
||||||
|
github = "JPyke3";
|
||||||
|
githubId = 13283054;
|
||||||
|
}
|
||||||
|
];
|
||||||
|
platforms = ["x86_64-linux"];
|
||||||
|
mainProgram = "hytale-launcher";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
in {
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
hytale-launcher
|
||||||
|
];
|
||||||
|
}
|
||||||
@@ -10,5 +10,7 @@
|
|||||||
./nix-ld.nix
|
./nix-ld.nix
|
||||||
./gamemode.nix
|
./gamemode.nix
|
||||||
./droidcam.nix
|
./droidcam.nix
|
||||||
|
./wireshark.nix
|
||||||
|
./flatpak.nix
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
5
nixos/ryu/programs/flatpak.nix
Normal file
5
nixos/ryu/programs/flatpak.nix
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
{...}: {
|
||||||
|
services.flatpak = {
|
||||||
|
enable = true;
|
||||||
|
};
|
||||||
|
}
|
||||||
14
nixos/ryu/programs/wireshark.nix
Normal file
14
nixos/ryu/programs/wireshark.nix
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
device,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
programs.wireshark = {
|
||||||
|
enable = true;
|
||||||
|
dumpcap.enable = true;
|
||||||
|
};
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
wireshark-qt
|
||||||
|
];
|
||||||
|
users.users.${device.user}.extraGroups = ["wireshark"];
|
||||||
|
}
|
||||||
@@ -138,7 +138,7 @@
|
|||||||
|
|
||||||
swapDevices = [
|
swapDevices = [
|
||||||
{
|
{
|
||||||
device = "/var/lib/swapfile";
|
device = "/home/swapfile";
|
||||||
size = 64 * 1024;
|
size = 64 * 1024;
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -1,27 +1,26 @@
|
|||||||
{...}: {
|
{...}: {
|
||||||
imports = [
|
imports = [
|
||||||
# ./rsyncd.nix
|
# ./rsyncd.nix
|
||||||
# ./sunshine.nix
|
|
||||||
# ./zerotier.nix
|
# ./zerotier.nix
|
||||||
# ./dnscrypt.nix
|
# ./dnscrypt.nix
|
||||||
./llama.nix
|
|
||||||
./ollama.nix
|
|
||||||
./tailscale.nix
|
|
||||||
./samba.nix
|
|
||||||
./mullvad.nix
|
|
||||||
./openrgb.nix
|
|
||||||
./command-runner.nix
|
|
||||||
./resolved.nix
|
|
||||||
./minecraft.nix
|
|
||||||
./fwupd.nix
|
|
||||||
./caddy.nix
|
./caddy.nix
|
||||||
./monitoring.nix
|
./command-runner.nix
|
||||||
./wivrn.nix
|
|
||||||
./sshd.nix
|
|
||||||
./fprintd.nix
|
|
||||||
./handoff.nix
|
|
||||||
./gstreamer.nix
|
|
||||||
./dualsense.nix
|
./dualsense.nix
|
||||||
|
./fprintd.nix
|
||||||
|
./fwupd.nix
|
||||||
|
./gstreamer.nix
|
||||||
|
./handoff.nix
|
||||||
|
./minecraft.nix
|
||||||
|
./monitoring.nix
|
||||||
|
./mullvad.nix
|
||||||
|
./ollama.nix
|
||||||
|
./openrgb.nix
|
||||||
./openssh.nix
|
./openssh.nix
|
||||||
|
./resolved.nix
|
||||||
|
./samba.nix
|
||||||
|
./sshd.nix
|
||||||
|
# ./sunshine.nix
|
||||||
|
./tailscale.nix
|
||||||
|
./wivrn.nix
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,35 +0,0 @@
|
|||||||
{
|
|
||||||
pkgs,
|
|
||||||
config,
|
|
||||||
inputs,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
# llama-cpp = {
|
|
||||||
# enable = false;
|
|
||||||
# port = 11345;
|
|
||||||
# # model = "/nix/store/ch6z9di3l0k54ad29pzv8k3zv47q30d1-Qwen3-Coder-30B-A3B-Instruct-Q4_K_M.gguf";
|
|
||||||
# model = pkgs.fetchurl {
|
|
||||||
# # url = "https://huggingface.co/lmstudio-community/gpt-oss-20b-GGUF/resolve/main/gpt-oss-20b-MXFP4.gguf";
|
|
||||||
# # sha256 = "65d06d31a3977d553cb3af137b5c26b5f1e9297a6aaa29ae7caa98788cde53ab";
|
|
||||||
# url = "https://huggingface.co/lmstudio-community/Qwen3-Coder-30B-A3B-Instruct-GGUF/resolve/main/Qwen3-Coder-30B-A3B-Instruct-Q4_K_M.gguf";
|
|
||||||
# sha256 = "79ad15a5ee3caddc3f4ff0db33a14454a5a3eb503d7fa1c1e35feafc579de486";
|
|
||||||
# };
|
|
||||||
# extraFlags = [
|
|
||||||
# "-c"
|
|
||||||
# "98304"
|
|
||||||
# "--jinja"
|
|
||||||
# "--chat-template-file"
|
|
||||||
# "${../../../assets/chat.hbs}"
|
|
||||||
# # "/nix/store/4zk1p50hrzghp3jzzysz96pa64i2kmjl-promp.hbs"
|
|
||||||
# ];
|
|
||||||
# # package = inputs.llama-cpp.packages.${pkgs.system}.cuda;
|
|
||||||
# };
|
|
||||||
services = {
|
|
||||||
caddy = {
|
|
||||||
virtualHosts."llama.ryu.darksailor.dev".extraConfig = ''
|
|
||||||
import cloudflare
|
|
||||||
reverse_proxy localhost:11345
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -4,43 +4,55 @@
|
|||||||
config,
|
config,
|
||||||
...
|
...
|
||||||
}: {
|
}: {
|
||||||
|
sops = {
|
||||||
|
secrets."openai/api_key" = {};
|
||||||
|
secrets."llama/api_key".owner = config.services.caddy.user;
|
||||||
|
templates = {
|
||||||
|
"LLAMA_API_KEY.env".content = ''
|
||||||
|
LLAMA_API_KEY=${config.sops.placeholder."llama/api_key"}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
services = {
|
services = {
|
||||||
ollama = {
|
ollama = {
|
||||||
enable = true;
|
enable = true;
|
||||||
host = "0.0.0.0";
|
host = "0.0.0.0";
|
||||||
# loadModels = ["deepseek-r1:7b" "deepseek-r1:14b" "RobinBially/nomic-embed-text-8k" "qwen3:8b" "qwen3:14b"];
|
# loadModels = ["deepseek-r1:7b" "deepseek-r1:14b" "RobinBially/nomic-embed-text-8k" "qwen3:8b" "qwen3:14b"];
|
||||||
# loadModels = ["deepseek-r1:7b" "deepseek-r1:14b" "RobinBially/nomic-embed-text-8k" "qwen3:8b" "qwen3:14b"];
|
|
||||||
port = 11434;
|
port = 11434;
|
||||||
# acceleration = "cuda";
|
# acceleration = "cuda";
|
||||||
environmentVariables = {
|
environmentVariables = {
|
||||||
OLLAMA_ORIGINS = "*";
|
OLLAMA_ORIGINS = "*";
|
||||||
OLLAMA_LLM_LIBRARY = "cuda";
|
OLLAMA_LLM_LIBRARY = "cuda";
|
||||||
LD_LIBRARY_PATH = "run/opengl-driver/lib";
|
LD_LIBRARY_PATH = "run/opengl-driver/lib";
|
||||||
HTTP_PROXY = "https://ollama.ryu.darksailor.dev";
|
HTTP_PROXY = "https://ollama.darksailor.dev";
|
||||||
|
OLLAMA_CONTEXT_LENGTH = "32000";
|
||||||
|
OLLAMA_KEEP_ALIVE = "30m";
|
||||||
};
|
};
|
||||||
package = pkgs.ollama-cuda;
|
package = pkgs.ollama-cuda;
|
||||||
};
|
};
|
||||||
# open-webui = {
|
|
||||||
# enable = false;
|
|
||||||
# environment = {
|
|
||||||
# OLLAMA_BASE_URL = "http://127.0.0.1:11434";
|
|
||||||
# WEBUI_AUTH = "False";
|
|
||||||
# ENABLE_LOGIN_FORM = "False";
|
|
||||||
# };
|
|
||||||
# };
|
|
||||||
caddy = {
|
caddy = {
|
||||||
# virtualHosts."llama.ryu.darksailor.dev".extraConfig = ''
|
virtualHosts."ollama.darksailor.dev".extraConfig = ''
|
||||||
# import cloudflare
|
|
||||||
# forward_auth tako:5555 {
|
|
||||||
# uri /api/authz/forward-auth
|
|
||||||
# copy_headers Remote-User Remote-Groups Remote-Email Remote-Name
|
|
||||||
# }
|
|
||||||
# reverse_proxy localhost:${builtins.toString config.services.open-webui.port}
|
|
||||||
# '';
|
|
||||||
virtualHosts."ollama.ryu.darksailor.dev".extraConfig = ''
|
|
||||||
import cloudflare
|
import cloudflare
|
||||||
|
@apikey {
|
||||||
|
header Authorization "Bearer {env.LLAMA_API_KEY}"
|
||||||
|
}
|
||||||
|
|
||||||
|
handle @apikey {
|
||||||
|
header {
|
||||||
|
# Set response headers or proxy to a different service if API key is valid
|
||||||
|
Access-Control-Allow-Origin *
|
||||||
|
-Authorization "Bearer {env.LLAMA_API_KEY}" # Remove the header after validation
|
||||||
|
}
|
||||||
reverse_proxy localhost:${builtins.toString config.services.ollama.port}
|
reverse_proxy localhost:${builtins.toString config.services.ollama.port}
|
||||||
|
}
|
||||||
|
|
||||||
|
respond "Unauthorized" 403
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
systemd.services.caddy = {
|
||||||
|
serviceConfig = {
|
||||||
|
EnvironmentFile = config.sops.templates."LLAMA_API_KEY.env".path;
|
||||||
|
};
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -65,7 +65,7 @@
|
|||||||
dates = "daily";
|
dates = "daily";
|
||||||
options = "--delete-older-than 5d";
|
options = "--delete-older-than 5d";
|
||||||
};
|
};
|
||||||
package = pkgs.nixVersions.latest; # deploy-rs doesn't work with nix >= 2.32
|
package = pkgs.nixVersions.nix_2_32; # deploy-rs doesn't work with nix >= 2.32
|
||||||
distributedBuilds = true;
|
distributedBuilds = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
19
nixos/tako/services/blocky.nix
Normal file
19
nixos/tako/services/blocky.nix
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
{
|
||||||
|
device,
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
services = {
|
||||||
|
blocky = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
ports.dns = 53;
|
||||||
|
ports.http = 83838;
|
||||||
|
ports.dohPath = "/dns-query";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
caddy.virtualHosts."blocky.${device.domain}".extraConfig = ''
|
||||||
|
reverse_proxy localhost:83838
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -2,7 +2,7 @@
|
|||||||
imports = [
|
imports = [
|
||||||
./games
|
./games
|
||||||
# ./headscale.nix
|
# ./headscale.nix
|
||||||
# ./llama.nix
|
./llms.nix
|
||||||
# ./monitoring.nix
|
# ./monitoring.nix
|
||||||
# ./paperless.nix
|
# ./paperless.nix
|
||||||
./navidrome.nix
|
./navidrome.nix
|
||||||
@@ -23,6 +23,7 @@
|
|||||||
./resolved.nix
|
./resolved.nix
|
||||||
./searxng.nix
|
./searxng.nix
|
||||||
./tailscale.nix
|
./tailscale.nix
|
||||||
|
./kellnr.nix
|
||||||
];
|
];
|
||||||
services = {
|
services = {
|
||||||
nix-serve = {
|
nix-serve = {
|
||||||
|
|||||||
0
nixos/tako/services/games/hytale.nix
Normal file
0
nixos/tako/services/games/hytale.nix
Normal file
@@ -24,6 +24,7 @@
|
|||||||
icon = "jellyfin.png";
|
icon = "jellyfin.png";
|
||||||
description = "Jellyfin Media Server";
|
description = "Jellyfin Media Server";
|
||||||
href = "https://jellyfin.tsuba.darksailor.dev";
|
href = "https://jellyfin.tsuba.darksailor.dev";
|
||||||
|
siteMonitor = "https://jellyfin.tsuba.darksailor.dev";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
@@ -31,6 +32,7 @@
|
|||||||
icon = "sonarr.png";
|
icon = "sonarr.png";
|
||||||
description = "Sonarr: TV Series Management";
|
description = "Sonarr: TV Series Management";
|
||||||
href = "https://sonarr.tsuba.darksailor.dev";
|
href = "https://sonarr.tsuba.darksailor.dev";
|
||||||
|
siteMonitor = "https://sonarr.tsuba.darksailor.dev";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
@@ -38,6 +40,7 @@
|
|||||||
icon = "bazarr.png";
|
icon = "bazarr.png";
|
||||||
description = "Bazarr: Subtitles and Metadata";
|
description = "Bazarr: Subtitles and Metadata";
|
||||||
href = "https://bazarr.tsuba.darksailor.dev";
|
href = "https://bazarr.tsuba.darksailor.dev";
|
||||||
|
siteMonitor = "https://bazarr.tsuba.darksailor.dev";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
@@ -45,6 +48,7 @@
|
|||||||
icon = "radarr.png";
|
icon = "radarr.png";
|
||||||
description = "Radarr: Movie Management";
|
description = "Radarr: Movie Management";
|
||||||
href = "https://radarr.tsuba.darksailor.dev";
|
href = "https://radarr.tsuba.darksailor.dev";
|
||||||
|
siteMonitor = "https://radarr.tsuba.darksailor.dev";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
@@ -52,13 +56,7 @@
|
|||||||
icon = "deluge.png";
|
icon = "deluge.png";
|
||||||
description = "Deluge: Torrent Client";
|
description = "Deluge: Torrent Client";
|
||||||
href = "https://deluge.tsuba.darksailor.dev";
|
href = "https://deluge.tsuba.darksailor.dev";
|
||||||
};
|
siteMonitor = "https://deluge.tsuba.darksailor.dev";
|
||||||
}
|
|
||||||
{
|
|
||||||
"Prowlarr" = {
|
|
||||||
icon = "prowlarr.png";
|
|
||||||
description = "Prowlarr: Indexer Manager";
|
|
||||||
href = "https://prowlarr.tsuba.darksailor.dev";
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
@@ -66,6 +64,15 @@
|
|||||||
icon = "home-assistant.png";
|
icon = "home-assistant.png";
|
||||||
description = "Home Automation";
|
description = "Home Automation";
|
||||||
href = "https://home.darksailor.dev";
|
href = "https://home.darksailor.dev";
|
||||||
|
siteMonitor = "https://home.darksailor.dev";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
{
|
||||||
|
"Pi Hole" = {
|
||||||
|
icon = "pi-hole.png";
|
||||||
|
description = "Pi-hole: Network-wide Ad Blocker";
|
||||||
|
href = "https://pihole.darksailor.dev";
|
||||||
|
siteMonitor = "https://pihole.darksailor.dev";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
@@ -77,6 +84,7 @@
|
|||||||
icon = "gitea.png";
|
icon = "gitea.png";
|
||||||
description = "Gitea Code Hosting";
|
description = "Gitea Code Hosting";
|
||||||
href = "https://git.darksailor.dev";
|
href = "https://git.darksailor.dev";
|
||||||
|
siteMonitor = "https://git.darksailor.dev";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
@@ -84,6 +92,7 @@
|
|||||||
icon = "nextcloud.png";
|
icon = "nextcloud.png";
|
||||||
description = "Nextcloud Suite";
|
description = "Nextcloud Suite";
|
||||||
href = "https://cloud.darksailor.dev";
|
href = "https://cloud.darksailor.dev";
|
||||||
|
siteMonitor = "https://cloud.darksailor.dev";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
@@ -91,13 +100,15 @@
|
|||||||
icon = "immich.png";
|
icon = "immich.png";
|
||||||
description = "Immich: Self-hosted Photo and Video Backup";
|
description = "Immich: Self-hosted Photo and Video Backup";
|
||||||
href = "https://photos.darksailor.dev";
|
href = "https://photos.darksailor.dev";
|
||||||
|
siteMonitor = "https://photos.darksailor.dev";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
"Excalidraw" = {
|
"Excalidraw" = {
|
||||||
icon = "excalidraw.png";
|
icon = "excalidraw.png";
|
||||||
description = "Excalidraw: Self-hosted Collaborative Whiteboard";
|
description = "Excalidraw: Self-hosted Whiteboard";
|
||||||
href = "https://draw.darksailor.dev";
|
href = "https://draw.darksailor.dev";
|
||||||
|
siteMonitor = "https://draw.darksailor.dev";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
@@ -105,6 +116,23 @@
|
|||||||
icon = "navidrome.png";
|
icon = "navidrome.png";
|
||||||
description = "A self-hosted music server and streamer.";
|
description = "A self-hosted music server and streamer.";
|
||||||
href = "https://music.darksailor.dev";
|
href = "https://music.darksailor.dev";
|
||||||
|
siteMonitor = "https://music.darksailor.dev";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
{
|
||||||
|
"OpenwebUI" = {
|
||||||
|
icon = "open-webui.png";
|
||||||
|
description = "OpenwebUI: Self-hosted AI chat interface";
|
||||||
|
href = "https://chat.darksailor.dev";
|
||||||
|
siteMonitor = "https://chat.darksailor.dev";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
{
|
||||||
|
"Prowlarr" = {
|
||||||
|
icon = "prowlarr.png";
|
||||||
|
description = "Prowlarr: Indexer Manager";
|
||||||
|
href = "https://prowlarr.darksailor.dev";
|
||||||
|
siteMonitor = "https://prowlarr.darksailor.dev";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
@@ -159,23 +187,22 @@
|
|||||||
};
|
};
|
||||||
caddy = {
|
caddy = {
|
||||||
virtualHosts."dashboard.darksailor.dev".extraConfig = ''
|
virtualHosts."dashboard.darksailor.dev".extraConfig = ''
|
||||||
# import auth
|
|
||||||
reverse_proxy localhost:${builtins.toString config.services.homepage-dashboard.listenPort}
|
reverse_proxy localhost:${builtins.toString config.services.homepage-dashboard.listenPort}
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
authelia = {
|
# authelia = {
|
||||||
instances.darksailor = {
|
# instances.darksailor = {
|
||||||
settings = {
|
# settings = {
|
||||||
access_control = {
|
# access_control = {
|
||||||
rules = [
|
# rules = [
|
||||||
{
|
# {
|
||||||
domain = "dashboard.darksailor.dev";
|
# domain = "dashboard.darksailor.dev";
|
||||||
policy = "one_factor";
|
# policy = "one_factor";
|
||||||
}
|
# }
|
||||||
];
|
# ];
|
||||||
};
|
# };
|
||||||
};
|
# };
|
||||||
};
|
# };
|
||||||
};
|
# };
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
57
nixos/tako/services/kellnr.nix
Normal file
57
nixos/tako/services/kellnr.nix
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
# docker run --rm -it \
|
||||||
|
# -p 8000:8000 \
|
||||||
|
# -e "KELLNR_ORIGIN__HOSTNAME=kellnr.example.com" \
|
||||||
|
# -v $(pwd):/opt/kdata ghcr.io/kellnr/kellnr:5
|
||||||
|
# E.g. docker run -v /path/to/config.toml:/usr/local/cargo/config.toml:ro ghcr.io/kellnr/kellnr:5.2.4
|
||||||
|
{config, ...}: let
|
||||||
|
port = 8899;
|
||||||
|
domain = "crates.darksailor.dev";
|
||||||
|
in {
|
||||||
|
sops = {
|
||||||
|
secrets."kellnr/password" = {};
|
||||||
|
secrets."kellnr/token" = {};
|
||||||
|
templates."kellnr.env".content = ''
|
||||||
|
KELLNR_SETUP__ADMIN_PWD=${config.sops.placeholder."kellnr/password"}
|
||||||
|
KELLNR_SETUP__ADMIN_TOKEN=${config.sops.placeholder."kellnr/token"}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
virtualisation.oci-containers = {
|
||||||
|
backend = "docker";
|
||||||
|
containers = {
|
||||||
|
kellnr = {
|
||||||
|
image = "ghcr.io/kellnr/kellnr:5";
|
||||||
|
ports = ["127.0.0.1:${toString port}:8000"];
|
||||||
|
volumes = [
|
||||||
|
"/var/lib/kellnr:/opt/kdata"
|
||||||
|
];
|
||||||
|
environment = {
|
||||||
|
KELLNR_ORIGIN__HOSTNAME = domain;
|
||||||
|
KELLNR_DOCS__ENABLED = "true";
|
||||||
|
KELLNR_ORIGIN__PROTOCOL = "https";
|
||||||
|
KELLNR_ORIGIN__PORT = "443";
|
||||||
|
};
|
||||||
|
environmentFiles = [
|
||||||
|
config.sops.templates."kellnr.env".path
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
services.caddy.virtualHosts."${domain}".extraConfig = ''
|
||||||
|
# import auth
|
||||||
|
reverse_proxy localhost:${toString port}
|
||||||
|
'';
|
||||||
|
# services.authelia = {
|
||||||
|
# instances.darksailor = {
|
||||||
|
# settings = {
|
||||||
|
# access_control = {
|
||||||
|
# rules = [
|
||||||
|
# {
|
||||||
|
# inherit domain;
|
||||||
|
# policy = "one_factor";
|
||||||
|
# }
|
||||||
|
# ];
|
||||||
|
# };
|
||||||
|
# };
|
||||||
|
# };
|
||||||
|
# };
|
||||||
|
}
|
||||||
@@ -1,103 +0,0 @@
|
|||||||
{
|
|
||||||
config,
|
|
||||||
pkgs,
|
|
||||||
inputs,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
sops = {
|
|
||||||
secrets."llama/api_key".owner = config.services.caddy.user;
|
|
||||||
secrets."llama/user".owner = config.services.caddy.user;
|
|
||||||
secrets."openai/api_key" = {};
|
|
||||||
templates = {
|
|
||||||
"LLAMA_API_KEY.env".content = ''
|
|
||||||
LLAMA_API_KEY=${config.sops.placeholder."llama/api_key"}
|
|
||||||
'';
|
|
||||||
api_key_env.owner = config.services.caddy.user;
|
|
||||||
"OPENAI_API_KEY.env".content = ''
|
|
||||||
OPENAI_API_KEY="${config.sops.placeholder."openai/api_key"}"
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
};
|
|
||||||
services = {
|
|
||||||
llama-cpp = {
|
|
||||||
enable = false;
|
|
||||||
port = 11435;
|
|
||||||
model = pkgs.fetchurl {
|
|
||||||
url = "https://huggingface.co/lmstudio-community/gpt-oss-20b-GGUF/resolve/main/gpt-oss-20b-MXFP4.gguf";
|
|
||||||
sha256 = "65d06d31a3977d553cb3af137b5c26b5f1e9297a6aaa29ae7caa98788cde53ab";
|
|
||||||
};
|
|
||||||
# package = pkgs.ik_llama;
|
|
||||||
};
|
|
||||||
ollama = {
|
|
||||||
enable = false;
|
|
||||||
loadModels = [
|
|
||||||
"deepseek-r1:7b"
|
|
||||||
"deepseek-r1:14b"
|
|
||||||
"RobinBially/nomic-embed-text-8k"
|
|
||||||
"qwen3:8b"
|
|
||||||
];
|
|
||||||
port = 11434;
|
|
||||||
host = "0.0.0.0";
|
|
||||||
environmentVariables = {
|
|
||||||
OLLAMA_ORIGINS = "*";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
open-webui = {
|
|
||||||
enable = false;
|
|
||||||
port = 7070;
|
|
||||||
environment = {
|
|
||||||
SCARF_NO_ANALYTICS = "True";
|
|
||||||
DO_NOT_TRACK = "True";
|
|
||||||
ANONYMIZED_TELEMETRY = "False";
|
|
||||||
WEBUI_AUTH = "False";
|
|
||||||
ENABLE_LOGIN_FORM = "False";
|
|
||||||
WEBUI_URL = "https://llama.darksailor.dev";
|
|
||||||
OPENAI_BASE_URL = "https://ollama.darksailor.dev/v1";
|
|
||||||
OLLAMA_API_BASE_URL = "https://ollama.ryu.darksailor.dev";
|
|
||||||
};
|
|
||||||
environmentFile = "${config.sops.templates."LLAMA_API_KEY.env".path}";
|
|
||||||
};
|
|
||||||
|
|
||||||
caddy = {
|
|
||||||
virtualHosts."llama.darksailor.dev".extraConfig = ''
|
|
||||||
import auth
|
|
||||||
reverse_proxy localhost:${builtins.toString config.services.open-webui.port}
|
|
||||||
'';
|
|
||||||
virtualHosts."ollama.darksailor.dev".extraConfig = ''
|
|
||||||
@apikey {
|
|
||||||
header Authorization "Bearer {env.LLAMA_API_KEY}"
|
|
||||||
}
|
|
||||||
|
|
||||||
handle @apikey {
|
|
||||||
header {
|
|
||||||
# Set response headers or proxy to a different service if API key is valid
|
|
||||||
Access-Control-Allow-Origin *
|
|
||||||
-Authorization "Bearer {env.LLAMA_API_KEY}" # Remove the header after validation
|
|
||||||
}
|
|
||||||
reverse_proxy localhost:${builtins.toString config.services.llama-cpp.port}
|
|
||||||
}
|
|
||||||
|
|
||||||
respond "Unauthorized" 403
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
authelia = {
|
|
||||||
instances.darksailor = {
|
|
||||||
settings = {
|
|
||||||
access_control = {
|
|
||||||
rules = [
|
|
||||||
{
|
|
||||||
domain = "llama.darksailor.dev";
|
|
||||||
policy = "one_factor";
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
systemd.services.caddy = {
|
|
||||||
serviceConfig = {
|
|
||||||
EnvironmentFile = config.sops.templates."LLAMA_API_KEY.env".path;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
54
nixos/tako/services/llms.nix
Normal file
54
nixos/tako/services/llms.nix
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
{config, ...}: {
|
||||||
|
sops = {
|
||||||
|
secrets."llama/api_key".owner = config.services.caddy.user;
|
||||||
|
secrets."openai/api_key" = {};
|
||||||
|
templates = {
|
||||||
|
"ollama.env".content = ''
|
||||||
|
LLAMA_API_KEY=${config.sops.placeholder."llama/api_key"}
|
||||||
|
OPENAI_API_KEYS=${config.sops.placeholder."openai/api_key"}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
services = {
|
||||||
|
open-webui = {
|
||||||
|
enable = true;
|
||||||
|
port = 7070;
|
||||||
|
environment = {
|
||||||
|
SCARF_NO_ANALYTICS = "True";
|
||||||
|
DO_NOT_TRACK = "True";
|
||||||
|
ANONYMIZED_TELEMETRY = "False";
|
||||||
|
WEBUI_AUTH = "False";
|
||||||
|
ENABLE_LOGIN_FORM = "False";
|
||||||
|
WEBUI_URL = "https://chat.darksailor.dev";
|
||||||
|
OLLAMA_BASE_URL = "https://ollama.darksailor.dev";
|
||||||
|
};
|
||||||
|
environmentFile = "${config.sops.templates."ollama.env".path}";
|
||||||
|
};
|
||||||
|
|
||||||
|
caddy = {
|
||||||
|
virtualHosts."chat.darksailor.dev".extraConfig = ''
|
||||||
|
import auth
|
||||||
|
reverse_proxy localhost:${builtins.toString config.services.open-webui.port}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
authelia = {
|
||||||
|
instances.darksailor = {
|
||||||
|
settings = {
|
||||||
|
access_control = {
|
||||||
|
rules = [
|
||||||
|
{
|
||||||
|
domain = "chat.darksailor.dev";
|
||||||
|
policy = "one_factor";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
systemd.services.caddy = {
|
||||||
|
serviceConfig = {
|
||||||
|
EnvironmentFile = config.sops.templates."ollama.env".path;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -3,6 +3,7 @@
|
|||||||
inputs,
|
inputs,
|
||||||
overlays,
|
overlays,
|
||||||
home-manager-stable,
|
home-manager-stable,
|
||||||
|
nixpkgs,
|
||||||
nur,
|
nur,
|
||||||
nixos-raspberrypi,
|
nixos-raspberrypi,
|
||||||
...
|
...
|
||||||
@@ -15,6 +16,7 @@
|
|||||||
inherit device;
|
inherit device;
|
||||||
unstablePkgs = inputs.nixpkgs.legacyPackages.${device.system};
|
unstablePkgs = inputs.nixpkgs.legacyPackages.${device.system};
|
||||||
masterPkgs = inputs.nixpkgs-master.legacyPackages.${device.system};
|
masterPkgs = inputs.nixpkgs-master.legacyPackages.${device.system};
|
||||||
|
cratesNix = inputs.crates-nix.mkLib {pkgs = nixpkgs.legacyPackages.${device.system};};
|
||||||
};
|
};
|
||||||
system = device.system;
|
system = device.system;
|
||||||
modules = [
|
modules = [
|
||||||
@@ -40,6 +42,7 @@
|
|||||||
inherit inputs;
|
inherit inputs;
|
||||||
inherit device;
|
inherit device;
|
||||||
stablePkgs = inputs.nixpkgs-stable.legacyPackages.${device.system};
|
stablePkgs = inputs.nixpkgs-stable.legacyPackages.${device.system};
|
||||||
|
cratesNix = inputs.crates-nix.mkLib {pkgs = nixpkgs.legacyPackages.${device.system};};
|
||||||
};
|
};
|
||||||
users.${device.user}.imports = [
|
users.${device.user}.imports = [
|
||||||
inputs.nixvim.homeModules.nixvim
|
inputs.nixvim.homeModules.nixvim
|
||||||
|
|||||||
41
overlays.nix
41
overlays.nix
@@ -219,24 +219,25 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
libfprint = final: prev: {
|
libfprint = final: prev: {
|
||||||
# libfprint = prev.libfprint.overrideAttrs (oldAttrs: {
|
libfprint = prev.libfprint.overrideAttrs (oldAttrs: {
|
||||||
# version = "git";
|
version = "git";
|
||||||
# src = final.fetchFromGitHub {
|
# https://github.com/archeYR/libfprint-CS9711/commits/cs9711-rebase/
|
||||||
# owner = "ericlinagora";
|
src = final.fetchFromGitHub {
|
||||||
# repo = "libfprint-CS9711";
|
owner = "archeYR";
|
||||||
# rev = "03ace5b20146eb01c77fb3ea63e1909984d6d377";
|
repo = "libfprint-CS9711";
|
||||||
# sha256 = "sha256-gr3UvFB6D04he/9zawvQIuwfv0B7fEZb6BGiNAbLids";
|
rev = "c2d163fbb06d33e80a5177815bb0b8ca2f01739f";
|
||||||
# };
|
sha256 = "sha256-JygOJ3SybXKR3CjLxLbAZDaYCl9LuQYDQfFC8Si5oaw";
|
||||||
# buildInputs = oldAttrs.buildInputs ++ [final.nss_latest];
|
};
|
||||||
# nativeBuildInputs =
|
buildInputs = oldAttrs.buildInputs ++ [final.nss_latest];
|
||||||
# oldAttrs.nativeBuildInputs
|
nativeBuildInputs =
|
||||||
# ++ [
|
oldAttrs.nativeBuildInputs
|
||||||
# final.opencv
|
++ [
|
||||||
# final.cmake
|
final.opencv
|
||||||
# final.doctest
|
final.cmake
|
||||||
# ];
|
final.doctest
|
||||||
# });
|
];
|
||||||
# # fprintd = inputs.nixpkgs-stable.legacyPackages.${prev.system}.fprintd;
|
});
|
||||||
|
# fprintd = inputs.nixpkgs-stable.legacyPackages.${prev.system}.fprintd;
|
||||||
# fprintd = prev.fprintd.overrideAttrs (oldAttrs: {
|
# fprintd = prev.fprintd.overrideAttrs (oldAttrs: {
|
||||||
# src = inputs.nixpkgs-stable.legacyPackages.${prev.system}.fprintd.src;
|
# src = inputs.nixpkgs-stable.legacyPackages.${prev.system}.fprintd.src;
|
||||||
# });
|
# });
|
||||||
@@ -272,8 +273,12 @@
|
|||||||
# });
|
# });
|
||||||
wivrn-nightly = inputs.wivrn.packages.${prev.system}.default;
|
wivrn-nightly = inputs.wivrn.packages.${prev.system}.default;
|
||||||
};
|
};
|
||||||
|
games = final: prev: {
|
||||||
|
hytale-launcher = inputs.hytale-launcher.packages.${prev.system}.default;
|
||||||
|
};
|
||||||
in
|
in
|
||||||
[
|
[
|
||||||
|
games
|
||||||
vr
|
vr
|
||||||
anyrun-overlay
|
anyrun-overlay
|
||||||
catppuccinThemes
|
catppuccinThemes
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ SHA1=$3
|
|||||||
if [[ -z "$COMMIT_SOURCE" ]]
|
if [[ -z "$COMMIT_SOURCE" ]]
|
||||||
then
|
then
|
||||||
DIFF_OUTPUT=$(git diff --cached)
|
DIFF_OUTPUT=$(git diff --cached)
|
||||||
AI_CHAT_OUTPUT=$(echo "$DIFF_OUTPUT" | aichat --role %git-commit%)
|
AI_CHAT_OUTPUT=$(echo "$DIFF_OUTPUT" | aichat --role git-commit)
|
||||||
CURRENT_MSG=$(cat "$COMMIT_MSG_FILE")
|
CURRENT_MSG=$(cat "$COMMIT_MSG_FILE")
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -80,6 +80,9 @@ pihole:
|
|||||||
password: ENC[AES256_GCM,data:xOpsEFN6zbgPwYnSudmFqlYOghY=,iv:isO0RtKgi8G8noumyhIfLLfmH9w5ybt9NVxh7bRVykM=,tag:17UcPypyqquJDTFZAc5iyA==,type:str]
|
password: ENC[AES256_GCM,data:xOpsEFN6zbgPwYnSudmFqlYOghY=,iv:isO0RtKgi8G8noumyhIfLLfmH9w5ybt9NVxh7bRVykM=,tag:17UcPypyqquJDTFZAc5iyA==,type:str]
|
||||||
nas:
|
nas:
|
||||||
password: ENC[AES256_GCM,data:lWb/l3srLrA=,iv:SN8+ziMJZZ1F+RT6JhoqWXcr1c4pSAkiT6gYfsi2LS4=,tag:g5Whb9nV8FHrOA5/Nbg0Fw==,type:str]
|
password: ENC[AES256_GCM,data:lWb/l3srLrA=,iv:SN8+ziMJZZ1F+RT6JhoqWXcr1c4pSAkiT6gYfsi2LS4=,tag:g5Whb9nV8FHrOA5/Nbg0Fw==,type:str]
|
||||||
|
kellnr:
|
||||||
|
token: ENC[AES256_GCM,data:te5psUTLr8+NLsliJAgz71j8AT3BUkJ8f0eGgnsRbbk2zF9fH3cCfZbry+mmxwvhmwL8ktNexaPUixatNDrWpA==,iv:Ao6Iqr3z8/3azo9H9lPUeVwto7nQMlMuAZp4Q9fIwJE=,tag:r2FXoxgrvlaCnQlngg12qg==,type:str]
|
||||||
|
password: ENC[AES256_GCM,data:OZkfHckKHu/EM6+PquknU+aKmyyFw5o25ZENqNGc0d/vYiNBo4FBdCZwj1W0efo43+hTgsxVj7QCDSxFgROdOg==,iv:2G3fy5dIufL7tXEgRaOGBFNaVoKbfKqcFnRiZN1I1F4=,tag:iyHQD5oXy44tL18W7Fw35g==,type:str]
|
||||||
sops:
|
sops:
|
||||||
age:
|
age:
|
||||||
- recipient: age1pw7kluxp7872c63ne4jecq75glj060jkmqwzkk6esatuyck9egfswufdpk
|
- recipient: age1pw7kluxp7872c63ne4jecq75glj060jkmqwzkk6esatuyck9egfswufdpk
|
||||||
@@ -91,7 +94,7 @@ sops:
|
|||||||
VGZKdHpVeFRpQUxtSEkyaEhLMlBJcGsKLb0DvPNZosPBUuiX6qz1s5IO5INQh8CK
|
VGZKdHpVeFRpQUxtSEkyaEhLMlBJcGsKLb0DvPNZosPBUuiX6qz1s5IO5INQh8CK
|
||||||
ZtXTVClwMSmaUYhdSB2gKFrKVZHXTJZ4oAL5t/BpC0pOHyr+o96T3Q==
|
ZtXTVClwMSmaUYhdSB2gKFrKVZHXTJZ4oAL5t/BpC0pOHyr+o96T3Q==
|
||||||
-----END AGE ENCRYPTED FILE-----
|
-----END AGE ENCRYPTED FILE-----
|
||||||
lastmodified: "2025-12-30T01:39:33Z"
|
lastmodified: "2026-01-23T07:40:21Z"
|
||||||
mac: ENC[AES256_GCM,data:dD0EYgJ7vD4bH5l36XJZO5LA495tVCeh5bMUBhKaOoZgf2LmgNXz5oBHwIof1ZrhZ6cYMKCxvt+hllAL5u2N+hE/JjJLDxPj3DS/BXhTzp/OoQohKdLrYoj6IAUfTQppmLj06WLKR+5TCEzOuG01Y/SkAM9tqk3himfrx7guxUQ=,iv:U7a+4syPkM9R9ksIVJ3/vnFi0iS1uPH2rulpWOayPgs=,tag:2r2rrUg6wEC1zqRpeU2GJA==,type:str]
|
mac: ENC[AES256_GCM,data:lmpI0sQJbEz0U8oxJ+gLZTfFBwCyJYdaiCmKcRU1juL7/mqyRYrB4Dh8lMMmW5I+n0Z1P0zZ5+CD/WnRXcqdZ/Yj40ZlaUgIdsH1qMImvdv1wld0OIThDWKxoTSywGcbaMz7PpAsC5FNoRo5v/uBT9y42xBXoxw8urdHCrIi21Y=,iv:KFL4fuyqv1TKg36kHxSZiiHTi4MoGEnRP5JyB6BQq78=,tag:sVbK6UwRC+f0Z3HSCtZ2qQ==,type:str]
|
||||||
unencrypted_suffix: _unencrypted
|
unencrypted_suffix: _unencrypted
|
||||||
version: 3.11.0
|
version: 3.11.0
|
||||||
|
|||||||
Reference in New Issue
Block a user