summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--_sources/generated.json42
-rw-r--r--_sources/generated.nix42
-rw-r--r--accounts/gkleen@sif/niri/default.nix221
-rw-r--r--accounts/gkleen@sif/systemd.nix2
-rw-r--r--accounts/gkleen@sif/zshrc4
-rw-r--r--flake.lock216
-rw-r--r--flake.nix17
-rw-r--r--hosts/eostre/default.nix21
-rw-r--r--hosts/sif/default.nix2
-rw-r--r--hosts/surtr/default.nix1
-rw-r--r--hosts/surtr/email/default.nix3
-rw-r--r--hosts/vidhar/default.nix2
-rw-r--r--lib/pythonSet.nix14
-rw-r--r--modules/borgcopy/.envrc4
-rw-r--r--modules/borgcopy/.gitignore2
-rw-r--r--modules/borgcopy/default.nix39
-rw-r--r--modules/borgcopy/poetry.lock180
-rw-r--r--modules/borgcopy/pyproject.toml33
-rw-r--r--modules/borgcopy/uv.lock146
-rw-r--r--modules/llvm_kernel.nix59
-rw-r--r--overlays/prometheus-lvm-exporter.nix2
-rw-r--r--system-profiles/core/default.nix8
-rw-r--r--system-profiles/nfsroot.nix2
-rw-r--r--system-profiles/zfs.nix5
-rw-r--r--user-profiles/yt-dlp.nix4
25 files changed, 584 insertions, 487 deletions
diff --git a/_sources/generated.json b/_sources/generated.json
index d98f141f..ad09ec7c 100644
--- a/_sources/generated.json
+++ b/_sources/generated.json
@@ -22,7 +22,7 @@
22 }, 22 },
23 "bpf-examples": { 23 "bpf-examples": {
24 "cargoLocks": null, 24 "cargoLocks": null,
25 "date": "2025-03-06", 25 "date": "2025-05-27",
26 "extract": null, 26 "extract": null,
27 "name": "bpf-examples", 27 "name": "bpf-examples",
28 "passthru": null, 28 "passthru": null,
@@ -34,12 +34,12 @@
34 "name": null, 34 "name": null,
35 "owner": "xdp-project", 35 "owner": "xdp-project",
36 "repo": "bpf-examples", 36 "repo": "bpf-examples",
37 "rev": "64e7da048b14822bef06f3971189c4c0985422e7", 37 "rev": "4fae19c659726963d5195ec124f01634620f0c71",
38 "sha256": "sha256-cyyRNvU35ujxkLraOqw2oiZwUblBpJaEncPl2++VHL4=", 38 "sha256": "sha256-PKvknYKq/BYtzRvXZT4t76DdC794aj9uYXXE/tHtY2o=",
39 "sparseCheckout": [], 39 "sparseCheckout": [],
40 "type": "github" 40 "type": "github"
41 }, 41 },
42 "version": "64e7da048b14822bef06f3971189c4c0985422e7" 42 "version": "4fae19c659726963d5195ec124f01634620f0c71"
43 }, 43 },
44 "emacs-scratch_el": { 44 "emacs-scratch_el": {
45 "cargoLocks": null, 45 "cargoLocks": null,
@@ -91,11 +91,11 @@
91 "passthru": null, 91 "passthru": null,
92 "pinned": false, 92 "pinned": false,
93 "src": { 93 "src": {
94 "sha256": "sha256-afJuTByGUMU6kFqGGa3pbPaFVdYGcJYiR0RfDNYNgDk=", 94 "sha256": "sha256-GCtcIXGrMH6LOKxjnB2SkUSChQnMj5d939i2atvqK+Q=",
95 "type": "tarball", 95 "type": "tarball",
96 "url": "https://github.com/wofr06/lesspipe/archive/refs/tags/v2.17.tar.gz" 96 "url": "https://github.com/wofr06/lesspipe/archive/refs/tags/v2.18.tar.gz"
97 }, 97 },
98 "version": "2.17" 98 "version": "2.18"
99 }, 99 },
100 "mako": { 100 "mako": {
101 "cargoLocks": null, 101 "cargoLocks": null,
@@ -327,11 +327,11 @@
327 "passthru": null, 327 "passthru": null,
328 "pinned": false, 328 "pinned": false,
329 "src": { 329 "src": {
330 "sha256": "sha256-Nz/lBhQbzWSnOKN4n0OUdJzDTpf3mfY0+FXoCqF03TU=", 330 "sha256": "sha256-Ooaj+5npHkgo4eoletkhFbGQL+1ScE+39MaL6bnp+yw=",
331 "type": "tarball", 331 "type": "tarball",
332 "url": "https://github.com/hansmi/prometheus-lvm-exporter/archive/refs/tags/v0.4.0.tar.gz" 332 "url": "https://github.com/hansmi/prometheus-lvm-exporter/archive/refs/tags/v0.5.0.tar.gz"
333 }, 333 },
334 "version": "0.4.0" 334 "version": "0.5.0"
335 }, 335 },
336 "psql-versioning": { 336 "psql-versioning": {
337 "cargoLocks": null, 337 "cargoLocks": null,
@@ -437,7 +437,7 @@
437 }, 437 },
438 "v4l2loopback": { 438 "v4l2loopback": {
439 "cargoLocks": null, 439 "cargoLocks": null,
440 "date": "2025-04-29", 440 "date": "2025-06-11",
441 "extract": null, 441 "extract": null,
442 "name": "v4l2loopback", 442 "name": "v4l2loopback",
443 "passthru": null, 443 "passthru": null,
@@ -449,16 +449,16 @@
449 "name": null, 449 "name": null,
450 "owner": "umlaeute", 450 "owner": "umlaeute",
451 "repo": "v4l2loopback", 451 "repo": "v4l2loopback",
452 "rev": "8d806ad688961d8840081a609c39d1a82d296b24", 452 "rev": "8219e4b00101dba8b6865108405cf656302a173d",
453 "sha256": "sha256-zuE/qFI8QCWCePmHWjTIPTh2KzmDkwQ2uj5C1dAwo1c=", 453 "sha256": "sha256-oaPhLQPM9zywRrEklZBC8Unz3gKfNwxin2ukh3ZCfbI=",
454 "sparseCheckout": [], 454 "sparseCheckout": [],
455 "type": "github" 455 "type": "github"
456 }, 456 },
457 "version": "8d806ad688961d8840081a609c39d1a82d296b24" 457 "version": "8219e4b00101dba8b6865108405cf656302a173d"
458 }, 458 },
459 "xcompose": { 459 "xcompose": {
460 "cargoLocks": null, 460 "cargoLocks": null,
461 "date": "2025-03-11", 461 "date": "2025-06-05",
462 "extract": null, 462 "extract": null,
463 "name": "xcompose", 463 "name": "xcompose",
464 "passthru": null, 464 "passthru": null,
@@ -470,12 +470,12 @@
470 "name": null, 470 "name": null,
471 "owner": "kragen", 471 "owner": "kragen",
472 "repo": "xcompose", 472 "repo": "xcompose",
473 "rev": "8b5a6a0c788fd0a4b921d9d3737174defb863873", 473 "rev": "4d8eab4d05a19537ce79294ae0459fdae78ffb20",
474 "sha256": "sha256-6EjQErdBOd5hqcrdaf88E1UZVYIc3FOfv34hvUwOWdA=", 474 "sha256": "sha256-vKY4u5Z2IL111orLLkkF4AoVzqluKG/VQhNUUCqO/k8=",
475 "sparseCheckout": [], 475 "sparseCheckout": [],
476 "type": "github" 476 "type": "github"
477 }, 477 },
478 "version": "8b5a6a0c788fd0a4b921d9d3737174defb863873" 478 "version": "4d8eab4d05a19537ce79294ae0459fdae78ffb20"
479 }, 479 },
480 "yt-dlp": { 480 "yt-dlp": {
481 "cargoLocks": null, 481 "cargoLocks": null,
@@ -486,10 +486,10 @@
486 "pinned": false, 486 "pinned": false,
487 "src": { 487 "src": {
488 "name": null, 488 "name": null,
489 "sha256": "sha256-6nOFTF2rwSTymjWo+um8XUIu8yMb6+6ivfqCrBkanCk=", 489 "sha256": "sha256-dR9To7YTU1Ir+AX6MLvL0WZmEmU345cG6rT4w2jxEaw=",
490 "type": "url", 490 "type": "url",
491 "url": "https://pypi.org/packages/source/y/yt_dlp/yt_dlp-2025.5.22.tar.gz" 491 "url": "https://pypi.org/packages/source/y/yt_dlp/yt_dlp-2025.6.9.tar.gz"
492 }, 492 },
493 "version": "2025.5.22" 493 "version": "2025.6.9"
494 } 494 }
495} \ No newline at end of file 495} \ No newline at end of file
diff --git a/_sources/generated.nix b/_sources/generated.nix
index 3bf73fed..a912f452 100644
--- a/_sources/generated.nix
+++ b/_sources/generated.nix
@@ -18,15 +18,15 @@
18 }; 18 };
19 bpf-examples = { 19 bpf-examples = {
20 pname = "bpf-examples"; 20 pname = "bpf-examples";
21 version = "64e7da048b14822bef06f3971189c4c0985422e7"; 21 version = "4fae19c659726963d5195ec124f01634620f0c71";
22 src = fetchFromGitHub { 22 src = fetchFromGitHub {
23 owner = "xdp-project"; 23 owner = "xdp-project";
24 repo = "bpf-examples"; 24 repo = "bpf-examples";
25 rev = "64e7da048b14822bef06f3971189c4c0985422e7"; 25 rev = "4fae19c659726963d5195ec124f01634620f0c71";
26 fetchSubmodules = true; 26 fetchSubmodules = true;
27 sha256 = "sha256-cyyRNvU35ujxkLraOqw2oiZwUblBpJaEncPl2++VHL4="; 27 sha256 = "sha256-PKvknYKq/BYtzRvXZT4t76DdC794aj9uYXXE/tHtY2o=";
28 }; 28 };
29 date = "2025-03-06"; 29 date = "2025-05-27";
30 }; 30 };
31 emacs-scratch_el = { 31 emacs-scratch_el = {
32 pname = "emacs-scratch_el"; 32 pname = "emacs-scratch_el";
@@ -53,10 +53,10 @@
53 }; 53 };
54 lesspipe = { 54 lesspipe = {
55 pname = "lesspipe"; 55 pname = "lesspipe";
56 version = "2.17"; 56 version = "2.18";
57 src = fetchTarball { 57 src = fetchTarball {
58 url = "https://github.com/wofr06/lesspipe/archive/refs/tags/v2.17.tar.gz"; 58 url = "https://github.com/wofr06/lesspipe/archive/refs/tags/v2.18.tar.gz";
59 sha256 = "sha256-afJuTByGUMU6kFqGGa3pbPaFVdYGcJYiR0RfDNYNgDk="; 59 sha256 = "sha256-GCtcIXGrMH6LOKxjnB2SkUSChQnMj5d939i2atvqK+Q=";
60 }; 60 };
61 }; 61 };
62 mako = { 62 mako = {
@@ -196,10 +196,10 @@
196 }; 196 };
197 prometheus-lvm-exporter = { 197 prometheus-lvm-exporter = {
198 pname = "prometheus-lvm-exporter"; 198 pname = "prometheus-lvm-exporter";
199 version = "0.4.0"; 199 version = "0.5.0";
200 src = fetchTarball { 200 src = fetchTarball {
201 url = "https://github.com/hansmi/prometheus-lvm-exporter/archive/refs/tags/v0.4.0.tar.gz"; 201 url = "https://github.com/hansmi/prometheus-lvm-exporter/archive/refs/tags/v0.5.0.tar.gz";
202 sha256 = "sha256-Nz/lBhQbzWSnOKN4n0OUdJzDTpf3mfY0+FXoCqF03TU="; 202 sha256 = "sha256-Ooaj+5npHkgo4eoletkhFbGQL+1ScE+39MaL6bnp+yw=";
203 }; 203 };
204 }; 204 };
205 psql-versioning = { 205 psql-versioning = {
@@ -270,34 +270,34 @@
270 }; 270 };
271 v4l2loopback = { 271 v4l2loopback = {
272 pname = "v4l2loopback"; 272 pname = "v4l2loopback";
273 version = "8d806ad688961d8840081a609c39d1a82d296b24"; 273 version = "8219e4b00101dba8b6865108405cf656302a173d";
274 src = fetchFromGitHub { 274 src = fetchFromGitHub {
275 owner = "umlaeute"; 275 owner = "umlaeute";
276 repo = "v4l2loopback"; 276 repo = "v4l2loopback";
277 rev = "8d806ad688961d8840081a609c39d1a82d296b24"; 277 rev = "8219e4b00101dba8b6865108405cf656302a173d";
278 fetchSubmodules = true; 278 fetchSubmodules = true;
279 sha256 = "sha256-zuE/qFI8QCWCePmHWjTIPTh2KzmDkwQ2uj5C1dAwo1c="; 279 sha256 = "sha256-oaPhLQPM9zywRrEklZBC8Unz3gKfNwxin2ukh3ZCfbI=";
280 }; 280 };
281 date = "2025-04-29"; 281 date = "2025-06-11";
282 }; 282 };
283 xcompose = { 283 xcompose = {
284 pname = "xcompose"; 284 pname = "xcompose";
285 version = "8b5a6a0c788fd0a4b921d9d3737174defb863873"; 285 version = "4d8eab4d05a19537ce79294ae0459fdae78ffb20";
286 src = fetchFromGitHub { 286 src = fetchFromGitHub {
287 owner = "kragen"; 287 owner = "kragen";
288 repo = "xcompose"; 288 repo = "xcompose";
289 rev = "8b5a6a0c788fd0a4b921d9d3737174defb863873"; 289 rev = "4d8eab4d05a19537ce79294ae0459fdae78ffb20";
290 fetchSubmodules = false; 290 fetchSubmodules = false;
291 sha256 = "sha256-6EjQErdBOd5hqcrdaf88E1UZVYIc3FOfv34hvUwOWdA="; 291 sha256 = "sha256-vKY4u5Z2IL111orLLkkF4AoVzqluKG/VQhNUUCqO/k8=";
292 }; 292 };
293 date = "2025-03-11"; 293 date = "2025-06-05";
294 }; 294 };
295 yt-dlp = { 295 yt-dlp = {
296 pname = "yt-dlp"; 296 pname = "yt-dlp";
297 version = "2025.5.22"; 297 version = "2025.6.9";
298 src = fetchurl { 298 src = fetchurl {
299 url = "https://pypi.org/packages/source/y/yt_dlp/yt_dlp-2025.5.22.tar.gz"; 299 url = "https://pypi.org/packages/source/y/yt_dlp/yt_dlp-2025.6.9.tar.gz";
300 sha256 = "sha256-6nOFTF2rwSTymjWo+um8XUIu8yMb6+6ivfqCrBkanCk="; 300 sha256 = "sha256-dR9To7YTU1Ir+AX6MLvL0WZmEmU345cG6rT4w2jxEaw=";
301 }; 301 };
302 }; 302 };
303} 303}
diff --git a/accounts/gkleen@sif/niri/default.nix b/accounts/gkleen@sif/niri/default.nix
index 8752f3e3..35a3d799 100644
--- a/accounts/gkleen@sif/niri/default.nix
+++ b/accounts/gkleen@sif/niri/default.nix
@@ -3,6 +3,7 @@ let
3 cfg = config.programs.niri; 3 cfg = config.programs.niri;
4 4
5 kdl = flakeInputs.niri-flake.lib.kdl; 5 kdl = flakeInputs.niri-flake.lib.kdl;
6 sleaf = name: arg: kdl.node name [arg] [];
6 7
7 niri = cfg.package; 8 niri = cfg.package;
8 terminal = lib.getExe config.programs.kitty.package; 9 terminal = lib.getExe config.programs.kitty.package;
@@ -450,7 +451,7 @@ in {
450 { title = ".*Passkey credentials$"; } 451 { title = ".*Passkey credentials$"; }
451 ]; 452 ];
452 windowRuleExtra = with kdl; [ 453 windowRuleExtra = with kdl; [
453 (kdl.leaf "open-focused" false) 454 (sleaf "open-focused" false)
454 ]; 455 ];
455 key = "Mod+Control+P"; 456 key = "Mod+Control+P";
456 app-id = "org.keepassxc.KeePassXC"; 457 app-id = "org.keepassxc.KeePassXC";
@@ -488,7 +489,7 @@ in {
488 exec dex $HOME/.local/state/nix/profile/share/applications/kimai.desktop 489 exec dex $HOME/.local/state/nix/profile/share/applications/kimai.desktop
489 '')) ]; 490 '')) ];
490 windowRuleExtra = with kdl; [ 491 windowRuleExtra = with kdl; [
491 (leaf "block-out-from" "screencast") 492 (sleaf "block-out-from" "screencast")
492 ]; 493 ];
493 } 494 }
494 ]; 495 ];
@@ -500,10 +501,12 @@ in {
500 then v 501 then v
501 else null; 502 else null;
502 opt-props = lib.filterAttrs (lib.const (value: value != null)); 503 opt-props = lib.filterAttrs (lib.const (value: value != null));
504 normalize-nodes = nodes: lib.remove null (lib.flatten nodes);
503 in 505 in
504 [ (flag "prefer-no-csd") 506 normalize-nodes [
507 (flag "prefer-no-csd")
505 508
506 (leaf "screenshot-path" "~/screenshots/%Y-%m-%dT%H:%M:%S.png") 509 (sleaf "screenshot-path" "~/screenshots/%Y-%m-%dT%H:%M:%S.png")
507 510
508 (plain "hotkey-overlay" [ 511 (plain "hotkey-overlay" [
509 (flag "skip-at-startup") 512 (flag "skip-at-startup")
@@ -511,27 +514,27 @@ in {
511 514
512 (plain "input" [ 515 (plain "input" [
513 (plain "keyboard" [ 516 (plain "keyboard" [
514 (leaf "repeat-delay" 300) 517 (sleaf "repeat-delay" 300)
515 (leaf "repeat-rate" 50) 518 (sleaf "repeat-rate" 50)
516 519
517 (plain "xkb" [ 520 (plain "xkb" [
518 (leaf "layout" "us,us") 521 (sleaf "layout" "us,us")
519 (leaf "variant" "dvp,") 522 (sleaf "variant" "dvp,")
520 (leaf "options" "compose:caps,grp:win_space_toggle") 523 (sleaf "options" "compose:caps,grp:win_space_toggle")
521 ]) 524 ])
522 ]) 525 ])
523 526
524 (flag "workspace-auto-back-and-forth") 527 (flag "workspace-auto-back-and-forth")
525 # (leaf "focus-follows-mouse" {}) 528 # (sleaf "focus-follows-mouse" {})
526 # (flag "warp-mouse-to-focus") 529 # (flag "warp-mouse-to-focus")
527 530
528 # (plain "touchpad" [ (flag "off") ]) 531 # (plain "touchpad" [ (flag "off") ])
529 (plain "trackball" [ 532 (plain "trackball" [
530 (leaf "scroll-method" "on-button-down") 533 (sleaf "scroll-method" "on-button-down")
531 (leaf "scroll-button" 278) 534 (sleaf "scroll-button" 278)
532 ]) 535 ])
533 (plain "touch" [ 536 (plain "touch" [
534 (leaf "map-to-output" "eDP-1") 537 (sleaf "map-to-output" "eDP-1")
535 ]) 538 ])
536 ]) 539 ])
537 540
@@ -539,7 +542,7 @@ in {
539 (plain "hot-corners" [(flag "off")]) 542 (plain "hot-corners" [(flag "off")])
540 ]) 543 ])
541 544
542 (plain "environment" (lib.mapAttrsToList leaf { 545 (plain "environment" (lib.mapAttrsToList sleaf {
543 NIXOS_OZONE_WL = "1"; 546 NIXOS_OZONE_WL = "1";
544 QT_QPA_PLATFORM = "wayland"; 547 QT_QPA_PLATFORM = "wayland";
545 QT_WAYLAND_DISABLE_WINDOWDECORATION = "1"; 548 QT_WAYLAND_DISABLE_WINDOWDECORATION = "1";
@@ -552,47 +555,47 @@ in {
552 SUDO_ASKPASS = lib.getExe pkgs.kdePackages.ksshaskpass; 555 SUDO_ASKPASS = lib.getExe pkgs.kdePackages.ksshaskpass;
553 })) 556 }))
554 557
555 (node "output" "eDP-1" [ 558 (node "output" ["eDP-1"] [
556 (leaf "scale" 1.5) 559 (sleaf "scale" 1.5)
557 (leaf "position" { x = 0; y = 0; }) 560 (sleaf "position" { x = 0; y = 0; })
558 ]) 561 ])
559 (node "output" "Ancor Communications Inc ASUS PB287Q 0x0000DD9B" [ 562 (node "output" ["Ancor Communications Inc ASUS PB287Q 0x0000DD9B"] [
560 (leaf "scale" 1.5) 563 (sleaf "scale" 1.5)
561 (leaf "position" { x = 2560; y = 0; }) 564 (sleaf "position" { x = 2560; y = 0; })
562 ]) 565 ])
563 (node "output" "HP Inc. HP 727pu CN4417143K" [ 566 (node "output" ["HP Inc. HP 727pu CN4417143K"] [
564 (leaf "mode" "2560x1440@119.998") 567 (sleaf "mode" "2560x1440@119.998")
565 (leaf "scale" 1) 568 (sleaf "scale" 1)
566 (leaf "position" { x = 2560; y = 0; }) 569 (sleaf "position" { x = 2560; y = 0; })
567 (flag "variable-refresh-rate") 570 (flag "variable-refresh-rate")
568 ]) 571 ])
569 572
570 (plain "debug" [ 573 (plain "debug" [
571 (leaf "render-drm-device" "/dev/dri/by-path/pci-0000:00:02.0-render") 574 (sleaf "render-drm-device" "/dev/dri/by-path/pci-0000:00:02.0-render")
572 ]) 575 ])
573 576
574 (plain "animations" [ 577 (plain "animations" [
575 (leaf "slowdown" 0.5) 578 (sleaf "slowdown" 0.5)
576 (plain "workspace-switch" [(flag "off")]) 579 (plain "workspace-switch" [(flag "off")])
577 ]) 580 ])
578 581
579 (plain "layout" [ 582 (plain "layout" [
580 (leaf "gaps" 8) 583 (sleaf "gaps" 8)
581 (plain "struts" [ 584 (plain "struts" [
582 (leaf "left" 26) 585 (sleaf "left" 26)
583 (leaf "right" 26) 586 (sleaf "right" 26)
584 (leaf "top" 0) 587 (sleaf "top" 0)
585 (leaf "bottom" 0) 588 (sleaf "bottom" 0)
586 ]) 589 ])
587 (plain "border" [ 590 (plain "border" [
588 (leaf "width" 2) 591 (sleaf "width" 2)
589 (leaf "active-gradient" { 592 (sleaf "active-gradient" {
590 from = "hsla(195 100% 45% 1)"; 593 from = "hsla(195 100% 45% 1)";
591 to = "hsla(155 100% 37.5% 1)"; 594 to = "hsla(155 100% 37.5% 1)";
592 angle = 29; 595 angle = 29;
593 relative-to = "workspace-view"; 596 relative-to = "workspace-view";
594 }) 597 })
595 (leaf "inactive-gradient" { 598 (sleaf "inactive-gradient" {
596 from = "hsla(0 0% 27.7% 1)"; 599 from = "hsla(0 0% 27.7% 1)";
597 to = "hsla(0 0% 23% 1)"; 600 to = "hsla(0 0% 23% 1)";
598 angle = 29; 601 angle = 29;
@@ -603,29 +606,29 @@ in {
603 (flag "off") 606 (flag "off")
604 ]) 607 ])
605 608
606 (plain "preset-column-widths" (map (prop: leaf "proportion" prop) [ 609 (plain "preset-column-widths" (map (prop: sleaf "proportion" prop) [
607 (1. / 4.) (1. / 3.) (1. / 2.) (2. / 3.) (3. / 4.) (1.) 610 (1. / 4.) (1. / 3.) (1. / 2.) (2. / 3.) (3. / 4.) (1.)
608 ])) 611 ]))
609 (plain "default-column-width" [ (leaf "proportion" (1. / 2.)) ]) 612 (plain "default-column-width" [ (sleaf "proportion" (1. / 2.)) ])
610 (plain "preset-window-heights" (map (prop: leaf "proportion" prop) [ 613 (plain "preset-window-heights" (map (prop: sleaf "proportion" prop) [
611 (1. / 3.) (1. / 2.) (2. / 3.) (1.) 614 (1. / 3.) (1. / 2.) (2. / 3.) (1.)
612 ])) 615 ]))
613 616
614 (flag "always-center-single-column") 617 (flag "always-center-single-column")
615 618
616 (plain "tab-indicator" [ 619 (plain "tab-indicator" [
617 (leaf "gap" 4) 620 (sleaf "gap" 4)
618 (leaf "width" 8) 621 (sleaf "width" 8)
619 (leaf "gaps-between-tabs" 4) 622 (sleaf "gaps-between-tabs" 4)
620 (flag "place-within-column") 623 (flag "place-within-column")
621 (leaf "length" { total-proportion = 1.; }) 624 (sleaf "length" { total-proportion = 1.; })
622 (leaf "active-gradient" { 625 (sleaf "active-gradient" {
623 from = "hsla(195 100% 60% 0.75)"; 626 from = "hsla(195 100% 60% 0.75)";
624 to = "hsla(155 100% 50% 0.75)"; 627 to = "hsla(155 100% 50% 0.75)";
625 angle = 29; 628 angle = 29;
626 relative-to = "workspace-view"; 629 relative-to = "workspace-view";
627 }) 630 })
628 (leaf "inactive-gradient" { 631 (sleaf "inactive-gradient" {
629 from = "hsla(0 0% 42% 0.66)"; 632 from = "hsla(0 0% 42% 0.66)";
630 to = "hsla(0 0% 35% 0.66)"; 633 to = "hsla(0 0% 35% 0.66)";
631 angle = 29; 634 angle = 29;
@@ -639,129 +642,121 @@ in {
639 ]) 642 ])
640 643
641 (map (name: 644 (map (name:
642 (node "workspace" name [ 645 (node "workspace" [name] [
643 (leaf "open-on-output" "eDP-1") 646 (sleaf "open-on-output" "eDP-1")
644 ]) 647 ])
645 ) (map ({name, ...}: name) cfg.scratchspaces)) 648 ) (map ({name, ...}: name) cfg.scratchspaces))
646 (map (name: 649 (map (name:
647 (leaf "workspace" name) 650 (sleaf "workspace" name)
648 ) ["comm" "web" "vid" "bmr"]) 651 ) ["comm" "web" "vid" "bmr"])
649 652
650 (plain "window-rule" [ 653 (plain "window-rule" [
651 (leaf "clip-to-geometry" true) 654 (sleaf "clip-to-geometry" true)
652 ]) 655 ])
653 656
654 (plain "window-rule" [ 657 (plain "window-rule" [
655 (leaf "match" { is-floating = true; }) 658 (sleaf "match" { is-floating = true; })
656 (leaf "geometry-corner-radius" 8) 659 (sleaf "geometry-corner-radius" 8)
657 (plain "shadow" [ (flag "on") ]) 660 (plain "shadow" [ (flag "on") ])
658 ]) 661 ])
659 662
660 (plain "window-rule" [ 663 (plain "window-rule" [
661 (leaf "match" { app-id = "^org\\.keepassxc\\.KeePassXC$"; }) 664 (sleaf "match" { app-id = "^org\\.keepassxc\\.KeePassXC$"; })
662 (leaf "block-out-from" "screencast") 665 (sleaf "block-out-from" "screencast")
663 ]) 666 ])
664 (plain "window-rule" [ 667 (plain "window-rule" (normalize-nodes [
665 (map (title: 668 (map (title:
666 (leaf "match" { app-id = "^org\\.keepassxc\\.KeePassXC$"; inherit title; }) 669 (sleaf "match" { app-id = "^org\\.keepassxc\\.KeePassXC$"; inherit title; })
667 ) ["^Unlock Database.*" "^Access Request.*" ".*Passkey credentials$" "Browser Access Request$"]) 670 ) ["^Unlock Database.*" "^Access Request.*" ".*Passkey credentials$" "Browser Access Request$"])
668 (leaf "open-focused" true) 671 (sleaf "open-focused" true)
669 (leaf "open-floating" true) 672 (sleaf "open-floating" true)
670 ]) 673 ]))
671 674
672 (map ({ name, match, exclude, windowRuleExtra, ... }: 675 (map ({ name, match, exclude, windowRuleExtra, ... }:
673 (optional-node (match != []) (plain "window-rule" [ 676 (optional-node (match != []) (plain "window-rule" (normalize-nodes [
674 (map (leaf "match") match) 677 (map (sleaf "match") match)
675 (map (leaf "exclude") exclude) 678 (map (sleaf "exclude") exclude)
676 (leaf "open-on-workspace" name) 679 (sleaf "open-on-workspace" name)
677 (leaf "open-maximized" true) 680 (sleaf "open-maximized" true)
678 windowRuleExtra 681 windowRuleExtra
679 ])) 682 ])))
680 ) cfg.scratchspaces) 683 ) cfg.scratchspaces)
681 684
682 (plain "window-rule" [ 685 (plain "window-rule" [
683 (leaf "match" { app-id = "^emacs$"; }) 686 (sleaf "match" { app-id = "^emacs$"; })
684 (leaf "match" { app-id = "^firefox$"; }) 687 (sleaf "match" { app-id = "^firefox$"; })
685 (plain "default-column-width" [(leaf "proportion" (2. / 3.))]) 688 (plain "default-column-width" [(sleaf "proportion" (2. / 3.))])
686 ]) 689 ])
687 (plain "window-rule" [ 690 (plain "window-rule" [
688 (leaf "match" { app-id = "^kitty$"; }) 691 (sleaf "match" { app-id = "^kitty$"; })
689 (leaf "match" { app-id = "^kitty-play$"; }) 692 (sleaf "match" { app-id = "^kitty-play$"; })
690 (plain "default-column-width" [(leaf "proportion" (1. / 3.))]) 693 (plain "default-column-width" [(sleaf "proportion" (1. / 3.))])
691 ]) 694 ])
692 695
693 (plain "window-rule" [ 696 (plain "window-rule" [
694 (leaf "match" { app-id = "^thunderbird$"; }) 697 (sleaf "match" { app-id = "^thunderbird$"; })
695 (leaf "match" { app-id = "^Element$"; }) 698 (sleaf "match" { app-id = "^Element$"; })
696 (leaf "match" { app-id = "^chrome-web\.openrainbow\.com__-Default$"; }) 699 (sleaf "match" { app-id = "^chrome-web\.openrainbow\.com__-Default$"; })
697 (leaf "open-on-workspace" "comm") 700 (sleaf "open-on-workspace" "comm")
698 ]) 701 ])
699 (plain "window-rule" [ 702 (plain "window-rule" [
700 (leaf "match" { app-id = "^firefox$"; }) 703 (sleaf "match" { app-id = "^firefox$"; })
701 (leaf "open-on-workspace" "web") 704 (sleaf "open-on-workspace" "web")
702 (leaf "open-maximized" true) 705 (sleaf "open-maximized" true)
703 ]) 706 ])
704 (plain "window-rule" [ 707 (plain "window-rule" [
705 (leaf "match" { app-id = "^mpv$"; }) 708 (sleaf "match" { app-id = "^mpv$"; })
706 (leaf "open-on-workspace" "vid") 709 (sleaf "open-on-workspace" "vid")
707 (plain "default-column-width" [(leaf "proportion" 1.)]) 710 (plain "default-column-width" [(sleaf "proportion" 1.)])
708 ]) 711 ])
709 (plain "window-rule" [ 712 (plain "window-rule" [
710 (leaf "match" { app-id = "^kitty-play$"; }) 713 (sleaf "match" { app-id = "^kitty-play$"; })
711 (leaf "open-on-workspace" "vid") 714 (sleaf "open-on-workspace" "vid")
712 (leaf "open-focused" false) 715 (sleaf "open-focused" false)
713 ]) 716 ])
714 (plain "window-rule" [ 717 (plain "window-rule" [
715 (leaf "match" { app-id = "^chrome-audiobookshelf\.yggdrasil\.li__-Default$"; }) 718 (sleaf "match" { app-id = "^chrome-audiobookshelf\.yggdrasil\.li__-Default$"; })
716 (leaf "match" { app-id = "^YouTube Music Desktop App$"; }) 719 (sleaf "match" { app-id = "^YouTube Music Desktop App$"; })
717 (leaf "open-on-workspace" "vid") 720 (sleaf "open-on-workspace" "vid")
718 ]) 721 ])
719 (plain "window-rule" [ 722 (plain "window-rule" [
720 (leaf "match" { app-id = "^pdfpc$"; }) 723 (sleaf "match" { app-id = "^pdfpc$"; })
721 (plain "default-column-width" [(leaf "proportion" 1.)]) 724 (plain "default-column-width" [(sleaf "proportion" 1.)])
722 ]) 725 ])
723 (plain "window-rule" [ 726 (plain "window-rule" [
724 (leaf "match" { app-id = "^pdfpc$"; title = "^.*presentation.*$"; }) 727 (sleaf "match" { app-id = "^pdfpc$"; title = "^.*presentation.*$"; })
725 (plain "default-column-width" [(leaf "proportion" 1.)]) 728 (plain "default-column-width" [(sleaf "proportion" 1.)])
726 (leaf "open-fullscreen" true) 729 (sleaf "open-fullscreen" true)
727 (leaf "open-on-workspace" "bmr") 730 (sleaf "open-on-workspace" "bmr")
728 (leaf "open-focused" false) 731 (sleaf "open-focused" false)
729 ]) 732 ])
730 (plain "window-rule" [ 733 (plain "window-rule" (normalize-nodes [
731 (map (leaf "match") [ 734 (map (sleaf "match") [
732 { app-id = "^Gimp-"; title = "^Quit GIMP$"; } 735 { app-id = "^Gimp-"; title = "^Quit GIMP$"; }
733 { app-id = "^org\\.kde\\.polkit-kde-authentication-agent-1$"; } 736 { app-id = "^org\\.kde\\.polkit-kde-authentication-agent-1$"; }
734 { app-id = "^xdg-desktop-portal-gtk$"; } 737 { app-id = "^xdg-desktop-portal-gtk$"; }
735 ]) 738 ])
736 (leaf "open-floating" true) 739 (sleaf "open-floating" true)
737 ]) 740 ]))
738 (plain "window-rule" [ 741 (plain "window-rule" [
739 (leaf "match" { app-id = "^org\\.pwmt\\.zathura$"; }) 742 (sleaf "match" { app-id = "^org\\.pwmt\\.zathura$"; })
740 (leaf "match" { app-id = "^evince$"; }) 743 (sleaf "match" { app-id = "^evince$"; })
741 (leaf "match" { app-id = "^org\\.gnome\\.Papers$"; }) 744 (sleaf "match" { app-id = "^org\\.gnome\\.Papers$"; })
742 (leaf "default-column-display" "tabbed") 745 (sleaf "default-column-display" "tabbed")
743 ]) 746 ])
744 747
745 (plain "layer-rule" [ 748 (plain "layer-rule" [
746 (leaf "match" { namespace = "^notifications$"; }) 749 (sleaf "match" { namespace = "^notifications$"; })
747 (leaf "match" { namespace = "^waybar$"; }) 750 (sleaf "match" { namespace = "^waybar$"; })
748 (leaf "match" { namespace = "^launcher$"; }) 751 (sleaf "match" { namespace = "^launcher$"; })
749 (leaf "block-out-from" "screencast") 752 (sleaf "block-out-from" "screencast")
750 ]) 753 ])
751 754
752 (plain "binds" 755 (plain "binds"
753 (let 756 (let
754 bind = name: cfg: node name (opt-props { 757 bind = name: cfg: node name [(lib.removeAttrs cfg ["action"])] (lib.mapAttrsToList leaf (lib.removeAttrs cfg.action ["__functor"]));
755 cooldown-ms = cfg.cooldown-ms or null;
756 }
757 // (lib.optionalAttrs (!(cfg.repeat or true)) {
758 repeat = false;
759 })
760 // (lib.optionalAttrs (cfg.allow-when-locked or false) {
761 allow-when-locked = true;
762 })) (lib.mapAttrsToList leaf (lib.removeAttrs cfg.action ["__functor"]));
763 in 758 in
764 [ 759 normalize-nodes [
765 (lib.mapAttrsToList bind (with config.lib.niri.actions; { 760 (lib.mapAttrsToList bind (with config.lib.niri.actions; {
766 "Mod+Slash".action = show-hotkey-overlay; 761 "Mod+Slash".action = show-hotkey-overlay;
767 762
diff --git a/accounts/gkleen@sif/systemd.nix b/accounts/gkleen@sif/systemd.nix
index 90cccc58..18c2315f 100644
--- a/accounts/gkleen@sif/systemd.nix
+++ b/accounts/gkleen@sif/systemd.nix
@@ -385,6 +385,8 @@ in {
385 }; 385 };
386 Service = { 386 Service = {
387 ExecStart = "${config.systemd.package}/lib/systemd/systemd-socket-proxyd --exit-idle-time=60s 127.0.0.1:${toString (port + 1)}"; 387 ExecStart = "${config.systemd.package}/lib/systemd/systemd-socket-proxyd --exit-idle-time=60s 127.0.0.1:${toString (port + 1)}";
388 Restart = "always";
389 RestartSec = "23s";
388 }; 390 };
389 }) [{ host = "proxy.ssh.math.lmu.de"; port = 8118; } { host = "proxy.vidhar"; port = 8120; } { host = "proxy.mathw0h"; port = 8122; } { host = "proxy.mathw0e"; port = 8124; }]); 391 }) [{ host = "proxy.ssh.math.lmu.de"; port = 8118; } { host = "proxy.vidhar"; port = 8120; } { host = "proxy.mathw0h"; port = 8122; } { host = "proxy.mathw0e"; port = 8124; }]);
390 sockets = listToAttrs (map (port: nameValuePair "proxy-to-autossh-socks@${toString port}" { 392 sockets = listToAttrs (map (port: nameValuePair "proxy-to-autossh-socks@${toString port}" {
diff --git a/accounts/gkleen@sif/zshrc b/accounts/gkleen@sif/zshrc
index abc200c6..b24ff257 100644
--- a/accounts/gkleen@sif/zshrc
+++ b/accounts/gkleen@sif/zshrc
@@ -93,7 +93,7 @@ dir() {
93 if [[ $curlArchive = "true" ]]; then 93 if [[ $curlArchive = "true" ]]; then
94 archiveFile=$(mktemp -t "archive.XXXXXXXXXX.${templateArchive:t}") 94 archiveFile=$(mktemp -t "archive.XXXXXXXXXX.${templateArchive:t}")
95 95
96 curl -L -o ${archiveFile} ${templateArchive} 96 curl -SfL -o ${archiveFile} ${templateArchive}
97 97
98 templateArchive=${archiveFile} 98 templateArchive=${archiveFile}
99 fi 99 fi
@@ -231,7 +231,7 @@ clock() {
231} 231}
232 232
233public-ip() { 233public-ip() {
234 curl -s -H 'Accept: application/json' $@ ifconfig.co | jq -r '.ip' 234 curl -sSf -H 'Accept: application/json' $@ ifconfig.co | jq -r '.ip'
235} 235}
236 236
237swap() { 237swap() {
diff --git a/flake.lock b/flake.lock
index cab6ae5f..5a9e4420 100644
--- a/flake.lock
+++ b/flake.lock
@@ -6,22 +6,28 @@
6 "nixpkgs": [ 6 "nixpkgs": [
7 "nixpkgs" 7 "nixpkgs"
8 ], 8 ],
9 "poetry2nix": [ 9 "pre-commit-hooks-nix": "pre-commit-hooks-nix",
10 "poetry2nix" 10 "pyproject-build-systems": [
11 "pyproject-build-systems"
12 ],
13 "pyproject-nix": [
14 "pyproject-nix"
11 ], 15 ],
12 "pre-commit-hooks-nix": "pre-commit-hooks-nix" 16 "uv2nix": [
17 "uv2nix"
18 ]
13 }, 19 },
14 "locked": { 20 "locked": {
15 "lastModified": 1723124245, 21 "lastModified": 1749560907,
16 "narHash": "sha256-ThDq7vOXo6G4+C5FHqUc64CeX2c5n36tln4ZlDao6s4=", 22 "narHash": "sha256-zvAxxnJ5dcnjbuog0W6UvlthD1dLm5t4ZQI25jzNDW4=",
17 "owner": "gkleen", 23 "owner": "gkleen",
18 "repo": "backup-utils", 24 "repo": "backup-utils",
19 "rev": "74e65090de63fc99f056098677cc490754e2708f", 25 "rev": "8ed6a1d7c2e337cb2e35ed68f6d852f0d1049908",
20 "type": "gitlab" 26 "type": "gitlab"
21 }, 27 },
22 "original": { 28 "original": {
23 "owner": "gkleen", 29 "owner": "gkleen",
24 "ref": "v0.1.6", 30 "ref": "v0.1.7",
25 "repo": "backup-utils", 31 "repo": "backup-utils",
26 "type": "gitlab" 32 "type": "gitlab"
27 } 33 }
@@ -33,22 +39,26 @@
33 "nixpkgs": [ 39 "nixpkgs": [
34 "nixpkgs" 40 "nixpkgs"
35 ], 41 ],
36 "poetry2nix": [ 42 "pre-commit-hooks-nix": "pre-commit-hooks-nix_2",
37 "poetry2nix" 43 "pyproject-build-systems": "pyproject-build-systems",
44 "pyproject-nix": [
45 "pyproject-nix"
38 ], 46 ],
39 "pre-commit-hooks-nix": "pre-commit-hooks-nix_2" 47 "uv2nix": [
48 "uv2nix"
49 ]
40 }, 50 },
41 "locked": { 51 "locked": {
42 "lastModified": 1734281899, 52 "lastModified": 1750599403,
43 "narHash": "sha256-9QdIl3sjHY4Xij9KrBUkW1KpLB+jyxlI12UHPitlawI=", 53 "narHash": "sha256-MLQ7CISl00w1xq88TL2wukNq3ukzID4u7BVT4okbUik=",
44 "owner": "gkleen", 54 "owner": "gkleen",
45 "repo": "ca", 55 "repo": "ca",
46 "rev": "1e4ee9d25a5282ef7bc6774072229784fa0036f3", 56 "rev": "505a29233ada969b2eca76d616b0d7a8767dfb71",
47 "type": "gitlab" 57 "type": "gitlab"
48 }, 58 },
49 "original": { 59 "original": {
50 "owner": "gkleen", 60 "owner": "gkleen",
51 "ref": "v3.1.3", 61 "ref": "v3.1.5",
52 "repo": "ca", 62 "repo": "ca",
53 "type": "gitlab" 63 "type": "gitlab"
54 } 64 }
@@ -66,11 +76,11 @@
66 ] 76 ]
67 }, 77 },
68 "locked": { 78 "locked": {
69 "lastModified": 1727447169, 79 "lastModified": 1749105467,
70 "narHash": "sha256-3KyjMPUKHkiWhwR91J1YchF6zb6gvckCAY1jOE+ne0U=", 80 "narHash": "sha256-hXh76y/wDl15almBcqvjryB50B0BaiXJKk20f314RoE=",
71 "owner": "serokell", 81 "owner": "serokell",
72 "repo": "deploy-rs", 82 "repo": "deploy-rs",
73 "rev": "aa07eb05537d4cd025e2310397a6adcedfe72c76", 83 "rev": "6bc76b872374845ba9d645a2f012b764fecd765f",
74 "type": "github" 84 "type": "github"
75 }, 85 },
76 "original": { 86 "original": {
@@ -343,16 +353,16 @@
343 ] 353 ]
344 }, 354 },
345 "locked": { 355 "locked": {
346 "lastModified": 1747139300, 356 "lastModified": 1749562430,
347 "narHash": "sha256-V+YnIIM2wMprHGgzOU0HzyeWQEjP6EhG8kc4IffWFeg=", 357 "narHash": "sha256-M5MqsIsf+o7yngakVUW4poBGZaghB6sUpw7SsWA55kU=",
348 "owner": "gkleen", 358 "owner": "gkleen",
349 "repo": "home-manager", 359 "repo": "home-manager",
350 "rev": "50182497604587a24bdbe97d6400b1696eac57b1", 360 "rev": "dca5a2df9f8a00cc34bea6ead249a8446f5f069e",
351 "type": "github" 361 "type": "github"
352 }, 362 },
353 "original": { 363 "original": {
354 "owner": "gkleen", 364 "owner": "gkleen",
355 "ref": "nixos-late-start-23.11", 365 "ref": "nixos-late-start-25.05",
356 "repo": "home-manager", 366 "repo": "home-manager",
357 "type": "github" 367 "type": "github"
358 } 368 }
@@ -392,16 +402,16 @@
392 "nixpkgs": [ 402 "nixpkgs": [
393 "nixpkgs" 403 "nixpkgs"
394 ], 404 ],
395 "nixpkgs-stable": "nixpkgs-stable_2", 405 "nixpkgs-stable": "nixpkgs-stable_3",
396 "xwayland-satellite-stable": "xwayland-satellite-stable", 406 "xwayland-satellite-stable": "xwayland-satellite-stable",
397 "xwayland-satellite-unstable": "xwayland-satellite-unstable" 407 "xwayland-satellite-unstable": "xwayland-satellite-unstable"
398 }, 408 },
399 "locked": { 409 "locked": {
400 "lastModified": 1747638609, 410 "lastModified": 1750471128,
401 "narHash": "sha256-rPTN667tMqC1IQYgsnotVfXbVNbOzScxn0ontMkkSPk=", 411 "narHash": "sha256-oR2yjhAPXZDmfFb4UwBeVQcJBtrUNFwufovzN8sTBVc=",
402 "owner": "sodiboo", 412 "owner": "sodiboo",
403 "repo": "niri-flake", 413 "repo": "niri-flake",
404 "rev": "af697f3a8665c8d0770485a2e659ddde88430e3b", 414 "rev": "13e7a34df7aa4e7d8ec4dd9df9d5a01973f28f49",
405 "type": "github" 415 "type": "github"
406 }, 416 },
407 "original": { 417 "original": {
@@ -414,16 +424,16 @@
414 "niri-stable": { 424 "niri-stable": {
415 "flake": false, 425 "flake": false,
416 "locked": { 426 "locked": {
417 "lastModified": 1740117926, 427 "lastModified": 1748151941,
418 "narHash": "sha256-mTTHA0RAaQcdYe+9A3Jx77cmmyLFHmRoZdd8RpWa+m8=", 428 "narHash": "sha256-z4viQZLgC2bIJ3VrzQnR+q2F3gAOEQpU1H5xHtX/2fs=",
419 "owner": "YaLTeR", 429 "owner": "YaLTeR",
420 "repo": "niri", 430 "repo": "niri",
421 "rev": "b94a5db8790339cf9134873d8b490be69e02ac71", 431 "rev": "8ba57fcf25d2fc9565131684a839d58703f1dae7",
422 "type": "github" 432 "type": "github"
423 }, 433 },
424 "original": { 434 "original": {
425 "owner": "YaLTeR", 435 "owner": "YaLTeR",
426 "ref": "v25.02", 436 "ref": "v25.05.1",
427 "repo": "niri", 437 "repo": "niri",
428 "type": "github" 438 "type": "github"
429 } 439 }
@@ -431,11 +441,11 @@
431 "niri-unstable": { 441 "niri-unstable": {
432 "flake": false, 442 "flake": false,
433 "locked": { 443 "locked": {
434 "lastModified": 1747635487, 444 "lastModified": 1750334747,
435 "narHash": "sha256-za7ctGh4MaW1h5Drm1WtwNZxiXvQK9yXZAeeIyY9b2Q=", 445 "narHash": "sha256-nsD1Z6vVP2Hhdgrd0uYHacre2+NhaH/53TFRXn6pRcs=",
436 "owner": "YaLTeR", 446 "owner": "YaLTeR",
437 "repo": "niri", 447 "repo": "niri",
438 "rev": "3f2b7e63ba15cf33475116d32e8b7d22208a8438", 448 "rev": "e0b0b04b445f7044f383e50104f861e632e1c905",
439 "type": "github" 449 "type": "github"
440 }, 450 },
441 "original": { 451 "original": {
@@ -472,11 +482,11 @@
472 ] 482 ]
473 }, 483 },
474 "locked": { 484 "locked": {
475 "lastModified": 1747540584, 485 "lastModified": 1750565152,
476 "narHash": "sha256-cxCQ413JTUuRv9Ygd8DABJ1D6kuB/nTfQqC0Lu9C0ls=", 486 "narHash": "sha256-A6ZIoIgaPPkzIVxKuaxwEJicPOeTwC/MD9iuC3FVhDM=",
477 "owner": "Mic92", 487 "owner": "Mic92",
478 "repo": "nix-index-database", 488 "repo": "nix-index-database",
479 "rev": "ec179dd13fb7b4c6844f55be91436f7857226dce", 489 "rev": "78cd697acc2e492b4e92822a4913ffad279c20e6",
480 "type": "github" 490 "type": "github"
481 }, 491 },
482 "original": { 492 "original": {
@@ -514,11 +524,11 @@
514 ] 524 ]
515 }, 525 },
516 "locked": { 526 "locked": {
517 "lastModified": 1747637556, 527 "lastModified": 1748140003,
518 "narHash": "sha256-AYd1nE+BLWTZS8J0eFQ7kuNiuE+XjhhndoXinj7en/M=", 528 "narHash": "sha256-DNBZmuk1YRM2PmwbHzVdXumRjCUzQkMarg4iI/37rOQ=",
519 "owner": "AshleyYakeley", 529 "owner": "AshleyYakeley",
520 "repo": "NixVirt", 530 "repo": "NixVirt",
521 "rev": "a7d3d3ae8b9a0cf3ec3cf504bb593df0618a6dbc", 531 "rev": "5dfe108fd859b122f9a96981cb6bc12297653d6c",
522 "type": "github" 532 "type": "github"
523 }, 533 },
524 "original": { 534 "original": {
@@ -529,11 +539,11 @@
529 }, 539 },
530 "nixos-hardware": { 540 "nixos-hardware": {
531 "locked": { 541 "locked": {
532 "lastModified": 1747129300, 542 "lastModified": 1750431636,
533 "narHash": "sha256-L3clA5YGeYCF47ghsI7Tcex+DnaaN/BbQ4dR2wzoiKg=", 543 "narHash": "sha256-vnzzBDbCGvInmfn2ijC4HsIY/3W1CWbwS/YQoFgdgPg=",
534 "owner": "NixOS", 544 "owner": "NixOS",
535 "repo": "nixos-hardware", 545 "repo": "nixos-hardware",
536 "rev": "e81fd167b33121269149c57806599045fd33eeed", 546 "rev": "1552a9f4513f3f0ceedcf90320e48d3d47165712",
537 "type": "github" 547 "type": "github"
538 }, 548 },
539 "original": { 549 "original": {
@@ -561,16 +571,16 @@
561 }, 571 },
562 "nixpkgs-eostre": { 572 "nixpkgs-eostre": {
563 "locked": { 573 "locked": {
564 "lastModified": 1701282334, 574 "lastModified": 1748026580,
565 "narHash": "sha256-MxCVrXY6v4QmfTwIysjjaX0XUhqBbxTWWB4HXtDYsdk=", 575 "narHash": "sha256-rWtXrcIzU5wm/C8F9LWvUfBGu5U5E7cFzPYT1pHIJaQ=",
566 "owner": "NixOS", 576 "owner": "NixOS",
567 "repo": "nixpkgs", 577 "repo": "nixpkgs",
568 "rev": "057f9aecfb71c4437d2b27d3323df7f93c010b7e", 578 "rev": "11cb3517b3af6af300dd6c055aeda73c9bf52c48",
569 "type": "github" 579 "type": "github"
570 }, 580 },
571 "original": { 581 "original": {
572 "owner": "NixOS", 582 "owner": "NixOS",
573 "ref": "23.11", 583 "ref": "25.05",
574 "repo": "nixpkgs", 584 "repo": "nixpkgs",
575 "type": "github" 585 "type": "github"
576 } 586 }
@@ -651,38 +661,54 @@
651 }, 661 },
652 "nixpkgs-stable_2": { 662 "nixpkgs-stable_2": {
653 "locked": { 663 "locked": {
654 "lastModified": 1747485343, 664 "lastModified": 1735563628,
655 "narHash": "sha256-YbsZyuRE1tobO9sv0PUwg81QryYo3L1F3R3rF9bcG38=", 665 "narHash": "sha256-OnSAY7XDSx7CtDoqNh8jwVwh4xNL/2HaJxGjryLWzX8=",
656 "owner": "NixOS", 666 "owner": "NixOS",
657 "repo": "nixpkgs", 667 "repo": "nixpkgs",
658 "rev": "9b5ac7ad45298d58640540d0323ca217f32a6762", 668 "rev": "b134951a4c9f3c995fd7be05f3243f8ecd65d798",
659 "type": "github" 669 "type": "github"
660 }, 670 },
661 "original": { 671 "original": {
662 "owner": "NixOS", 672 "owner": "NixOS",
663 "ref": "nixos-24.11", 673 "ref": "nixos-24.05",
664 "repo": "nixpkgs", 674 "repo": "nixpkgs",
665 "type": "github" 675 "type": "github"
666 } 676 }
667 }, 677 },
668 "nixpkgs-stable_3": { 678 "nixpkgs-stable_3": {
669 "locked": { 679 "locked": {
670 "lastModified": 1717179513, 680 "lastModified": 1750400657,
671 "narHash": "sha256-vboIEwIQojofItm2xGCdZCzW96U85l9nDW3ifMuAIdM=", 681 "narHash": "sha256-3vkjFnxCOP6vm5Pm13wC/Zy6/VYgei/I/2DWgW4RFeA=",
672 "owner": "NixOS", 682 "owner": "NixOS",
673 "repo": "nixpkgs", 683 "repo": "nixpkgs",
674 "rev": "63dacb46bf939521bdc93981b4cbb7ecb58427a0", 684 "rev": "b2485d56967598da068b5a6946dadda8bfcbcd37",
675 "type": "github" 685 "type": "github"
676 }, 686 },
677 "original": { 687 "original": {
678 "owner": "NixOS", 688 "owner": "NixOS",
679 "ref": "24.05", 689 "ref": "nixos-25.05",
680 "repo": "nixpkgs", 690 "repo": "nixpkgs",
681 "type": "github" 691 "type": "github"
682 } 692 }
683 }, 693 },
684 "nixpkgs-stable_4": { 694 "nixpkgs-stable_4": {
685 "locked": { 695 "locked": {
696 "lastModified": 1748026580,
697 "narHash": "sha256-rWtXrcIzU5wm/C8F9LWvUfBGu5U5E7cFzPYT1pHIJaQ=",
698 "owner": "NixOS",
699 "repo": "nixpkgs",
700 "rev": "11cb3517b3af6af300dd6c055aeda73c9bf52c48",
701 "type": "github"
702 },
703 "original": {
704 "owner": "NixOS",
705 "ref": "25.05",
706 "repo": "nixpkgs",
707 "type": "github"
708 }
709 },
710 "nixpkgs-stable_5": {
711 "locked": {
686 "lastModified": 1678872516, 712 "lastModified": 1678872516,
687 "narHash": "sha256-/E1YwtMtFAu2KUQKV/1+KFuReYPANM2Rzehk84VxVoc=", 713 "narHash": "sha256-/E1YwtMtFAu2KUQKV/1+KFuReYPANM2Rzehk84VxVoc=",
688 "owner": "NixOS", 714 "owner": "NixOS",
@@ -699,11 +725,11 @@
699 }, 725 },
700 "nixpkgs_2": { 726 "nixpkgs_2": {
701 "locked": { 727 "locked": {
702 "lastModified": 1747542820, 728 "lastModified": 1750365781,
703 "narHash": "sha256-GaOZntlJ6gPPbbkTLjbd8BMWaDYafhuuYRNrxCGnPJw=", 729 "narHash": "sha256-XE/lFNhz5lsriMm/yjXkvSZz5DfvKJLUjsS6pP8EC50=",
704 "owner": "NixOS", 730 "owner": "NixOS",
705 "repo": "nixpkgs", 731 "repo": "nixpkgs",
706 "rev": "292fa7d4f6519c074f0a50394dbbe69859bb6043", 732 "rev": "08f22084e6085d19bcfb4be30d1ca76ecb96fe54",
707 "type": "github" 733 "type": "github"
708 }, 734 },
709 "original": { 735 "original": {
@@ -812,10 +838,7 @@
812 "ca-util", 838 "ca-util",
813 "nixpkgs" 839 "nixpkgs"
814 ], 840 ],
815 "nixpkgs-stable": [ 841 "nixpkgs-stable": "nixpkgs-stable_2"
816 "ca-util",
817 "nixpkgs"
818 ]
819 }, 842 },
820 "locked": { 843 "locked": {
821 "lastModified": 1734261738, 844 "lastModified": 1734261738,
@@ -837,7 +860,7 @@
837 "flake-utils": "flake-utils_2", 860 "flake-utils": "flake-utils_2",
838 "gitignore": "gitignore_3", 861 "gitignore": "gitignore_3",
839 "nixpkgs": "nixpkgs_3", 862 "nixpkgs": "nixpkgs_3",
840 "nixpkgs-stable": "nixpkgs-stable_4" 863 "nixpkgs-stable": "nixpkgs-stable_5"
841 }, 864 },
842 "locked": { 865 "locked": {
843 "lastModified": 1685361114, 866 "lastModified": 1685361114,
@@ -882,21 +905,50 @@
882 "pyproject-build-systems": { 905 "pyproject-build-systems": {
883 "inputs": { 906 "inputs": {
884 "nixpkgs": [ 907 "nixpkgs": [
908 "ca-util",
885 "nixpkgs" 909 "nixpkgs"
886 ], 910 ],
887 "pyproject-nix": [ 911 "pyproject-nix": [
912 "ca-util",
888 "pyproject-nix" 913 "pyproject-nix"
889 ], 914 ],
890 "uv2nix": [ 915 "uv2nix": [
916 "ca-util",
891 "uv2nix" 917 "uv2nix"
892 ] 918 ]
893 }, 919 },
894 "locked": { 920 "locked": {
895 "lastModified": 1744599653, 921 "lastModified": 1749519371,
896 "narHash": "sha256-nysSwVVjG4hKoOjhjvE6U5lIKA8sEr1d1QzEfZsannU=", 922 "narHash": "sha256-UJONN7mA2stweZCoRcry2aa1XTTBL0AfUOY84Lmqhos=",
897 "owner": "pyproject-nix", 923 "owner": "pyproject-nix",
898 "repo": "build-system-pkgs", 924 "repo": "build-system-pkgs",
899 "rev": "7dba6dbc73120e15b558754c26024f6c93015dd7", 925 "rev": "7c06967eca687f3482624250428cc12f43c92523",
926 "type": "github"
927 },
928 "original": {
929 "owner": "pyproject-nix",
930 "repo": "build-system-pkgs",
931 "type": "github"
932 }
933 },
934 "pyproject-build-systems_2": {
935 "inputs": {
936 "nixpkgs": [
937 "nixpkgs"
938 ],
939 "pyproject-nix": [
940 "pyproject-nix"
941 ],
942 "uv2nix": [
943 "uv2nix"
944 ]
945 },
946 "locked": {
947 "lastModified": 1749519371,
948 "narHash": "sha256-UJONN7mA2stweZCoRcry2aa1XTTBL0AfUOY84Lmqhos=",
949 "owner": "pyproject-nix",
950 "repo": "build-system-pkgs",
951 "rev": "7c06967eca687f3482624250428cc12f43c92523",
900 "type": "github" 952 "type": "github"
901 }, 953 },
902 "original": { 954 "original": {
@@ -912,11 +964,11 @@
912 ] 964 ]
913 }, 965 },
914 "locked": { 966 "locked": {
915 "lastModified": 1746540146, 967 "lastModified": 1750499893,
916 "narHash": "sha256-QxdHGNpbicIrw5t6U3x+ZxeY/7IEJ6lYbvsjXmcxFIM=", 968 "narHash": "sha256-ThKBd8XSvITAh2JqU7enOp8AfKeQgf9u7zYC41cnBE4=",
917 "owner": "pyproject-nix", 969 "owner": "pyproject-nix",
918 "repo": "pyproject.nix", 970 "repo": "pyproject.nix",
919 "rev": "e09c10c24ebb955125fda449939bfba664c467fd", 971 "rev": "e824458bd917b44bf4c38795dea2650336b2f55d",
920 "type": "github" 972 "type": "github"
921 }, 973 },
922 "original": { 974 "original": {
@@ -944,11 +996,11 @@
944 "nixpkgs": "nixpkgs_2", 996 "nixpkgs": "nixpkgs_2",
945 "nixpkgs-eostre": "nixpkgs-eostre", 997 "nixpkgs-eostre": "nixpkgs-eostre",
946 "nixpkgs-pgbackrest": "nixpkgs-pgbackrest", 998 "nixpkgs-pgbackrest": "nixpkgs-pgbackrest",
947 "nixpkgs-stable": "nixpkgs-stable_3", 999 "nixpkgs-stable": "nixpkgs-stable_4",
948 "nvfetcher": "nvfetcher", 1000 "nvfetcher": "nvfetcher",
949 "poetry2nix": "poetry2nix", 1001 "poetry2nix": "poetry2nix",
950 "prometheus-borg-exporter": "prometheus-borg-exporter", 1002 "prometheus-borg-exporter": "prometheus-borg-exporter",
951 "pyproject-build-systems": "pyproject-build-systems", 1003 "pyproject-build-systems": "pyproject-build-systems_2",
952 "pyproject-nix": "pyproject-nix", 1004 "pyproject-nix": "pyproject-nix",
953 "sops-nix": "sops-nix", 1005 "sops-nix": "sops-nix",
954 "uv2nix": "uv2nix", 1006 "uv2nix": "uv2nix",
@@ -962,11 +1014,11 @@
962 ] 1014 ]
963 }, 1015 },
964 "locked": { 1016 "locked": {
965 "lastModified": 1747603214, 1017 "lastModified": 1750119275,
966 "narHash": "sha256-lAblXm0VwifYCJ/ILPXJwlz0qNY07DDYdLD+9H+Wc8o=", 1018 "narHash": "sha256-Rr7Pooz9zQbhdVxux16h7URa6mA80Pb/G07T4lHvh0M=",
967 "owner": "Mic92", 1019 "owner": "Mic92",
968 "repo": "sops-nix", 1020 "repo": "sops-nix",
969 "rev": "8d215e1c981be3aa37e47aeabd4e61bb069548fd", 1021 "rev": "77c423a03b9b2b79709ea2cb63336312e78b72e2",
970 "type": "github" 1022 "type": "github"
971 }, 1023 },
972 "original": { 1024 "original": {
@@ -1037,11 +1089,11 @@
1037 ] 1089 ]
1038 }, 1090 },
1039 "locked": { 1091 "locked": {
1040 "lastModified": 1747441483, 1092 "lastModified": 1749778965,
1041 "narHash": "sha256-W8BFXk5R0TuJcjIhcGoMpSOaIufGXpizK0pm+uTqynA=", 1093 "narHash": "sha256-MDq5YPXq3VO7aGrIIz9IMexJcdRiLCcDK4Bk3Kev7Sw=",
1042 "owner": "pyproject-nix", 1094 "owner": "pyproject-nix",
1043 "repo": "uv2nix", 1095 "repo": "uv2nix",
1044 "rev": "582024dc64663e9f88d467c2f7f7b20d278349de", 1096 "rev": "22ddf88e3a06551b769f0a585601d89180c69a38",
1045 "type": "github" 1097 "type": "github"
1046 }, 1098 },
1047 "original": { 1099 "original": {
@@ -1077,16 +1129,16 @@
1077 "xwayland-satellite-stable": { 1129 "xwayland-satellite-stable": {
1078 "flake": false, 1130 "flake": false,
1079 "locked": { 1131 "locked": {
1080 "lastModified": 1739246919, 1132 "lastModified": 1748488455,
1081 "narHash": "sha256-/hBM43/Gd0/tW+egrhlWgOIISeJxEs2uAOIYVpfDKeU=", 1133 "narHash": "sha256-IiLr1alzKFIy5tGGpDlabQbe6LV1c9ABvkH6T5WmyRI=",
1082 "owner": "Supreeeme", 1134 "owner": "Supreeeme",
1083 "repo": "xwayland-satellite", 1135 "repo": "xwayland-satellite",
1084 "rev": "44590a416d4a3e8220e19e29e0b6efe64a80315d", 1136 "rev": "3ba30b149f9eb2bbf42cf4758d2158ca8cceef73",
1085 "type": "github" 1137 "type": "github"
1086 }, 1138 },
1087 "original": { 1139 "original": {
1088 "owner": "Supreeeme", 1140 "owner": "Supreeeme",
1089 "ref": "v0.5.1", 1141 "ref": "v0.6",
1090 "repo": "xwayland-satellite", 1142 "repo": "xwayland-satellite",
1091 "type": "github" 1143 "type": "github"
1092 } 1144 }
@@ -1094,11 +1146,11 @@
1094 "xwayland-satellite-unstable": { 1146 "xwayland-satellite-unstable": {
1095 "flake": false, 1147 "flake": false,
1096 "locked": { 1148 "locked": {
1097 "lastModified": 1747111562, 1149 "lastModified": 1750388715,
1098 "narHash": "sha256-GAqhWoxaBIk0tgoecZPa8gTHDHxNc0JtlwWHZN2iOOo=", 1150 "narHash": "sha256-6WMpcn3Ga/L71NiX9SdWw7ZELpNfrFnWJ0Gt2uAHjJg=",
1099 "owner": "Supreeeme", 1151 "owner": "Supreeeme",
1100 "repo": "xwayland-satellite", 1152 "repo": "xwayland-satellite",
1101 "rev": "ec9ff64c1e0cbec42710b580b7c0f759b1694e72", 1153 "rev": "03cbb2ee3a9da931bb9a39eb917674297a0b9318",
1102 "type": "github" 1154 "type": "github"
1103 }, 1155 },
1104 "original": { 1156 "original": {
diff --git a/flake.nix b/flake.nix
index 20ab9f7e..8380f9c7 100644
--- a/flake.nix
+++ b/flake.nix
@@ -29,13 +29,13 @@
29 type = "github"; 29 type = "github";
30 owner = "NixOS"; 30 owner = "NixOS";
31 repo = "nixpkgs"; 31 repo = "nixpkgs";
32 ref = "24.05"; 32 ref = "25.05";
33 }; 33 };
34 nixpkgs-eostre = { 34 nixpkgs-eostre = {
35 type = "github"; 35 type = "github";
36 owner = "NixOS"; 36 owner = "NixOS";
37 repo = "nixpkgs"; 37 repo = "nixpkgs";
38 ref = "23.11"; 38 ref = "25.05";
39 }; 39 };
40 home-manager = { 40 home-manager = {
41 type = "github"; 41 type = "github";
@@ -53,7 +53,7 @@
53 type = "github"; 53 type = "github";
54 owner = "gkleen"; 54 owner = "gkleen";
55 repo = "home-manager"; 55 repo = "home-manager";
56 ref = "nixos-late-start-23.11"; 56 ref = "nixos-late-start-25.05";
57 inputs = { 57 inputs = {
58 nixpkgs.follows = "nixpkgs-eostre"; 58 nixpkgs.follows = "nixpkgs-eostre";
59 }; 59 };
@@ -145,20 +145,23 @@
145 type = "gitlab"; 145 type = "gitlab";
146 owner = "gkleen"; 146 owner = "gkleen";
147 repo = "ca"; 147 repo = "ca";
148 ref = "v3.1.3"; 148 ref = "v3.1.5";
149 inputs = { 149 inputs = {
150 pyproject-nix.follows = "pyproject-nix";
151 uv2nix.follows = "uv2nix";
150 nixpkgs.follows = "nixpkgs"; 152 nixpkgs.follows = "nixpkgs";
151 poetry2nix.follows = "poetry2nix";
152 }; 153 };
153 }; 154 };
154 backup-utils = { 155 backup-utils = {
155 type = "gitlab"; 156 type = "gitlab";
156 owner = "gkleen"; 157 owner = "gkleen";
157 repo = "backup-utils"; 158 repo = "backup-utils";
158 ref = "v0.1.6"; 159 ref = "v0.1.7";
159 inputs = { 160 inputs = {
160 nixpkgs.follows = "nixpkgs"; 161 nixpkgs.follows = "nixpkgs";
161 poetry2nix.follows = "poetry2nix"; 162 pyproject-nix.follows = "pyproject-nix";
163 uv2nix.follows = "uv2nix";
164 pyproject-build-systems.follows = "pyproject-build-systems";
162 }; 165 };
163 }; 166 };
164 prometheus-borg-exporter = { 167 prometheus-borg-exporter = {
diff --git a/hosts/eostre/default.nix b/hosts/eostre/default.nix
index fd4b15f2..d4113024 100644
--- a/hosts/eostre/default.nix
+++ b/hosts/eostre/default.nix
@@ -37,14 +37,10 @@ with lib;
37 powerManagement.enable = true; 37 powerManagement.enable = true;
38 }; 38 };
39 39
40 opengl.enable = true; 40 graphics.enable = true;
41 }; 41 };
42 42
43 environment.etc."machine-id".text = "f457b21333f1491e916521151ff5d468";
44
45 networking = { 43 networking = {
46 hostId = "f457b213";
47
48 domain = "lan.yggdrasil"; 44 domain = "lan.yggdrasil";
49 search = [ "lan.yggdrasil" "yggdrasil" ]; 45 search = [ "lan.yggdrasil" "yggdrasil" ];
50 46
@@ -83,19 +79,14 @@ with lib;
83 ]; 79 ];
84 }; 80 };
85 81
86 82 services.displayManager.sddm = {
87 services.xserver = {
88 enable = true; 83 enable = true;
89 displayManager.sddm = { 84 wayland.enable = true;
90 enable = true; 85 settings = {
91 settings = { 86 Users.HideUsers = "gkleen";
92 Users.HideUsers = "gkleen";
93 };
94 }; 87 };
95 desktopManager.plasma5.enable = true;
96
97 videoDrivers = [ "nvidia" ];
98 }; 88 };
89 services.desktopManager.plasma6.enable = true;
99 90
100 91
101 services.openssh = { 92 services.openssh = {
diff --git a/hosts/sif/default.nix b/hosts/sif/default.nix
index 6214569a..a57c454c 100644
--- a/hosts/sif/default.nix
+++ b/hosts/sif/default.nix
@@ -60,7 +60,7 @@ in {
60 60
61 plymouth.enable = true; 61 plymouth.enable = true;
62 62
63 kernelPackages = pkgs.linuxPackages_latest; 63 kernel.llvm.kernel = pkgs.linuxKernel.kernels.linux_latest;
64 kernelPatches = [ 64 kernelPatches = [
65 { name = "edac-config"; 65 { name = "edac-config";
66 patch = null; 66 patch = null;
diff --git a/hosts/surtr/default.nix b/hosts/surtr/default.nix
index 9d3101c0..63beece3 100644
--- a/hosts/surtr/default.nix
+++ b/hosts/surtr/default.nix
@@ -22,7 +22,6 @@ with lib;
22 device = "/dev/vda"; 22 device = "/dev/vda";
23 }; 23 };
24 24
25
26 tmp.useTmpfs = true; 25 tmp.useTmpfs = true;
27 26
28 zfs.devNodes = "/dev"; # /dev/vda2 does not show up in /dev/disk/by-id 27 zfs.devNodes = "/dev"; # /dev/vda2 does not show up in /dev/disk/by-id
diff --git a/hosts/surtr/email/default.nix b/hosts/surtr/email/default.nix
index c993bb18..58cb76d9 100644
--- a/hosts/surtr/email/default.nix
+++ b/hosts/surtr/email/default.nix
@@ -355,7 +355,10 @@ in {
355 maxproc = 0; 355 maxproc = 0;
356 args = [ 356 args = [
357 "-o" "header_checks=pcre:${pkgs.writeText "header_checks_submission" '' 357 "-o" "header_checks=pcre:${pkgs.writeText "header_checks_submission" ''
358 if /^Received: /
359 !/by surtr\.yggdrasil\.li/ STRIP
358 /^Received: from [^ ]+ \([^ ]+ [^ ]+\)\s+(.*)$/ REPLACE Received: $1 360 /^Received: from [^ ]+ \([^ ]+ [^ ]+\)\s+(.*)$/ REPLACE Received: $1
361 endif
359 ''}" 362 ''}"
360 ]; 363 ];
361 }; 364 };
diff --git a/hosts/vidhar/default.nix b/hosts/vidhar/default.nix
index 7da17e6f..547572c6 100644
--- a/hosts/vidhar/default.nix
+++ b/hosts/vidhar/default.nix
@@ -136,7 +136,7 @@ with lib;
136 wantedBy = ["basic.target"]; 136 wantedBy = ["basic.target"];
137 serviceConfig = { 137 serviceConfig = {
138 ExecStart = pkgs.writeShellScript "limit-pstate-start" '' 138 ExecStart = pkgs.writeShellScript "limit-pstate-start" ''
139 echo 50 > /sys/devices/system/cpu/intel_pstate/max_perf_pct 139 echo 40 > /sys/devices/system/cpu/intel_pstate/max_perf_pct
140 ''; 140 '';
141 RemainAfterExit = true; 141 RemainAfterExit = true;
142 ExecStop = pkgs.writeShellScript "limit-pstate-stop" '' 142 ExecStop = pkgs.writeShellScript "limit-pstate-stop" ''
diff --git a/lib/pythonSet.nix b/lib/pythonSet.nix
index 9dfb25ff..c69216cc 100644
--- a/lib/pythonSet.nix
+++ b/lib/pythonSet.nix
@@ -23,6 +23,20 @@
23 (final.resolveBuildSystem { setuptools = []; }) 23 (final.resolveBuildSystem { setuptools = []; })
24 ]; 24 ];
25 }); 25 });
26 halo = (prev.halo.override {
27 sourcePreference = "sdist";
28 }).overrideAttrs (oldAttrs: {
29 nativeBuildInputs = (oldAttrs.nativeBuildInputs or []) ++ [
30 (final.resolveBuildSystem { setuptools = []; })
31 ];
32 });
33 unshare = (prev.unshare.override {
34 sourcePreference = "sdist";
35 }).overrideAttrs (oldAttrs: {
36 nativeBuildInputs = (oldAttrs.nativeBuildInputs or []) ++ [
37 (final.resolveBuildSystem { setuptools = []; })
38 ];
39 });
26 }) 40 })
27 ] 41 ]
28 ) 42 )
diff --git a/modules/borgcopy/.envrc b/modules/borgcopy/.envrc
new file mode 100644
index 00000000..01e755c1
--- /dev/null
+++ b/modules/borgcopy/.envrc
@@ -0,0 +1,4 @@
1use flake
2
3uv venv && uv sync
4. .venv/bin/activate
diff --git a/modules/borgcopy/.gitignore b/modules/borgcopy/.gitignore
new file mode 100644
index 00000000..4ccfae70
--- /dev/null
+++ b/modules/borgcopy/.gitignore
@@ -0,0 +1,2 @@
1.venv
2**/__pycache__
diff --git a/modules/borgcopy/default.nix b/modules/borgcopy/default.nix
index 8e1afc27..af021777 100644
--- a/modules/borgcopy/default.nix
+++ b/modules/borgcopy/default.nix
@@ -1,25 +1,32 @@
1{ config, pkgs, lib, utils, flakeInputs, ... }: 1{ config, pkgs, lib, utils, flake, flakeInputs, ... }:
2 2
3with lib; 3with lib;
4 4
5let 5let
6 copyBorg = 6 copyBorg = let
7 with pkgs.poetry2nix; 7 workspace = flakeInputs.uv2nix.lib.workspace.loadWorkspace { workspaceRoot = ./.; };
8 mkPoetryApplication { 8 pythonSet = flake.lib.pythonSet {
9 projectDir = cleanPythonSources { src = ./.; }; 9 inherit pkgs;
10 python = pkgs.python312;
11 overlay = workspace.mkPyprojectOverlay {
12 sourcePreference = "wheel";
13 };
14 };
15 virtualEnv = pythonSet.mkVirtualEnv "copy_borg" workspace.deps.default;
16 in virtualEnv.overrideAttrs (oldAttrs: {
17 meta = (oldAttrs.meta or {}) // {
18 mainProgram = "copy_borg";
19 };
10 20
11 overrides = overrides.withDefaults (self: super: { 21 nativeBuildInputs = (oldAttrs.nativeBuildInputs or []) ++ [ pkgs.makeWrapper ];
12 pyprctl = super.pyprctl.overridePythonAttrs (oldAttrs: {
13 buildInputs = (oldAttrs.buildInputs or []) ++ [super.setuptools];
14 });
15 inherit (pkgs.python3Packages) python-unshare;
16 });
17 22
18 postInstall = '' 23 postInstall = ''
19 wrapProgram $out/bin/copy_borg \ 24 ${oldAttrs.postInstall or ""}
20 --prefix PATH : ${makeBinPath (with pkgs; [util-linux borgbackup])}:${config.security.wrapperDir} 25
21 ''; 26 wrapProgram $out/bin/copy_borg \
22 }; 27 --prefix PATH : ${makeBinPath (with pkgs; [util-linux borgbackup])}:${config.security.wrapperDir}
28 '';
29 });
23 30
24 copyService = name: opts: nameValuePair "copy-borg@${utils.escapeSystemdPath name}" { 31 copyService = name: opts: nameValuePair "copy-borg@${utils.escapeSystemdPath name}" {
25 restartIfChanged = false; 32 restartIfChanged = false;
diff --git a/modules/borgcopy/poetry.lock b/modules/borgcopy/poetry.lock
deleted file mode 100644
index 759ecfe9..00000000
--- a/modules/borgcopy/poetry.lock
+++ /dev/null
@@ -1,180 +0,0 @@
1# This file is automatically @generated by Poetry 1.4.2 and should not be changed by hand.
2
3[[package]]
4name = "colorama"
5version = "0.4.6"
6description = "Cross-platform colored terminal text."
7category = "main"
8optional = false
9python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7"
10files = [
11 {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"},
12 {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"},
13]
14
15[[package]]
16name = "halo"
17version = "0.0.31"
18description = "Beautiful terminal spinners in Python"
19category = "main"
20optional = false
21python-versions = ">=3.4"
22files = [
23 {file = "halo-0.0.31-py2-none-any.whl", hash = "sha256:5350488fb7d2aa7c31a1344120cee67a872901ce8858f60da7946cef96c208ab"},
24 {file = "halo-0.0.31.tar.gz", hash = "sha256:7b67a3521ee91d53b7152d4ee3452811e1d2a6321975137762eb3d70063cc9d6"},
25]
26
27[package.dependencies]
28colorama = ">=0.3.9"
29log-symbols = ">=0.0.14"
30six = ">=1.12.0"
31spinners = ">=0.0.24"
32termcolor = ">=1.1.0"
33
34[package.extras]
35ipython = ["IPython (==5.7.0)", "ipywidgets (==7.1.0)"]
36
37[[package]]
38name = "humanize"
39version = "4.6.0"
40description = "Python humanize utilities"
41category = "main"
42optional = false
43python-versions = ">=3.7"
44files = [
45 {file = "humanize-4.6.0-py3-none-any.whl", hash = "sha256:401201aca462749773f02920139f302450cb548b70489b9b4b92be39fe3c3c50"},
46 {file = "humanize-4.6.0.tar.gz", hash = "sha256:5f1f22bc65911eb1a6ffe7659bd6598e33dcfeeb904eb16ee1e705a09bf75916"},
47]
48
49[package.extras]
50tests = ["freezegun", "pytest", "pytest-cov"]
51
52[[package]]
53name = "log-symbols"
54version = "0.0.14"
55description = "Colored symbols for various log levels for Python"
56category = "main"
57optional = false
58python-versions = "*"
59files = [
60 {file = "log_symbols-0.0.14-py3-none-any.whl", hash = "sha256:4952106ff8b605ab7d5081dd2c7e6ca7374584eff7086f499c06edd1ce56dcca"},
61 {file = "log_symbols-0.0.14.tar.gz", hash = "sha256:cf0bbc6fe1a8e53f0d174a716bc625c4f87043cc21eb55dd8a740cfe22680556"},
62]
63
64[package.dependencies]
65colorama = ">=0.3.9"
66
67[[package]]
68name = "pyprctl"
69version = "0.1.3"
70description = "An interface to Linux's prctl() syscall written in pure Python using ctypes."
71category = "main"
72optional = false
73python-versions = ">=3.6"
74files = [
75 {file = "pyprctl-0.1.3-py3-none-any.whl", hash = "sha256:6302e5114f078fb33e5799835d0a69e2fc180bb6b28ad073515fa40c5272f1dd"},
76 {file = "pyprctl-0.1.3.tar.gz", hash = "sha256:1fb54d3ab030ec02e4afc38fb9662d6634c12834e91ae7959de56a9c09f69c26"},
77]
78
79[[package]]
80name = "python-dateutil"
81version = "2.8.2"
82description = "Extensions to the standard Python datetime module"
83category = "main"
84optional = false
85python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7"
86files = [
87 {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"},
88 {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"},
89]
90
91[package.dependencies]
92six = ">=1.5"
93
94[[package]]
95name = "python-unshare"
96version = "0.2"
97description = "Python bindings for the Linux unshare() syscall"
98category = "main"
99optional = false
100python-versions = "*"
101files = [
102 {file = "python-unshare-0.2.tar.gz", hash = "sha256:f79b7de441b6c27930b775085a6a4fd2f378b628737aaaebc2a6c519023fd47a"},
103]
104
105[[package]]
106name = "six"
107version = "1.16.0"
108description = "Python 2 and 3 compatibility utilities"
109category = "main"
110optional = false
111python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*"
112files = [
113 {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
114 {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"},
115]
116
117[[package]]
118name = "spinners"
119version = "0.0.24"
120description = "Spinners for terminals"
121category = "main"
122optional = false
123python-versions = "*"
124files = [
125 {file = "spinners-0.0.24-py3-none-any.whl", hash = "sha256:2fa30d0b72c9650ad12bbe031c9943b8d441e41b4f5602b0ec977a19f3290e98"},
126 {file = "spinners-0.0.24.tar.gz", hash = "sha256:1eb6aeb4781d72ab42ed8a01dcf20f3002bf50740d7154d12fb8c9769bf9e27f"},
127]
128
129[[package]]
130name = "termcolor"
131version = "2.2.0"
132description = "ANSI color formatting for output in terminal"
133category = "main"
134optional = false
135python-versions = ">=3.7"
136files = [
137 {file = "termcolor-2.2.0-py3-none-any.whl", hash = "sha256:91ddd848e7251200eac969846cbae2dacd7d71c2871e92733289e7e3666f48e7"},
138 {file = "termcolor-2.2.0.tar.gz", hash = "sha256:dfc8ac3f350788f23b2947b3e6cfa5a53b630b612e6cd8965a015a776020b99a"},
139]
140
141[package.extras]
142tests = ["pytest", "pytest-cov"]
143
144[[package]]
145name = "tqdm"
146version = "4.65.0"
147description = "Fast, Extensible Progress Meter"
148category = "main"
149optional = false
150python-versions = ">=3.7"
151files = [
152 {file = "tqdm-4.65.0-py3-none-any.whl", hash = "sha256:c4f53a17fe37e132815abceec022631be8ffe1b9381c2e6e30aa70edc99e9671"},
153 {file = "tqdm-4.65.0.tar.gz", hash = "sha256:1871fb68a86b8fb3b59ca4cdd3dcccbc7e6d613eeed31f4c332531977b89beb5"},
154]
155
156[package.dependencies]
157colorama = {version = "*", markers = "platform_system == \"Windows\""}
158
159[package.extras]
160dev = ["py-make (>=0.1.0)", "twine", "wheel"]
161notebook = ["ipywidgets (>=6)"]
162slack = ["slack-sdk"]
163telegram = ["requests"]
164
165[[package]]
166name = "xdg"
167version = "6.0.0"
168description = "Variables defined by the XDG Base Directory Specification"
169category = "main"
170optional = false
171python-versions = ">=3.7,<4.0"
172files = [
173 {file = "xdg-6.0.0-py3-none-any.whl", hash = "sha256:df3510755b4395157fc04fc3b02467c777f3b3ca383257397f09ab0d4c16f936"},
174 {file = "xdg-6.0.0.tar.gz", hash = "sha256:24278094f2d45e846d1eb28a2ebb92d7b67fc0cab5249ee3ce88c95f649a1c92"},
175]
176
177[metadata]
178lock-version = "2.0"
179python-versions = ">=3.10.0,<3.12"
180content-hash = "3c6b538852447a8f3ae34e1be122716d47e669a2b44f7c5d3d850e5d877353c7"
diff --git a/modules/borgcopy/pyproject.toml b/modules/borgcopy/pyproject.toml
index f3401ed2..d76d73c6 100644
--- a/modules/borgcopy/pyproject.toml
+++ b/modules/borgcopy/pyproject.toml
@@ -1,22 +1,25 @@
1[tool.poetry] 1[project]
2name = "copy_borg" 2name = "copy_borg"
3version = "0.0.0" 3version = "0.0.0"
4authors = ["Gregor Kleen <gkleen@yggdrasil.li>"]
5description = "" 4description = ""
5authors = [{ name = "Gregor Kleen", email = "gkleen@yggdrasil.li" }]
6requires-python = "~=3.12"
7dependencies = [
8 "humanize>=4.6.0,<5",
9 "tqdm>=4.65.0,<5",
10 "python-dateutil>=2.8.2,<3",
11 "xdg>=6.0.0,<7",
12 "pyprctl>=0.1.3,<0.2",
13 "halo>=0.0.31,<0.0.32",
14 "unshare>=0.22",
15]
6 16
7[tool.poetry.scripts] 17[project.scripts]
8copy_borg = "copy_borg.__main__:main" 18copy_borg = "copy_borg.__main__:main"
9 19
10[tool.poetry.dependencies]
11python = ">=3.10.0,<3.12"
12humanize = "^4.6.0"
13tqdm = "^4.65.0"
14python-dateutil = "^2.8.2"
15xdg = "^6.0.0"
16python-unshare = "^0.2"
17pyprctl = "^0.1.3"
18halo = "^0.0.31"
19
20[build-system] 20[build-system]
21requires = ["poetry-core>=1.0.0"] 21requires = ["hatchling"]
22build-backend = "poetry.core.masonry.api" \ No newline at end of file 22build-backend = "hatchling.build"
23
24[tool.hatch.build.targets.wheel]
25packages = ["copy_borg"]
diff --git a/modules/borgcopy/uv.lock b/modules/borgcopy/uv.lock
new file mode 100644
index 00000000..1a282598
--- /dev/null
+++ b/modules/borgcopy/uv.lock
@@ -0,0 +1,146 @@
1version = 1
2revision = 2
3requires-python = ">=3.12, <4"
4
5[[package]]
6name = "colorama"
7version = "0.4.6"
8source = { registry = "https://pypi.org/simple" }
9sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" }
10wheels = [
11 { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" },
12]
13
14[[package]]
15name = "copy-borg"
16version = "0.0.0"
17source = { editable = "." }
18dependencies = [
19 { name = "halo" },
20 { name = "humanize" },
21 { name = "pyprctl" },
22 { name = "python-dateutil" },
23 { name = "tqdm" },
24 { name = "unshare" },
25 { name = "xdg" },
26]
27
28[package.metadata]
29requires-dist = [
30 { name = "halo", specifier = ">=0.0.31,<0.0.32" },
31 { name = "humanize", specifier = ">=4.6.0,<5" },
32 { name = "pyprctl", specifier = ">=0.1.3,<0.2" },
33 { name = "python-dateutil", specifier = ">=2.8.2,<3" },
34 { name = "tqdm", specifier = ">=4.65.0,<5" },
35 { name = "unshare", specifier = ">=0.22" },
36 { name = "xdg", specifier = ">=6.0.0,<7" },
37]
38
39[[package]]
40name = "halo"
41version = "0.0.31"
42source = { registry = "https://pypi.org/simple" }
43dependencies = [
44 { name = "colorama" },
45 { name = "log-symbols" },
46 { name = "six" },
47 { name = "spinners" },
48 { name = "termcolor" },
49]
50sdist = { url = "https://files.pythonhosted.org/packages/ee/48/d53580d30b1fabf25d0d1fcc3f5b26d08d2ac75a1890ff6d262f9f027436/halo-0.0.31.tar.gz", hash = "sha256:7b67a3521ee91d53b7152d4ee3452811e1d2a6321975137762eb3d70063cc9d6", size = 11666, upload-time = "2020-11-10T02:36:48.335Z" }
51
52[[package]]
53name = "humanize"
54version = "4.12.3"
55source = { registry = "https://pypi.org/simple" }
56sdist = { url = "https://files.pythonhosted.org/packages/22/d1/bbc4d251187a43f69844f7fd8941426549bbe4723e8ff0a7441796b0789f/humanize-4.12.3.tar.gz", hash = "sha256:8430be3a615106fdfceb0b2c1b41c4c98c6b0fc5cc59663a5539b111dd325fb0", size = 80514, upload-time = "2025-04-30T11:51:07.98Z" }
57wheels = [
58 { url = "https://files.pythonhosted.org/packages/a0/1e/62a2ec3104394a2975a2629eec89276ede9dbe717092f6966fcf963e1bf0/humanize-4.12.3-py3-none-any.whl", hash = "sha256:2cbf6370af06568fa6d2da77c86edb7886f3160ecd19ee1ffef07979efc597f6", size = 128487, upload-time = "2025-04-30T11:51:06.468Z" },
59]
60
61[[package]]
62name = "log-symbols"
63version = "0.0.14"
64source = { registry = "https://pypi.org/simple" }
65dependencies = [
66 { name = "colorama" },
67]
68sdist = { url = "https://files.pythonhosted.org/packages/45/87/e86645d758a4401c8c81914b6a88470634d1785c9ad09823fa4a1bd89250/log_symbols-0.0.14.tar.gz", hash = "sha256:cf0bbc6fe1a8e53f0d174a716bc625c4f87043cc21eb55dd8a740cfe22680556", size = 3211, upload-time = "2019-08-08T06:32:22.538Z" }
69wheels = [
70 { url = "https://files.pythonhosted.org/packages/28/5d/d710c38be68b0fb54e645048fe359c3904cc3cb64b2de9d40e1712bf110c/log_symbols-0.0.14-py3-none-any.whl", hash = "sha256:4952106ff8b605ab7d5081dd2c7e6ca7374584eff7086f499c06edd1ce56dcca", size = 3081, upload-time = "2019-08-08T06:32:20.604Z" },
71]
72
73[[package]]
74name = "pyprctl"
75version = "0.1.3"
76source = { registry = "https://pypi.org/simple" }
77sdist = { url = "https://files.pythonhosted.org/packages/c9/16/6ed71ebcad76c1cd5f22185bcc6b31c0ee62fc5e693b626febea8fedeba3/pyprctl-0.1.3.tar.gz", hash = "sha256:1fb54d3ab030ec02e4afc38fb9662d6634c12834e91ae7959de56a9c09f69c26", size = 18739, upload-time = "2021-10-26T23:52:03.87Z" }
78wheels = [
79 { url = "https://files.pythonhosted.org/packages/bf/5e/62765de39bbce8111fb1f4453a4a804913bf49179fa265fb713ed66c9d15/pyprctl-0.1.3-py3-none-any.whl", hash = "sha256:6302e5114f078fb33e5799835d0a69e2fc180bb6b28ad073515fa40c5272f1dd", size = 20016, upload-time = "2021-10-26T23:52:02.986Z" },
80]
81
82[[package]]
83name = "python-dateutil"
84version = "2.9.0.post0"
85source = { registry = "https://pypi.org/simple" }
86dependencies = [
87 { name = "six" },
88]
89sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432, upload-time = "2024-03-01T18:36:20.211Z" }
90wheels = [
91 { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892, upload-time = "2024-03-01T18:36:18.57Z" },
92]
93
94[[package]]
95name = "six"
96version = "1.17.0"
97source = { registry = "https://pypi.org/simple" }
98sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031, upload-time = "2024-12-04T17:35:28.174Z" }
99wheels = [
100 { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050, upload-time = "2024-12-04T17:35:26.475Z" },
101]
102
103[[package]]
104name = "spinners"
105version = "0.0.24"
106source = { registry = "https://pypi.org/simple" }
107sdist = { url = "https://files.pythonhosted.org/packages/d3/91/bb331f0a43e04d950a710f402a0986a54147a35818df0e1658551c8d12e1/spinners-0.0.24.tar.gz", hash = "sha256:1eb6aeb4781d72ab42ed8a01dcf20f3002bf50740d7154d12fb8c9769bf9e27f", size = 5308, upload-time = "2020-02-19T21:42:32.326Z" }
108wheels = [
109 { url = "https://files.pythonhosted.org/packages/9f/8e/3310207a68118000ca27ac878b8386123628b335ecb3d4bec4743357f0d1/spinners-0.0.24-py3-none-any.whl", hash = "sha256:2fa30d0b72c9650ad12bbe031c9943b8d441e41b4f5602b0ec977a19f3290e98", size = 5499, upload-time = "2020-02-19T21:42:30.876Z" },
110]
111
112[[package]]
113name = "termcolor"
114version = "3.1.0"
115source = { registry = "https://pypi.org/simple" }
116sdist = { url = "https://files.pythonhosted.org/packages/ca/6c/3d75c196ac07ac8749600b60b03f4f6094d54e132c4d94ebac6ee0e0add0/termcolor-3.1.0.tar.gz", hash = "sha256:6a6dd7fbee581909eeec6a756cff1d7f7c376063b14e4a298dc4980309e55970", size = 14324, upload-time = "2025-04-30T11:37:53.791Z" }
117wheels = [
118 { url = "https://files.pythonhosted.org/packages/4f/bd/de8d508070629b6d84a30d01d57e4a65c69aa7f5abe7560b8fad3b50ea59/termcolor-3.1.0-py3-none-any.whl", hash = "sha256:591dd26b5c2ce03b9e43f391264626557873ce1d379019786f99b0c2bee140aa", size = 7684, upload-time = "2025-04-30T11:37:52.382Z" },
119]
120
121[[package]]
122name = "tqdm"
123version = "4.67.1"
124source = { registry = "https://pypi.org/simple" }
125dependencies = [
126 { name = "colorama", marker = "sys_platform == 'win32'" },
127]
128sdist = { url = "https://files.pythonhosted.org/packages/a8/4b/29b4ef32e036bb34e4ab51796dd745cdba7ed47ad142a9f4a1eb8e0c744d/tqdm-4.67.1.tar.gz", hash = "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2", size = 169737, upload-time = "2024-11-24T20:12:22.481Z" }
129wheels = [
130 { url = "https://files.pythonhosted.org/packages/d0/30/dc54f88dd4a2b5dc8a0279bdd7270e735851848b762aeb1c1184ed1f6b14/tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2", size = 78540, upload-time = "2024-11-24T20:12:19.698Z" },
131]
132
133[[package]]
134name = "unshare"
135version = "0.22"
136source = { registry = "https://pypi.org/simple" }
137sdist = { url = "https://files.pythonhosted.org/packages/15/85/2ba218129c95b894efe87506489b525f859c40f6e21cb0521ff3cec754f4/unshare-0.22.tar.gz", hash = "sha256:d521d72cca6e876f22cbd5ff5eb51f1beef75e8f9c53b599b55fa05fba1dd3a6", size = 2041, upload-time = "2019-10-17T12:58:31.498Z" }
138
139[[package]]
140name = "xdg"
141version = "6.0.0"
142source = { registry = "https://pypi.org/simple" }
143sdist = { url = "https://files.pythonhosted.org/packages/2a/b9/0e6e6f19fb75cf5e1758f4f33c1256738f718966700cffc0fde2f966218b/xdg-6.0.0.tar.gz", hash = "sha256:24278094f2d45e846d1eb28a2ebb92d7b67fc0cab5249ee3ce88c95f649a1c92", size = 3453, upload-time = "2023-02-27T19:27:44.309Z" }
144wheels = [
145 { url = "https://files.pythonhosted.org/packages/dd/54/3516c1cf349060fc3578686d271eba242f10ec00b4530c2985af9faac49b/xdg-6.0.0-py3-none-any.whl", hash = "sha256:df3510755b4395157fc04fc3b02467c777f3b3ca383257397f09ab0d4c16f936", size = 3855, upload-time = "2023-02-27T19:27:42.151Z" },
146]
diff --git a/modules/llvm_kernel.nix b/modules/llvm_kernel.nix
new file mode 100644
index 00000000..71d96320
--- /dev/null
+++ b/modules/llvm_kernel.nix
@@ -0,0 +1,59 @@
1{ config, pkgs, lib, ... }:
2let
3 cfg = config.boot.kernel.llvm;
4in {
5 options = {
6 boot.kernel.llvm = {
7 enable = lib.mkEnableOption "building linux kernel with clang/LLVM" // {
8 default = true;
9 };
10
11 kernel = lib.mkPackageOption pkgs [ "linuxKernel" "kernels" "linux_default" ] {};
12 };
13 };
14
15 config = lib.mkIf cfg.enable {
16 boot.kernelPackages =
17 with pkgs; # Cut down on repeated `pkgs.` declarations
18 let
19 # Choose whichever LLVM version you please. `llvmPackages` is the
20 # default version, `llvmPackages_latest` is the latest (at the time of
21 # writing, LLVM 17.0.6 and 18.1.8 respectively).
22 llvm = llvmPackages_latest;
23 # Same deal as LLVM; choose whichever kernel version you like.
24 # `linux` is the latest LTS, `linux_latest` is the latest stable.
25 inherit (cfg) kernel;
26 in
27 # Generate kernel modules for our custom kernel.
28 linuxPackagesFor (
29 # Override our chosen kernel version with our custom settings.
30 (kernel.override {
31 # Set our chosen version of LLVM as our standard environment.
32 stdenv = overrideCC llvm.stdenv (
33 # Tell our C compiler (Clang) to use LLVM bintools--normally GNU
34 # binutils are used even with Clang as the compiler.
35 llvm.stdenv.cc.override {
36 bintools = llvm.bintools;
37 }
38 );
39
40 # Tell Linux that we're compiling with Clang and LLVM.
41 extraMakeFlags = [ "LLVM=1" ];
42
43 # If you'd like to edit your kernel configuration, use
44 # `structuredExtraConfig`. For example, some options available to us
45 # when compiling with Clang and linking with LLD:
46 structuredExtraConfig = {
47 CFI_CLANG = lib.kernel.yes;
48 # LTO_CLANG_THIN = lib.kernel.yes;
49 };
50 }
51 ).overrideAttrs
52 # Work around another NixOS specific issue where builds with WERROR=y
53 # are stopped by a benign error. See reference 1 below for details.
54 # Technically, this fix is only necessary with WERROR=y but the issue
55 # still causes a warning on builds where WERROR is unset.
56 { env.NIX_CFLAGS_COMPILE = "-Wno-unused-command-line-argument"; }
57 );
58 };
59}
diff --git a/overlays/prometheus-lvm-exporter.nix b/overlays/prometheus-lvm-exporter.nix
index 240f8d85..b0230b63 100644
--- a/overlays/prometheus-lvm-exporter.nix
+++ b/overlays/prometheus-lvm-exporter.nix
@@ -3,7 +3,7 @@
3 pname = "prometheus-lvm-exporter"; 3 pname = "prometheus-lvm-exporter";
4 inherit (sources.prometheus-lvm-exporter) version src; 4 inherit (sources.prometheus-lvm-exporter) version src;
5 5
6 vendorHash = "sha256-z/fV0PzoWSDTJ44En19o7zJPPPox5ymFw7sw0Ab9t00="; 6 vendorHash = "sha256-5H99RpUV3QV1hithBN7ztJlZdBi+SlaKegga8jDs0AM=";
7 7
8 doCheck = false; 8 doCheck = false;
9 9
diff --git a/system-profiles/core/default.nix b/system-profiles/core/default.nix
index 229a007e..e5f9dc16 100644
--- a/system-profiles/core/default.nix
+++ b/system-profiles/core/default.nix
@@ -180,13 +180,7 @@ in {
180 }; 180 };
181 environment.systemPackages = with pkgs; [ git-annex scutiger ]; 181 environment.systemPackages = with pkgs; [ git-annex scutiger ];
182 } 182 }
183 ] ++ (optional (options ? system.switch.enableNg) { 183 ] ++ (optional (options ? system.rebuild.enableNg) {
184 system.switch = lib.mkDefault {
185 enable = false;
186 enableNg = true;
187 };
188 })
189 ++ (optional (options ? system.rebuild.enableNg) {
190 system.rebuild.enableNg = lib.mkDefault true; 184 system.rebuild.enableNg = lib.mkDefault true;
191 }) 185 })
192 ++ (optional (options ? services.userborn) { 186 ++ (optional (options ? services.userborn) {
diff --git a/system-profiles/nfsroot.nix b/system-profiles/nfsroot.nix
index b0116d61..12d5d2b4 100644
--- a/system-profiles/nfsroot.nix
+++ b/system-profiles/nfsroot.nix
@@ -1,4 +1,4 @@
1{ config, options, pkgs, lib, flake, flakeInputs, ... }: 1{ config, options, pkgs, lib, flake, ... }:
2 2
3with lib; 3with lib;
4 4
diff --git a/system-profiles/zfs.nix b/system-profiles/zfs.nix
index a93dddd2..f3147f9e 100644
--- a/system-profiles/zfs.nix
+++ b/system-profiles/zfs.nix
@@ -1,7 +1,8 @@
1{ pkgs, lib, ... } : { 1{ config, pkgs, lib, ... } : {
2 config = { 2 config = {
3 boot = { 3 boot = {
4 kernelPackages = pkgs.linuxPackages_6_12; 4 kernelPackages = lib.mkIf (!config.boot.kernel.llvm.enable) pkgs.linuxPackages_6_12;
5 kernel.llvm.kernel = lib.mkIf config.boot.kernel.llvm.enable pkgs.linux_6_12;
5 zfs.package = pkgs.zfs_2_3; 6 zfs.package = pkgs.zfs_2_3;
6 7
7 supportedFilesystems.zfs = true; 8 supportedFilesystems.zfs = true;
diff --git a/user-profiles/yt-dlp.nix b/user-profiles/yt-dlp.nix
index ef0be87e..5c9858a6 100644
--- a/user-profiles/yt-dlp.nix
+++ b/user-profiles/yt-dlp.nix
@@ -13,11 +13,12 @@
13 "best" 13 "best"
14 ]; 14 ];
15 embed-subs = true; 15 embed-subs = true;
16 embed-thumbnail = true;
17 embed-metadata = true;
16 # write-subs = true; 18 # write-subs = true;
17 write-auto-subs = true; 19 write-auto-subs = true;
18 sub-langs = "en(-(gb|us|orig))?,de(-(de|orig))?,-live_chat,-rechat"; 20 sub-langs = "en(-(gb|us|orig))?,de(-(de|orig))?,-live_chat,-rechat";
19 prefer-free-formats = true; 21 prefer-free-formats = true;
20 embed-metadata = true;
21 # downloader = "${pkgs.axel}/bin/axel"; 22 # downloader = "${pkgs.axel}/bin/axel";
22 concurrent-fragments = 12; 23 concurrent-fragments = 12;
23 buffer-size = "16K"; 24 buffer-size = "16K";
@@ -29,6 +30,7 @@
29 # ]; 30 # ];
30 remux-video = "mp4>mkv"; 31 remux-video = "mp4>mkv";
31 output = lib.mkDefault "\"%(modified_date>%Y%m%d,release_date>%Y%m%d,upload_date>%Y%m%d)s %(title)s [%(uploader)s %(webpage_url)s].%(ext)s\""; 32 output = lib.mkDefault "\"%(modified_date>%Y%m%d,release_date>%Y%m%d,upload_date>%Y%m%d)s %(title)s [%(uploader)s %(webpage_url)s].%(ext)s\"";
33 audio-multistreams = true;
32 }; 34 };
33 }; 35 };
34 }; 36 };