Merge branch 'master' of ssh://ssh.nx2.site:50022/nx2/dotfiles

This commit is contained in:
Lennart J. Kurzweg (Nx2)
2025-04-11 14:00:18 +02:00
27 changed files with 573 additions and 413 deletions

View File

@@ -42,9 +42,11 @@
./system-modules/ydotool.nix ./system-modules/ydotool.nix
]) ++ (if (host == "NxACE") then [ ]) ++ (if (host == "NxACE") then [
./system-modules/nx2site.nix ./system-modules/nx2site.nix
./system-modules/hugo.nix
./system-modules/postgres.nix ./system-modules/postgres.nix
./system-modules/nx2site/proxy.nix ./system-modules/nx2site/proxy.nix
./system-modules/nx2site/audiobookshelf.nix ./system-modules/nx2site/audiobookshelf.nix
# ./system-modules/nx2site/dyn_dns.nix
./system-modules/nx2site/gitea.nix ./system-modules/nx2site/gitea.nix
./system-modules/nx2site/open-web-calendar.nix ./system-modules/nx2site/open-web-calendar.nix
./system-modules/nx2site/radicale.nix ./system-modules/nx2site/radicale.nix
@@ -54,6 +56,7 @@
./system-modules/calendar-publish.nix ./system-modules/calendar-publish.nix
./system-modules/calendar-lec.nix ./system-modules/calendar-lec.nix
./system-modules/calendar-lr.nix
./system-modules/calendar-dicos.nix ./system-modules/calendar-dicos.nix
] else []); ] else []);

158
flake.lock generated
View File

