Compare commits

...

51 Commits

Author SHA1 Message Date
2913f0c8e1 fix(scripts): correct aichat role syntax
Some checks are pending
Flake checker / Build Nix targets (push) Waiting to run
2026-01-28 14:34:31 +05:30
fb7c219cf2 feat: Disable mpv on macos
Some checks failed
Flake checker / Build Nix targets (push) Has been cancelled
2026-01-28 13:49:31 +05:30
581fa74f19 feat: Add embedding model and extraPackages to aichat
Some checks failed
Flake checker / Build Nix targets (push) Has been cancelled
2026-01-27 16:37:57 +05:30
3f1f23391a feat: Disable nixvim grammarPackages for now because of is-not treesitter
Some checks failed
Flake checker / Build Nix targets (push) Has been cancelled
2026-01-26 23:54:38 +05:30
ddb0345587 feat: Update use local model
Some checks failed
Flake checker / Build Nix targets (push) Has been cancelled
2026-01-26 20:59:27 +05:30
99494b8777 feat: Remove command runner 2026-01-26 20:55:15 +05:30
4c385b2653 feat: Update to latest flake.lock
Some checks failed
Flake checker / Build Nix targets (push) Has been cancelled
2026-01-26 01:06:30 +05:30
f32d7d3643 feat: Added hytale
Some checks failed
Flake checker / Build Nix targets (push) Has been cancelled
2026-01-25 15:30:45 +05:30
ab4c22592a feat(games): add Hytale game module and Flatpak support
Some checks failed
Flake checker / Build Nix targets (push) Has been cancelled
2026-01-24 23:50:55 +05:30
869778df2a feat(nix): integrate cratesNix across Darwin and home modules
Some checks failed
Flake checker / Build Nix targets (push) Has been cancelled
2026-01-23 16:27:52 +05:30
0a2ad32dfb feat: Use different partition for swapfile
Some checks failed
Flake checker / Build Nix targets (push) Has been cancelled
2026-01-23 12:59:50 +05:30
230547eb92 feat: extend ghostty shader, add shadps4 builds, update nix, homepage
Some checks failed
Flake checker / Build Nix targets (push) Has been cancelled
2026-01-21 20:21:25 +05:30
3beb85c474 chore(flake): update flake.lock 2026-01-21 10:41:33 +05:30
101331cbc9 refactor: switch ping to siteMonitor and enable GLSL analyzer 2026-01-21 02:09:15 +05:30
d803dd9dc8 refactor(nixos): add ping to homepage 2026-01-20 17:00:57 +05:30
509a9b49ed feat(nixos): enable immich ml; bind localhost; add ollama env 2026-01-18 21:35:15 +05:30
a97ff2c46d chore(flake): update flake.lock
Some checks failed
Flake checker / Build Nix targets (push) Has been cancelled
2026-01-15 02:16:54 +05:30
6453bb62a1 feat(kellnr): add sops config and docs flag, dynamic domain vhost
Some checks failed
Flake checker / Build Nix targets (push) Has been cancelled
2026-01-14 12:08:19 +05:30
67305549bc feat: Added kellnr
Some checks failed
Flake checker / Build Nix targets (push) Has been cancelled
2026-01-14 11:45:10 +05:30
6ff14a1aa4 feat(vicinae): Adde pactl for sound plugin
Some checks failed
Flake checker / Build Nix targets (push) Has been cancelled
2026-01-13 17:14:45 +05:30
9a6d19b101 feat(atuin): add macOS launchd daemon agent
Some checks failed
Flake checker / Build Nix targets (push) Has been cancelled
2026-01-13 16:23:45 +05:30
2494e8ce83 feat(yazi): add config arg and preview cache_dir
Some checks failed
Flake checker / Build Nix targets (push) Has been cancelled
2026-01-13 16:01:52 +05:30
f90f84b3f7 feat(overlays): override libfprint to CS9711 fork with deps
Some checks failed
Flake checker / Build Nix targets (push) Has been cancelled
2026-01-13 15:36:16 +05:30
3db69c9e41 chore(darwin): prune kuro packages, update shiro casks, add 1password
Some checks failed
Flake checker / Build Nix targets (push) Has been cancelled
2026-01-13 15:23:12 +05:30
ac55fa4426 refactor: update aichat model; add atuin daemon; cleanup gui
Some checks failed
Flake checker / Build Nix targets (push) Has been cancelled
2026-01-13 15:20:13 +05:30
5a195af336 feat(home): added binwalk 2026-01-13 14:46:19 +05:30
e0f79ae04b chore: add OpenWebUI entry and update LLM URLs
Some checks failed
Flake checker / Build Nix targets (push) Has been cancelled
2026-01-13 14:30:40 +05:30
74d5ec1426 feat: Added wireshark and refactor ollama modules
Some checks failed
Flake checker / Build Nix targets (push) Has been cancelled
2026-01-13 14:11:37 +05:30
124e3fedfd chore(home): Move fonts into fonts.nix 2026-01-13 12:19:43 +05:30
34c0bf9616 feat(Justfile): Add comments and update ast-grep pattern for program addition
Some checks failed
Flake checker / Build Nix targets (push) Has been cancelled
2026-01-13 11:40:18 +05:30
5eb002fe8b fix: format before adding to git
Some checks failed
Flake checker / Build Nix targets (push) Has been cancelled
2026-01-13 11:38:21 +05:30
fd2ea0ba07 feat(util): Added option to easily add new programs/modules using just
Some checks failed
Flake checker / Build Nix targets (push) Has been cancelled
feat(virtualisation): Added waydroid
chore(structure): moved all individual home.packages into their own files
2026-01-13 11:35:11 +05:30
165dff7faa feat(tsuba): Add image pruning systemd timer
Some checks failed
Flake checker / Build Nix targets (push) Has been cancelled
2026-01-13 00:55:46 +05:30
49ad26ac1c chore: update flake.lock with latest revisions and hashes 2026-01-13 00:38:31 +05:30
01e0349610 feat(jellyfin): add automated docker image update service and timer
Some checks failed
Flake checker / Build Nix targets (push) Has been cancelled
2026-01-13 00:28:12 +05:30
9ca0e4fa5b feat: Update nixpkgs
Some checks failed
Flake checker / Build Nix targets (push) Has been cancelled
2026-01-12 23:13:20 +05:30
0a95fbd703 fix(hyprland): set direct_scanout to auto mode by default
Some checks failed
Flake checker / Build Nix targets (push) Has been cancelled
2026-01-12 22:09:22 +05:30
04a08d3107 fix(fish): conditionally use sixel for fastfetch in tmux
Some checks failed
Flake checker / Build Nix targets (push) Has been cancelled
fix(nvim): enhance catppuccin colorscheme with integrations
2026-01-07 21:21:43 +05:30
uttarayan21
0d14b6bffc feat: Use default tailscale
Some checks failed
Flake checker / Build Nix targets (push) Has been cancelled
2026-01-07 11:42:36 +05:30
7b717f95ab feat(email): add alias and update git config for fastmail account
Some checks failed
Flake checker / Build Nix targets (push) Has been cancelled
2026-01-07 07:08:48 +05:30
uttarayan21
f9a7c9ae52 feat(hyprland): optimize animation timings
Some checks failed
Flake checker / Build Nix targets (push) Has been cancelled
feat(neovim): add tv plugin and remove markdown-preview
2026-01-07 04:53:57 +05:30
uttarayan21
5d48a7ed38 feat: Added hyprshade 2026-01-06 15:26:12 +05:30
uttarayan21
99b4fb3ad1 chore(flake): update nixpkgs and stylix to 25.11, update dependencies and disable stylix for tsuba
Some checks failed
Flake checker / Build Nix targets (push) Has been cancelled
2026-01-04 08:52:09 +05:30
uttarayan21
741cfc163e feat: Added netboot.xyz
Some checks failed
Flake checker / Build Nix targets (push) Has been cancelled
2026-01-04 02:48:55 +05:30
uttarayan21
b9a684f4e9 feat: Use upstream hyprpaper module
Some checks failed
Flake checker / Build Nix targets (push) Has been cancelled
2026-01-04 00:42:04 +05:30
uttarayan21
253d600448 feat: Update nixpkgs 2026-01-04 00:26:02 +05:30
uttarayan21
1f537d6189 feat: Re-added orcaslicer 2026-01-03 23:04:55 +05:30
uttarayan21
97dd599e03 chore: Disable a bunch of unused apps
Some checks failed
Flake checker / Build Nix targets (push) Has been cancelled
2026-01-03 03:28:12 +05:30
uttarayan21
ac69625809 feat: update Makefile 2025-12-30 19:08:36 +05:30
uttarayan21
1cec36e736 feat(vicinae): use catppuccin-mocha dark theme in vicinae
Some checks failed
Flake checker / Build Nix targets (push) Has been cancelled
2025-12-30 18:53:49 +05:30
uttarayan21
5f243fda02 feat(nixos): Added uid and gid to users
Some checks failed
Flake checker / Build Nix targets (push) Has been cancelled
2025-12-30 18:35:28 +05:30
100 changed files with 5266 additions and 1281 deletions

