chore: merge remote-tracking branch 'refs/remotes/origin/master'

This commit is contained in:
Ahwx 2025-10-03 15:35:30 +02:00
commit 3a8ce89d0b
24 changed files with 502 additions and 570 deletions

264
flake.lock generated
View file

@ -190,24 +190,6 @@
"type": "github"
}
},
"flake-utils_2": {
"inputs": {
"systems": "systems_5"
},
"locked": {
"lastModified": 1731533236,
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"flakeCompat": {
"flake": false,
"locked": {
@ -253,11 +235,11 @@
]
},
"locked": {
"lastModified": 1757578556,
"narHash": "sha256-w1PGkTGow5XzsjccV364No46rkuGxTqo7m/4cfhnkIk=",
"lastModified": 1758593331,
"narHash": "sha256-p+904PfmINyekyA/LieX3IYGsiFtExC00v5gSYfJtpM=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "b7112b12ea5b8c3aa6af344498ed9ca27dd03ba3",
"rev": "9a2dc0efbc569ce9352a6ffb8e8ec8dbc098e142",
"type": "github"
},
"original": {
@ -271,11 +253,11 @@
"nixpkgs": "nixpkgs_3"
},
"locked": {
"lastModified": 1755680610,
"narHash": "sha256-g7/g5o0spemkZCzPa8I21RgCmN0Kv41B5z9Z5HQWraY=",
"lastModified": 1758531979,
"narHash": "sha256-iRv5afKzuu6SkwztqMwZ33161CzBJsyeRHp0uviN9TI=",
"owner": "hyprwm",
"repo": "contrib",
"rev": "04721247f417256ca96acf28cdfe946cf1006263",
"rev": "de79078fd59140067e53cd00ebdf17f96ce27846",
"type": "github"
},
"original": {
@ -329,11 +311,11 @@
]
},
"locked": {
"lastModified": 1756891319,
"narHash": "sha256-/e6OXxzbAj/o97Z1dZgHre4bNaVjapDGscAujSCQSbI=",
"lastModified": 1758192433,
"narHash": "sha256-CR6RnqEJSTiFgA6KQY4TTLUWbZ8RBnb+hxQqesuQNzQ=",
"owner": "hyprwm",
"repo": "hyprgraphics",
"rev": "621e2e00f1736aa18c68f7dfbf2b9cff94b8cc4d",
"rev": "c44e749dd611521dee940d00f7c444ee0ae4cfb7",
"type": "github"
},
"original": {
@ -360,11 +342,11 @@
"xdph": "xdph"
},
"locked": {
"lastModified": 1757508065,
"narHash": "sha256-aZCTbfKkxsEinY5V7R0NYuuitKLYc8ig8T91+yDMGJ0=",
"lastModified": 1758542519,
"narHash": "sha256-NHEzK6MN8Tv9YrnJb2A9KxcOI2cCsKRqZOC5kUeG8Aw=",
"ref": "refs/heads/main",
"rev": "46174f78b374b6cea669c48880877a8bdcf7802f",
"revCount": 6418,
"rev": "70a7047ee175d2e7fca1575d50a3738ac40fd2c6",
"revCount": 6446,
"submodules": true,
"type": "git",
"url": "https://github.com/hyprwm/Hyprland"
@ -480,11 +462,11 @@
]
},
"locked": {
"lastModified": 1753819801,
"narHash": "sha256-tHe6XeNeVeKapkNM3tcjW4RuD+tB2iwwoogWJOtsqTI=",
"lastModified": 1757694755,
"narHash": "sha256-j+w5QUUr2QT/jkxgVKecGYV8J7fpzXCMgzEEr6LG9ug=",
"owner": "hyprwm",
"repo": "hyprland-qtutils",
"rev": "b308a818b9dcaa7ab8ccab891c1b84ebde2152bc",
"rev": "5ffdfc13ed03df1dae5084468d935f0a3f2c9a4c",
"type": "github"
},
"original": {
@ -559,11 +541,11 @@
"systems": "systems_2"
},
"locked": {
"lastModified": 1750371999,
"narHash": "sha256-de87tFOEhJiXTHNzG3LcwxGR1a/D6v+nC+9+V1GW1Zs=",
"lastModified": 1757972732,
"narHash": "sha256-V2lQfZyVMzlyQNtY7VZbJhh+fg9KsNztJynXBs3OgUc=",
"owner": "hyprwm",
"repo": "hyprpicker",
"rev": "d6a1363a86cd99460f0020134e455d921e8bacd8",
"rev": "6f32582d2282fd97f18e54db0f45f53f18edde4f",
"type": "github"
},
"original": {
@ -582,11 +564,11 @@
"systems": "systems_3"
},
"locked": {
"lastModified": 1756066004,
"narHash": "sha256-L5AX14cRzCikpSkL4jgC7WKdVzZ9K4c3dWe445ogZ+o=",
"lastModified": 1757678186,
"narHash": "sha256-YuvkWCVZKiUoUC2tx/N5KkPXWmje2UbeENYkOc2C31Y=",
"owner": "hyprwm",
"repo": "hyprsunset",
"rev": "fa2f7dde11eba8a6835ecedbbd144c48017156af",
"rev": "72071709f58bc2fed8546288af295aa9153a287f",
"type": "github"
},
"original": {
@ -745,26 +727,6 @@
"type": "github"
}
},
"iamb": {
"inputs": {
"flake-utils": "flake-utils",
"nixpkgs": "nixpkgs_6",
"rust-overlay": "rust-overlay"
},
"locked": {
"lastModified": 1756876216,
"narHash": "sha256-ZVRwUbMrGeH3XZrFt/YoCOxXR6TWwkXcqWwWAA+F+Rs=",
"owner": "ulyssa",
"repo": "iamb",
"rev": "7b1dc93f3a01f4e8b138922a27bb3ce60d7be1f9",
"type": "github"
},
"original": {
"owner": "ulyssa",
"repo": "iamb",
"type": "github"
}
},
"ixx": {
"inputs": {
"flake-utils": [
@ -797,11 +759,11 @@
},
"nixos-hardware": {
"locked": {
"lastModified": 1757103352,
"narHash": "sha256-PtT7ix43ss8PONJ1VJw3f6t2yAoGH+q462Sn8lrmWmk=",
"lastModified": 1757943327,
"narHash": "sha256-w6cDExPBqbq7fTLo4dZ1ozDGeq3yV6dSN4n/sAaS6OM=",
"owner": "nixos",
"repo": "nixos-hardware",
"rev": "11b2a10c7be726321bb854403fdeec391e798bf0",
"rev": "67a709cfe5d0643dafd798b0b613ed579de8be05",
"type": "github"
},
"original": {
@ -843,43 +805,11 @@
},
"nixpkgs_10": {
"locked": {
"lastModified": 1742800061,
"narHash": "sha256-oDJGK1UMArK52vcW9S5S2apeec4rbfNELgc50LqiPNs=",
"lastModified": 1758262103,
"narHash": "sha256-aBGl3XEOsjWw6W3AHiKibN7FeoG73dutQQEqnd/etR8=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "1750f3c1c89488e2ffdd47cab9d05454dddfb734",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_11": {
"locked": {
"lastModified": 1757487488,
"narHash": "sha256-zwE/e7CuPJUWKdvvTCB7iunV4E/+G0lKfv4kk/5Izdg=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "ab0f3607a6c7486ea22229b92ed2d355f1482ee0",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_12": {
"locked": {
"lastModified": 1757034884,
"narHash": "sha256-PgLSZDBEWUHpfTRfFyklmiiLBE1i1aGCtz4eRA3POao=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "ca77296380960cd497a765102eeb1356eb80fed0",
"rev": "12bd230118a1901a4a5d393f9f56b6ad7e571d01",
"type": "github"
},
"original": {
@ -955,53 +885,21 @@
},
"nixpkgs_6": {
"locked": {
"lastModified": 1756542300,
"narHash": "sha256-tlOn88coG5fzdyqz6R93SQL5Gpq+m/DsWpekNFhqPQk=",
"owner": "nixos",
"lastModified": 1758427187,
"narHash": "sha256-pHpxZ/IyCwoTQPtFIAG2QaxuSm8jWzrzBGjwQZIttJc=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "d7600c775f877cd87b4f5a831c28aa94137377aa",
"rev": "554be6495561ff07b6c724047bdd7e0716aa7b46",
"type": "github"
},
"original": {
"owner": "nixos",
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_7": {
"locked": {
"lastModified": 1744536153,
"narHash": "sha256-awS2zRgF4uTwrOKwwiJcByDzDOdo3Q1rPZbiHQg/N38=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "18dd725c29603f582cf1900e0d25f9f1063dbf11",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_8": {
"locked": {
"lastModified": 1757487488,
"narHash": "sha256-zwE/e7CuPJUWKdvvTCB7iunV4E/+G0lKfv4kk/5Izdg=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "ab0f3607a6c7486ea22229b92ed2d355f1482ee0",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_9": {
"locked": {
"lastModified": 1743315132,
"narHash": "sha256-6hl6L/tRnwubHcA4pfUUtk542wn2Om+D4UnDhlDW9BE=",
@ -1017,10 +915,42 @@
"type": "github"
}
},
"nixpkgs_8": {
"locked": {
"lastModified": 1742800061,
"narHash": "sha256-oDJGK1UMArK52vcW9S5S2apeec4rbfNELgc50LqiPNs=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "1750f3c1c89488e2ffdd47cab9d05454dddfb734",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_9": {
"locked": {
"lastModified": 1758427187,
"narHash": "sha256-pHpxZ/IyCwoTQPtFIAG2QaxuSm8jWzrzBGjwQZIttJc=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "554be6495561ff07b6c724047bdd7e0716aa7b46",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixvim": {
"inputs": {
"flake-parts": "flake-parts",
"nixpkgs": "nixpkgs_9",
"nixpkgs": "nixpkgs_7",
"nixvim": "nixvim_2"
},
"locked": {
@ -1040,7 +970,7 @@
"nixvim_2": {
"inputs": {
"flake-parts": "flake-parts_2",
"nixpkgs": "nixpkgs_10",
"nixpkgs": "nixpkgs_8",
"nuschtosSearch": "nuschtosSearch"
},
"locked": {
@ -1060,14 +990,14 @@
"nur": {
"inputs": {
"flake-parts": "flake-parts_3",
"nixpkgs": "nixpkgs_11"
"nixpkgs": "nixpkgs_9"
},
"locked": {
"lastModified": 1757591071,
"narHash": "sha256-u5Xr/Tx5mYIcrVz7zwx9YvOWQJEei0T8mRJsr3/aBoA=",
"lastModified": 1758640565,
"narHash": "sha256-ElrlkD9NTp27BR+K8RO6KYF/5gHURj6b9Vpan/bf8wk=",
"owner": "nix-community",
"repo": "NUR",
"rev": "a625a24a40e4a4c21fcb7bbaa5869b0766fc0eab",
"rev": "af2e804a55892665adfd0b30c75088b1ad1b462c",
"type": "github"
},
"original": {
@ -1078,7 +1008,7 @@
},
"nuschtosSearch": {
"inputs": {
"flake-utils": "flake-utils_2",
"flake-utils": "flake-utils",
"ixx": "ixx",
"nixpkgs": [
"nixvim",
@ -1110,11 +1040,11 @@
]
},
"locked": {
"lastModified": 1757239681,
"narHash": "sha256-E9spYi9lxm2f1zWQLQ7xQt8Xs2nWgr1T4QM7ZjLFphM=",
"lastModified": 1758108966,
"narHash": "sha256-ytw7ROXaWZ7OfwHrQ9xvjpUWeGVm86pwnEd1QhzawIo=",
"owner": "cachix",
"repo": "git-hooks.nix",
"rev": "ab82ab08d6bf74085bd328de2a8722c12d97bd9d",
"rev": "54df955a695a84cd47d4a43e08e1feaf90b1fd9b",
"type": "github"
},
"original": {
@ -1132,9 +1062,8 @@
"hyprland": "hyprland",
"hyprpicker": "hyprpicker",
"hyprsunset": "hyprsunset",
"iamb": "iamb",
"nixos-hardware": "nixos-hardware",
"nixpkgs": "nixpkgs_8",
"nixpkgs": "nixpkgs_6",
"nixvim": "nixvim",
"nur": "nur",
"sops-nix": "sops-nix"
@ -1157,34 +1086,16 @@
"type": "github"
}
},
"rust-overlay": {
"inputs": {
"nixpkgs": "nixpkgs_7"
},
"locked": {
"lastModified": 1756694554,
"narHash": "sha256-z/Iy4qvcMqzhA2IAAg71Sw4BrMwbBHvCS90ZoPLsnIk=",
"owner": "oxalica",
"repo": "rust-overlay",
"rev": "b29e5365120f344fe7161f14fc9e272fcc41ee56",
"type": "github"
},
"original": {
"owner": "oxalica",
"repo": "rust-overlay",
"type": "github"
}
},
"sops-nix": {
"inputs": {
"nixpkgs": "nixpkgs_12"
"nixpkgs": "nixpkgs_10"
},
"locked": {
"lastModified": 1757503115,
"narHash": "sha256-S9F6bHUBh+CFEUalv/qxNImRapCxvSnOzWBUZgK1zDU=",
"lastModified": 1758425756,
"narHash": "sha256-L3N8zV6wsViXiD8i3WFyrvjDdz76g3tXKEdZ4FkgQ+Y=",
"owner": "Mic92",
"repo": "sops-nix",
"rev": "0bf793823386187dff101ee2a9d4ed26de8bbf8c",
"rev": "e0fdaea3c31646e252a60b42d0ed8eafdb289762",
"type": "github"
},
"original": {
@ -1253,21 +1164,6 @@
"type": "github"
}
},
"systems_5": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"xdph": {
"inputs": {
"hyprland-protocols": [

View file

@ -16,7 +16,6 @@
nixvim.url = "github:ahwxorg/nixvim-config";
sops-nix.url = "github:Mic92/sops-nix";
disko.url = "github:nix-community/disko/latest";
iamb.url = "github:ulyssa/iamb";
};
outputs =
@ -25,7 +24,6 @@
nixpkgs,
sops-nix,
disko,
iamb,
...
}@inputs:
let

View file

@ -35,20 +35,20 @@
allowedUDPPorts = [
5201
];
interfaces."ens4s1".allowedTCPPorts = [
# allow everything for local link
{
from = 1;
to = 65354;
}
];
interfaces."ens4s1".allowedUDPPorts = [
# allow everything for local link
{
from = 1;
to = 65354;
}
];
#interfaces."ens4s1".allowedTCPPorts = [
# # allow everything for local link
# {
# from = 0;
# to = 60000;
# }
#];
#interfaces."ens4s1".allowedUDPPorts = [
# # allow everything for local link
# {
# from = 0;
# to = 65536;
# }
#];
};
};
@ -82,6 +82,7 @@
services.zfs = {
autoScrub.enable = true;
autoScrub.interval = "weekly";
trim.enable = true;
};

View file

@ -9,7 +9,7 @@
imports = [
./hardware-configuration.nix
./../../modules/core
# ./../../modules/home/nfs.nix
./../../modules/home/steam.nix
./../../modules/core/virtualization.nix
./../../modules/services/tailscale.nix
./../../modules/services/mpd.nix
@ -27,17 +27,15 @@
networkmanager.enable = true;
};
systemd.network.networks."99-local" = {
matchConfig.name = "enp68s0";
address = [
"192.168.1.100/24"
];
routes = [
{
Gateway = "172.16.10.1";
GatewayOnLink = false;
}
];
networking = {
interfaces.ens4d1 = {
ipv4.addresses = [
{
address = "192.168.1.101";
prefixLength = 24;
}
];
};
};
liv = {

View file

@ -3,7 +3,7 @@
imports =
[ (import ./docker.nix) ]
++ [ (import ./hardware.nix) ]
++ [ (import ./displaylink.nix) ]
# ++ [ (import ./displaylink.nix) ]
# ++ [(import ./printing.nix)]
++ [ (import ./xserver.nix) ]
++ [ (import ./network.nix) ]

View file

@ -1,12 +1,13 @@
{ ... }:
{
imports =
[(import ./hardware.nix)]
++ [(import ./network.nix)]
++ [(import ./program.nix)]
++ [(import ./sshd.nix)]
++ [(import ./security.nix)]
++ [(import ./services.nix)]
++ [(import ./system.nix)]
++ [(import ./user.nix)];
[ (import ./hardware.nix) ]
++ [ (import ./network.nix) ]
++ [ (import ./program.nix) ]
++ [ (import ./sshd.nix) ]
++ [ (import ./security.nix) ]
++ [ (import ./services.nix) ]
++ [ (import ./system.nix) ]
++ [ (import ./user.nix) ]
++ [ (import ./virtualization.nix) ];
}

View file

@ -15,6 +15,5 @@
git
dig
traceroute
inputs.iamb.packages.${pkgs.stdenv.targetPlatform.system}.default
];
}

View file

@ -23,6 +23,7 @@
owner = "matrix-synapse";
};
"smbLoginDetails" = { };
"syncplay" = { };
}
else if (host == "sakura") then
{

View file

@ -12,6 +12,8 @@
libvirtd.enable =
if (host == "violet") then
true
else if (host == "dandelion") then
true
else if (host == "sakura") then
true
else if (host == "yoshino") then
@ -36,7 +38,7 @@
# { };
users.groups.libvirtd.members =
if (config.virtualisation.waydroid.enable == true) then [ username ] else [ ];
if (config.virtualisation.libvirtd.enable == true) then [ username ] else [ ];
# Enable qemu etc
environment.systemPackages = with pkgs; [

View file

@ -18,8 +18,8 @@
};
services = {
login.u2fAuth = true;
greetd.u2fAuth = true;
login.u2fAuth = false;
greetd.u2fAuth = false;
sudo.u2fAuth = true;
swaylock.fprintAuth =
if (host == "sakura") then
@ -29,7 +29,7 @@
else
false;
# No longer using Hyprlock, might stay here for if I ever switch to it again.
hyprlock.u2fAuth = true;
hyprlock.u2fAuth = false;
hyprlock.fprintAuth =
if (host == "sakura") then
true

View file

@ -23,12 +23,12 @@
size = 14;
};
theme = {
name = "Gruvbox-Green-Dark";
package = pkgs.gruvbox-gtk-theme.override {
colorVariants = [ "dark" ];
themeVariants = [ "green" ];
tweakVariants = [ "macos" ];
};
name = "Juno";
package = pkgs.juno-theme; # .override {
# colorVariants = [ "dark" ];
# themeVariants = [ "green" ];
# tweakVariants = [ "macos" ];
# };
};
iconTheme = {
name = "Papirus-Dark";

3
modules/home/steam.nix Normal file
View file

@ -0,0 +1,3 @@
{
programs.steam.enable = true;
}

View file

@ -22,347 +22,349 @@
home.file = {
"/home/${username}/.config/waybar/config" = {
text = ''
[{
"layer": "bottom",
"position": "bottom",
[{
"layer": "top",
"position": "top",
"modules-left": [
"privacy",
"network",
"custom/vpn",
"custom/devices",
"custom/spotify",
"tray",
],
"modules-left": [
"privacy",
"network",
"custom/vpn",
"custom/devices",
"custom/spotify",
"tray",
],
"modules-center": [
"hyprland/workspaces",
],
"modules-center": [
"hyprland/workspaces",
],
"modules-right": [
"custom/yubikey#icon",
"custom/yubikey#data",
"group/hardware",
"group/resources",
"bluetooth",
// "wireplumber",
"group/audio",
"group/battery",
"group/clock"
],
"modules-right": [
"custom/yubikey#icon",
"custom/yubikey#data",
"group/hardware",
"group/resources",
"bluetooth",
// "wireplumber",
"group/audio",
"group/battery",
"group/clock"
],
"hyprland/window": {
"format": "{}",
"rewrite": {
"(.*) - zsh": "> [$1]"
},
"separate-outputs": true
},
"hyprland/window": {
"format": "{}",
"rewrite": {
"(.*) - zsh": "> [$1]"
},
"separate-outputs": true
},
"sway/workspaces": {
"all-outputs": true,
"disable-scroll": true,
"format": "{name}"
},
"sway/workspaces": {
"all-outputs": true,
"disable-scroll": true,
"format": "{name}"
},
"hyprland/workspaces": {
"all-outputs": true,
"disable-scroll": true,
"format": "{name}"
},
"hyprland/workspaces": {
"all-outputs": true,
"disable-scroll": true,
"format": "{name}"
},
// "group/network": {
// "orientation": "horizontal",
// "modules": [
// "network",
// "custom/vpn",
// ],
// "drawer": {
// "transition-left-to-right": true,
// "transition-duration": 500
// }
// },
// "group/network": {
// "orientation": "horizontal",
// "modules": [
// "network",
// "custom/vpn",
// ],
// "drawer": {
// "transition-left-to-right": true,
// "transition-duration": 500
// }
// },
"network": {
"format": "󰈀 {ifname}",
"format-wifi": " {essid} - {ipaddr}/{cidr} <span color='#aaaaaa'>{signalStrength}%</span>",
"format-ethernet": "󰈀 {ipaddr}/{cidr}",
"format-disconnected": "󰈂",
"tooltip-format": "{ifname} via {gwaddr}",
"tooltip-format-wifi": "{essid} ({signalStrength}%)",
"tooltip-format-ethernet": "{ifname}",
"tooltip-format-disconnected": "Disconnected"
},
"network": {
"format": "󰈀 {ifname}",
// "format-wifi": "<span color='#aaaaaa'>WLAN:</span> {essid} - {ipaddr}/{cidr} <span color='#aaaaaa'>{signalStrength}%</span>",
"format-wifi": "<span color='#aaaaaa'>WLAN:</span> {ipaddr}/{cidr} <span color='#aaaaaa'>{signalStrength}%</span>",
"format-ethernet": "<span color='#aaaaaa'>LAN:</span> {ipaddr}/{cidr}",
"format-disconnected": "<span color='#aaaaaa'>WLAN:</span> down",
"tooltip-format": "{ifname} via {gwaddr}",
"tooltip-format-wifi": "{essid} ({signalStrength}%)",
"tooltip-format-ethernet": "{ifname}",
"tooltip-format-disconnected": "Disconnected"
},
"custom/vpn": {
"format": "{icon}",
"tooltip-format": "{text}",
"format-icons": [ "","" ],
"return-type": "json",
"exec": "~/.local/bin/waybar-vpn",
"interval": 30
},
"custom/vpn": {
"format": "{icon}",
"tooltip-format": "{text}",
"format-icons": [ "","" ],
"return-type": "json",
"exec": "~/.local/bin/waybar-vpn",
"interval": 30
},
"custom/spotify": {
"interval": 5,
"return-type": "json",
"exec": "~/.local/bin/waybar-music",
"on-click": "playerctl play-pause",
"escape": true
},
"custom/spotify": {
"interval": 5,
"return-type": "json",
"exec": "~/.local/bin/waybar-music",
"on-click": "playerctl play-pause",
"escape": true
},
"custom/devices": {
"interval": 60,
"font-size": 14,
// "return-type": "json",
"exec": "~/.local/bin/waybar-devices",
},
"custom/devices": {
"interval": 60,
"font-size": 14,
// "return-type": "json",
"exec": "~/.local/bin/waybar-devices",
},
"privacy": {
"icon-spacing": 8,
"icon-size": 14,
"transition-duration": 250,
"modules": [
{
"type": "screenshare",
"tooltip": true,
"tooltip-icon-size": 24
},
{
"type": "audio-out",
"tooltip": true,
"tooltip-icon-size": 24
},
{
"type": "audio-in",
"tooltip": true,
"tooltip-icon-size": 24
}
]
},
"privacy": {
"icon-spacing": 8,
"icon-size": 14,
"transition-duration": 250,
"modules": [
{
"type": "screenshare",
"tooltip": true,
"tooltip-icon-size": 24
},
{
"type": "audio-out",
"tooltip": true,
"tooltip-icon-size": 24
},
{
"type": "audio-in",
"tooltip": true,
"tooltip-icon-size": 24
}
]
},
"tray": {
"icon-size": 12,
"spacing": 0
},
"tray": {
"icon-size": 12,
"spacing": 0
},
"sway/mode": {
"format": " {}",
"tooltip": false
},
"sway/mode": {
"format": " {}",
"tooltip": false
},
"custom/yubikey#icon": {
"exec": "~/.local/bin/waybar-yubikey 0",
"return-type": "json"
},
"custom/yubikey#icon": {
"exec": "~/.local/bin/waybar-yubikey 0",
"return-type": "json"
},
"custom/yubikey#data": {
"exec": "~/.local/bin/waybar-yubikey 1",
"return-type": "json"
},
"custom/yubikey#data": {
"exec": "~/.local/bin/waybar-yubikey 1",
"return-type": "json"
},
"group/hardware": {
"orientation": "horizontal",
"modules": [
"cpu",
"temperature#cpu",
"temperature#gpu",
"temperature#nvme",
"temperature#wifi"
],
"drawer": {
"transition-left-to-right": false,
"transition-duration": 500
}
},
"group/hardware": {
"orientation": "horizontal",
"modules": [
"cpu",
"temperature#cpu",
"temperature#gpu",
"temperature#nvme",
"temperature#wifi"
],
"drawer": {
"transition-left-to-right": false,
"transition-duration": 500
}
},
"cpu": {
"interval": 30,
"format": " {avg_frequency:3.2f}GHz <span color='#aaaaaa'>{usage}%</span>",
"states": {
"warning": 70,
"critical": 90
},
},
"cpu": {
"interval": 30,
"format": "<span color='#aaaaaa'>FREQ:</span> {avg_frequency:3.2f}GHz <span color='#aaaaaa'>{usage}%</span> ",
"states": {
"warning": 70,
"critical": 90
},
},
"temperature#cpu": {
"hwmon-path": "/sys/class/hwmon/hwmon5/temp1_input",
"critical-threshold": 80,
"format": " CPU <span color='#aaaaaa'>{temperatureC}°C</span>"
},
"temperature#cpu": {
"hwmon-path": "/sys/class/hwmon/hwmon5/temp1_input",
"critical-threshold": 80,
"format": "CPU <span color='#aaaaaa'>{temperatureC}°C</span>"
},
"temperature#gpu": {
"hwmon-path": "/sys/class/hwmon/hwmon0/temp1_input",
"critical-threshold": 80,
"format": "· GPU <span color='#aaaaaa'>{temperatureC}°C</span>"
},
"temperature#gpu": {
"hwmon-path": "/sys/class/hwmon/hwmon0/temp1_input",
"critical-threshold": 80,
"format": "GPU <span color='#aaaaaa'>{temperatureC}°C</span>"
},
"temperature#nvme": {
"hwmon-path": "/sys/class/hwmon/hwmon1/temp1_input",
"critical-threshold": 80,
"format": "· NVMe <span color='#aaaaaa'>{temperatureC}°C</span>"
},
"temperature#nvme": {
"hwmon-path": "/sys/class/hwmon/hwmon1/temp1_input",
"critical-threshold": 80,
"format": "NVMe <span color='#aaaaaa'>{temperatureC}°C</span>"
},
"temperature#wifi": {
"hwmon-path": "/sys/class/hwmon/hwmon11/temp1_input",
"critical-threshold": 80,
"format": "· WiFi <span color='#aaaaaa'>{temperatureC}°C</span>"
},
"temperature#wifi": {
"hwmon-path": "/sys/class/hwmon/hwmon11/temp1_input",
"critical-threshold": 80,
"format": "WiFi <span color='#aaaaaa'>{temperatureC}°C</span>"
},
"group/resources": {
"orientation": "horizontal",
"modules": [ "memory", "disk#root" ],
"drawer": {
"transition-left-to-right": false,
"transition-duration": 500
}
},
"group/resources": {
"orientation": "horizontal",
"modules": [ "memory", "disk#root" ],
"drawer": {
"transition-left-to-right": false,
"transition-duration": 500
}
},
"memory": {
"interval": 60,
"format": "󰘚 {used:3.1f}GiB/<span color='#aaaaaa'>{total:3.1f}GiB</span>"
},
"memory": {
"interval": 60,
"format": "<span color='#aaaaaa'>RAM:</span> {used:3.1f}GiB/<span color='#aaaaaa'>{total:3.1f}GiB</span> "
},
"disk#root": {
"interval": 360,
"format": " {used}/<span color='#aaaaaa'>{total}</span>",
"path": "/"
},
"disk#root": {
"interval": 360,
"format": "DISK: {used}/<span color='#aaaaaa'>{total}</span>",
"path": "/"
},
"bluetooth": {
// "controller": "controller1",
"on-click": "~/.local/bin/waybar-bluetooth toggle",
"format": "<span color='#aaaaaa'>󰂲</span>",
"format-disabled": "<span color='#333333'></span>",
"format-connected": "",
"format-connected-battery": " {device_battery_percentage}%",
"tooltip-format": "{controller_alias}\t\t[{controller_address}]",
"tooltip-format-connected": "{controller_alias}\t\t[{controller_address}]\n\n{device_enumerate}",
"tooltip-format-connected-battery": "{controller_alias}\t\t[{controller_address}]\n\n{device_enumerate}",
"tooltip-format-enumerate-connected": "{device_alias}\t\t[{device_address}]",
"tooltip-format-enumerate-connected-battery": "{device_alias} ({device_battery_percentage})\t\t[{device_address}]"
},
"bluetooth": {
// "controller": "controller1",
"on-click": "~/.local/bin/waybar-bluetooth toggle",
"format": "<span color='#aaaaaa'>󰂲</span>",
"format-disabled": "<span color='#333333'></span>",
"format-connected": "",
"format-connected-battery": " {device_battery_percentage}%",
"tooltip-format": "{controller_alias}\t\t[{controller_address}]",
"tooltip-format-connected": "{controller_alias}\t\t[{controller_address}]\n\n{device_enumerate}",
"tooltip-format-connected-battery": "{controller_alias}\t\t[{controller_address}]\n\n{device_enumerate}",
"tooltip-format-enumerate-connected": "{device_alias}\t\t[{device_address}]",
"tooltip-format-enumerate-connected-battery": "{device_alias} ({device_battery_percentage})\t\t[{device_address}]"
},
"group/audio": {
"orientation": "horizontal",
"modules": [
"wireplumber",
"custom/audio-internal",
"custom/audio-headphones",
"custom/audio-hdmi"
],
"drawer": {
"transition-left-to-right": false,
"transition-duration": 500
}
},
"group/audio": {
"orientation": "horizontal",
"modules": [
"wireplumber",
"custom/audio-internal",
"custom/audio-headphones",
"custom/audio-hdmi"
],
"drawer": {
"transition-left-to-right": false,
"transition-duration": 500
}
},
"wireplumber": {
"format": "{icon} {node_name}/<span color='#aaaaaa'>{volume}</span>",
"format-muted": "",
"on-click": "pavucontrol-qt",
"on-click-right": "helvum",
"format-icons": ["", "", ""]
},
"wireplumber": {
"format": "{icon} {node_name}/{volume}",
"format-muted": "",
"on-click": "pavucontrol-qt",
"on-click-right": "helvum",
"format-icons": ["", "", ""]
},
"custom/audio-internal": {
"format": "󱡬 ",
"tooltip-format": "Internal",
"on-click": "audio-router analog",
"interval": "once"
},
"custom/audio-internal": {
"format": "󱡬 ",
"tooltip-format": "Internal",
"on-click": "audio-router analog",
"interval": "once"
},
"custom/audio-hdmi": {
"format": "󰡁 ",
"tooltip-format": "HDMI",
"on-click": "audio-router hdmi",
"interval": "once"
},
"custom/audio-hdmi": {
"format": "󰡁 ",
"tooltip-format": "HDMI",
"on-click": "audio-router hdmi",
"interval": "once"
},
"group/battery": {
"orientation": "horizontal",
"modules": [
"battery",
"custom/powerdraw"
],
"drawer": {
"transition-left-to-right": false,
"transition-duration": 500
}
},
"group/battery": {
"orientation": "horizontal",
"modules": [
"battery",
"custom/powerdraw"
],
"drawer": {
"transition-left-to-right": false,
"transition-duration": 500
}
},
"battery": {
"bat": "BAT1",
"interval": 30,
"states": {
"warning": 20,
"critical": 10
},
"format-time": "{H}:{m}",
"format": "{icon} {time} <span color='#aaaaaa'>{capacity}%</span>",
"format-discharging": "{icon} <span color='#aaaaaa'>{capacity}%</span>",
"format-discharging-warning": "{icon} <span color='#FF5F1F'>{capacity}%</span>",
"format-discharging-critical": "{icon} <span color='#FF3131'>{capacity}%</span>",
"format-charging": "{icon} <span color='#DAF7A6'>{capacity}%</span><span color='#aaaaaa'> @ {power:2.0f}W</span>",
"format-full": "󱐥 <span color='#aaaaaa'>{capacity}%</span>",
"format-not-charging": "󱐤 <span color='#aaaaaa'>{capacity}%</span>",
"format-icons": [" ", " ", " ", " ", " "],
},
"battery": {
"bat": "BAT1",
"interval": 20,
"states": {
"warning": 20,
"critical": 10
},
"format-time": "{H}:{m}",
"format": "<span color='#aaaaaa'>BATT:</span> {time} {capacity}%",
"format-alt": "<span color='#aaaaaa'>BATT: {time}</span> ",
"format-discharging": "<span color='#aaaaaa'>BATT:</span> {capacity}%",
"format-discharging-warning": "<span color='#aaaaaa'>BATT:</span> <span color='#FF5F1F'>{capacity}%</span>",
"format-discharging-critical": "<span color='#aaaaaa'>BATT:</span> <span color='#FF3131'>{capacity}%</span>",
"format-charging": "<span color='#aaaaaa'>BATT:</span> <span color='#DAF7A6'>{capacity}%</span><span color='#aaaaaa'> @ {power:2.0f}W</span>",
"format-full": "<span color='#aaaaaa'>BATT:</span> 󱐥 {capacity}%",
"format-not-charging": "<span color='#aaaaaa'>BATT:</span> 󱐤 {capacity}%",
// "format-icons": [" ", " ", " ", " ", " "], // use {icon}
},
"custom/powerdraw": {
"interval": 60,
"exec": "~/.local/bin/waybar-powerdraw",
},
"custom/powerdraw": {
"interval": 60,
"exec": "~/.local/bin/waybar-powerdraw",
},
"group/clock": {
"orientation": "horizontal",
"modules": [ "clock#time", "custom/clock#minutes", "clock#date" ],
"drawer": {
"transition-left-to-right": false,
"transition-duration": 500
}
},
"group/clock": {
"orientation": "horizontal",
"modules": [ "clock#time", "custom/clock#minutes", "clock#date" ],
"drawer": {
"transition-left-to-right": false,
"transition-duration": 500
}
},
"clock#date": {
"interval": 60,
"format": " <span color='#ffffff'> {:%a %e %b %Y}</span>",
"tooltip-format": "<big>{:%B %Y}</big>\n<tt>{calendar}</tt>",
"calendar": {
"mode" : "year",
"mode-mon-col" : 2,
"weeks-pos" : "right",
"on-scroll" : 1,
"format": {
"months": "<span color='#ffead3'><b>{}</b></span>",
"days": "<span color='#ecc6d9'><b>{}</b></span>",
"weeks": "<span color='#99ffdd'><b>W{}</b></span>",
"weekdays": "<span color='#ffcc66'><b>{}</b></span>",
"today": "<span color='#ff6699'><b><u>{}</u></b></span>"
}
},
"actions": {
"on-click-right": "mode",
"on-scroll-up": "shift_up",
"on-scroll-down": "shift_down"
}
},
"clock#date": {
"interval": 60,
"format": "<span color='#ffffff'> {:%a %e %b %Y}</span>",
"tooltip-format": "<big>{:%B %Y}</big>\n<tt>{calendar}</tt>",
"calendar": {
"mode" : "year",
"mode-mon-col" : 2,
"weeks-pos" : "right",
"on-scroll" : 1,
"format": {
"months": "<span color='#ffead3'><b>{}</b></span>",
"days": "<span color='#ecc6d9'><b>{}</b></span>",
"weeks": "<span color='#99ffdd'><b>W{}</b></span>",
"weekdays": "<span color='#ffcc66'><b>{}</b></span>",
"today": "<span color='#ff6699'><b><u>{}</u></b></span>"
}
},
"actions": {
"on-click-right": "mode",
"on-scroll-up": "shift_up",
"on-scroll-down": "shift_down"
}
},
"clock#time": {
"interval": 60,
"format": " <span color='#aaaaaa'>{:%I:%M %p}</span>",
"actions": {
"on-scroll-up": "tz_up",
"on-scroll-down": "tz_down"
}
},
"clock#time": {
"interval": 60,
"format": "<span color='#aaaaaa'>CEST:</span> {:%I:%M %p}",
"actions": {
"on-scroll-up": "tz_up",
"on-scroll-down": "tz_down"
}
},
"custom/clock#minutes": {
"interval": 60,
"format": " <span color='#aaaaaa'>{}</span> ",
"exec": "~/.local/bin/waybar-minutes"
}
}
]
"custom/clock#minutes": {
"interval": 60,
"format": "CEST: <span color='#aaaaaa'>{}</span> ",
"exec": "~/.local/bin/waybar-minutes"
}
}
]
'';
};
"/home/${username}/.config/waybar/style.css" = {
@ -377,17 +379,18 @@
/* margin: 0 0px; */
}
window#waybar.bottom {
window#waybar.top {
/* background-color: rgba(115, 116, 116, 0.22); */
background-color: rgba(0, 0, 0, 0.25);
border-bottom: none;
border-top: none;
color: #eeeeee;
transition-property: background-color;
transition-duration: .5s;
}
window#waybar.hidden {
opacity: 0.25;
/* opacity: 0.25; */
opacity: 0.00;
}
label#window {
@ -439,7 +442,7 @@
#workspaces button {
/*padding: 4px 6px;*/
padding: 4px 6px;
color: #555555;
color: #aaaaaa;
border-radius: 0px;
/*min-width: 32px;*/
}

View file

@ -181,12 +181,6 @@
#!/usr/bin/env bash
if [[ "$(hostname)" == "sakura" ]]; then
if [[ $(cat /proc/acpi/button/lid/LID0/state | grep "open") ]]; then
LTEXT="󰌢 "
else
LTEXT="󰛧 "
fi
MICROPHONE_STATE="$(sudo framework_tool --privacy | tail -n2 | head -n1)"
CAMERA_STATE="$(sudo framework_tool --privacy | tail -n1)"
@ -206,7 +200,7 @@
CTEXT="󰗟 "
fi
echo "$LTEXT $CTEXT $MTEXT"
echo "$CTEXT $MTEXT"
fi
'';
};

View file

@ -3,7 +3,7 @@
services = {
anubis.instances.librey = {
settings = {
TARGET = "http://localhost:8080";
TARGET = "http://localhost:8078";
BIND = ":8079";
BIND_NETWORK = "tcp";
};

View file

@ -2,6 +2,7 @@
{
services.murmur = {
enable = true;
openFirewall = false;
openFirewall = true;
bandwidth = 192000;
};
}

View file

@ -9,7 +9,7 @@
# Network shares
samba = {
package = pkgs.samba;
# ^^ `samba4Full` is compiled with avahi, ldap, AD etc support (compared to the default package, `samba`
# ^^ `samba4Full` is compiled with avahi, ldap, AD etc support (compared to the default package, `samba`. samba4Full gives issue, however)
# Required for samba to register mDNS records for auto discovery
# See https://github.com/NixOS/nixpkgs/blob/592047fc9e4f7b74a4dc85d1b9f5243dfe4899e3/pkgs/top-level/all-packages.nix#L27268
enable = true;
@ -19,6 +19,16 @@
writable = "true";
comment = "Hello world!";
};
shares.violet = {
path = "/spinners/violet";
writable = "true";
comment = "Hello world!";
};
shares.ahwx = {
path = "/spinners/ahwx";
writable = "true";
comment = "Hello world!";
};
};
avahi = {
publish.enable = true;

View file

@ -5,5 +5,5 @@
# loadModels = [ "llama3.2:3b" "deepseek-r1:1.5b"];
# acceleration = "rocm"; # nope, 5700XT is too old for this
};
services.open-webui.enable = true;
services.open-webui.enable = false;
}

View file

@ -0,0 +1,8 @@
{ config, ... }:
{
services.syncplay = {
enable = true;
passwordFile = config.sops.secrets.syncplay.path;
};
networking.firewall.allowedTCPPorts = [ 8999 ];
}

View file

@ -13,6 +13,7 @@
++ [ (import ./guacamole.nix) ]
++ [ (import ./gokapi.nix) ]
++ [ (import ./jellyfin.nix) ]
# ++ [ (import ./jitsi-meet.nix) ]
++ [ (import ./librey-proxy.nix) ]
++ [ (import ./lidarr.nix) ]
++ [ (import ./matrix/default.nix) ]
@ -34,5 +35,4 @@
++ [ (import ./tailscale.nix) ]
++ [ (import ./vaultwarden.nix) ];
# ++ [ (import ./smart-monitoring.nix) ]
# ++ [ (import ./jitsi-meet.nix) ]
}

View file

@ -16,6 +16,7 @@ in
};
config = mkIf cfg.enable {
environment.systemPackages = with pkgs; [ cifs-utils ];
home-manager = {
users.${username} = {
home.packages = with pkgs; [

View file

@ -27,7 +27,7 @@ in
home-manager.users.${username}.home.packages = with pkgs; [
element-desktop
gajim
dino
signal-desktop
mumble
anki-bin

View file

@ -1,13 +1,25 @@
{ lib, pkgs, config, username, home-manager, ... }:
{
lib,
pkgs,
config,
username,
home-manager,
...
}:
with lib;
let
cfg = config.liv.laptop;
in {
in
{
options.liv.laptop = {
enable = mkEnableOption "Enable laptop";
};
config = mkIf cfg.enable {
environment.systemPackages = with pkgs; [
cifs-utils
powertop
];
home-manager = {
users.${username} = {
home.packages = with pkgs; [
@ -17,18 +29,21 @@ in {
};
};
# DisplayLink
services.xserver.videoDrivers = [
"displaylink"
"modesetting"
];
systemd.services.dlm.wantedBy = [ "multi-user.target" ];
networking.networkmanager.enable = true;
environment.systemPackages = with pkgs; [
# powertop
];
boot = {
kernelModules = ["acpi_call"];
extraModulePackages = with config.boot.kernelPackages;
[
acpi_call
];
};
kernelModules = [ "acpi_call" ];
extraModulePackages = with config.boot.kernelPackages; [
acpi_call
];
};
services = {
thermald.enable = true;
power-profiles-daemon.enable = true;
@ -41,6 +56,6 @@ in {
criticalPowerAction = "Hibernate";
};
};
# powerManagement.powertop.enable = true;
powerManagement.powertop.enable = true;
};
}

View file

@ -3,6 +3,7 @@ forgejoWorkerSecret: ENC[AES256_GCM,data:kmUjukTJ9SP6nJvfhIMFVTu5vAc9TIfZidUgejC
matrixRegistrationSecret: ENC[AES256_GCM,data:xDFYVpBJa+FHWjmLlZspJAzJcoav53nWPoctQ5+gAnDYMurtSCkmoQn8r5j6fOmiy56KQyk8AD2/kT1HeFFNKA==,iv:82eIoh1ePc0VxfTbBPxpwGhYrcdRMI6WjFhlUJhxuHk=,tag:FAYUXUy0lEQU56ni2dxvbg==,type:str]
minioRootCredentials: ENC[AES256_GCM,data:/IrpspB6Puy+6scHheBSBp6zQVh8uwpu4nFPLSkueuohSUESPHbRb0w1XAp4V5HraMtOThFqlm0JeBW0XbhY4E8L1P+S3/aMLKjp2voA928l9AjF6sTaSKsO7qh6LEmo90qm9Jo0nDo=,iv:M5NOGfSsl+LggLyEjV49vcWCaYmbG0eJcgwI2v7AKcI=,tag:A+CrDTL+TkEayOqBUII4aQ==,type:str]
smbLoginDetails: ENC[AES256_GCM,data:Puv+Vewv0TDpiYM+Uym180CLT+vXKoeSW/uNxAX7f9y0NvG2Uqqglj/HcCMhyQn9GpCIQyb+xidlLWn3Ywdg6ybaf4WN5EdAEXMK/FRQyVIvvOcCcwG+IeUc1Wc5NmM2qEbxLqLNDWxiH8/QsrT9rWWxxx4c4eD1HOpIv9LCuavXXLmKy6JvtxYwtOv4u8ukp+e0uP7pLN7d,iv:XH+6soi7lZiGz9ZGlQb49f44API715ib/Y7Zh3hFnDM=,tag:iz8RYRSwNxrMxy+rqeM07Q==,type:str]
syncplay: ENC[AES256_GCM,data:Vrn1GmmUnIikiTKIQtP3qBfZIZRW2Za2Xhhegp7PAulujxumLGMAz9lBnTPBy3uofpayP8NJuU9v8cpU4a4w5A==,iv:s4RFaZwftqmI3BhpO1msvpfO2u3AGlPik7nMX2hjnyE=,tag:13zft7dmd85udoi7CnfWYg==,type:str]
sops:
age:
- recipient: age1yzapmznelujajfyrpw5mxmy86ckg377494w5ap4yej39jatewursfxls9w
@ -23,7 +24,7 @@ sops:
S3pjSjlhZjZiSDBNakhLVzNKMjd3bWsKC2geLVXFp190lkjxtmZKq8aLN0XMNeAI
VqbwIY3a30iuWAaxqf8h1ZuCGJvbAZZBevFZraj9yktRHc54JV3Aww==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2025-08-19T12:23:05Z"
mac: ENC[AES256_GCM,data:hH3cTyHeFMTH5zYpCWyM1uqLta/uzQcLc5HPSdsR52Skh89/5h51vC666g0JuVm/sXh3gv6XQ1AGidPMAmx60qmHjiWE/LRli7xDwKk3p4mldC7RC2FrR0JPmfhDzXIo7VL60PCq4CPWevyRpAWMEMgnc3Z/IzmfDObUsvU+rg0=,iv:CrL4uqV8keGMw+tuqvkNrpKoM0qqr1vsdhESPUb+Hig=,tag:O2NKejf2dpkrkTzX1IfQcA==,type:str]
lastmodified: "2025-09-19T10:22:44Z"
mac: ENC[AES256_GCM,data:aJcXcdCR9nKbiaGEcGIQxr0kW7D8p2OzC2YDh18AFinWhdUSUDh6B8vkHR3ScIgUOYWc70/vSVsn3+M5JmtH3+mKMwMwSKF2plhicSBGdRELkeeowy6tCZGOVUvRsBhUpynd86qxxvWbJO4Q6mCSNbBQ/cr8493OZWenzB/fedQ=,iv:UqgIWA4ZK3cVn0iepeBPF8KuNREuGKNnijo/oGd4/q0=,tag:CT2uFz+flsZyNAM6SnhveA==,type:str]
unencrypted_suffix: _unencrypted
version: 3.10.2