@@ -8,11 +8,11 @@
"systems": "systems" "systems": "systems"
}, },
"locked": { "locked": {
"lastModified": 1739004667, "lastModified": 1742767019,
"narHash": "sha256-t/KaeHEgzh225HUdAiHXRsgDeyDrBCMTg0LjR73v3Nw=", "narHash": "sha256-FdyHDbf31jl5rIU7IQtBVTbZ1ojGrrp5aFaRrE2819s=",
"owner": "KZDKM", "owner": "KZDKM",
"repo": "Hyprspace", "repo": "Hyprspace",
"rev": "ac55bbdb6cee760af9315899b5b187a40ce43e46", "rev": "5b62529c2011ede6069445de9b5b3f8a1f10ecfe",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -41,11 +41,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1739103745, "lastModified": 1742213273,
"narHash": "sha256-c53dcRaw0F4Os9WD05HwIRs9kTDZw4Mxe1XK4edEALo=", "narHash": "sha256-0l0vDb4anfsBu1rOs94bC73Hub+xEivgBAo6QXl2MmU=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "aquamarine", "repo": "aquamarine",
"rev": "a3dda0d10ce9aa1d1dfb7a6c139ea8c2872c74bd", "rev": "484b732195cc53f4536ce4bd59a5c6402b1e7ccf",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -278,14 +278,14 @@
"nixpkgs-stable": "nixpkgs-stable", "nixpkgs-stable": "nixpkgs-stable",
"nixpkgs-unstable": "nixpkgs-unstable", "nixpkgs-unstable": "nixpkgs-unstable",
"zig": "zig", "zig": "zig",
"zig2nix": "zig2nix" "zon2nix": "zon2nix"
}, },
"locked": { "locked": {
"lastModified": 1739767522, "lastModified": 1743191728,
"narHash": "sha256-VuHnvVVLFDZe9GAPH67clJNhp+H3WoRB5JfQpUbwsbk=", "narHash": "sha256-LrQd2IkfcmHdBh+pwPEPXzcosBerIEFzz/DbVNzBqig=",
"owner": "ghostty-org", "owner": "ghostty-org",
"repo": "ghostty", "repo": "ghostty",
"rev": "429c8ab277f75b581959ac5515b0c32636839168", "rev": "1067cd3d8a061eb5b23bc1a4c46ca10af4481941",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -367,11 +367,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1739757849, "lastModified": 1742655702,
"narHash": "sha256-Gs076ot1YuAAsYVcyidLKUMIc4ooOaRGO0PqTY7sBzA=", "narHash": "sha256-jbqlw4sPArFtNtA1s3kLg7/A4fzP4GLk9bGbtUJg0JQ=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "9d3d080aec2a35e05a15cedd281c2384767c2cfe", "rev": "0948aeedc296f964140d9429223c7e4a0702a1ff",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -397,11 +397,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1738664950, "lastModified": 1742215578,
"narHash": "sha256-xIeGNM+iivwVHkv9tHwOqoUP5dDrtees34bbFKKMZYs=", "narHash": "sha256-zfs71PXVVPEe56WEyNi2TJQPs0wabU4WAlq0XV7GcdE=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "hyprcursor", "repo": "hyprcursor",
"rev": "7c6d165e1eb9045a996551eb9f121b6d1b30adc3", "rev": "2fd36421c21aa87e2fe3bee11067540ae612f719",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -455,11 +455,11 @@
"xdph": "xdph" "xdph": "xdph"
}, },
"locked": { "locked": {
"lastModified": 1739757807, "lastModified": 1743297135,
"narHash": "sha256-R+fSm684OXCOjhhdANCgBvUPRPiya6Cyi2zV5Xf6sHI=", "narHash": "sha256-4JgyJLuHxeoeSsSbi4MkpVYsI4R74Trov33sIg1fa/0=",
"ref": "refs/heads/main", "ref": "refs/heads/main",
"rev": "59c615c321c45302491de3b1c003844c86aefca7", "rev": "da2d7c3971d40f841f2afd7def8e4bad9a351e41",
"revCount": 5825, "revCount": 5948,
"submodules": true, "submodules": true,
"type": "git", "type": "git",
"url": "https://github.com/hyprwm/Hyprland" "url": "https://github.com/hyprwm/Hyprland"
@@ -487,11 +487,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1738966025, "lastModified": 1743339740,
"narHash": "sha256-MzgrF0jKlTNnNS33D8PwI5z2MJ1Tzf5MQVf/oms2pdw=", "narHash": "sha256-G6a7R/gb1xH0yI2uevTmDpxZf6rvMh1lOu0gYrqVu5U=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "hyprland-plugins", "repo": "hyprland-plugins",
"rev": "4f48dbe12f3cbbeb4d31c91c67b21edbc5b4b451", "rev": "6dca4ece21864e329394b81cfc767778089097e2",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -609,11 +609,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1739048914, "lastModified": 1741191527,
"narHash": "sha256-vd5rJBTmp2w7SDgfv23Zcd84ktI5eDA7e5UBzx+pKrU=", "narHash": "sha256-kM+11Nch47Xwfgtw2EpRitJuORy4miwoMuRi5tyMBDY=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "hyprlang", "repo": "hyprlang",
"rev": "a7334904d591f38757c46fbe2ab68651877d9099", "rev": "72df3861f1197e41b078faa3e38eedd60e00018d",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -629,11 +629,11 @@
"rust-overlay": "rust-overlay" "rust-overlay": "rust-overlay"
}, },
"locked": { "locked": {
"lastModified": 1738828244, "lastModified": 1741036724,
"narHash": "sha256-cmo544QvdacVTHPqmc6er4xnSSc63e6Z71BS0FxSklE=", "narHash": "sha256-nCsqa5dXW1Qja+smRkVpNkGAHfYkBFJ6U3bVilY5pDo=",
"owner": "h3rmt", "owner": "h3rmt",
"repo": "hyprswitch", "repo": "hyprswitch",
"rev": "bb06fb046aa1c204c2effa382573b8045cefd355", "rev": "3feeccf2f1d3d6c0fb7c79b965ccf382118651d2",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -655,11 +655,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1739048933, "lastModified": 1741534688,
"narHash": "sha256-ck6MaoYvISBQKqZR+HcxXnx0wOhyCauxfVMaV5zhJxQ=", "narHash": "sha256-EV3945SnjOCuRVbGRghsWx/9D89FyshnSO1Q6/TuQ14=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "hyprutils", "repo": "hyprutils",
"rev": "e4e018a2ca6f5a9c33511973454199e1c7c85499", "rev": "dd1f720cbc2dbb3c71167c9598045dd3261d27b3",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -680,11 +680,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1739049028, "lastModified": 1739870480,
"narHash": "sha256-RleJp7LYbr6s+M1xgbmhtBs+fYa3ZdIiF7+QalJ4D1g=", "narHash": "sha256-SiDN5BGxa/1hAsqhgJsS03C3t2QrLgBT8u+ENJ0Qzwc=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "hyprwayland-scanner", "repo": "hyprwayland-scanner",
"rev": "04146df74a8d5ec0b579657307be01f1e241125f", "rev": "206367a08dc5ac4ba7ad31bdca391d098082e64b",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -720,11 +720,11 @@
}, },
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1739020877, "lastModified": 1742669843,
"narHash": "sha256-mIvECo/NNdJJ/bXjNqIh8yeoSjVLAuDuTUzAo7dzs8Y=", "narHash": "sha256-G5n+FOXLXcRx+3hCJ6Rt6ZQyF1zqQ0DL0sWAMn2Nk0w=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "a79cfe0ebd24952b580b1cf08cd906354996d547", "rev": "1e5b653dff12029333a6546c11e108ede13052eb",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -736,11 +736,11 @@
}, },
"nixpkgs-latest": { "nixpkgs-latest": {
"locked": { "locked": {
"lastModified": 1739782683, "lastModified": 1743346368,
"narHash": "sha256-AnuWOZmBxX/pjQKwNnjGU5jjGKncfxV8Os10Ynv4I1k=", "narHash": "sha256-DJv361yCiMiMyKA1elFtgJ9CbK/nEXLKj7vY0zUBmTk=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "6534c6ea0867d38662b8c0d9af62cebffa00e353", "rev": "e68c2965da5c7f149dd8543c63d7217753e00c32",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -764,11 +764,11 @@
}, },
"nixpkgs-stable": { "nixpkgs-stable": {
"locked": { "locked": {
"lastModified": 1738255539, "lastModified": 1741992157,
"narHash": "sha256-hP2eOqhIO/OILW+3moNWO4GtdJFYCqAe9yJZgvlCoDQ=", "narHash": "sha256-nlIfTsTrMSksEJc1f7YexXiPVuzD1gOfeN1ggwZyUoc=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "c3511a3b53b482aa7547c9d1626fd7310c1de1c5", "rev": "da4b122f63095ca1199bd4d526f9e26426697689",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -796,11 +796,11 @@
}, },
"nixpkgs-unstable": { "nixpkgs-unstable": {
"locked": { "locked": {
"lastModified": 1738136902, "lastModified": 1741865919,
"narHash": "sha256-pUvLijVGARw4u793APze3j6mU1Zwdtz7hGkGGkD87qw=", "narHash": "sha256-4thdbnP6dlbdq+qZWTsm4ffAwoS8Tiq1YResB+RP6WE=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "9a5db3142ce450045840cc8d832b13b8a2018e0c", "rev": "573c650e8a14b2faa0041645ab18aed7e60f0c9a",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -812,11 +812,11 @@
}, },
"nixpkgs-unstable_2": { "nixpkgs-unstable_2": {
"locked": { "locked": {
"lastModified": 1739580444, "lastModified": 1743095683,
"narHash": "sha256-+/bSz4EAVbqz8/HsIGLroF8aNaO8bLRL7WfACN+24g4=", "narHash": "sha256-gWd4urRoLRe8GLVC/3rYRae1h+xfQzt09xOfb0PaHSk=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "8bb37161a0488b89830168b81c48aed11569cb93", "rev": "5e5402ecbcb27af32284d4a62553c019a3a49ea6",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -858,11 +858,11 @@
}, },
"nixpkgs_4": { "nixpkgs_4": {
"locked": { "locked": {
"lastModified": 1739624908, "lastModified": 1743231893,
"narHash": "sha256-f84lBmLl4tkDp1ZU5LBTSFzlxXP4926DVW3KnXrke10=", "narHash": "sha256-tpJsHMUPEhEnzySoQxx7+kA+KUtgWqvlcUBqROYNNt0=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "a60651b217d2e529729cbc7d989c19f3941b9250", "rev": "c570c1f5304493cafe133b8d843c7c1c4a10d3a6",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -913,11 +913,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1737465171, "lastModified": 1742649964,
"narHash": "sha256-R10v2hoJRLq8jcL4syVFag7nIGE7m13qO48wRIukWNg=", "narHash": "sha256-DwOTp7nvfi8mRfuL1escHDXabVXFGT1VlPD1JHrtrco=",
"owner": "cachix", "owner": "cachix",
"repo": "git-hooks.nix", "repo": "git-hooks.nix",
"rev": "9364dc02281ce2d37a1f55b6e51f7c0f65a75f17", "rev": "dcf5072734cb576d2b0c59b2ac44f5050b5eac82",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -1049,11 +1049,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1739262228, "lastModified": 1743305778,
"narHash": "sha256-7JAGezJ0Dn5qIyA2+T4Dt/xQgAbhCglh6lzCekTVMeU=", "narHash": "sha256-Ux/UohNtnM5mn9SFjaHp6IZe2aAnUCzklMluNtV6zFo=",
"owner": "Mic92", "owner": "Mic92",
"repo": "sops-nix", "repo": "sops-nix",
"rev": "07af005bb7d60c7f118d9d9f5530485da5d1e975", "rev": "8e873886bbfc32163fe027b8676c75637b7da114",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -1180,11 +1180,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1737634991, "lastModified": 1741934139,
"narHash": "sha256-dBAnb7Kbnier30cA7AgxVSxxARmxKZ1vHZT33THSIr8=", "narHash": "sha256-ZhTcTH9FoeAtbPfWGrhkH7RjLJZ7GeF18nygLAMR+WE=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "xdg-desktop-portal-hyprland", "repo": "xdg-desktop-portal-hyprland",
"rev": "e09dfe2726c8008f983e45a0aa1a3b7416aaeb8a", "rev": "150b0b6f52bb422a1b232a53698606fe0320dde0",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -1200,11 +1200,11 @@
"rust-overlay": "rust-overlay_3" "rust-overlay": "rust-overlay_3"
}, },
"locked": { "locked": {
"lastModified": 1739776850, "lastModified": 1743344227,
"narHash": "sha256-XWzxhk0Nrw9cu6E5yjsmhAVfbt9ArVN54zz8qgzBA/I=", "narHash": "sha256-Lp1JUMrhvAmCzftOSQ2Sr0+svemxSxcLeZ4HkmdLXbE=",
"owner": "sxyazi", "owner": "sxyazi",
"repo": "yazi", "repo": "yazi",
"rev": "1ddbbfea711636dcb997239ea9d2b483cea16f80", "rev": "1765aba68440f73c590cedac14ece6778fe88ff5",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -1224,11 +1224,11 @@
"systems": "systems_6" "systems": "systems_6"
}, },
"locked": { "locked": {
"lastModified": 1737417368, "lastModified": 1742573336,
"narHash": "sha256-JExM3nZwg07iMhXDQSIXc5KmVqbBRA4IfNgs1gFmneg=", "narHash": "sha256-7cVQTyMA9V1YqqVXwaxmrsUKE8LjnBdIj6fvpKKuAxo=",
"owner": "lordkekz", "owner": "lordkekz",
"repo": "nix-yazi-plugins", "repo": "nix-yazi-plugins",
"rev": "c251d3db84f3a10f95993112132fe5ffc37a279f", "rev": "76e0104f5bfc2517d86cae0332ede54c6d5ba4e8",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -1270,11 +1270,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1738239110, "lastModified": 1741825901,
"narHash": "sha256-Y5i9mQ++dyIQr+zEPNy+KIbc5wjPmfllBrag3cHZgcE=", "narHash": "sha256-aeopo+aXg5I2IksOPFN79usw7AeimH1+tjfuMzJHFdk=",
"owner": "mitchellh", "owner": "mitchellh",
"repo": "zig-overlay", "repo": "zig-overlay",
"rev": "1a8fb6f3a04724519436355564b95fce5e272504", "rev": "0b14285e283f5a747f372fb2931835dd937c4383",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -1283,7 +1283,7 @@
"type": "github" "type": "github"
} }
}, },
"zig2nix": { "zon2nix": {
"inputs": { "inputs": {
"flake-utils": [ "flake-utils": [
"ghostty", "ghostty",
@@ -1291,21 +1291,21 @@
], ],
"nixpkgs": [ "nixpkgs": [
"ghostty", "ghostty",
"nixpkgs-stable" "nixpkgs-unstable"
] ]
}, },
"locked": { "locked": {
"lastModified": 1738263917, "lastModified": 1742104771,
"narHash": "sha256-j/3fwe2pEOquHabP/puljOKwAZFjIE9gXZqA91sC48M=", "narHash": "sha256-LhidlyEA9MP8jGe1rEnyjGFCzLLgCdDpYeWggibayr0=",
"owner": "jcollie", "owner": "jcollie",
"repo": "zig2nix", "repo": "zon2nix",
"rev": "c311d8e77a6ee0d995f40a6e10a89a3a4ab04f9a", "rev": "56c159be489cc6c0e73c3930bd908ddc6fe89613",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "jcollie", "owner": "jcollie",
"ref": "c311d8e77a6ee0d995f40a6e10a89a3a4ab04f9a", "ref": "56c159be489cc6c0e73c3930bd908ddc6fe89613",
"repo": "zig2nix", "repo": "zon2nix",
"type": "github" "type": "github"
} }
} }

Binary file not shown.

View File

@@ -40,6 +40,20 @@
read-only = true; read-only = true;
type = "ics"; type = "ics";
} }
{
name = "LR";
url = "https://${domain}/lr.ics";
color = "#005040";
read-only = true;
type = "ics";
}
{
name = "Feiertage Hessen";
url = "https://ics.tools/Feiertage/hessen.ics";
color = "#303030";
read-only = true;
type = "ics";
}
# { # {
# name = "Handball Männer"; # name = "Handball Männer";
# url = "http://i.cal.to/ical/108/dhb/handball-nationalmannschaft/c687e97f.bc7c3eb6-11a0e356.ics"; # url = "http://i.cal.to/ical/108/dhb/handball-nationalmannschaft/c687e97f.bc7c3eb6-11a0e356.ics";

View File

@@ -2,28 +2,30 @@
let let
channels = [ channels = [
"Caedrel" "Caedrel"
"agurin" # "agurin"
"asmongold" # "asmongold"
# "Caedrel" # "Caedrel"
"EintrachtSpandau" # "EintrachtSpandau"
"GamesDoneQuick" "GamesDoneQuick"
"gdolphn" "gdolphn"
"GRONKH" "GRONKH"
"handofblood" "handofblood"
"HisWattson" "HisWattson"
"Jankos" "Jankos"
"KuruHS" # "KuruHS"
"LEC" "LEC"
"lol_nemesis" "lol_nemesis"
"NASA" # "NASA"
"NoWay4u_Sir" "NoWay4u_Sir"
"OfficialMikeShinoda" "OfficialMikeShinoda"
"Rekkles" "Rekkles"
"riotgames" "riotgames"
"thebausffs"
"ThePrimeagen" "ThePrimeagen"
"Tolkin" "Tolkin"
"TSM_ImperialHal" # "TSM_ImperialHal"
"Xisuma" "velja_lol"
# "Xisuma"
"zackrawrr" "zackrawrr"
]; ];
tabber = channel-name: { tabber = channel-name: {

View File

@@ -38,14 +38,17 @@
programs.fish = { programs.fish = {
enable = true; enable = true;
shellAliases = { shellAliases = let
ls = "eza --icons --git --smart-group --group-directories-first"; base-eza = "eza --icons --git --smart-group --group-directories-first";
ll = "eza --icons --git --smart-group --group-directories-first --long"; in {
la = "eza --icons --git --smart-group --group-directories-first --all"; ls = "${base-eza}";
lla = "eza --icons --git --smart-group --group-directories-first --all --long"; ll = "${base-eza} --long";
lt = "eza --icons --git --smart-group --group-directories-first --long --tree"; lg = "${base-eza} --group --long";
ltd = "eza --icons --git --smart-group --group-directories-first --long --tree -D"; la = "${base-eza} --all";
lt2 = "eza --icons --git --smart-group --group-directories-first --long --tree -L 2"; lla = "${base-eza} --all --long";
lt = "${base-eza} --long --tree";
ltd = "${base-eza} --long --tree -D";
lt2 = "${base-eza} --long --tree -L 2";
sr = "sudo reboot"; sr = "sudo reboot";
nf = "neofetch"; nf = "neofetch";
nxf = "nxfetch"; nxf = "nxfetch";

View File

@@ -1,5 +1,6 @@
{ pkgs-unstable, pkgs, lib, host, ... }: { pkgs-unstable, pkgs, lib, host, ... }:
lib.mkIf (host == "NxNORTH" || host == "NxACE") # lib.mkIf (host == "NxNORTH" || host == "NxACE")
lib.mkIf (host == "NxNORTH")
{ {
home = { home = {
packages = (with pkgs-unstable; [ packages = (with pkgs-unstable; [

View File

@@ -1,9 +1,10 @@
{ pkgs, lib, host, ... }: { pkgs-latest, ... }:
{ {
home.packages = with pkgs; [ home.packages = with pkgs-latest; [
(gimp-with-plugins.override { # (gimp-with-plugins.override {
plugins = with gimpPlugins; [ bimp ]; # plugins = with gimpPlugins; [ bimp ];
}) # })
gimp
]; ];
} }

View File

@@ -17,6 +17,7 @@
marksman # markdown marksman # markdown
vale-ls # style-checker lsp (needs vale) vale-ls # style-checker lsp (needs vale)
ltex-ls # Ltex (language tool) ltex-ls # Ltex (language tool)
vscode-langservers-extracted
] ++ (with pkgs-unstable; [ ] ++ (with pkgs-unstable; [
bash-language-server bash-language-server
helix helix
@@ -185,13 +186,13 @@
enable = false; enable = false;
supersend-menu = false; supersend-menu = false;
}; };
# inline-diagnostics = { inline-diagnostics = {
# cursor-line = "hint"; cursor-line = "hint";
# other-lines = "disable"; other-lines = "disable";
# prefix-len = 1; prefix-len = 1;
# # max-wrap = set above # max-wrap = set above
# max-diagnostics = 20; max-diagnostics = 20;
# }; };
}; };
keys = { keys = {
normal = { normal = {
@@ -303,8 +304,8 @@
base16 = with rice.color; { base16 = with rice.color; {
"attributes" = foreground; "attributes" = foreground;
"comment" = { "comment" = {
"fg" = black.bright; fg = black.bright;
"modifiers" = [ "italic" ]; modifiers = [ "italic" ];
}; };
"constant" = accent.bright; "constant" = accent.bright;
"constant.character.escape" = special.bright; "constant.character.escape" = special.bright;
@@ -320,6 +321,7 @@
"hint" = tertiary.bright; "hint" = tertiary.bright;
"info" = foreground; "info" = foreground;
"keyword" = special.base; "keyword" = special.base;
"keyword.modifiers" = [ "italic" ];
"label" = foreground; "label" = foreground;
"namespace" = weird.bright; "namespace" = weird.bright;
"operator" = foreground; "operator" = foreground;
@@ -332,131 +334,127 @@
"markup.heading" = accent.base; "markup.heading" = accent.base;
"markup.bold" = { "markup.bold" = {
"fg" = tertiary.bright; fg = tertiary.bright;
"modifiers" = [ "bold" ]; modifiers = [ "bold" ];
}; };
"italic" = { "italic" = {
"fg" = secondary.bright; fg = secondary.bright;
"modifiers" = [ "italic" ]; modifiers = [ "italic" ];
}; };
"markup.linktext" = accent.base; "markup.linktext" = accent.base;
"markup.linkurl" = { "markup.linkurl" = {
"fg" = tertiary.dark; fg = tertiary.dark;
"modifiers" = [ "underlined" ]; modifiers = [ "underlined" ];
}; };
"markup.list" = accent.bright; "markup.list" = accent.bright;
"markup.quote" = weird.bright; "markup.quote" = weird.bright;
"markup.raw" = special.bright; "markup.raw" = special.bright;
"markup.strikethrough" = { "markup.strikethrough".modifiers = [ "crossed_out" ];
"modifiers" = [ "crossed_out" ];
};
"diagnostic.hint" = { "diagnostic.hint".underline.style = "curl";
"underline" = { style = "curl"; }; "diagnostic.info".underline.style = "curl";
}; "diagnostic.warning".underline.style = "curl";
"diagnostic.info" = { "diagnostic.error".underline.style = "curl";
"underline" = { style = "curl"; };
};
"diagnostic.warning" = {
"underline" = { style = "curl"; };
};
"diagnostic.error" = {
"underline" = { style = "curl"; };
};
"ui.background" = { # general background of the editor window "ui.background" = { # general background of the editor window
# "bg" = background; # bg = background;
}; };
"ui.bufferline" = { # the top line ("tab"-line) "ui.bufferline" = { # the top line ("tab"-line)
"fg" = accent.base; fg = accent.base;
"bg" = black.base; bg = black.base;
}; };
"ui.bufferline.active" = { # the active "tab" "ui.bufferline.active" = { # the active "tab"
"fg" = background; fg = background;
"bg" = accent.base; bg = accent.base;
"modifiers" = [ "bold" ]; modifiers = [ "bold" ];
}; };
"ui.cursor" = { # the cursor in Normal mode "ui.cursor" = { # the cursor in Normal mode
"fg" = foreground; fg = foreground;
"modifiers" = [ "reversed" ]; modifiers = [ "reversed" ];
}; };
"ui.cursorline.primary" = { # the line on which the cursor is on "ui.cursorline.primary" = { # the line on which the cursor is on
"bg" = black.base; bg = black.base;
}; };
"ui.cursor.match" = { # Matching bracket etc. "ui.cursor.match" = { # Matching bracket etc.
"bg" = green.dark; bg = green.dark;
"modifiers" = [ ]; modifiers = [ ];
}; };
"ui.gutter" = { "ui.gutter" = {
"bg" = black.base; bg = black.base;
}; };
"ui.help" = { "ui.help" = {
"fg" = green.base; fg = green.base;
"bg" = black.base; bg = black.base;
}; };
"ui.linenr" = { "ui.linenr" = {
"fg" = white.dark; fg = white.dark;
"bg" = black.base; bg = black.base;
}; };
"ui.linenr.selected" = { "ui.linenr.selected" = {
"fg" = accent.bright; fg = accent.bright;
"modifiers" = [ "bold" ]; modifiers = [ "bold" ];
}; };
"ui.menu" = { "ui.menu" = {
"fg" = accent.base; fg = accent.base;
"bg" = black.base; bg = black.base;
}; };
"ui.menu.scroll" = { "ui.menu.scroll" = {
"fg" = yellow.dark; fg = yellow.dark;
"bg" = background; bg = background;
}; };
"ui.menu.selected" = { "ui.menu.selected" = {
"fg" = red.base; fg = red.base;
"bg" = blue.dark; bg = blue.dark;
}; };
"ui.popup" = { "ui.popup" = {
"bg" = black.base; bg = black.base;
}; };
"ui.selection" = { "ui.selection" = {
"bg" = white.dark; bg = white.dark;
}; };
"ui.selection.primary" = { "ui.selection.primary" = {
"bg" = black.bright; bg = black.bright;
}; };
"ui.statusline" = { "ui.statusline" = {
"fg" = blue.bright; fg = blue.bright;
"bg" = black.base; bg = black.base;
}; };
"ui.statusline.inactive" = { "ui.statusline.inactive" = {
"fg" = red.bright; fg = red.bright;
"bg" = red.dark; bg = red.dark;
}; };
"ui.statusline.insert" = { "ui.statusline.insert" = {
"fg" = green.bright; fg = green.bright;
"bg" = green.dark; bg = green.dark;
}; };
"ui.statusline.normal" = { "ui.statusline.normal" = {
"fg" = yellow.bright; fg = yellow.bright;
"bg" = yellow.dark; bg = yellow.dark;
}; };
"ui.statusline.select" = { "ui.statusline.select" = {
"fg" = cyan.bright; fg = cyan.bright;
"bg" = cyan.dark; bg = cyan.dark;
}; };
"ui.text" = foreground; "ui.text" = foreground;
"ui.text.focus" = accent.base; "ui.text.focus" = accent.base;
"ui.virtual.indent-guide" = { "ui.virtual.indent-guide" = {
"fg" = black.bright; fg = black.bright;
}; };
"ui.virtual.inlay-hint" = { "ui.virtual.inlay-hint" = {
"fg" = weird.dark; fg = weird.dark;
"bg" = weird.base; bg = weird.base;
}; };
"ui.virtual.ruler" = { "ui.virtual.ruler" = {
"bg" = background; bg = background;
};
"ui.virtual.jump-label" = {
fg = special.base;
underline = {
style = "dotted";
};
}; };
"ui.window" = { "ui.window" = {
"bg" = black.base; bg = black.base;
}; };
}; };
}; };

View File

@@ -13,7 +13,7 @@ let
scale = "1.0"; scale = "1.0";
}; };
second = { second = {
name = "DP-1"; name = "DP-3";
resolution = "1920x1080"; resolution = "1920x1080";
position = "0x0"; position = "0x0";
scale = "1.0"; scale = "1.0";

View File

@@ -9,12 +9,12 @@
Port 50022 Port 50022
HOST nxacel HOST nxacel
HostName 192.168.178.32 HostName 10.0.1.1
User nx2 User nx2
Port 50022 Port 50022
HOST nxrpil HOST nxrpil
HostName 192.168.178.31 HostName 10.0.1.31
User nx2 User nx2
Port 22 Port 22

View File

@@ -47,104 +47,113 @@ in {
'';}) '';})
(writers.writePython3Bin "caldav_event" { (writers.writePython3Bin "caldav_event" {
libraries = with pkgs.python3Packages; [ caldav ics pytz ]; libraries = with pkgs.python3Packages; [ caldav ics pytz ];
flakeIgnore = [ "E302" "E305""E501" ]; flakeIgnore = [ "E302" "E305""E501" "E261" ];
} /* python */ '' } /* python */ ''
import os import os
import json
from caldav import DAVClient from caldav import DAVClient
from datetime import datetime, timezone from datetime import datetime, timezone
import json
from ics import Calendar from ics import Calendar
from pytz import UTC
def get_password(password_file): def get_password(password_file):
with open(password_file, "r") as file: with open(password_file, "r") as file:
return file.read().strip() return file.read().strip()
def datetime_converter(obj):
if isinstance(obj, datetime):
return obj.isoformat()
return obj
def datetime_parser(dct):
for key, value in dct.items():
if isinstance(value, str):
try:
dct[key] = datetime.fromisoformat(value)
except ValueError:
pass
return dct
def load_cache(cache_file): def load_cache(cache_file):
if os.path.exists(cache_file): if os.path.exists(cache_file):
with open(cache_file, "r") as file: with open(cache_file, "r") as file:
return json.load(file) return json.load(file, object_hook=datetime_parser)
return None return None
def save_cache(cache_file, data): def save_cache(cache_file, data):
with open(cache_file, "w") as file: with open(cache_file, "w") as file:
json.dump(data, file) json.dump(data, file, default=datetime_converter)
def get_ongoing_and_next_event(url, username, password):
def get_ongoing_or_next_event(url, username, password):
now = datetime.now(timezone.utc) now = datetime.now(timezone.utc)
ongoing_events = []
upcoming_events = []
try: try:
client = DAVClient(url, username=username, password=password) client = DAVClient(url, username=username, password=password)
principal = client.principal() principal = client.principal()
calendars = principal.calendars() calendars = principal.calendars()
next_event_dict = {
'event_name': "fake",
'event_begin': datetime(9000, 1, 1, tzinfo=UTC), # in the year 9000
'event_end': datetime(9000, 1, 1, 8, tzinfo=UTC),
}
for calendar in calendars: for calendar in calendars:
events = calendar.events() for event in calendar.events():
for event in events: calendar_parsed = Calendar(event.data)
ical_data = event.data for ics_event in calendar_parsed.events:
calendar_parsed = Calendar(ical_data) event_dict = {}
event_dict['event_name'] = ics_event.name or "(No Title)"
event_dict['event_begin'] = ics_event.begin.astimezone(timezone.utc)
event_dict['event_end'] = ics_event.end.astimezone(timezone.utc)
for event in calendar_parsed.events: if event_dict['event_begin'] <= now and now <= event_dict['event_end']:
event_name = event.name or "(No Title)" return event_dict
start_time = event.begin.astimezone(timezone.utc) elif event_dict['event_begin'] >= now and next_event_dict['event_begin'] > event_dict['event_begin']:
end_time = event.end.astimezone(timezone.utc) next_event_dict = event_dict
return next_event_dict
if start_time <= now <= end_time:
ongoing_events.append((event_name, start_time.timestamp(), end_time.timestamp()))
elif start_time > now:
upcoming_events.append((event_name, start_time.timestamp(), end_time.timestamp()))
except Exception as e: except Exception as e:
print(f"Error accessing {url}: {e}") print(f"Error accessing {url}: {e}")
return None
upcoming_events.sort(key=lambda x: x[1]) # Sort by start time
return ongoing_events, upcoming_events[0] if upcoming_events else None
if __name__ == "__main__": if __name__ == "__main__":
password_file = "${config.sops.secrets."nx2site/radicale/password".path}" # Path to password file password_file = "/home/nx2/.config/sops-nix/secrets/nx2site/radicale/password" # Path to password file
cache_file = "/tmp/caldav_event_cache.json" # Path to cache file cache_file = "/tmp/caldav_event_cache.json" # Path to cache file
url = "https://dav.${domain}/" url = "https://dav.${domain}/"
username = "${user}" username = "${user}"
password = get_password(password_file) password = get_password(password_file)
cache = load_cache(cache_file) event_dict = load_cache(cache_file)
now = datetime.now(timezone.utc).timestamp() now = datetime.now(timezone.utc).timestamp()
if cache and cache.get("next_event_start") and now < cache["next_event_start"]: if event_dict is None or event_dict['event_begin'].timestamp() <= now and now < event_dict['event_end'].timestamp():
ongoing_events = cache.get("ongoing_events", []) event_dict = get_ongoing_or_next_event(url, username, password)
next_event = (cache["next_event_name"], cache["next_event_start"], cache["next_event_end"]) if "next_event_name" in cache else None if event_dict is None:
else: print("No upcoming events found.")
ongoing_events, next_event = get_ongoing_and_next_event(url, username, password) exit(0)
cache_data = { cache_data = {
"ongoing_events": ongoing_events, "event_name": event_dict['event_name'] if event_dict is not None else None,
"next_event_name": next_event[0] if next_event else None, "event_begin": event_dict['event_begin'] if event_dict is not None else None,
"next_event_start": next_event[1] if next_event else None, "event_end": event_dict['event_end'] if event_dict is not None else None
"next_event_end": next_event[2] if next_event else None
} }
save_cache(cache_file, cache_data) save_cache(cache_file, cache_data)
if ongoing_events: if event_dict:
for event_name, start_time, end_time in ongoing_events: event_start = event_dict['event_begin'].timestamp()
time_remaining = end_time - now event_end = event_dict['event_end'].timestamp()
hours, rem = divmod(int(time_remaining), 3600)
minutes, _ = divmod(rem, 60)
if hours == 0: if event_start <= now <= event_end:
print(f"{event_name} {minutes} minute{'s ' if minutes > 1 else ' '}left") time_remaining = event_end - now
hours, rem = divmod(int(time_remaining), 3600)
minutes, _ = divmod(rem, 60)
print(f"{event_dict['event_name']} ends in {hours} hour{'s ' if hours != 1 else ' '}and {minutes} minute{'s ' if minutes != 1 else ' '}")
else: else:
print(f"{event_name} {hours} hour{'s ' if hours > 1 else ' '}and {minutes} minute{'s ' if minutes > 1 else ' '}left") time_until_start = event_start - now
else: hours, rem = divmod(int(time_until_start), 3600)
if next_event: minutes, _ = divmod(rem, 60)
event_name, start_time, end_time = next_event print(f"{event_dict['event_name']} starts in {hours} hour{'s ' if hours != 1 else ' '}and {minutes} minute{'s ' if minutes != 1 else ' '}")
time_until_start = start_time - now
hours, rem = divmod(int(time_until_start), 3600)
minutes, _ = divmod(rem, 60)
if hours == 0:
print(f"'{event_name}' starts in {minutes} minute{'s ' if minutes > 1 else ' '}")
else:
print(f"'{event_name}' starts in {hours} hour{'s ' if hours > 1 else ' '}and {minutes} minute{'s ' if minutes > 1 else ' '}")
else: else:
print("No upcoming events found.") print("No upcoming events found.")
'') '')

View File

@@ -13,170 +13,172 @@
enableFishIntegration = true; enableFishIntegration = true;
shellWrapperName = "ya"; shellWrapperName = "ya";
plugins = with inputs.yazi-plugins.packages.${system}; { plugins = with inputs.yazi-plugins.packages.${system}; {
inherit chmod starship; inherit
# chmod
starship;
}; };
# initLua = /* lua */ '' ''; # initLua = /* lua */ '' '';
keymap = { keymap = {
manager.keymap = [ manager.keymap = [
{ on = "<Esc>"; run = "escape"; desc = "Exit visual mode, clear selected, or cancel search"; } { on = "<Esc>"; run = "escape"; desc = "Exit visual mode, clear selected, or cancel search"; }
{ on = "q"; run = "quit"; desc = "Exit the process"; } { on = "q"; run = "quit"; desc = "Exit the process"; }
{ on = "Q"; run = "quit --no-cwd-file"; desc = "Exit the process without writing cwd-file"; } { on = "Q"; run = "quit --no-cwd-file"; desc = "Exit the process without writing cwd-file"; }
{ on = "<C-w>"; run = "close"; desc = "Close the current tab, or quit if it is last tab"; } { on = "<C-w>"; run = "close"; desc = "Close the current tab, or quit if it is last tab"; }
{ on = "<C-z>"; run = "suspend"; desc = "Suspend the process"; } { on = "<C-z>"; run = "suspend"; desc = "Suspend the process"; }
# Hopping # Hopping
{ on = "k"; run = "arrow -1"; desc = "Move cursor up"; } { on = "k"; run = "arrow -1"; desc = "Move cursor up"; }
{ on = "j"; run = "arrow 1"; desc = "Move cursor down"; } { on = "j"; run = "arrow 1"; desc = "Move cursor down"; }
{ on = "<Up>"; run = "arrow -1"; desc = "Move cursor up"; } { on = "<Up>"; run = "arrow -1"; desc = "Move cursor up"; }
{ on = "<Down>"; run = "arrow 1"; desc = "Move cursor down"; } { on = "<Down>"; run = "arrow 1"; desc = "Move cursor down"; }
{ on = "<C-u>"; run = "arrow -50%"; desc = "Move cursor up half page"; } { on = "<C-u>"; run = "arrow -50%"; desc = "Move cursor up half page"; }
{ on = "<C-d>"; run = "arrow 50%"; desc = "Move cursor down half page"; } { on = "<C-d>"; run = "arrow 50%"; desc = "Move cursor down half page"; }
{ on = "<C-b>"; run = "arrow -100%"; desc = "Move cursor up one page"; } { on = "<C-b>"; run = "arrow -100%"; desc = "Move cursor up one page"; }
{ on = "<C-f>"; run = "arrow 100%"; desc = "Move cursor down one page"; } { on = "<C-f>"; run = "arrow 100%"; desc = "Move cursor down one page"; }
{ on = "<PageUp>"; run = "arrow -100%"; desc = "Move cursor up one page"; } { on = "<PageUp>"; run = "arrow -100%"; desc = "Move cursor up one page"; }
{ on = "<PageDown>"; run = "arrow 100%"; desc = "Move cursor down one page"; } { on = "<PageDown>"; run = "arrow 100%"; desc = "Move cursor down one page"; }
{ on = [ "g" "g" ]; run = "arrow down"; desc = "Move cursor to the top"; } { on = [ "g" "g" ]; run = "arrow down"; desc = "Move cursor to the top"; }
{ on = [ "g" "e" ]; run = "arrow up"; desc = "Move cursor to the end"; } { on = [ "g" "e" ]; run = "arrow up"; desc = "Move cursor to the end"; }
{ on = [ "g" "h" ]; run = "cd ~"; desc = "Go to the home directory"; } { on = [ "g" "h" ]; run = "cd ~"; desc = "Go to the home directory"; }
{ on = [ "g" "n" ]; run = "cd ~/nix-dots"; desc = "Go to the Nix-Dotfiles directory"; } { on = [ "g" "n" ]; run = "cd ~/nix-dots"; desc = "Go to the Nix-Dotfiles directory"; }
{ on = [ "g" "n" ]; run = "cd /nix/store"; desc = "Go to the Nix-Store"; } { on = [ "g" "n" ]; run = "cd /nix/store"; desc = "Go to the Nix-Store"; }
{ on = [ "g" "c" ]; run = "cd ~/.config"; desc = "Go to the config directory"; } { on = [ "g" "c" ]; run = "cd ~/.config"; desc = "Go to the config directory"; }
{ on = [ "g" "l" ]; run = "cd ~/.locale"; desc = "Go to the .locale directory"; } { on = [ "g" "l" ]; run = "cd ~/.locale"; desc = "Go to the .locale directory"; }
{ on = [ "g" "C" ]; run = "cd ~/.cache"; desc = "Go to the .cache directory"; } { on = [ "g" "C" ]; run = "cd ~/.cache"; desc = "Go to the .cache directory"; }
{ on = [ "g" "m" ]; run = "cd ~/media"; desc = "Go to the media (udiskie mount) directory"; } { on = [ "g" "m" ]; run = "cd ~/media"; desc = "Go to the media (udiskie mount) directory"; }
{ on = [ "g" "v" ]; run = "cd ~/Videos"; desc = "Go to the Videos directory"; } { on = [ "g" "v" ]; run = "cd ~/Videos"; desc = "Go to the Videos directory"; }
{ on = [ "g" "d" ]; run = "cd ~/Downloads"; desc = "Go to the downloads directory"; } { on = [ "g" "t" ]; run = "cd /tmp"; desc = "Go to the /tmp directory"; }
{ on = [ "g" "D" ]; run = "cd ~/Documents"; desc = "Go to the Documents directory"; } { on = [ "g" "d" ]; run = "cd ~/Downloads"; desc = "Go to the downloads directory"; }
{ on = [ "g" "r" ]; run = "cd /"; desc = "Go to the root (/) directory"; } { on = [ "g" "D" ]; run = "cd ~/Documents"; desc = "Go to the Documents directory"; }
{ on = [ "g" "t" ]; run = "cd /tmp"; desc = "Go to the /tmp directory"; } { on = [ "g" "r" ]; run = "cd /"; desc = "Go to the root (/) directory"; }
{ on = [ "g" "/" ]; run = "cd /"; desc = "Go to the root (/) directory"; } { on = [ "g" "/" ]; run = "cd /"; desc = "Go to the root (/) directory"; }
{ on = [ "g" "<Space>" ]; run = "cd --interactive"; desc = "Go to a directory interactively"; } { on = [ "g" "<Space>" ]; run = "cd --interactive"; desc = "Go to a directory interactively"; }
# Navigation # Navigation
{ on = "h"; run = "leave"; desc = "Go back to the parent directory"; } { on = "h"; run = "leave"; desc = "Go back to the parent directory"; }
{ on = "l"; run = "enter"; desc = "Enter the child directory"; } { on = "l"; run = "enter"; desc = "Enter the child directory"; }
{ on = "<Left>"; run = "leave"; desc = "Go back to the parent directory"; } { on = "<Left>"; run = "leave"; desc = "Go back to the parent directory"; }
{ on = "<Right>"; run = "enter"; desc = "Enter the child directory"; } { on = "<Right>"; run = "enter"; desc = "Enter the child directory"; }
{ on = "H"; run = "back"; desc = "Go back to the previous directory"; } { on = "H"; run = "back"; desc = "Go back to the previous directory"; }
{ on = "L"; run = "forward"; desc = "Go forward to the next directory"; } { on = "L"; run = "forward"; desc = "Go forward to the next directory"; }
# Seeking # Seeking
{ on = "K"; run = "seek -5"; desc = "Seek up 5 units in the preview"; } { on = "K"; run = "seek -5"; desc = "Seek up 5 units in the preview"; }
{ on = "J"; run = "seek 5"; desc = "Seek down 5 units in the preview"; } { on = "J"; run = "seek 5"; desc = "Seek down 5 units in the preview"; }
# Selection # Selection
{ on = "<Space>"; run = [ "toggle --state=none" "arrow 1" ]; desc = "Toggle the current selection state"; } { on = "<Space>"; run = [ "toggle --state=none" "arrow 1" ]; desc = "Toggle the current selection state"; }
{ on = "v"; run = "visual_mode"; desc = "Enter visual mode (selection mode)"; } { on = "v"; run = "visual_mode"; desc = "Enter visual mode (selection mode)"; }
{ on = "V"; run = "visual_mode --unset"; desc = "Enter visual mode (unset mode)"; } { on = "V"; run = "visual_mode --unset"; desc = "Enter visual mode (unset mode)"; }
{ on = "<C-a>"; run = "toggle_all --state=on"; desc = "Select all files"; } { on = "<C-a>"; run = "toggle_all --state=on"; desc = "Select all files"; }
{ on = "<C-n>"; run = "toggle_all --state=off"; desc = "Deselect all files"; } { on = "<C-n>"; run = "toggle_all --state=off"; desc = "Deselect all files"; }
{ on = "<C-r>"; run = "toggle_all --state=none"; desc = "Inverse selection of all files"; } { on = "<C-r>"; run = "toggle_all --state=none"; desc = "Inverse selection of all files"; }
# Operation # Operation
{ on = "o"; run = "open"; desc = "Open selected files"; } { on = "o"; run = "open"; desc = "Open selected files"; }
{ on = "O"; run = "open --interactive"; desc = "Open selected files interactively"; } { on = "O"; run = "open --interactive"; desc = "Open selected files interactively"; }
{ on = "<Enter>"; run = "open"; desc = "Open selected files"; } { on = "<Enter>"; run = "open"; desc = "Open selected files"; }
{ on = "<S-Enter>"; run = "open --interactive"; desc = "Open selected files interactively"; } { on = "<S-Enter>"; run = "open --interactive"; desc = "Open selected files interactively"; }
{ on = "y"; run = "yank"; desc = "Yank selected files (copy)"; } { on = "y"; run = "yank"; desc = "Yank selected files (copy)"; }
{ on = "x"; run = "yank --cut"; desc = "Yank selected files (cut)"; } { on = "x"; run = "yank --cut"; desc = "Yank selected files (cut)"; }
{ on = "p"; run = "paste"; desc = "Paste yanked "; } { on = "p"; run = "paste"; desc = "Paste yanked "; }
{ on = "P"; run = "paste --force"; desc = "Paste yanked (overwrite if exists)"; } { on = "P"; run = "paste --force"; desc = "Paste yanked (overwrite if exists)"; }
{ on = "-"; run = "link"; desc = "Symlink the absolute path of yanked files"; } { on = "-"; run = "link"; desc = "Symlink the absolute path of yanked files"; }
{ on = "_"; run = "link --relative"; desc = "Symlink the relative path of yanked files"; } { on = "_"; run = "link --relative"; desc = "Symlink the relative path of yanked files"; }
{ on = "<C-->"; run = "hardlink"; desc = "Hardlink yanked files"; } { on = "<C-->"; run = "hardlink"; desc = "Hardlink yanked files"; }
{ on = "Y"; run = "unyank"; desc = "Cancel the yank status"; } { on = "Y"; run = "unyank"; desc = "Cancel the yank status"; }
{ on = "X"; run = "unyank"; desc = "Cancel the yank status"; } { on = "X"; run = "unyank"; desc = "Cancel the yank status"; }
{ on = "d"; run = "remove"; desc = "Trash selected files"; } { on = "d"; run = "remove"; desc = "Trash selected files"; }
{ on = "D"; run = "remove --permanently"; desc = "Permanently delete selected files"; } { on = "D"; run = "remove --permanently"; desc = "Permanently delete selected files"; }
{ on = "a"; run = "create"; desc = "Create a file (ends with / for directories)"; } { on = "a"; run = "create"; desc = "Create a file (ends with / for directories)"; }
{ on = "r"; run = "rename --cursor=before_ext"; desc = "Rename selected file(s)"; } { on = "r"; run = "rename --cursor=before_ext"; desc = "Rename selected file(s)"; }
{ on = ";"; run = "shell --interactive"; desc = "Run a shell command"; } { on = ";"; run = "shell --interactive"; desc = "Run a shell command"; }
{ on = ":"; run = "shell --block --interactive"; desc = "Run a shell command (block until finishes)"; } { on = ":"; run = "shell --block --interactive"; desc = "Run a shell command (block until finishes)"; }
{ on = "."; run = "hidden toggle"; desc = "Toggle the visibility of hidden files"; } { on = "."; run = "hidden toggle"; desc = "Toggle the visibility of hidden files"; }
{ on = "s"; run = "search fd"; desc = "Search files by name using fd"; } { on = "s"; run = "search fd"; desc = "Search files by name using fd"; }
{ on = "S"; run = "search rg"; desc = "Search files by content using ripgrep"; } { on = "S"; run = "search rg"; desc = "Search files by content using ripgrep"; }
{ on = "<C-s>"; run = "escape --search"; desc = "Cancel the ongoing search"; } { on = "<C-s>"; run = "escape --search"; desc = "Cancel the ongoing search"; }
{ on = "z"; run = "plugin zoxide"; desc = "Jump to a directory using zoxide"; } { on = "z"; run = "plugin zoxide"; desc = "Jump to a directory using zoxide"; }
{ on = "Z"; run = "plugin fzf"; desc = "Jump to a directory or reveal a file using fzf"; } { on = "Z"; run = "plugin fzf"; desc = "Jump to a directory or reveal a file using fzf"; }
# Linemode # Linemode
{ on = [ "m" "s" ]; run = "linemode size"; desc = "Set linemode to size"; } { on = [ "m" "s" ]; run = "linemode size"; desc = "Set linemode to size"; }
{ on = [ "m" "p" ]; run = "linemode permissions"; desc = "Set linemode to permissions"; } { on = [ "m" "p" ]; run = "linemode permissions"; desc = "Set linemode to permissions"; }
{ on = [ "m" "c" ]; run = "linemode ctime"; desc = "Set linemode to ctime"; } { on = [ "m" "c" ]; run = "linemode ctime"; desc = "Set linemode to ctime"; }
{ on = [ "m" "m" ]; run = "linemode mtime"; desc = "Set linemode to mtime"; } { on = [ "m" "m" ]; run = "linemode mtime"; desc = "Set linemode to mtime"; }
{ on = [ "m" "o" ]; run = "linemode owner"; desc = "Set linemode to owner"; } { on = [ "m" "o" ]; run = "linemode owner"; desc = "Set linemode to owner"; }
{ on = [ "m" "n" ]; run = "linemode none"; desc = "Set linemode to none"; } { on = [ "m" "n" ]; run = "linemode none"; desc = "Set linemode to none"; }
# Copy # Copy
{ on = [ "c" "c" ]; run = "copy path"; desc = "Copy the file path"; } { on = [ "c" "c" ]; run = "copy path"; desc = "Copy the file path"; }
{ on = [ "c" "d" ]; run = "copy dirname"; desc = "Copy the directory path"; } { on = [ "c" "d" ]; run = "copy dirname"; desc = "Copy the directory path"; }
{ on = [ "c" "f" ]; run = "copy filename"; desc = "Copy the filename"; } { on = [ "c" "f" ]; run = "copy filename"; desc = "Copy the filename"; }
{ on = [ "c" "n" ]; run = "copy name_without_ext"; desc = "Copy the filename without extension"; } { on = [ "c" "n" ]; run = "copy name_without_ext"; desc = "Copy the filename without extension"; }
# Filter # Filter
{ on = "f"; run = "filter --smart"; desc = "Filter files"; } { on = "f"; run = "filter --smart"; desc = "Filter files"; }
# Find # Find
{ on = "/"; run = "find --smart"; desc = "Find next file"; } { on = "/"; run = "find --smart"; desc = "Find next file"; }
{ on = "?"; run = "find --previous --smart"; desc = "Find previous file"; } { on = "?"; run = "find --previous --smart"; desc = "Find previous file"; }
{ on = "n"; run = "find_arrow"; desc = "Go to the next found"; } { on = "n"; run = "find_arrow"; desc = "Go to the next found"; }
{ on = "N"; run = "find_arrow --previous"; desc = "Go to the previous found"; } { on = "N"; run = "find_arrow --previous"; desc = "Go to the previous found"; }
# Sortin # Sorting
{ on = [ "," "m" ]; run = [ "sort modified --reverse=no" "linemode mtime" ]; desc = "Sort by modified time"; } { on = [ "," "m" ]; run = [ "sort modified --reverse=no" "linemode mtime" ]; desc = "Sort by modified time"; }
{ on = [ "," "M" ]; run = [ "sort modified --reverse" "linemode mtime" ]; desc = "Sort by modified time (reverse)"; } { on = [ "," "M" ]; run = [ "sort modified --reverse" "linemode mtime" ]; desc = "Sort by modified time (reverse)"; }
{ on = [ "," "c" ]; run = [ "sort created --reverse=no" "linemode ctime" ]; desc = "Sort by created time"; } { on = [ "," "c" ]; run = [ "sort created --reverse=no" "linemode ctime" ]; desc = "Sort by created time"; }
{ on = [ "," "C" ]; run = [ "sort created --reverse" "linemode ctime" ]; desc = "Sort by created time (reverse)"; } { on = [ "," "C" ]; run = [ "sort created --reverse" "linemode ctime" ]; desc = "Sort by created time (reverse)"; }
{ on = [ "," "e" ]; run = "sort extension --reverse=no"; desc = "Sort by extension"; } { on = [ "," "e" ]; run = "sort extension --reverse=no"; desc = "Sort by extension"; }
{ on = [ "," "E" ]; run = "sort extension --reverse"; desc = "Sort by extension (reverse)"; } { on = [ "," "E" ]; run = "sort extension --reverse"; desc = "Sort by extension (reverse)"; }
{ on = [ "," "a" ]; run = "sort alphabetical --reverse=no"; desc = "Sort alphabetically"; } { on = [ "," "a" ]; run = "sort alphabetical --reverse=no"; desc = "Sort alphabetically"; }
{ on = [ "," "A" ]; run = "sort alphabetical --reverse"; desc = "Sort alphabetically (reverse)"; } { on = [ "," "A" ]; run = "sort alphabetical --reverse"; desc = "Sort alphabetically (reverse)"; }
{ on = [ "," "n" ]; run = "sort natural --reverse=no"; desc = "Sort naturally"; } { on = [ "," "n" ]; run = "sort natural --reverse=no"; desc = "Sort naturally"; }
{ on = [ "," "N" ]; run = "sort natural --reverse"; desc = "Sort naturally (reverse)"; } { on = [ "," "N" ]; run = "sort natural --reverse"; desc = "Sort naturally (reverse)"; }
{ on = [ "," "s" ]; run = [ "sort size --reverse=no" "linemode size" ]; desc = "Sort by size"; } { on = [ "," "s" ]; run = [ "sort size --reverse=no" "linemode size" ]; desc = "Sort by size"; }
{ on = [ "," "S" ]; run = [ "sort size --reverse" "linemode size" ]; desc = "Sort by size (reverse)"; } { on = [ "," "S" ]; run = [ "sort size --reverse" "linemode size" ]; desc = "Sort by size (reverse)"; }
# Tab # Tab
{ on = "t"; run = "tab_create --current"; desc = "Create a new tab with CWD"; } { on = "t"; run = "tab_create --current"; desc = "Create a new tab with CWD"; }
{ on = "<C-w>"; run = "close"; desc = "Close the current tab"; } { on = "<C-w>"; run = "close"; desc = "Close the current tab"; }
{ on = "1"; run = "tab_switch 0"; desc = "Switch to the first tab"; } { on = "1"; run = "tab_switch 0"; desc = "Switch to the first tab"; }
{ on = "2"; run = "tab_switch 1"; desc = "Switch to the second tab"; } { on = "2"; run = "tab_switch 1"; desc = "Switch to the second tab"; }
{ on = "3"; run = "tab_switch 2"; desc = "Switch to the third tab"; } { on = "3"; run = "tab_switch 2"; desc = "Switch to the third tab"; }
{ on = "4"; run = "tab_switch 3"; desc = "Switch to the fourth tab"; } { on = "4"; run = "tab_switch 3"; desc = "Switch to the fourth tab"; }
{ on = "5"; run = "tab_switch 4"; desc = "Switch to the fifth tab"; } { on = "5"; run = "tab_switch 4"; desc = "Switch to the fifth tab"; }
{ on = "6"; run = "tab_switch 5"; desc = "Switch to the sixth tab"; } { on = "6"; run = "tab_switch 5"; desc = "Switch to the sixth tab"; }
{ on = "7"; run = "tab_switch 6"; desc = "Switch to the seventh tab"; } { on = "7"; run = "tab_switch 6"; desc = "Switch to the seventh tab"; }
{ on = "8"; run = "tab_switch 7"; desc = "Switch to the eighth tab"; } { on = "8"; run = "tab_switch 7"; desc = "Switch to the eighth tab"; }
{ on = "9"; run = "tab_switch 8"; desc = "Switch to the ninth tab"; } { on = "9"; run = "tab_switch 8"; desc = "Switch to the ninth tab"; }
{ on = "<C-1>"; run = "tab_swap 0"; desc = "Swap current tab with the first tab"; } { on = "<C-1>"; run = "tab_swap 0"; desc = "Swap current tab with the first tab"; }
{ on = "<C-2>"; run = "tab_swap 1"; desc = "Swap current tab with the second tab"; } { on = "<C-2>"; run = "tab_swap 1"; desc = "Swap current tab with the second tab"; }
{ on = "<C-3>"; run = "tab_swap 2"; desc = "Swap current tab with the third tab"; } { on = "<C-3>"; run = "tab_swap 2"; desc = "Swap current tab with the third tab"; }
{ on = "<C-4>"; run = "tab_swap 3"; desc = "Swap current tab with the fourth tab"; } { on = "<C-4>"; run = "tab_swap 3"; desc = "Swap current tab with the fourth tab"; }
{ on = "<C-5>"; run = "tab_swap 4"; desc = "Swap current tab with the fifth tab"; } { on = "<C-5>"; run = "tab_swap 4"; desc = "Swap current tab with the fifth tab"; }
{ on = "<C-5>"; run = "tab_swap 4"; desc = "Swap current tab with "; } { on = "<C-5>"; run = "tab_swap 4"; desc = "Swap current tab with "; }
{ on = "<C-6>"; run = "tab_swap 5"; desc = "Swap current tab with the sixth tab"; } { on = "<C-6>"; run = "tab_swap 5"; desc = "Swap current tab with the sixth tab"; }
{ on = "<C-6>"; run = "tab_swap 5"; desc = "Swap current tab with "; } { on = "<C-6>"; run = "tab_swap 5"; desc = "Swap current tab with "; }
{ on = "<C-7>"; run = "tab_swap 6"; desc = "Swap current tab with the seventh tab"; } { on = "<C-7>"; run = "tab_swap 6"; desc = "Swap current tab with the seventh tab"; }
{ on = "<C-7>"; run = "tab_swap 6"; desc = "Swap current tab with tab"; } { on = "<C-7>"; run = "tab_swap 6"; desc = "Swap current tab with tab"; }
{ on = "<C-8>"; run = "tab_swap 7"; desc = "Swap current tab with the eighth tab"; } { on = "<C-8>"; run = "tab_swap 7"; desc = "Swap current tab with the eighth tab"; }
{ on = "<C-8>"; run = "tab_swap 7"; desc = "Swap current tab with b"; } { on = "<C-8>"; run = "tab_swap 7"; desc = "Swap current tab with b"; }
{ on = "<C-9>"; run = "tab_swap 8"; desc = "Swap current tab with the ninth tab"; } { on = "<C-9>"; run = "tab_swap 8"; desc = "Swap current tab with the ninth tab"; }
{ on = "<C-9>"; run = "tab_swap 8"; desc = "Swap current tab with "; } { on = "<C-9>"; run = "tab_swap 8"; desc = "Swap current tab with "; }
{ on = "["; run = "tab_switch -1 --relative"; desc = "Switch to the previous tab"; } { on = "["; run = "tab_switch -1 --relative"; desc = "Switch to the previous tab"; }
{ on = "["; run = "tab_switch -1 --relative"; desc = "Switch to thtab"; } { on = "["; run = "tab_switch -1 --relative"; desc = "Switch to thtab"; }
{ on = "]"; run = "tab_switch 1 --relative"; desc = "Switch to the next tab"; } { on = "]"; run = "tab_switch 1 --relative"; desc = "Switch to the next tab"; }
{ on = "]"; run = "tab_switch 1 --relative"; desc = "Switch ttab"; } { on = "]"; run = "tab_switch 1 --relative"; desc = "Switch ttab"; }
{ on = "{"; run = "tab_swap -1"; desc = "Swap current tab with previous tab"; } { on = "{"; run = "tab_swap -1"; desc = "Swap current tab with previous tab"; }
{ on = "{"; run = "tab_swap -1"; desc = "Swap current tab wittab"; } { on = "{"; run = "tab_swap -1"; desc = "Swap current tab wittab"; }
{ on = "}"; run = "tab_swap 1"; desc = "Swap current tab with next tab"; } { on = "}"; run = "tab_swap 1"; desc = "Swap current tab with next tab"; }
# Tasks # Tasks
{ on = "w"; run = "tasks_show"; desc = "Show task manager"; } { on = "w"; run = "tasks_show"; desc = "Show task manager"; }
]; ];
tasks.keymap = [ tasks.keymap = [
# Task # Task
{ on = "w"; run = "close"; desc = "Close Task View"; } { on = "w"; run = "close"; desc = "Close Task View"; }
{ on = "q"; run = "close"; desc = "Close Task View"; } { on = "q"; run = "close"; desc = "Close Task View"; }
{ on = "<Esc>"; run = "close"; desc = "Close Task View"; } { on = "<Esc>"; run = "close"; desc = "Close Task View"; }
{ on = "c"; run = "cancel"; desc = "Cancel Task"; } { on = "c"; run = "cancel"; desc = "Cancel Task"; }
{ on = "i"; run = "inspect"; desc = "Inspect Task"; } { on = "i"; run = "inspect"; desc = "Inspect Task"; }
{ on = "j"; run = "arrow -1"; desc = "Up in list"; } { on = "j"; run = "arrow -1"; desc = "Up in list"; }
{ on = "k"; run = "arrow 1"; desc = "Down in list"; } { on = "k"; run = "arrow 1"; desc = "Down in list"; }
{ on = "u"; run = "arrow -5"; desc = "Up in list (fast)"; } { on = "u"; run = "arrow -5"; desc = "Up in list (fast)"; }
{ on = "d"; run = "arrow 5"; desc = "Down in list (fast)"; } { on = "d"; run = "arrow 5"; desc = "Down in list (fast)"; }
]; ];
help = [ help.keymap = [
# Help # Help
{ on = "~"; run = "help"; desc = "Open help"; } { on = "~"; run = "help"; desc = "Open help"; }
{ on = "?"; run = "help"; desc = "Open help"; } { on = "?"; run = "help"; desc = "Open help"; }
{ on = "<F1>"; run = "help"; desc = "Open help"; } { on = "<F1>"; run = "help"; desc = "Open help"; }
]; ];
}; };

View File

@@ -108,6 +108,7 @@
spicetify-cli spicetify-cli
sssnake sssnake
swww swww
systemctl-tui
tldr tldr
w3m w3m
wev wev
@@ -120,11 +121,11 @@
inputs.zen-browser.packages."${system}".default inputs.zen-browser.packages."${system}".default
] ++ (with pkgs-unstable; [ ] ++ (with pkgs-unstable; [
obsidian
firefox firefox
spotify spotify
]) ++ (if host != "NxACE" then (with pkgs; [ ]) ++ (if host != "NxACE" then (with pkgs; [
signal-desktop signal-desktop
obsidian
zoom-us zoom-us
inkscape inkscape
]) else (with pkgs-unstable; [ ]) else (with pkgs-unstable; [

View File

@@ -23,6 +23,7 @@ nx2site:
cloudflare: cloudflare:
api-token-dns-edit: ENC[AES256_GCM,data:fR4fH6NqwtHI8aebEwjUn5JMoy3q3GXgu/dREe8JK7yRBIOhJ8BKuw==,iv:fQqLRYCN/7zhpHzYxMcn8q1aA7x4qd3qWGgrFWn2E/U=,tag:GJ1muJG755ch/84Sgcf2Vw==,type:str] api-token-dns-edit: ENC[AES256_GCM,data:fR4fH6NqwtHI8aebEwjUn5JMoy3q3GXgu/dREe8JK7yRBIOhJ8BKuw==,iv:fQqLRYCN/7zhpHzYxMcn8q1aA7x4qd3qWGgrFWn2E/U=,tag:GJ1muJG755ch/84Sgcf2Vw==,type:str]
global-api-key: ENC[AES256_GCM,data:7WBmyEYFG0jEkxeiF9H4isfrCrn7Uv21hEJgX5i2/fOu3+evZA==,iv:IicsZo7qMG3xOKVr8lHzsOu2pTaDKUSx+85SyehDe20=,tag:nQ+CWX2kEmk3vIH4pi6Vlw==,type:str] global-api-key: ENC[AES256_GCM,data:7WBmyEYFG0jEkxeiF9H4isfrCrn7Uv21hEJgX5i2/fOu3+evZA==,iv:IicsZo7qMG3xOKVr8lHzsOu2pTaDKUSx+85SyehDe20=,tag:nQ+CWX2kEmk3vIH4pi6Vlw==,type:str]
global-api-key-env: ENC[AES256_GCM,data:eb+Lg4R39VBNKG+NpH4n51E9MwMcW0Qm8x9cQZ4o/MnggZrAAR6wVOhzq8fCb0hB7CrIkPBcIS78044=,iv:MmGpDBC6uDOQ3cF4H2SvWXceBLxPyk42udSwe5jboBc=,tag:GP02DUCyQevfryhrO6py0w==,type:str]
sslCertificate.pem: ENC[AES256_GCM,data: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,iv:r4vqXNMieiy9+E1ZIknUxQtxgEoZh7zSSrJ0yS5KQUs=,tag:AYX7RayP3dmNgUnkytQg7Q==,type:str] sslCertificate.pem: ENC[AES256_GCM,data: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,iv:r4vqXNMieiy9+E1ZIknUxQtxgEoZh7zSSrJ0yS5KQUs=,tag:AYX7RayP3dmNgUnkytQg7Q==,type:str]
sslCertificateKey.pem: ENC[AES256_GCM,data:Wzmi17UA4mpCr4VaUolfKwZJEZ5K9Ybp2/K3noC/D/QYlgJfwWnQEoXDfLj3lVVnz0V/m71NAtZ9p3/jhiQCyIwt0cOmsAmd1isHf0KQwGagc8cHttwDeZT7AzLW4axqevpZM8bjVk/TJ/k+uGbArqSwgu2W7C77uCltSS8AydWzD2D7eQciDZzQ4yyHShW9f0SH8Q/wumuY4ksjLs4roYtQgtr1ezUb1U329xA1y81apd47RHviJ/moOBQYY2Y8fbNryUmfqvGYtsfXxmNElJpGAStqjBCo0bncOetP+bfj90CJlbkIn1JzcPOa5ZJjDg==,iv:28PcaWyOsQ8gN6qvZYDS3H4lKKlU7ihxxLUXMYgHPEY=,tag:6t+jvoAZkYlqg/2d8V5Emw==,type:str] sslCertificateKey.pem: ENC[AES256_GCM,data:Wzmi17UA4mpCr4VaUolfKwZJEZ5K9Ybp2/K3noC/D/QYlgJfwWnQEoXDfLj3lVVnz0V/m71NAtZ9p3/jhiQCyIwt0cOmsAmd1isHf0KQwGagc8cHttwDeZT7AzLW4axqevpZM8bjVk/TJ/k+uGbArqSwgu2W7C77uCltSS8AydWzD2D7eQciDZzQ4yyHShW9f0SH8Q/wumuY4ksjLs4roYtQgtr1ezUb1U329xA1y81apd47RHviJ/moOBQYY2Y8fbNryUmfqvGYtsfXxmNElJpGAStqjBCo0bncOetP+bfj90CJlbkIn1JzcPOa5ZJjDg==,iv:28PcaWyOsQ8gN6qvZYDS3H4lKKlU7ihxxLUXMYgHPEY=,tag:6t+jvoAZkYlqg/2d8V5Emw==,type:str]
dhparams.pem: ENC[AES256_GCM,data:wGIUlT8QHruxHvrlaUdEDU3aKkB5hvQLZXic1ryKr1hIFw9uOv1hOCOPY+QUDBzfm+DXv62hTFAeq4siAoZ0wWvQ0uBuSZZBGrfuY1ZTsTJmpgTphdHi+S4/kl/Vt7nuBlvdW8VbwU+mzmSK4UuIjuvAl0RI+q9C/BAu0tsXvKfaCkrbYwSi6pdPjToEoATPWfuCdkZUulENBIdBkTLZ6F97fgNgsXub2xOEIRxqFAzg3G2nO3Mn7rSRRJraZNIsHgBTYpSNcijDBwZpgYKjcKsochYUNzVrCuLOu5xJPUU87pmd+Rup2hpMfWyK0xtUjncvHyfctEZANqfo+RdEBg81n1WHkFb1WnWUsRh8RmcVZuA9skI5S7Xhp4L2B5IKn0XGnKLG3og9iYb9tDVQys4o5/68+jjxdm51fmRYo3FvghnyFCYkQ/tm+ClCcRSPocYDrfSf0Rvg2v9nPmMj0IrEHlzVnafiJgp3VjI9cYLNW2wKiwf0Z8dWkrtnS8G7p072+w0fklmvLrdvlLZduAwrY6gS2nMbPUz1AwjAoMmQi7sFmbkP6M/PmkVV+hNP7T9ntmC4BQr2k5/3gKZPOEPO/xeMLlla68QpDVxU06NhC0Z3d5t3YY0wIVISNZXi4fgQO0G5nvFpPyyWCvvg39gulyAwUJfFQ3erNNFTjJe7X9RjqoJvjTgFm4IaYcL64Cr49KDu6Za01g492rBCEL842o3lVmZSqOYCG3UEEsSwOxn2iROZKgorZ5dyd1n1WevM+pKTUAaucy52iLJGLISRAVv82ZkmbS5L4zMHkYxVjUnqrYIZsk6+7sRHIQ31E0YtUFdMjRYUcOwfR1u+Ox+zV1NawpKjsuhKl+DRN+Q1TXUdEumUU1pDHT/RXtNHsyYOgeCBbTs93kdhFcHgO0dh5Ou/2N8EcTzWwAYd/qyE3wMZZTggTb44xwu6h0XhaLtnAk2lZ4vXwSaozf+Vq/uxAvYLxrhx6ujKVyX/O053YsKqOPKerYoN17uO8PrKoA==,iv:e0RPF9ZtzSRBRzMtWTWY3AVGsMXxvldA2HjiW9hf97Q=,tag:eb9ACnuGR+8eqncWoKQ/pw==,type:str] dhparams.pem: ENC[AES256_GCM,data:wGIUlT8QHruxHvrlaUdEDU3aKkB5hvQLZXic1ryKr1hIFw9uOv1hOCOPY+QUDBzfm+DXv62hTFAeq4siAoZ0wWvQ0uBuSZZBGrfuY1ZTsTJmpgTphdHi+S4/kl/Vt7nuBlvdW8VbwU+mzmSK4UuIjuvAl0RI+q9C/BAu0tsXvKfaCkrbYwSi6pdPjToEoATPWfuCdkZUulENBIdBkTLZ6F97fgNgsXub2xOEIRxqFAzg3G2nO3Mn7rSRRJraZNIsHgBTYpSNcijDBwZpgYKjcKsochYUNzVrCuLOu5xJPUU87pmd+Rup2hpMfWyK0xtUjncvHyfctEZANqfo+RdEBg81n1WHkFb1WnWUsRh8RmcVZuA9skI5S7Xhp4L2B5IKn0XGnKLG3og9iYb9tDVQys4o5/68+jjxdm51fmRYo3FvghnyFCYkQ/tm+ClCcRSPocYDrfSf0Rvg2v9nPmMj0IrEHlzVnafiJgp3VjI9cYLNW2wKiwf0Z8dWkrtnS8G7p072+w0fklmvLrdvlLZduAwrY6gS2nMbPUz1AwjAoMmQi7sFmbkP6M/PmkVV+hNP7T9ntmC4BQr2k5/3gKZPOEPO/xeMLlla68QpDVxU06NhC0Z3d5t3YY0wIVISNZXi4fgQO0G5nvFpPyyWCvvg39gulyAwUJfFQ3erNNFTjJe7X9RjqoJvjTgFm4IaYcL64Cr49KDu6Za01g492rBCEL842o3lVmZSqOYCG3UEEsSwOxn2iROZKgorZ5dyd1n1WevM+pKTUAaucy52iLJGLISRAVv82ZkmbS5L4zMHkYxVjUnqrYIZsk6+7sRHIQ31E0YtUFdMjRYUcOwfR1u+Ox+zV1NawpKjsuhKl+DRN+Q1TXUdEumUU1pDHT/RXtNHsyYOgeCBbTs93kdhFcHgO0dh5Ou/2N8EcTzWwAYd/qyE3wMZZTggTb44xwu6h0XhaLtnAk2lZ4vXwSaozf+Vq/uxAvYLxrhx6ujKVyX/O053YsKqOPKerYoN17uO8PrKoA==,iv:e0RPF9ZtzSRBRzMtWTWY3AVGsMXxvldA2HjiW9hf97Q=,tag:eb9ACnuGR+8eqncWoKQ/pw==,type:str]
@@ -87,8 +88,8 @@ sops:
SHJLR3lvdlFiRmJuU25RUHFFTmpjamMKbzycdDvQBAuOiRROTZEQSnaXoPapz73L SHJLR3lvdlFiRmJuU25RUHFFTmpjamMKbzycdDvQBAuOiRROTZEQSnaXoPapz73L
yVS9EUP25FSx/sGqRqaCefbeaybuM1aso6LDnlomv4Bib7zjugWKSw== yVS9EUP25FSx/sGqRqaCefbeaybuM1aso6LDnlomv4Bib7zjugWKSw==
-----END AGE ENCRYPTED FILE----- -----END AGE ENCRYPTED FILE-----
lastmodified: "2025-01-31T18:19:08Z" lastmodified: "2025-03-07T17:02:01Z"
mac: ENC[AES256_GCM,data:RpbqXk0JclXNVcHs5jCHVaw59AwzCnfhGsxoQnOwNEYWnAxEC5b0fXtjIC6Od4ziPJkPzUtfHgBG9Ub+b+RL7LUMPmsPOZ8XxE16YTrr+athK1s07I8doON8UpIsGj+MP/quJgy9pb/AvReOce/5Qe8SZG4Lig68I3iqHYFsiJ4=,iv:Huc7dZQPkJ+aPBgfqxdhy+PRl+8520aZMmqBeNd/C2w=,tag:M897FVr8TfAx3zDaml69Ww==,type:str] mac: ENC[AES256_GCM,data:js375bjy8Z4ApUXbw4eIqNl5BBgeX2bwMFBCx63LNCsb56OlHyYobQGtL1CwcDGW/+hwVLJSxbEDwqzJiu5vQ/2Cp00nVwvumHrvqZi/Ka4r87uNd6psE4nMq6ROHP0kJm6STKqd6MDyuLRjfX5zrki7ZhYTWsYS90/d9SUHUj8=,iv:W3w1f7lkL3fuOWmNhLUsOTKG18+wLhWA04GjygDIUEc=,tag:AYy9O7OcsY2W4VbOzyM5oA==,type:str]
pgp: pgp:
- created_at: "2024-06-09T19:44:41Z" - created_at: "2024-06-09T19:44:41Z"
enc: |- enc: |-
@@ -103,4 +104,4 @@ sops:
-----END PGP MESSAGE----- -----END PGP MESSAGE-----
fp: 22FB2CC03DC5292AB81CF67D0AF27B383170E634 fp: 22FB2CC03DC5292AB81CF67D0AF27B383170E634
unencrypted_suffix: _unencrypted unencrypted_suffix: _unencrypted
version: 3.9.2 version: 3.9.4

View File

@@ -103,7 +103,7 @@ in
''; '';
}; };
}; };
kernelPackages = pkgs-unstable.linuxPackages_6_11; kernelPackages = pkgs-unstable.linuxPackages_latest;
extraModulePackages = with config.boot.kernelPackages; [ v4l2loopback ]; extraModulePackages = with config.boot.kernelPackages; [ v4l2loopback ];
kernelModules = [ "v4l2loopback" ]; kernelModules = [ "v4l2loopback" ];
extraModprobeConfig = ''options v4l2loopback devices=1 video_nr=1 card_label="OBS VCam" exclusive_caps=1''; extraModprobeConfig = ''options v4l2loopback devices=1 video_nr=1 card_label="OBS VCam" exclusive_caps=1'';
@@ -118,7 +118,7 @@ in
efiSupport = true; efiSupport = true;
}; };
}; };
kernelPackages = pkgs-unstable.linuxPackages_6_11; kernelPackages = pkgs.linuxPackages; # default kernel of pkgs
}; };
}; };
} }

View File

@@ -56,7 +56,7 @@ def modify_event(event):
global latest_week global latest_week
global deficit global deficit
if event.name and "DICOS" in event.name: if event.name is not None and "DICOS" in event.name:
length = (event.end - event.begin).seconds / 3600 length = (event.end - event.begin).seconds / 3600
money_made = divmod(length * NETTO_STUNDE, 1) money_made = divmod(length * NETTO_STUNDE, 1)
@@ -78,9 +78,14 @@ def modify_event(event):
latest_goal = goal latest_goal = goal
latest_week = week latest_week = week
progress_line = f"({fraction_to_unicode(progress)}/{fraction_to_unicode(goal)})" new_description = [event.description.split("\n")[0] or "::"]
new_description.append("")
new_description.append(f"Netto: {money_made[0]:.0f},{int(money_made[1] * 10):02d}")
new_description.append(f"This weeks porgress: ({fraction_to_unicode(progress)}/{fraction_to_unicode(goal)})")
new_description.append(f"This weeks deficit: {fraction_to_unicode(deficit)}")
event.description = "\n".join(new_description)
event.description = f"Netto: {money_made[0]:.0f},{int(money_made[1] * 10):02d}\nThis weeks porgress: {progress_line}\nThis weeks deficit: {fraction_to_unicode(deficit)}"
event.name = f"DICOS {fraction_to_unicode(length)}" event.name = f"DICOS {fraction_to_unicode(length)}"
return event return event
@@ -92,7 +97,7 @@ def process_ics_file(filepath):
modified = False modified = False
for event in calendar.events: for event in calendar.events:
if 'DICOS' in event.name: if event.name is not None and 'DICOS' in event.name:
event = modify_event(event) event = modify_event(event)
modified = True modified = True

View File

@@ -21,18 +21,10 @@
]; ];
flakeIgnore = [ "E302" "E305" "E226" "E501" ]; flakeIgnore = [ "E302" "E305" "E226" "E501" ];
} /*python */ '' } /*python */ ''
import hashlib
from ics import Calendar from ics import Calendar
import requests import requests
from datetime import timedelta from datetime import timedelta
def get_event_hash(event):
"""
Generate a unique hash for an event based on its details.
"""
event_data = f"{event.name}{event.begin}{event.end}{event.description}"
return hashlib.md5(event_data.encode('utf-8')).hexdigest()
def adjust_events(events): def adjust_events(events):
""" """
Adjust overlapping events to ensure they do not conflict. Adjust overlapping events to ensure they do not conflict.