1
.ignore Normal file
View File

@@ -0,0 +1 @@
*.lock

View File

@@ -1,9 +1,9 @@
.PHONY: darwin home default nixos just
.PHONY: darwin home default nixos install
default: just
default: install
just:
just
install:
sudo nixos-rebuild switch --flake . --builders '' --max-jobs 1
build:
sudo nixos-rebuild build --flake . --show-trace

View File

@@ -1,6 +1,6 @@
# 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
```

View File

@@ -3,6 +3,7 @@
inputs,
nix-darwin,
overlays,
nixpkgs,
...
}: (builtins.mapAttrs (
name: device:
@@ -11,6 +12,7 @@
specialArgs = {
inherit device inputs;
stablePkgs = inputs.nixpkgs-stable.legacyPackages.${device.system};
cratesNix = inputs.crates-nix.mkLib {pkgs = nixpkgs.legacyPackages.${device.system};};
};
modules = [
inputs.home-manager.darwinModules.home-manager

View File

@@ -28,7 +28,7 @@
extra-nix-path = nixpkgs=flake:nixpkgs
builders-use-substitutes = true
'';
package = pkgs.nixVersions.latest;
package = pkgs.nixVersions.nix_2_32;
buildMachines = [
../../builders/tako.nix
../../builders/shiro.nix

View File

@@ -8,11 +8,8 @@
"lunar"
"orcaslicer"
"raycast"
"shapr3d"
"vlc"
"zed"
"zen"
"lm-studio"
];
};
}

View File

@@ -1,6 +1,5 @@
{stablePkgs, ...}: {
{...}: {
services.tailscale = {
enable = true;
package = stablePkgs.tailscale;
};
}

View File

@@ -5,12 +5,10 @@
"docker-compose"
];
casks = [
"1password"
"docker"
"raycast"
"lunar"
"virtual-desktop-streamer"
"kicad"
"shapr3d"
"orcaslicer"
"zed"
"zen"

937
flake.lock generated

File diff suppressed because it is too large Load Diff

View File

@@ -3,7 +3,7 @@
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
nixpkgs-master.url = "github:nixos/nixpkgs/master";
nixpkgs-stable.url = "github:nixos/nixpkgs/nixos-25.05";
nixpkgs-stable.url = "github:nixos/nixpkgs/nixos-25.11";
flake-utils.url = "github:numtide/flake-utils";
disko = {
url = "github:nix-community/disko/latest";
@@ -18,11 +18,11 @@
inputs.nixpkgs.follows = "nixpkgs";
};
stylix-stable = {
url = "github:nix-community/stylix/release-25.05";
url = "github:nix-community/stylix/release-25.11";
inputs.nixpkgs.follows = "nixpkgs-stable";
};
home-manager-stable = {
url = "github:nix-community/home-manager/release-25.05";
url = "github:nix-community/home-manager/release-25.11";
inputs.nixpkgs.follows = "nixpkgs-stable";
};
nix-darwin = {
@@ -189,11 +189,6 @@
url = "github:uttarayan21/ddcbacklight";
inputs.nixpkgs.follows = "nixpkgs";
};
command-runner = {
url = "github:uttarayan21/command-runner";
# url = "path:/home/servius/Projects/command-runner";
inputs.nixpkgs.follows = "nixpkgs";
};
hyprmonitors = {
url = "git+https://git.darksailor.dev/servius/hyprmonitors";
# url = "path:/home/servius/Projects/hyprmonitors";
@@ -230,7 +225,14 @@
url = "github:xatuke/handoff";
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 = {
url = "github:tale/headplane";
inputs.nixpkgs.follows = "nixpkgs";
@@ -247,6 +249,9 @@
url = "github:christo-auer/eilmeldung";
inputs.nixpkgs.follows = "nixpkgs";
};
hytale-launcher = {
url = "github:JPyke3/hytale-launcher-nix";
};
};
outputs = {
@@ -342,6 +347,14 @@
if isDarwin
then "/Users/${device.user}"
else "/home/${device.user}";
uid =
if (builtins.hasAttr "uid" device)
then device.uid
else 1000;
gid =
if (builtins.hasAttr "gid" device)
then device.gid
else 1000;
# output =
# if isDarwin
# then self.darwinConfigurations."${device.name}"
@@ -423,7 +436,7 @@
# };
devShells = {
default = pkgs.mkShell {
packages = with pkgs; [sops just openssl];
packages = with pkgs; [sops just openssl ast-grep];
};
};
}

View File

@@ -15,6 +15,7 @@
};
primary = true;
address = "email@uttarayan.me";
aliases = ["servius@darksailor.dev"];
userName = address;
realName = "Uttarayan Mondal";
imap = {

View File

@@ -13,10 +13,10 @@ lib.optionalAttrs device.hasGui {
./discord.nix
./firefox.nix
./ghostty.nix
./gimp.nix
# ./gimp.nix
# ./guitarix.nix
./hyprpicker.nix
./ida.nix
# ./ida.nix
# ./jellyflix.nix
# ./kicad.nix
./kitty.nix
@@ -26,7 +26,7 @@ lib.optionalAttrs device.hasGui {
./nextcloud.nix
./obs-studio.nix
# ./openscad.nix
# ./orcaslicer.nix
./orcaslicer.nix
# ./pcsx2.nix
./prismlauncher.nix
# ./rpcs3.nix
@@ -37,7 +37,7 @@ lib.optionalAttrs device.hasGui {
# ./vial.nix
./vicinae.nix
./vlc.nix
./vscode.nix
# ./vscode.nix
./wezterm.nix
./zathura.nix
./zed.nix

View File

@@ -4,9 +4,12 @@
...
}: {
home.packages = lib.optionals pkgs.stdenv.isLinux [
pkgs.discord
pkgs.vesktop
pkgs.discord-canary
pkgs.discord-ptb
(pkgs.discord.override {
withOpenASAR = true;
withVencord = true;
})
# pkgs.vesktop
# pkgs.discord-canary
# pkgs.discord-ptb
];
}

View File

@@ -12,10 +12,63 @@
"Hasklug Nerd Font Mono"
];
window-decoration = false;
title = "";
title = "ghostty";
command = "fish";
background-opacity = 0.8;
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;
themes = {

View File

@@ -1,6 +1,6 @@
{pkgs, ...}: {
programs.mpv = {
enable = true;
enable = pkgs.stdenv.isLinux;
config = {
vo = "gpu-next";
gpu-api = "vulkan";
@@ -23,10 +23,5 @@
gamut-mapping = "desaturate";
};
};
package =
if pkgs.stdenv.isLinux
then pkgs.mpv-unwrapped.wrapper {mpv = pkgs.mpv-unwrapped.override {sixelSupport = true;};}
else pkgs.mpv;
};
}

View File

@@ -2,12 +2,122 @@
pkgs,
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 [
(pkgs.shadps4.overrideAttrs
(oldAttrs: {
nativeBuildInputs = oldAttrs.nativeBuildInputs ++ [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
];
})
];
}

View File

@@ -11,9 +11,8 @@
enable = true;
autoStart = true;
};
extensions = [];
# package = pkgs.vicinae.overrideAttrs (old: {
# patches = [../../patches/vicinae-ctrl-np.patch];
# });
};
home.packages = with pkgs; [
pulseaudio
];
}

View File

@@ -175,7 +175,7 @@
};
}
];
package = stablePkgs.zed-editor;
package = pkgs.zed-editor;
extraPackages = with pkgs; [
nixd
nil

View File

@@ -15,12 +15,12 @@
./scripts.nix
./services
./accounts
./fonts.nix
];
xdg.enable = true;
xdg.userDirs = {
enable = device.isLinux;
# music = "${config.home.homeDirectory}/Nextcloud/Music";
};
programs = {
@@ -35,26 +35,6 @@
username = device.user;
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 = {
EDITOR = "nvim";
SHELL = "${pkgs.bash}/bin/bash";

20
home/fonts.nix Normal file
View 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
];
}

View File

@@ -1,6 +1,7 @@
{
device,
inputs,
pkgs,
...
}: {
nixpkgs.config.allowUnfree = true;
@@ -12,6 +13,7 @@
inherit inputs;
inherit device;
stablePkgs = inputs.nixpkgs-stable.legacyPackages.${device.system};
cratesNix = inputs.crates-nix.mkLib {inherit pkgs;};
};
users.${device.user}.imports = [
inputs.nixvim.homeModules.nixvim

View File

@@ -0,0 +1,5 @@
{pkgs, ...}: {
home.packages = [
pkgs._1password-cli
];
}

View File

@@ -1,4 +1,8 @@
{config, ...}: {
{
pkgs,
config,
...
}: {
sops = {
secrets."llama/api_key" = {};
secrets."openai/api_key" = {};
@@ -16,25 +20,30 @@
enableNushellIntegration = false;
settings = {
save_session = true;
# model = "openai:gpt-4o";
model = "ryu:qwen3-coder-30b";
rag_embedding_model = "ollama:RobinBially/nomic-embed-text-8k";
model = "ryu:qwen3:30b-a3b";
rag_embedding_model = "ryu:RobinBially/nomic-embed-text-8k";
clients = [
{
type = "openai-compatible";
name = "mirai";
name = "ryu";
api_base = "https://ollama.darksailor.dev/v1";
api_key_cmd = "cat ${config.sops.secrets."llama/api_key".path}";
models = [
# {
# name = "RobinBially/nomic-embed-text-8k";
# type = "embedding";
# default_chunk_size = 8000;
# }
{
name = "gpt-oss-20b";
name = "gpt-oss:20b";
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";
# 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";
name = "gemini";
@@ -166,18 +139,29 @@
};
}
];
document_loaders = {
git =
/*
sh
*/
''sh -c "yek $1 --json | jq '[.[] | { path: .filename, contents: .content }]'"'';
};
};
roles = {
"%git-commit%" =
"git-commit" =
/*
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.
'';
};
extraPackages = with pkgs; [
jq
yek
];
};
}

View File

@@ -0,0 +1 @@
{pkgs, ...}: {home.packages = [pkgs.alejandra];}

1
home/programs/aria2.nix Normal file
View File

@@ -0,0 +1 @@
{pkgs, ...}: {home.packages = [pkgs.aria2];}

View File

@@ -0,0 +1 @@
{pkgs, ...}: {home.packages = [pkgs.ast-grep];}

View File

@@ -9,9 +9,49 @@
auto_sync = true;
sync_frequency = "1m";
sync_address = "https://atuin.darksailor.dev";
sync = {
records = true;
};
daemon = {
enabled = true;
};
};
enable = true;
enableFishIntegration = 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";
};
};
}

View File

@@ -1,11 +1,5 @@
{
pkgs,
lib,
device,
...
}: {
programs.
bat = {
{...}: {
programs.bat = {
enable = true;
# extraPackages = with pkgs.bat-extras; [batman batgrep batwatch];
};

View File

@@ -0,0 +1 @@
{pkgs, ...}: {home.packages = [pkgs.binwalk];}

1
home/programs/bottom.nix Normal file
View File

@@ -0,0 +1 @@
{pkgs, ...}: {home.packages = [pkgs.bottom];}

1
home/programs/btop.nix Normal file
View File

@@ -0,0 +1 @@
{pkgs, ...}: {home.packages = [pkgs.btop];}

1
home/programs/cachix.nix Normal file
View File

@@ -0,0 +1 @@
{pkgs, ...}: {home.packages = [pkgs.cachix];}

27
home/programs/cargo.nix Normal file
View 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" {})
];
}

View File

@@ -5,94 +5,75 @@
}: {
imports = [
../../modules
./1password-cli.nix
./aichat.nix
./alejandra.nix
./aria2.nix
./ast-grep.nix
./atuin.nix
./bat.nix
# ./bluetui.nix
./bottom.nix
./btop.nix
./cachix.nix
./carapace.nix
./ddcbacklight.nix
./deploy-rs.nix
./direnv.nix
./dust.nix
./eilmeldung.nix
./eza.nix
./fastfetch.nix
./fd.nix
./file.nix
./fish.nix
./fzf.nix
./gh.nix
./git.nix
./gnupg.nix
./himalaya.nix
./mpd.nix
./hyprshade.nix
./jq.nix
./just.nix
./ncpamixer.nix
./neomutt.nix
./neovim.nix
./nh.nix
./nix-index.nix
./nushell.nix
./omnix.nix
./opencode.nix
./retroarch.nix
./p7zip.nix
./pkg-config.nix
./ripgrep.nix
./rustup.nix
./ryujinx.nix
./sd.nix
./sops.nix
./ssh.nix
./starship.nix
./sxiv.nix
./tea.nix
./television.nix
./tmux.nix
./tuifeed.nix
./uv.nix
./xh.nix
./yazi.nix
./yt-dlp.nix
./zoxide.nix
./eilmeldung.nix
# ./bluetui.nix
# ./goread.nix
# ./helix.nix
# ./magika.nix
# ./mpd.nix
# ./mpris-scrobbler.nix
# ./ncmpcpp.nix
# ./neomutt.nix
# ./neovim.nix
# ./newsboat.nix
# ./nh.nix
# ./omnix.nix
# ./retroarch.nix
# ./ryujinx.nix
# ./sxiv.nix
# ./tea.nix
# ./template.nix
# ./tuifeed.nix
# ./xh.nix
# ./zellij.nix
./dysk.nix
./binwalk.nix
./cargo.nix
];
home.packages = with pkgs;
[
_1password-cli
alejandra
aria2
bottom
btop
cachix
deploy-rs.deploy-rs
dust
fd
file
fzf
gnupg
jq
just
macchina
p7zip
pfetch-rs
pkg-config
ripgrep
sd
]
++ 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 [];
}

View File

@@ -0,0 +1 @@
{pkgs, ...}: {home.packages = [pkgs.deploy-rs.deploy-rs];}

1
home/programs/dust.nix Normal file
View File

@@ -0,0 +1 @@
{pkgs, ...}: {home.packages = [pkgs.dust];}

1
home/programs/dysk.nix Normal file
View File

@@ -0,0 +1 @@
{pkgs, ...}: {home.packages = [pkgs.dysk];}

1
home/programs/fd.nix Normal file
View File

@@ -0,0 +1 @@
{pkgs, ...}: {home.packages = [pkgs.fd];}

1
home/programs/file.nix Normal file
View File

@@ -0,0 +1 @@
{pkgs, ...}: {home.packages = [pkgs.file];}

View File

@@ -4,8 +4,11 @@
device,
config,
...
}: {
stylix.targets.fish.enable = false;
}:
{
home.file = {
".config/fish/themes".source = pkgs.catppuccinThemes.fish + "/themes";
};
programs.fish = {
enable = true;
shellAbbrs = {
@@ -21,21 +24,16 @@
# t = "zellij a -c --index 0";
t = "tmux";
};
shellAliases =
{
g = "git";
}
// lib.optionalAttrs pkgs.stdenv.isLinux {
kmpv = "mpv --vo-kitty-use-shm=yes --vo=kitty --really-quiet";
smpv = "mpv --vo-sixel-buffered=yes --vo=sixel --profile=sw-fast";
};
shellAliases = {
g = "git";
};
shellInit = ''
set fish_greeting
yes | fish_config theme save "Catppuccin Mocha"
'';
# ${pkgs.spotify-player}/bin/spotify_player generate fish | source
interactiveShellInit = ''
${lib.getExe pkgs.fastfetch}
if test -n "$TMUX"; ${lib.getExe pkgs.fastfetch} --logo-type sixel; else ${lib.getExe pkgs.fastfetch}; end
# ${pkgs.nb}/bin/nb todo undone
${lib.optionalString (device.isLinux && !device.isNix) "source /etc/profile.d/nix-daemon.fish"}
${lib.optionalString (device.is "ryu") ''
@@ -46,3 +44,6 @@
'';
};
}
// lib.optionalAttrs (!(device.is "tsuba")) {
stylix.targets.fish.enable = false;
}

View File

@@ -1,13 +1 @@
{
pkgs,
lib,
device,
...
}: {
programs.fzf = {
enable = true;
package = pkgs.fzf;
enableFishIntegration = true;
tmux.enableShellIntegration = true;
};
}
{pkgs, ...}: { home.packages = [pkgs.fzf];}

View File

@@ -10,8 +10,8 @@ lib.optionalAttrs (!(device.is "tsuba")) {
enable = true;
lfs.enable = true;
settings = {
user.name = "uttarayan21";
user.email = config.accounts.email.accounts.fastmail.address;
user.name = "servius";
user.email = builtins.elemAt config.accounts.email.accounts.fastmail.aliases 0;
user.signingkey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJfKKrX8yeIHUUury0aPwMY6Ha+BJyUR7P0Gqid90ik/";
color.ui = true;
core.editor = "nvim";

1
home/programs/gnupg.nix Normal file
View File

@@ -0,0 +1 @@
{pkgs, ...}: {home.packages = [pkgs.gnupg];}

View File

@@ -0,0 +1,10 @@
{
pkgs,
device,
...
}: {
home.packages = with pkgs;
lib.mkIf (device.is "ryu") [
hyprshade
];
}

1
home/programs/jq.nix Normal file
View File

@@ -0,0 +1 @@
{pkgs, ...}: {home.packages = [pkgs.jq];}

1
home/programs/just.nix Normal file
View File

@@ -0,0 +1 @@
{pkgs, ...}: {home.packages = [pkgs.just];}

View File

@@ -4,8 +4,8 @@
stablePkgs,
lib,
...
}: {
stylix.targets.nixvim.enable = false;
}:
{
programs = lib.optionalAttrs (device.is "ryu" || device.is "kuro" || device.is "mirai" || device.is "tako" || device.is "shiro") {
nixvim =
{
@@ -19,3 +19,6 @@
// (import ./../../neovim {inherit pkgs stablePkgs;});
};
}
// lib.optionalAttrs (!(device.is "tsuba")) {
stylix.targets.nixvim.enable = false;
}

1
home/programs/p7zip.nix Normal file
View File

@@ -0,0 +1 @@
{pkgs, ...}: {home.packages = [pkgs.p7zip];}

View File

@@ -0,0 +1 @@
{pkgs, ...}: {home.packages = [pkgs.pkg-config];}

View File

@@ -0,0 +1 @@
{pkgs, ...}: {home.packages = [pkgs.ripgrep];}

1
home/programs/sd.nix Normal file
View File

@@ -0,0 +1 @@
{pkgs, ...}: {home.packages = [pkgs.sd];}

View File

@@ -12,4 +12,12 @@
defaultSopsFormat = "yaml";
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";
};
};
};
}

View File

@@ -3,8 +3,8 @@
lib,
device,
...
}: {
stylix.targets.starship.enable = false;
}:
{
programs.starship = {
enable = true;
enableFishIntegration = true;
@@ -30,3 +30,6 @@
(pkgs.catppuccinThemes.starship + /palettes/${flavour}.toml));
};
}
// lib.optionalAttrs (!(device.is "tsuba")) {
stylix.targets.starship.enable = false;
}

View File

@@ -1,4 +1,4 @@
{...}: {
{config, ...}: {
programs. yazi = {
enable = true;
enableFishIntegration = true;
@@ -13,6 +13,9 @@
}
];
};
preview = {
cache_dir = config.home.homeDirectory + "/.cache/yazi/previews";
};
};
};
}

View File

@@ -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"]));
};
}

View File

@@ -4,10 +4,10 @@
./swayosd.nix
./kdeconnect.nix
./gtk.nix
./anyrun.nix
# ./anyrun.nix
./ironbar
./gui.nix
./eww.nix
# ./eww.nix
./xdg.nix
./hyprmon.nix
./hyprland.nix

View File

@@ -2,24 +2,8 @@
pkgs,
device,
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;
lib.optionals (device.is "ryu") [
nautilus

View File

@@ -35,13 +35,15 @@
settings = {
# source = "${pkgs.catppuccinThemes.hyprland}/themes/mocha.conf";
render = {
direct_scanout = true;
cm_fs_passthrough = 1;
cm_auto_hdr = 1;
};
experimental = {
xx_color_management_v4 = true;
cm_enabled = true;
direct_scanout = 2; # 0 - off; 1 - on; 2 - auto based on `game`
cm_fs_passthrough = 1; # 0 - off; 1 - always; 2 - hdr only
send_content_type = true; # automatic monitor mode switch
cm_auto_hdr = 1; # 0 - off; 1 - switch to cm,hdr 2; 2 - switch to cm,hdredid
};
# experimental = {
# xx_color_management_v4 = true;
# };
monitorv2 = [
{
output = device.monitors.primary;
@@ -123,12 +125,12 @@
bezier = "myBezier, 0.05, 0.9, 0.1, 1.05";
animation = [
"windows, 1, 7, myBezier"
"windowsOut, 1, 7, default, popin 80%"
"windows, 1, 2, myBezier"
"windowsOut, 1, 2, default, popin 80%"
"border, 1, 10, default"
"borderangle, 1, 8, default"
"fade, 1, 7, default"
"workspaces, 1, 6, default"
"fade, 1, 2, default"
"workspaces, 1, 2, default"
];
};
@@ -188,8 +190,8 @@
];
bind = [
# Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more
"$mainMod, Return, exec, ${lib.getExe pkgs.wezterm}"
"$mainModShift, Return, exec, ${lib.getExe pkgs.kitty}"
"$mainMod, Return, exec, ${lib.getExe pkgs.kitty}"
"$mainModShift, Return, exec, ${lib.getExe pkgs.ghostty}"
# "$mainModShift, Return, exec, ${pkgs.foot}/bin/foot"
"$mainModShift, Q, killactive,"
"$mainModShift, s, exec, ${lib.getExe pkgs.hyprshot} -m region -o ~/Pictures/Screenshots/"

View File

@@ -4,25 +4,31 @@
config,
...
}: {
imports = [
../../modules/hyprpaper.nix
];
programs.hyprpaper = let
services.hyprpaper = let
wallpapers = import ../../utils/wallhaven.nix {inherit pkgs;};
nextcloudWallpapers = name: config.home.homeDirectory + "/Nextcloud/Wallpapers/" + name;
silksongFleas = nextcloudWallpapers "silksong-fleas.jpg";
silksongShadeLord = nextcloudWallpapers "silksong-shadelord.jpg";
in rec {
in {
enable = device.is "ryu";
systemd.enable = true;
systemd.target = "hyprland-session.target";
settings.preload =
wallpapers.all
++ pkgs.lib.mapAttrsToList (_: value: value) settings.wallpapers;
settings.wallpapers = {
"${device.monitors.primary}" = silksongShadeLord;
"${device.monitors.secondary}" = wallpapers.frieren_3;
"${device.monitors.tertiary}" = silksongFleas;
settings = {
wallpaper = [
{
monitor = device.monitors.primary;
path = silksongShadeLord;
fit_mode = "cover";
}
{
monitor = device.monitors.secondary;
path = wallpapers.frieren_3;
fit_mode = "cover";
}
{
monitor = device.monitors.tertiary;
path = silksongFleas;
fit_mode = "cover";
}
];
};
};
}

View File

@@ -1,6 +1,6 @@
{...}: {
{device, ...}: {
services.remmina = {
enable = true;
enable = device.is "ryu";
systemdService.enable = true;
addRdpMimeTypeAssoc = true;
};

View File

@@ -3,12 +3,11 @@
lib,
device,
...
}:
lib.optionalAttrs (device.is "ryu") {
}: {
xdg.portal = {
enable = pkgs.stdenv.isLinux;
enable = device.is "ryu";
config = {
hyprland.default = ["kde" "hyprland"];
hyprland.default = ["hyprland"];
common.default = ["*" "hyprland"];
};
extraPortals = with pkgs; [

View File

@@ -1,12 +1,13 @@
set dotenv-load
[macos]
install:
sudo nix run nix-darwin -- switch --flake .
[linux]
install:
sudo nixos-rebuild switch --flake . --builders '' --max-jobs 1
install cores='32':
sudo nixos-rebuild switch --flake . --builders '' --max-jobs 1 --cores {{cores}}
[macos]
build:
@@ -30,3 +31,13 @@ nvim:
[linux]
rollback:
sudo nixos-rebuild switch --rollback --flake .
add program:
echo '{pkgs, ...}: { home.packages = [pkgs.{{program}}];}' > home/programs/{{program}}.nix
# https://ast-grep.github.io/advanced/pattern-parse.html#incomplete-pattern-code
# Since the imports doesn't match the whole pattern we need to use the selector binding and the attr expression to match it properly.
ast-grep run -p '{ imports = [$$$ITEMS] }' --selector binding --rewrite 'imports = [$$$ITEMS ./{{program}}.nix ]' home/programs/default.nix -i
alejandra fmt home/programs/{{program}}.nix home/programs/default.nix
git add home/programs/{{program}}.nix

View File

@@ -81,6 +81,14 @@ in {
type = lib.types.attrsOf lib.types.str;
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 {
home.packages = mkIf cfg.enable [aichat-wrapped];
home.packages = mkIf cfg.enable ([aichat-wrapped] ++ cfg.extraPackages);
programs.fish.interactiveShellInit = mkIf cfg.enableFishIntegration fishIntegration;
programs.bash.initExtra = mkIf cfg.enableBashIntegration bashIntegration;

View File

@@ -4,10 +4,10 @@
...
}: {
imports = [
./goread.nix
./hyprpaper.nix
# ./goread.nix
# ./hyprpaper.nix
# ./aichat.nix
./tuifeed.nix
# ./tuifeed.nix
#./ghostty.nix
# ./sketchybar.nix
];

View File

@@ -1,104 +0,0 @@
{
pkgs,
config,
lib,
...
}:
with lib; let
cfg = config.programs.hyprpaper;
in {
options = {
programs.hyprpaper = {
enable = mkEnableOption "Hyprpaper - Wayland wallpaper utility";
systemd = {
enable = mkEnableOption "autostart service for Hyprpaper";
target = mkOption {
type = types.str;
default = "graphical-session.target";
example = "hyprland-session.target";
description = ''
The systemd target that will automatically start the Hyprpaper service.
'';
};
};
settings = with types; {
preload = mkOption {
type = listOf path;
default = [];
description = ''
Wallpaper images that should be preloaded into memory
'';
example = [./wallpapers/tensura.png];
};
wallpapers = mkOption {
type = attrsOf str;
default = {};
example = {"DP-1" = ./wallpapers/tensura.png;};
description = ''
Wallpaper to monitor mapper
'';
};
extraConfig = mkOption {
type = str;
default = "";
description = "Check https://github.com/hyprwm/hyprpaper#usage for info";
example = ''
newConfigOption = foo,bar
'';
};
};
};
};
config = {
home.packages = mkIf cfg.enable [pkgs.hyprpaper];
systemd.user.services.hyprpaper = mkIf cfg.systemd.enable {
Unit = {
Description = "autostart service for Hyprpaper";
Documentation = "https://github.com/hyprwm/hyprpaper";
BindsTo = ["graphical-session.target"];
After = ["graphical-session-pre.target"];
};
Service = {
ExecStart = "${pkgs.hyprpaper}/bin/hyprpaper";
ExecReload = "${pkgs.coreutils}/bin/kill -SIGUSR2 $MAINPID";
Restart = "on-failure";
KillMode = "mixed";
};
Install = {WantedBy = [cfg.systemd.target];};
};
xdg.configFile = mkIf cfg.enable {
"hypr/hyprpaper.conf".text = ''
# Auto-generated by Nix home-manager module
# hyprpaper.settings.preload
${(lists.foldl (acc: v:
acc
+ ''
preload = ${v}
'') ""
cfg.settings.preload)}
# hyprpaper.settings.wallpapers
${(lists.foldl (acc: v:
acc
+ ''
wallpaper = ${v}
'') "" (pkgs.lib.attrsets.mapAttrsToList (name: val: name + "," + val)
cfg.settings.wallpapers))}
# hyprpaper.settings.extraConfig
${cfg.settings.extraConfig}
'';
};
};
}

View File

@@ -1,8 +1,4 @@
{
pkgs,
stablePkgs,
...
}: let
{pkgs, ...}: let
mkMappings = mappings:
[]
++ (pkgs.lib.optionals (builtins.hasAttr "normal" mappings) (mkMode mappings.normal "n"))
@@ -17,16 +13,6 @@
mode = mode;
})
mappings;
border = [
""
""
""
""
""
""
""
""
];
rawLua = lua: {
"__raw" = ''
${lua}
@@ -60,7 +46,20 @@ in {
colorschemes = {
catppuccin = {
enable = true;
settings.flavour = "mocha";
settings = {
flavour = "mocha";
integrations = {
cmp = true;
gitsigns = true;
nvimtree = true;
treesitter = true;
notify = true;
mini = {
enabled = true;
indentscope_color = "";
};
};
};
};
};
keymaps = mkMappings {
@@ -330,10 +329,6 @@ in {
settings.image_provider = "image.nvim";
};
markdown-preview = {
enable = true;
};
noice = {
enable = true;
settings = {
@@ -363,17 +358,17 @@ in {
};
};
folding.enable = true;
grammarPackages =
(with pkgs.tree-sitter-grammars; [
tree-sitter-norg
tree-sitter-norg-meta
tree-sitter-just
tree-sitter-nu
tree-sitter-pest
tree-sitter-slint
])
++ pkgs.vimPlugins.nvim-treesitter.allGrammars;
nixGrammars = true;
# grammarPackages =
# (with pkgs.tree-sitter-grammars; [
# tree-sitter-norg
# tree-sitter-norg-meta
# tree-sitter-just
# tree-sitter-nu
# tree-sitter-pest
# tree-sitter-slint
# ])
# ++ pkgs.vimPlugins.nvim-treesitter.allGrammars;
# nixGrammars = true;
};
telescope = {
@@ -407,6 +402,15 @@ in {
};
};
tv = {
enable = true;
settings = {
global_keybindings = {
channels = "<leader>tv";
};
};
};
fidget = {
enable = true;
settings.notification.override_vim_notify = true;
@@ -543,6 +547,8 @@ in {
sqls.enable = true;
pyright.enable = true;
slint_lsp.enable = true;
wgsl_analyzer.enable = true;
glsl_analyzer.enable = true;
# sourcekit.enable = true;
openscad_lsp.enable = true;
tinymist.enable = true;
@@ -851,6 +857,5 @@ in {
pkgs.lua
pkgs.ripgrep
pkgs.nodejs-slim
pkgs.qwen-code
];
}

View File

@@ -47,36 +47,3 @@ in [
vimPlugins
tree-sitter-grammars
]
# tree-sitter-grammars = final: prev: {
# tree-sitter-grammars =
# prev.tree-sitter-grammars
# // {
# # tree-sitter-just = final.pkgs.tree-sitter.buildGrammar {
# # language = "just";
# # version = "1";
# # src = inputs.tree-sitter-just;
# # };
# # tree-sitter-nu = final.pkgs.tree-sitter.buildGrammar {
# # language = "nu";
# # version = "1";
# # src = inputs.tree-sitter-nu;
# # };
# tree-sitter-d2 = final.pkgs.tree-sitter.buildGrammar {
# language = "d2";
# version = "1";
# src = inputs.tree-sitter-d2;
# };
# };
# };
# vimPlugins = final: prev: {
# vimPlugins =
# prev.vimPlugins
# // {
# d2 = final.pkgs.vimUtils.buildVimPlugin {
# name = "d2";
# version = "1";
# src = inputs.d2;
# };
# };
# };

View File

@@ -1,8 +1,9 @@
{pkgs, ...}: {
environment.systemPackages = with pkgs; [
wlx-overlay-s
wayvr-dashboard
bs-manager
wayvr
# wlx-overlay-s
# wayvr-dashboard
# bs-manager
monado-vulkan-layers
# envision
];

View File

@@ -10,7 +10,8 @@
./programs
./containers
./apps
# ./vms
./vms
./games
];
security.tpm2 = {
@@ -25,6 +26,7 @@
withUWSM = true;
xwayland.enable = true;
};
uwsm.enable = true;
};
systemd.services.NetworkManager-wait-online.enable = lib.mkForce false;
@@ -67,7 +69,7 @@
dates = "daily";
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 = [
../../builders/tako.nix
../../builders/shiro.nix
@@ -77,6 +79,7 @@
};
users.users.${device.user} = {
uid = device.uid;
isNormalUser = true;
extraGroups = ["wheel" "audio" "i2c" "media" "video" "tss"];
openssh.authorizedKeys.keyFiles = [
@@ -86,6 +89,10 @@
};
users.groups.i2c = {};
users.groups.media = {};
users.groups.${device.user} = {
gid = device.gid;
members = [device.user];
};
services = {
devmon.enable = true;

View File

@@ -1,6 +1,6 @@
{device, ...}: {
imports = [
./immich-machine-learning.nix
# ./immich-machine-learning.nix
];
virtualisation = {
docker.enable = true;

View File

@@ -2,12 +2,11 @@
port = 3003;
in {
virtualisation.oci-containers = {
backend = "docker";
containers = {
immich-machine-learning = {
image = "ghcr.io/immich-app/immich-machine-learning:v${pkgs.immich.version}-cuda";
ports = [
"0.0.0.0:${toString port}:3003"
"127.0.0.1:${toString port}:3003"
];
volumes = [
"model-cache:/cache"
@@ -20,7 +19,4 @@ in {
nvidia-docker
nvidia-container-toolkit
];
# services.caddy.virtualHosts."ml.ryu.darksailor.dev".extraConfig = ''
# reverse_proxy localhost:${toString port}
# '';
}

View File

@@ -0,0 +1,5 @@
{...}: {
imports = [
./hytale.nix
];
}

499
nixos/ryu/games/hytale.nix Normal file
View 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
];
}

View File

@@ -1,3 +1,5 @@
{...}: {
programs.adb.enable = true;
{pkgs, ...}: {
environment.systemPackages = [
pkgs.android-tools
];
}

View File

@@ -10,5 +10,7 @@
./nix-ld.nix
./gamemode.nix
./droidcam.nix
./wireshark.nix
./flatpak.nix
];
}

View File

@@ -0,0 +1,5 @@
{...}: {
services.flatpak = {
enable = true;
};
}

View 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"];
}

View File

@@ -5,6 +5,7 @@
config,
lib,
modulesPath,
device,
pkgs,
...
}: {
@@ -51,6 +52,8 @@
# nixpkgs.crossSystem = {system = "aarch64-linux";};
boot.binfmt.emulatedSystems = ["aarch64-linux"];
boot.loader.systemd-boot.consoleMode = "max";
boot.loader.systemd-boot.netbootxyz.enable = true;
boot.loader.systemd-boot.memtest86.enable = true;
environment.sessionVariables = {
LIBVA_DRIVER_NAME = "nvidia";
@@ -59,7 +62,7 @@
NIXOS_OZONE_WL = "1";
};
users.extraUsers.servius.extraGroups = ["libvirtd" "adbusers" "kvm"];
users.extraUsers.${device.user}.extraGroups = ["libvirtd" "adbusers" "kvm"];
boot.extraModprobeConfig = ''
options kvm_intel nested=1
@@ -133,7 +136,12 @@
# options = ["nofail"];
# };
swapDevices = [];
swapDevices = [
{
device = "/home/swapfile";
size = 64 * 1024;
}
];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's

View File

@@ -1,27 +1,26 @@
{...}: {
imports = [
# ./rsyncd.nix
# ./sunshine.nix
# ./zerotier.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
./monitoring.nix
./wivrn.nix
./sshd.nix
./fprintd.nix
./handoff.nix
./gstreamer.nix
./command-runner.nix
./dualsense.nix
./fprintd.nix
./fwupd.nix
./gstreamer.nix
./handoff.nix
./minecraft.nix
./monitoring.nix
./mullvad.nix
./ollama.nix
./openrgb.nix
./openssh.nix
./resolved.nix
./samba.nix
./sshd.nix
# ./sunshine.nix
./tailscale.nix
./wivrn.nix
];
}

View File

@@ -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
'';
};
};
}

View File

@@ -4,43 +4,55 @@
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 = {
ollama = {
enable = true;
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"];
port = 11434;
# acceleration = "cuda";
environmentVariables = {
OLLAMA_ORIGINS = "*";
OLLAMA_LLM_LIBRARY = "cuda";
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;
};
# open-webui = {
# enable = false;
# environment = {
# OLLAMA_BASE_URL = "http://127.0.0.1:11434";
# WEBUI_AUTH = "False";
# ENABLE_LOGIN_FORM = "False";
# };
# };
caddy = {
# virtualHosts."llama.ryu.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 = ''
virtualHosts."ollama.darksailor.dev".extraConfig = ''
import cloudflare
reverse_proxy localhost:${builtins.toString config.services.ollama.port}
@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}
}
respond "Unauthorized" 403
'';
};
};
systemd.services.caddy = {
serviceConfig = {
EnvironmentFile = config.sops.templates."LLAMA_API_KEY.env".path;
};
};
}

View File

@@ -1,36 +1,30 @@
{...}: {
# services = {
# samba = {
# enable = false;
# openFirewall = true;
# settings = {
# global = {
# "workgroup" = "WORKGROUP";
# "server string" = "smbnix";
# "netbios name" = "smbnix";
# "security" = "user";
# "hosts allow" = "192.168.11. 127.0.0.1 localhost";
# "hosts deny" = "0.0.0.0/0";
# "guest account" = "nobody";
# "map to guest" = "bad user";
# };
#
# public = {
# "path" = "/media";
# "browseable" = "yes";
# "read only" = "no";
# "guest ok" = "yes";
# "create mask" = "0644";
# "directory mask" = "0755";
# # "force user" = "username";
# # "force group" = "groupname";
# };
# };
# };
# samba-wsdd = {
# enable = true;
# openFirewall = true;
# };
# };
networking.firewall.allowPing = true;
{
lib,
config,
device,
...
}: {
# networking.firewall.allowPing = true;
sops = {
secrets."nas/password" = {};
templates."nas-credentials".content = ''
username=${device.user}
domain=WORKGROUP
password=${config.sops.placeholder."nas/password"}
'';
};
fileSystems."/volumes/nas" = {
device = "//tsuba.darksailor.dev/nas";
fsType = "cifs";
options = let
options = "nofail,x-systemd.automount,noauto,x-systemd.idle-timeout=60,x-systemd.device-timeout=5s,x-systemd.mount-timeout=5s";
uid = toString config.users.users.servius.uid;
gid = toString config.users.groups.servius.gid;
check = lib.asserts.assertMsg (
uid != "" && gid != ""
) "User ${device.user} must have uid ang gid set to mount NAS as user.";
in
lib.optionals check ["${options},credentials=${config.sops.templates."nas-credentials".path},uid=${uid},gid=${gid}"];
};
}

View File

@@ -1,17 +1,21 @@
{
{pkgs, ...}: {
virtualisation = {
libvirtd = {
# libvirtd = {
# enable = true;
# qemu = {
# runAsRoot = true;
# swtpm.enable = true;
# # ovmf = {
# # enable = true;
# # };
# };
# };
waydroid = {
enable = true;
qemu = {
runAsRoot = true;
swtpm.enable = true;
# ovmf = {
# enable = true;
# };
};
package = pkgs.waydroid-nftables;
};
};
imports = [
./win11.nix
];
# imports = [
# ./win11.nix
# ];
}

View File

@@ -65,7 +65,7 @@
dates = "daily";
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;
};

View 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
'';
};
}

View File

@@ -2,7 +2,7 @@
imports = [
./games
# ./headscale.nix
# ./llama.nix
./llms.nix
# ./monitoring.nix
# ./paperless.nix
./navidrome.nix
@@ -23,6 +23,7 @@
./resolved.nix
./searxng.nix
./tailscale.nix
./kellnr.nix
];
services = {
nix-serve = {

View File

View File

@@ -24,6 +24,7 @@
icon = "jellyfin.png";
description = "Jellyfin Media Server";
href = "https://jellyfin.tsuba.darksailor.dev";
siteMonitor = "https://jellyfin.tsuba.darksailor.dev";
};
}
{
@@ -31,6 +32,7 @@
icon = "sonarr.png";
description = "Sonarr: TV Series Management";
href = "https://sonarr.tsuba.darksailor.dev";
siteMonitor = "https://sonarr.tsuba.darksailor.dev";
};
}
{
@@ -38,6 +40,7 @@
icon = "bazarr.png";
description = "Bazarr: Subtitles and Metadata";
href = "https://bazarr.tsuba.darksailor.dev";
siteMonitor = "https://bazarr.tsuba.darksailor.dev";
};
}
{
@@ -45,6 +48,7 @@
icon = "radarr.png";
description = "Radarr: Movie Management";
href = "https://radarr.tsuba.darksailor.dev";
siteMonitor = "https://radarr.tsuba.darksailor.dev";
};
}
{
@@ -52,13 +56,7 @@
icon = "deluge.png";
description = "Deluge: Torrent Client";
href = "https://deluge.tsuba.darksailor.dev";
};
}
{
"Prowlarr" = {
icon = "prowlarr.png";
description = "Prowlarr: Indexer Manager";
href = "https://prowlarr.tsuba.darksailor.dev";
siteMonitor = "https://deluge.tsuba.darksailor.dev";
};
}
{
@@ -66,6 +64,15 @@
icon = "home-assistant.png";
description = "Home Automation";
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";
description = "Gitea Code Hosting";
href = "https://git.darksailor.dev";
siteMonitor = "https://git.darksailor.dev";
};
}
{
@@ -84,6 +92,7 @@
icon = "nextcloud.png";
description = "Nextcloud Suite";
href = "https://cloud.darksailor.dev";
siteMonitor = "https://cloud.darksailor.dev";
};
}
{
@@ -91,13 +100,15 @@
icon = "immich.png";
description = "Immich: Self-hosted Photo and Video Backup";
href = "https://photos.darksailor.dev";
siteMonitor = "https://photos.darksailor.dev";
};
}
{
"Excalidraw" = {
icon = "excalidraw.png";
description = "Excalidraw: Self-hosted Collaborative Whiteboard";
description = "Excalidraw: Self-hosted Whiteboard";
href = "https://draw.darksailor.dev";
siteMonitor = "https://draw.darksailor.dev";
};
}
{
@@ -105,6 +116,23 @@
icon = "navidrome.png";
description = "A self-hosted music server and streamer.";
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 = {
virtualHosts."dashboard.darksailor.dev".extraConfig = ''
# import auth
reverse_proxy localhost:${builtins.toString config.services.homepage-dashboard.listenPort}
'';
};
authelia = {
instances.darksailor = {
settings = {
access_control = {
rules = [
{
domain = "dashboard.darksailor.dev";
policy = "one_factor";
}
];
};
};
};
};
# authelia = {
# instances.darksailor = {
# settings = {
# access_control = {
# rules = [
# {
# domain = "dashboard.darksailor.dev";
# policy = "one_factor";
# }
# ];
# };
# };
# };
# };
};
}

View 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";
# }
# ];
# };
# };
# };
# };
}

View File

@@ -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;
};
};
}

View 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;
};
};
}

View File

@@ -5,8 +5,6 @@
device,
...
}: {
virtualisation.docker.enable = true;
virtualisation.oci-containers.backend = "docker";
users.extraUsers.servius.extraGroups = ["docker"];
networking.firewall.enable = false;
services.openssh.enable = true;

View File

@@ -3,6 +3,7 @@
inputs,
overlays,
home-manager-stable,
nixpkgs,
nur,
nixos-raspberrypi,
...
@@ -15,13 +16,14 @@
inherit device;
unstablePkgs = inputs.nixpkgs.legacyPackages.${device.system};
masterPkgs = inputs.nixpkgs-master.legacyPackages.${device.system};
cratesNix = inputs.crates-nix.mkLib {pkgs = nixpkgs.legacyPackages.${device.system};};
};
system = device.system;
modules = [
inputs.arion.nixosModules.arion
inputs.disko.nixosModules.disko
inputs.sops-nix.nixosModules.sops
inputs.stylix-stable.nixosModules.stylix
# inputs.stylix-stable.nixosModules.stylix
inputs.nix-minecraft.nixosModules.minecraft-servers
nur.modules.nixos.default
home-manager-stable.nixosModules.home-manager
@@ -40,6 +42,7 @@
inherit inputs;
inherit device;
stablePkgs = inputs.nixpkgs-stable.legacyPackages.${device.system};
cratesNix = inputs.crates-nix.mkLib {pkgs = nixpkgs.legacyPackages.${device.system};};
};
users.${device.user}.imports = [
inputs.nixvim.homeModules.nixvim
@@ -53,7 +56,7 @@
./disk-config.nix
./${name}.nix
../../sops.nix
../../stylix.nix
# ../../stylix.nix
];
}
)

View File

@@ -12,5 +12,6 @@
./monitoring.nix
./pihole.nix
./resolved.nix
./docker.nix
];
}

View File

@@ -0,0 +1,21 @@
{pkgs, ...}: {
virtualisation.docker.enable = true;
virtualisation.oci-containers.backend = "docker";
systemd.services.docker-prune-image = {
description = "Docker prune unused images";
serviceConfig = {
Type = "oneshot";
ExecStart = "${pkgs.docker}/bin/docker image prune -f";
};
};
systemd.timers.docker-prune-image = {
description = "Timer for docker image prune";
wantedBy = ["timers.target"];
timerConfig = {
OnCalendar = "Mon *-*-* 02:00:00";
OnUnitInactiveSec = "6d";
Persistent = true;
RandomizedDelaySec = "1h";
};
};
}

View File

@@ -1,5 +1,5 @@
{
unstablePkgs,
pkgs,
config,
...
}: {
@@ -46,4 +46,24 @@
'';
};
};
systemd.services.jellyfin-image-update = {
description = "Pull latest Jellyfin Docker image";
serviceConfig = {
Type = "oneshot";
ExecStart = "${pkgs.docker}/bin/docker pull jellyfin/jellyfin:latest";
ExecStartPost = "${pkgs.systemd}/bin/systemctl restart docker-jellyfin.service";
};
};
# Systemd timer to run the update service every 5 days
systemd.timers.jellyfin-image-update = {
description = "Timer for Jellyfin image updates";
wantedBy = ["timers.target"];
timerConfig = {
OnCalendar = "Mon *-*-* 02:00:00";
OnUnitInactiveSec = "5d";
Persistent = true;
RandomizedDelaySec = "1h";
};
};
}

View File

@@ -164,8 +164,7 @@
# alvr-master = inputs.alvr.packages.${prev.system}.default;
caddyWithCloudflare = inputs.nixpkgs.legacyPackages.${final.system}.caddy.withPlugins {
plugins = ["github.com/caddy-dns/cloudflare@v0.2.2"];
hash = "sha256-ea8PC/+SlPRdEVVF/I3c1CBprlVp1nrumKM5cMwJJ3U=";
# hash = "sha256-Z8nPh4OI3/R1nn667ZC5VgE+Q9vDenaQ3QPKxmqPNkc=";
hash = "sha256-dnhEjopeA0UiI+XVYHYpsjcEI6Y1Hacbi28hVKYQURg=";
};
nix-auth = inputs.nix-auth.packages.${prev.system}.nix-auth;
kitty = inputs.nixpkgs-stable.legacyPackages.${prev.system}.kitty;
@@ -220,24 +219,25 @@
};
};
libfprint = final: prev: {
# libfprint = prev.libfprint.overrideAttrs (oldAttrs: {
# version = "git";
# src = final.fetchFromGitHub {
# owner = "ericlinagora";
# repo = "libfprint-CS9711";
# rev = "03ace5b20146eb01c77fb3ea63e1909984d6d377";
# sha256 = "sha256-gr3UvFB6D04he/9zawvQIuwfv0B7fEZb6BGiNAbLids";
# };
# buildInputs = oldAttrs.buildInputs ++ [final.nss_latest];
# nativeBuildInputs =
# oldAttrs.nativeBuildInputs
# ++ [
# final.opencv
# final.cmake
# final.doctest
# ];
# });
# # fprintd = inputs.nixpkgs-stable.legacyPackages.${prev.system}.fprintd;
libfprint = prev.libfprint.overrideAttrs (oldAttrs: {
version = "git";
# https://github.com/archeYR/libfprint-CS9711/commits/cs9711-rebase/
src = final.fetchFromGitHub {
owner = "archeYR";
repo = "libfprint-CS9711";
rev = "c2d163fbb06d33e80a5177815bb0b8ca2f01739f";
sha256 = "sha256-JygOJ3SybXKR3CjLxLbAZDaYCl9LuQYDQfFC8Si5oaw";
};
buildInputs = oldAttrs.buildInputs ++ [final.nss_latest];
nativeBuildInputs =
oldAttrs.nativeBuildInputs
++ [
final.opencv
final.cmake
final.doctest
];
});
# fprintd = inputs.nixpkgs-stable.legacyPackages.${prev.system}.fprintd;
# fprintd = prev.fprintd.overrideAttrs (oldAttrs: {
# src = inputs.nixpkgs-stable.legacyPackages.${prev.system}.fprintd.src;
# });
@@ -273,8 +273,12 @@
# });
wivrn-nightly = inputs.wivrn.packages.${prev.system}.default;
};
games = final: prev: {
hytale-launcher = inputs.hytale-launcher.packages.${prev.system}.default;
};
in
[
games
vr
anyrun-overlay
catppuccinThemes

File diff suppressed because one or more lines are too long

View File

@@ -7,7 +7,7 @@ SHA1=$3
if [[ -z "$COMMIT_SOURCE" ]]
then
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")
{

View File

@@ -78,6 +78,11 @@ lastfm:
api_key: ENC[AES256_GCM,data:5sFOaTAeiinetn8NfUBOFTcfuZmnnRNDTbuxVzAT4MU=,iv:RUmZ0PQpON3wkwj6GrSo7FHADM2pr4bavHT1omgR+Xw=,tag:ST7v4R8Scp+9ikYkiZ8Vtw==,type:str]
pihole:
password: ENC[AES256_GCM,data:xOpsEFN6zbgPwYnSudmFqlYOghY=,iv:isO0RtKgi8G8noumyhIfLLfmH9w5ybt9NVxh7bRVykM=,tag:17UcPypyqquJDTFZAc5iyA==,type:str]
nas:
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:
age:
- recipient: age1pw7kluxp7872c63ne4jecq75glj060jkmqwzkk6esatuyck9egfswufdpk
@@ -89,7 +94,7 @@ sops:
VGZKdHpVeFRpQUxtSEkyaEhLMlBJcGsKLb0DvPNZosPBUuiX6qz1s5IO5INQh8CK
ZtXTVClwMSmaUYhdSB2gKFrKVZHXTJZ4oAL5t/BpC0pOHyr+o96T3Q==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2025-12-29T22:55:29Z"
mac: ENC[AES256_GCM,data:eEYsNcqFKFRS2wb5dht6AI86d7IWJGKGBdKVF4hk87ieVpZ6UaflgPbjAUYHMNFB7PCvhx3gjIPscb2oNZ/sYx8aTx9zFeexosQ8C8OqCWxGEEn3OxVGEqVNvIEQ7HvTg/2Dj5644IAIKD5bltAMPtfdfBzUm7KrA+nc8BMuPVk=,iv:i1EufRekIBASVf+EAphtJsHDnlwKLVSZKeC4RE0w2ac=,tag:efFizvzVBEXvE5ly25rsvA==,type:str]
lastmodified: "2026-01-23T07:40:21Z"
mac: ENC[AES256_GCM,data:lmpI0sQJbEz0U8oxJ+gLZTfFBwCyJYdaiCmKcRU1juL7/mqyRYrB4Dh8lMMmW5I+n0Z1P0zZ5+CD/WnRXcqdZ/Yj40ZlaUgIdsH1qMImvdv1wld0OIThDWKxoTSywGcbaMz7PpAsC5FNoRo5v/uBT9y42xBXoxw8urdHCrIi21Y=,iv:KFL4fuyqv1TKg36kHxSZiiHTi4MoGEnRP5JyB6BQq78=,tag:sVbK6UwRC+f0Z3HSCtZ2qQ==,type:str]
unencrypted_suffix: _unencrypted
version: 3.11.0