···
60
60
"nixpkgs": "nixpkgs"
61
61
},
62
62
"locked": {
63
63
-
"lastModified": 1776681486,
64
64
-
"narHash": "sha256-akO/L6Jt4341uBnf3CIpJOTTYyCBQsSvP2hnikV2oMY=",
63
63
+
"lastModified": 1777024856,
64
64
+
"narHash": "sha256-OQ+yIcRMXo4UaHyX+W5DCgBvJ5dZo/3kFGWPJiuR6x8=",
65
65
"owner": "catppuccin",
66
66
"repo": "nix",
67
67
-
"rev": "b85b328ecc9874f4e7424db2820333c148e8dd66",
67
67
+
"rev": "f41cc1cf13647e482b7317396f749840ef715e16",
68
68
"type": "github"
69
69
},
70
70
"original": {
···
79
79
"nixpkgs": "nixpkgs_2"
80
80
},
81
81
"locked": {
82
82
-
"lastModified": 1776721380,
83
83
-
"narHash": "sha256-EW3KcRtB91amD+eiuggdWX3HUEEnUHTO+c7b2vS9T/k=",
82
82
+
"lastModified": 1776983715,
83
83
+
"narHash": "sha256-XonefkUGuMkCvyFfy3B6crz6FV8Ghsrc3Lg1SIWi2hg=",
84
84
"owner": "9001",
85
85
"repo": "copyparty",
86
86
-
"rev": "cbd82b654a1431a076c3fe6a0ec653dca2500b57",
86
86
+
"rev": "1e7de5d14f00f8821b1a32f3009f4328b1a5e04a",
87
87
"type": "github"
88
88
},
89
89
"original": {
···
386
386
]
387
387
},
388
388
"locked": {
389
389
-
"lastModified": 1776777932,
390
390
-
"narHash": "sha256-0R3Yow/NzSeVGUke5tL7CCkqmss4Vmi6BbV6idHzq/8=",
389
389
+
"lastModified": 1777004352,
390
390
+
"narHash": "sha256-SV+9PgNwZ8jHVCjK6YaCBzaheLSW7cDnm5DpOYrD8Vw=",
391
391
"owner": "nix-community",
392
392
"repo": "home-manager",
393
393
-
"rev": "5d5640599a0050b994330328b9fd45709c909720",
393
393
+
"rev": "6012cf1fed3eba66115f3fd117b9be6bd2a15b2f",
394
394
"type": "github"
395
395
},
396
396
"original": {
···
532
532
"xwayland-satellite-unstable": "xwayland-satellite-unstable"
533
533
},
534
534
"locked": {
535
535
-
"lastModified": 1776714033,
536
536
-
"narHash": "sha256-O+34yexfSxigXyb5usuzqac7vRHy6gYv7BtNtzDhQNo=",
535
535
+
"lastModified": 1777046946,
536
536
+
"narHash": "sha256-ZtUEsJM4a2lzcPQFRX4xMrbs7hkueTsiTe0l1PaHjos=",
537
537
"owner": "sodiboo",
538
538
"repo": "niri-flake",
539
539
-
"rev": "32bed686f4fd8274a5e4a58d071687a74e19821e",
539
539
+
"rev": "29118aa8592316b9cd893a45a03856be72e07df2",
540
540
"type": "github"
541
541
},
542
542
"original": {
···
565
565
"niri-unstable": {
566
566
"flake": false,
567
567
"locked": {
568
568
-
"lastModified": 1776706941,
569
569
-
"narHash": "sha256-nnv27JD0FOOqs1Hh67kydXFzZoEu8e0QyMf0R9AXaIw=",
568
568
+
"lastModified": 1777042834,
569
569
+
"narHash": "sha256-1uyLRlGAFAecxyevBQ9/LZQjD6cwdcqECJBIWVIhlXE=",
570
570
"owner": "YaLTeR",
571
571
"repo": "niri",
572
572
-
"rev": "e9c182a13c1d12762351ec01ce0ec711d41b0337",
572
572
+
"rev": "719255ac358304b96ac951ee1bfce1f0299202bd",
573
573
"type": "github"
574
574
},
575
575
"original": {
···
600
600
},
601
601
"nixos-hardware": {
602
602
"locked": {
603
603
-
"lastModified": 1775490113,
604
604
-
"narHash": "sha256-2ZBhDNZZwYkRmefK5XLOusCJHnoeKkoN95hoSGgMxWM=",
603
603
+
"lastModified": 1776983936,
604
604
+
"narHash": "sha256-ZOQyNqSvJ8UdrrqU1p7vaFcdL53idK+LOM8oRWEWh6o=",
605
605
"owner": "NixOS",
606
606
"repo": "nixos-hardware",
607
607
-
"rev": "c775c2772ba56e906cbeb4e0b2db19079ef11ff7",
607
607
+
"rev": "2096f3f411ce46e88a79ae4eafcfc9df8ed41c61",
608
608
"type": "github"
609
609
},
610
610
"original": {
···
664
664
},
665
665
"nixpkgs": {
666
666
"locked": {
667
667
-
"lastModified": 1776169885,
668
668
-
"narHash": "sha256-l/iNYDZ4bGOAFQY2q8y5OAfBBtrDAaPuRQqWaFHVRXM=",
667
667
+
"lastModified": 1776548001,
668
668
+
"narHash": "sha256-ZSK0NL4a1BwVbbTBoSnWgbJy9HeZFXLYQizjb2DPF24=",
669
669
"owner": "NixOS",
670
670
"repo": "nixpkgs",
671
671
-
"rev": "4bd9165a9165d7b5e33ae57f3eecbcb28fb231c9",
671
671
+
"rev": "b12141ef619e0a9c1c84dc8c684040326f27cdcc",
672
672
"type": "github"
673
673
},
674
674
"original": {
···
695
695
},
696
696
"nixpkgs-stable": {
697
697
"locked": {
698
698
-
"lastModified": 1776434932,
699
699
-
"narHash": "sha256-gyqXNMgk3sh+ogY5svd2eNLJ6oEwzbAeaoBrrxD0lKk=",
698
698
+
"lastModified": 1776734388,
699
699
+
"narHash": "sha256-vl3dkhlE5gzsItuHoEMVe+DlonsK+0836LIRDnm6MXQ=",
700
700
"owner": "NixOS",
701
701
"repo": "nixpkgs",
702
702
-
"rev": "c7f47036d3df2add644c46d712d14262b7d86c0c",
702
702
+
"rev": "10e7ad5bbcb421fe07e3a4ad53a634b0cd57ffac",
703
703
"type": "github"
704
704
},
705
705
"original": {
···
1162
1162
]
1163
1163
},
1164
1164
"locked": {
1165
1165
-
"lastModified": 1776749289,
1166
1166
-
"narHash": "sha256-y7L1ZtDDB69XDV5l6STEnkSrBFEGwfkVCiKgDiLYBGo=",
1165
1165
+
"lastModified": 1777008980,
1166
1166
+
"narHash": "sha256-pVZgqx3xbyFs0CnVlPLsizHL+S8vK1JcHQ1WVw/X+NI=",
1167
1167
"owner": "0xc000022070",
1168
1168
"repo": "zen-browser-flake",
1169
1169
-
"rev": "9e2f9a4564f6ed111f442779765d75e9ace407ea",
1169
1169
+
"rev": "269ed2e95863c99ce067672813767661612e402b",
1170
1170
"type": "github"
1171
1171
},
1172
1172
"original": {
···
52
52
options = [ "noatime" ];
53
53
};
54
54
55
55
+
fileSystems."/var/lib/frigate/recordings" = {
56
56
+
device = "/mnt/storage2/frigate/recordings";
57
57
+
fsType = "none";
58
58
+
options = [ "bind" ];
59
59
+
depends = [ "/mnt/storage2" ];
60
60
+
};
61
61
+
fileSystems."/var/lib/frigate/clips" = {
62
62
+
device = "/mnt/storage2/frigate/clips";
63
63
+
fsType = "none";
64
64
+
options = [ "bind" ];
65
65
+
depends = [ "/mnt/storage2" ];
66
66
+
};
67
67
+
55
68
systemd.tmpfiles.rules = [
56
69
"d /mnt/storage1 0755 sean users -"
57
70
"d /mnt/storage2 0755 sean users -"
···
48
48
libnotify
49
49
50
50
# Claude Code
51
51
+
pi-coding-agent
51
52
claude-code
52
53
(pkgs.writeShellScriptBin "claude-notify" ''
53
54
PANE_ID="$ZELLIJ_PANE_ID"
···
30
30
};
31
31
framerate = 30;
32
32
gpuMem = 256;
33
33
+
wifi.freqList = [
34
34
+
5180 5200 5220 5240 5260 5280 5300 5320
35
35
+
5500 5520 5540 5560 5580 5600 5620 5640 5660 5680 5700 5720
36
36
+
5745 5765 5785 5805 5825
37
37
+
];
33
38
};
34
39
35
40
system.stateVersion = "24.11";
···
1
1
{ ... }: {
2
2
flake.modules.nixos.pi-wifi =
3
3
-
{ config, pkgs, ... }:
3
3
+
{ config, pkgs, lib, ... }:
4
4
+
let
5
5
+
cfg = config.pi.wifi;
6
6
+
in
4
7
{
5
5
-
services.openssh.hostKeys = [
6
6
-
{
7
7
-
path = "/etc/ssh/ssh_host_ed25519_key";
8
8
-
type = "ed25519";
9
9
-
}
10
10
-
];
11
11
-
12
12
-
age.identityPaths = [ "/etc/ssh/ssh_host_ed25519_key" ];
13
13
-
age.secrets.wifi = {
14
14
-
file = ../secrets/wifi.age;
15
15
-
mode = "0444";
8
8
+
options.pi.wifi.freqList = lib.mkOption {
9
9
+
type = lib.types.listOf lib.types.int;
10
10
+
default = [ ];
11
11
+
description = "wpa_supplicant freq_list (MHz). Empty = no constraint. Pi Zero 2W is 2.4 GHz only; Pi 4 is dual-band.";
16
12
};
17
13
18
18
-
# Ensure wpa_supplicant starts after agenix decrypts the WiFi PSK
19
19
-
systemd.services.wpa_supplicant.after = [ "run-agenix.d.mount" ];
20
20
-
systemd.services.wpa_supplicant.requires = [ "run-agenix.d.mount" ];
14
14
+
config = {
15
15
+
services.openssh.hostKeys = [
16
16
+
{
17
17
+
path = "/etc/ssh/ssh_host_ed25519_key";
18
18
+
type = "ed25519";
19
19
+
}
20
20
+
];
21
21
22
22
-
networking.wireless = {
23
23
-
enable = true;
24
24
-
secretsFile = config.age.secrets.wifi.path;
25
25
-
networks."GL-MT6000-6a6" = {
26
26
-
pskRaw = "ext:WIFI_PSK";
27
27
-
extraConfig = ''
28
28
-
freq_list=5180 5200 5220 5240 5260 5280 5300 5320 5500 5520 5540 5560 5580 5600 5620 5640 5660 5680 5700 5720 5745 5765 5785 5805 5825
29
29
-
'';
22
22
+
age.identityPaths = [ "/etc/ssh/ssh_host_ed25519_key" ];
23
23
+
age.secrets.wifi = {
24
24
+
file = ../secrets/wifi.age;
25
25
+
mode = "0444";
26
26
+
};
27
27
+
28
28
+
# Ensure wpa_supplicant starts after agenix decrypts the WiFi PSK
29
29
+
systemd.services.wpa_supplicant.after = [ "run-agenix.d.mount" ];
30
30
+
systemd.services.wpa_supplicant.requires = [ "run-agenix.d.mount" ];
31
31
+
32
32
+
networking.wireless = {
33
33
+
enable = true;
34
34
+
secretsFile = config.age.secrets.wifi.path;
35
35
+
networks."GL-MT6000-6a6" = {
36
36
+
pskRaw = "ext:WIFI_PSK";
37
37
+
extraConfig = lib.optionalString (cfg.freqList != [ ])
38
38
+
"freq_list=${lib.concatStringsSep " " (map toString cfg.freqList)}\n";
39
39
+
};
30
40
};
31
31
-
};
32
41
33
33
-
systemd.services.wifi-powersave-off = {
34
34
-
description = "Disable WiFi power save";
35
35
-
after = [ "network.target" ];
36
36
-
wantedBy = [ "multi-user.target" ];
37
37
-
serviceConfig = {
38
38
-
Type = "oneshot";
39
39
-
ExecStart = "${pkgs.iw}/bin/iw dev wlan0 set power_save off";
40
40
-
RemainAfterExit = true;
42
42
+
systemd.services.wifi-powersave-off = {
43
43
+
description = "Disable WiFi power save";
44
44
+
after = [ "network.target" ];
45
45
+
wantedBy = [ "multi-user.target" ];
46
46
+
serviceConfig = {
47
47
+
Type = "oneshot";
48
48
+
ExecStart = "${pkgs.iw}/bin/iw dev wlan0 set power_save off";
49
49
+
RemainAfterExit = true;
50
50
+
};
41
51
};
42
52
};
43
53
};
···
83
83
VISUAL = "hx";
84
84
SUDO_EDITOR = "hx";
85
85
SSH_AUTH_SOCK = "${config.home.homeDirectory}/.1password/agent.sock";
86
86
-
SSH_ASKPASS = "${pkgs.openssh-askpass}/bin/gnome-ssh-askpass3";
86
86
+
SSH_ASKPASS = "${pkgs.openssh-askpass}/libexec/gtk-ssh-askpass";
87
87
SSH_ASKPASS_REQUIRE = "prefer";
88
88
};
89
89
···
1
1
+
{
2
2
+
pkgs,
3
3
+
}:
4
4
+
5
5
+
pkgs.stdenv.mkDerivation {
6
6
+
pname = "harpoon-wasm";
7
7
+
version = "0.3.0";
8
8
+
9
9
+
src = pkgs.fetchurl {
10
10
+
url = "https://github.com/Nacho114/harpoon/releases/download/v0.3.0/harpoon.wasm";
11
11
+
hash = "sha256-f4z1enHx27vRFTN6MWOHgNfhjpuHbe8cgclwGIyqMvI=";
12
12
+
};
13
13
+
14
14
+
dontUnpack = true;
15
15
+
16
16
+
installPhase = ''
17
17
+
install -Dm644 $src $out/harpoon.wasm
18
18
+
'';
19
19
+
20
20
+
meta = {
21
21
+
description = "Zellij plugin for quickly searching and switching between panes";
22
22
+
homepage = "https://github.com/Nacho114/harpoon";
23
23
+
license = pkgs.lib.licenses.mit;
24
24
+
};
25
25
+
}