View File

@@ -0,0 +1,74 @@
{ config, pkgs, domain, ... }:
{
systemd.timers."nx_cal_lr" = {
enable = true;
wantedBy = [ "timers.target" ];
timerConfig = {
OnBootSec = "41m";
OnUnitActiveSec = "24h";
Unit = "nx_cal_lr.service";
};
};
systemd.services."nx_cal_lr" = {
script = let
nx_cal_lr = (pkgs.writers.writePython3Bin "nx_cal_lr" {
libraries = with pkgs.python3Packages; [
ics
requests
];
flakeIgnore = [ "E302" "E305" "E226" "E501" ];
} /*python */ ''
from ics import Calendar
import requests
def filter_events(events):
return [event for event in events if ("LR" in event.name) or ("TBD" in event.name)]
def fetch_and_save_ical_events(ical_url, save_path):
"""
Fetch events from an iCal URL and save them as a single combined calendar.
"""
try:
# Fetch the iCal data
response = requests.get(ical_url)
response.raise_for_status()
# Parse the iCal data
calendar = Calendar(response.text)
# Adjust events
adjusted_events = filter_events(list(calendar.events))
# Create a new combined calendar
combined_calendar = Calendar()
for event in adjusted_events:
combined_calendar.events.add(event)
# Save the combined calendar to a single .ics file
with open(save_path, 'w') as file:
file.writelines(combined_calendar.serialize_iter())
print(f"Saved combined calendar to {save_path}")
except requests.exceptions.RequestException as e:
print(f"Error fetching iCal data: {e}")
except Exception as e:
print(f"Error processing iCal data: {e}")
if __name__ == "__main__":
# Replace with your iCal URL and target file path
ICAL_URL = "https://zlypher.github.io/lol-events/cal/league-of-legends-nlc.ical"
SAVE_PATH = "${config.services.nginx.virtualHosts."${domain}".root}/lr.ics"
fetch_and_save_ical_events(ICAL_URL, SAVE_PATH)
'');
in ''
${nx_cal_lr}/bin/nx_cal_lr
'';
serviceConfig = {
Type = "oneshot";
User = "nx2";
};
};
}

View File

@@ -1,4 +1,4 @@
{ pkgs, pkgs-unstable, ... }: { pkgs, ... }:
{ {
# i18n.inputMethod = { # i18n.inputMethod = {
# type = "fcitx5"; # type = "fcitx5";
@@ -10,7 +10,8 @@
# ]; # ];
# }; # };
i18n.inputMethod = { i18n.inputMethod = {
enabled = "fcitx5"; enable = true;
type = "fcitx5";
fcitx5.waylandFrontend = true; fcitx5.waylandFrontend = true;
fcitx5.addons = with pkgs; [ fcitx5.addons = with pkgs; [
fcitx5-gtk # alternatively, kdePackages.fcitx5-qt fcitx5-gtk # alternatively, kdePackages.fcitx5-qt

View File

@@ -1,5 +1,6 @@
{ lib, host, ... }: { lib, host, ... }:
lib.mkIf (host == "NxNORTH" || host == "NxACE") # lib.mkIf (host == "NxNORTH" || host == "NxACE")
lib.mkIf (host == "NxNORTH")
{ {
programs = { programs = {
steam = { steam = {

32
system-modules/hugo.nix Normal file
View File

@@ -0,0 +1,32 @@
{ pkgs-unstable, user, ... }:
let p = pkgs-unstable; in
{
environment.systemPackages = with p; [
hugo
dart-sass
];
users = {
groups = {
"hugo".name = "hugo";
};
users = {
"${user}".extraGroups = [ "hugo" ];
"nginx".extraGroups = [ "hugo" ];
"hugo" = {
isSystemUser = true;
group = "hugo";
};
};
};
systemd.services."hugo" = {
script = with p; /* shell */ ''
${hugo}/bin/hugo serve --port 8000 --bind 10.0.1.1 --baseURL http://10.0.1.1:8000 -s /var/lib/hugo/nx2site/
'';
serviceConfig = {
Type = "simple";
User = "hugo";
};
};
}

View File

@@ -17,6 +17,8 @@
firewall.allowedTCPPorts = [ firewall.allowedTCPPorts = [
80 80
443 443
8000
8080
]; ];
}; };
environment.etc = { environment.etc = {

View File

@@ -24,7 +24,7 @@ let dns-user = "cloudflare"; in
timers."dynamic-dns" = { timers."dynamic-dns" = {
wantedBy = [ "timers.target" ]; wantedBy = [ "timers.target" ];
timerConfig = { timerConfig = {
OnBootSec = "2m"; OnBootSec = "1m";
OnUnitActiveSec = "10m"; OnUnitActiveSec = "10m";
Unit = "dynamic-dns.service"; Unit = "dynamic-dns.service";
}; };
@@ -49,11 +49,13 @@ let dns-user = "cloudflare"; in
} /* python */ '' } /* python */ ''
import requests import requests
import subprocess import subprocess
from time import sleep
def get_public_ip(ipv6: bool = False) -> str: def get_public_ip(ipv6: bool = False) -> str:
return subprocess.run(['${pkgs.curl}/bin/curl', '-s', '-6' if ipv6 else '-4', 'https://ifconfig.me'], capture_output=True, text=True).stdout.strip() return subprocess.run(['${pkgs.curl}/bin/curl', '-s', '-6' if ipv6 else '-4', 'https://ifconfig.me'], capture_output=True, text=True).stdout.strip()
def update_record(record_id: str, record_name: str, ip: str, type: str, proxied: bool, pw: str) -> None: def update_record(record_id: str, record_name: str, ip: str, type: str, proxied: bool, pw: str) -> None:
sleep(5)
return requests.patch( return requests.patch(
f'https://api.cloudflare.com/client/v4/zones/${zone_id}/dns_records/{record_id}', f'https://api.cloudflare.com/client/v4/zones/${zone_id}/dns_records/{record_id}',
headers={ headers={
@@ -82,19 +84,13 @@ def main():
# Perform DNS updates # Perform DNS updates
# https://developers.cloudflare.com/api/operations/dns-records-for-a-zone-update-dns-record # https://developers.cloudflare.com/api/operations/dns-records-for-a-zone-update-dns-record
r = update_record(record_id="${record_id.base}", record_name="${domain}", ip=my_ip, type="A", proxied=True, pw=pw) print(f"${domain}: {update_record(record_id="${record_id.base}", record_name="${domain}", ip=my_ip, type="A", proxied=True, pw=pw).status_code}")
_ = update_record(record_id="${record_id.sub}", record_name="*.${domain}", ip=my_ip, type="A", proxied=True, pw=pw) print(f"*.${domain}: {update_record(record_id="${record_id.sub}", record_name="*.${domain}", ip=my_ip, type="A", proxied=True, pw=pw).status_code}")
_ = update_record(record_id="${record_id.ssh}", record_name="ssh.${domain}", ip=my_ip, type="A", proxied=False, pw=pw) print(f"ssh.${domain}: {update_record(record_id="${record_id.ssh}", record_name="ssh.${domain}", ip=my_ip, type="A", proxied=False, pw=pw).status_code}")
if r.status_code != 200: print(f"${domain}: {update_record(record_id="${record_id.base6}", record_name="${domain}", ip=my_ip6, type="AAAA", proxied=True, pw=pw).status_code}")
print(r.text) print(f"*.${domain}: {update_record(record_id="${record_id.sub6}", record_name="*.${domain}", ip=my_ip6, type="AAAA", proxied=True, pw=pw).status_code}")
print(f"ssh.${domain}: {update_record(record_id="${record_id.ssh6}", record_name="ssh.${domain}", ip=my_ip6, type="AAAA", proxied=False, pw=pw).status_code}")
r = update_record(record_id="${record_id.base6}", record_name="${domain}", ip=my_ip6, type="AAAA", proxied=True, pw=pw)
_ = update_record(record_id="${record_id.sub6}", record_name="*.${domain}", ip=my_ip6, type="AAAA", proxied=True, pw=pw)
_ = update_record(record_id="${record_id.ssh6}", record_name="ssh.${domain}", ip=my_ip6, type="AAAA", proxied=False, pw=pw)
if r.status_code != 200:
print(r.text)
if __name__ == "__main__": if __name__ == "__main__":
main() main()

View File

@@ -0,0 +1,22 @@
{ config, pkgs, domain, ... }:
{
sops.secrets = {
# "nx2site/namecheap.pw" = { };
# "nx2site/cloudflare/api-token-dns-edit" = { };
"nx2site/cloudflare/global-api-key-env" = {
owner = "root";
};
};
services.cloudflare-dyndns = {
enable = true;
ipv4 = true;
ipv6 = config.networking.enableIPv6;
domains = [
"${domain}"
"*.${domain}"
"ssh.${domain}"
];
proxied = true;
apiTokenFile = config.sops.secrets."nx2site/cloudflare/global-api-key-env".path;
};
}

View File

@@ -14,7 +14,7 @@
}; };
certs = { certs = {
"${domain}" = { "${domain}" = {
extraDomainNames = builtins.map (subd: "${subd}.${domain}") [ "sync" ]; extraDomainNames = builtins.map (subd: "${subd}.${domain}") [ "sync" "dev" ];
}; };
}; };
}; };
@@ -145,10 +145,21 @@
# }; # };
"abs.${domain}" = vh // { "abs.${domain}" = vh // {
listen = dl; listen = dl;
locations = { "/" = { locations."/" = {
proxyPass = "http://127.0.0.1:${builtins.toString config.services.audiobookshelf.port}"; proxyPass = "http://127.0.0.1:${builtins.toString config.services.audiobookshelf.port}";
proxyWebsockets = true; proxyWebsockets = true;
}; }; };
};
"dev.${domain}" = vh // {
listen = dl ++ [
# { addr = "0.0.0.0"; port = 8000; ssl = true; }
# { addr = "[::0]"; port = 8000; ssl = true; }
];
root = "/var/lib/hugo/nx2site/public";
# locations."/" = {
# proxyPass = "http://127.0.0.1:8000";
# proxyWebsockets = true;
# };
}; };
# is done atomatically # is done atomatically
# "cal.${domain}" = vh // { # "cal.${domain}" = vh // {

View File

@@ -1,17 +1,6 @@
{ pkgs, pkgs-unstable, pkgs-latest, lib, host, nvidia, ... }: { pkgs, lib, host, nvidia, ... }:
let let
p = pkgs-latest.ollama; p = if nvidia.enable then pkgs.ollama-cuda else pkgs.ollama;
# p = pkgs-unstable.ollama.overrideAttrs (oldAttrs: rec {
# inherit (oldAttrs) pname;
# version = "0.3.0";
# src = pkgs.fetchFromGitHub {
# owner = "ollama";
# repo = "ollama";
# rev = "v${version}";
# hash = "sha256-69CpRAggx6a1NJq+CA9QliXuUbDgC1ERRuA3y17KVAM=";
# fetchSubmodules = true;
# };
# });
in { in {
environment.systemPackages = [ p ]; environment.systemPackages = [ p ];