infra/nix/os/devices/steveej-x13s/configuration.nix

288 lines
7.6 KiB
Nix
Raw Normal View History

{
2024-02-08 20:53:22 +01:00
repoFlake,
nodeFlake,
pkgs,
lib,
config,
nodeName,
system,
...
2024-11-15 10:17:56 +01:00
}:
{
nixpkgs.overlays = [ nodeFlake.overlays.default ];
nixos-x13s = {
enable = true;
# TODO: use hardware address
bluetoothMac = "65:9e:7a:8b:86:28";
kernel = "jhovold";
};
services.illum.enable = true;
# printint and autodiscovery of printers
services.printing.enable = true;
2024-11-15 10:17:56 +01:00
services.printing.drivers = [ pkgs.hplip ];
services.avahi = {
enable = true;
nssmdns4 = true;
openFirewall = true;
};
hardware.sane.enable = true; # enables support for SANE scanners
systemd.services.bluetooth-x13s-mac = lib.mkForce {
enable = true;
path = [
pkgs.systemd
pkgs.util-linux
pkgs.bluez5-experimental
pkgs.expect
];
script = ''
# TODO: this may not be required
while ! (journalctl -b0 | grep 'Bluetooth: hci0: QCA setup on UART is completed'); do
echo Waiting for bluetooth firmware to complete
echo sleep 1
done
(
# best effort
set +e
rfkill block bluetooth
echo $?
btmgmt public-addr ${config.nixos-x13s.bluetoothMac}
echo $?
rfkill unblock bluetooth
echo $?
)
'';
2024-11-15 10:17:56 +01:00
requiredBy = [ "bluetooth.service" ];
before = [ "bluetooth.service" ];
serviceConfig = {
Type = "oneshot";
RemainAfterExit = true;
# we need a tty, otherwise btmgmt will hang
StandardInput = "tty";
TTYPath = "/dev/tty2";
TTYReset = "yes";
TTYVHangup = "yes";
};
};
imports = [
nodeFlake.inputs.nixos-x13s.nixosModules.default
repoFlake.inputs.sops-nix.nixosModules.sops
nodeFlake.inputs.disko.nixosModules.disko
./disko.nix
2024-10-08 23:46:08 +02:00
../../profiles/common/user.nix
../../snippets/nix-settings.nix
../../snippets/nix-settings-holo-chain.nix
2024-05-25 11:35:26 +02:00
../../snippets/mycelium.nix
2024-11-24 16:09:58 +01:00
nodeFlake.inputs.extra-container.nixosModules.default
2025-03-29 15:49:30 +01:00
{
networking.nat = {
enable = true;
internalInterfaces = ["ve-+"];
# externalInterface = "enu1u1u2";
# Lazy IPv6 connectivity for the container
# enableIPv6 = true;
};
}
2024-12-23 14:11:34 +01:00
# TODO: broken with: v4l2loopback-0.13.2-6.13.0-rc3.drv
# make: *** [Makefile:53: v4l2loopback.ko] Error 2
2024-11-24 16:09:58 +01:00
# ../../snippets/obs-studio.nix
{
services.openssh.enable = true;
services.openssh.settings.PermitRootLogin = "yes";
services.openssh.openFirewall = true;
sops.defaultSopsFile = ../../../../secrets/${nodeName}/secrets.yaml;
sops.defaultSopsFormat = "yaml";
users.commonUsers = {
enable = true;
enableNonRoot = true;
};
2024-11-15 10:17:56 +01:00
sops.secrets.builder-private-key = { };
nix.distributedBuilds = true;
nix.buildMachines = [
# test these with: sudo nix store ping --store 'ssh-ng://nix-remote-builder@<fqdn>?ssh-key=/run/secrets/builder-private-key'
{
hostName = "buildbot-nix-0.infra.holochain.org";
sshUser = "nix-remote-builder";
sshKey = config.sops.secrets.builder-private-key.path;
protocol = "ssh-ng";
2024-11-15 10:17:56 +01:00
systems = [ "x86_64-linux" ];
supportedFeatures = [
"big-parallel"
"kvm"
"nixos-test"
];
maxJobs = 16;
}
{
hostName = "aarch64-linux-builder-0.infra.holochain.org";
sshUser = "nix-remote-builder";
sshKey = config.sops.secrets.builder-private-key.path;
protocol = "ssh-ng";
2024-11-15 10:17:56 +01:00
systems = [ "aarch64-linux" ];
supportedFeatures = [
"big-parallel"
"kvm"
"nixos-test"
];
2024-11-23 14:43:21 +01:00
maxJobs = 8;
}
{
hostName = "x64-linux-dev-01.dev.infra.holochain.org";
sshUser = "nix-remote-builder";
sshKey = config.sops.secrets.builder-private-key.path;
protocol = "ssh-ng";
systems = [
# "x86_64-linux"
"aarch64-linux"
];
supportedFeatures = [
"big-parallel"
"kvm"
"nixos-test"
];
maxJobs = 0;
}
];
}
2025-04-05 21:33:13 +02:00
{
# yubikey / smartcard. only set to `true` for `ykman piv` commands.
services.pcscd.enable = false;
}
# TODO: create syncthing os snippet
2024-11-15 10:17:56 +01:00
(
let
tcp = [ 22000 ];
udp = [
22000
21027
];
in
{
# TODO: upstream feature for inverse rule to work: `! --in-interface zt+`
networking.firewall.interfaces."en+".allowedTCPPorts = tcp;
networking.firewall.interfaces."en+".allowedUDPPorts = udp;
networking.firewall.interfaces."wl+".allowedTCPPorts = tcp;
networking.firewall.interfaces."wl+".allowedUDPPorts = udp;
networking.firewall.allowedTCPPorts = [
# iperf3
5201
];
}
)
../../snippets/home-manager-with-zsh.nix
../../snippets/sway-desktop.nix
../../snippets/bluetooth.nix
2024-01-22 23:47:48 +00:00
../../snippets/timezone.nix
../../snippets/radicale.nix
../../snippets/holo-zerotier.nix
# ../../snippets/k3s-w-nix-snapshotter.nix
];
networking.hostName = nodeName;
networking.firewall.enable = true;
networking.networkmanager.enable = true;
nixpkgs.config.allowUnfree = true;
environment.systemPackages = [
pkgs.sshfs
pkgs.util-linux
pkgs.coreutils
pkgs.vim
pkgs.git
pkgs.git-crypt
];
system.stateVersion = "23.11";
2024-11-15 10:17:56 +01:00
home-manager.users.root = _: { home.stateVersion = "23.11"; };
home-manager.users.steveej = _: {
home.stateVersion = "23.11";
2024-11-15 10:17:56 +01:00
imports = [ ../../../home-manager/configuration/graphical-fullblown.nix ];
2024-11-15 10:17:56 +01:00
nixpkgs.overlays = [ nodeFlake.overlays.default ];
2024-11-15 10:17:56 +01:00
home.sessionVariables = { };
2024-11-15 10:17:56 +01:00
home.packages = with pkgs; [ ];
# TODO(upstream): currently unsupported on x13s
2024-10-13 20:16:50 +02:00
services.gammastep.enable = true;
};
boot = {
loader.systemd-boot.enable = true;
loader.systemd-boot.configurationLimit = 5;
loader.efi.canTouchEfiVariables = lib.mkForce false;
loader.efi.efiSysMountPoint = "/boot";
blacklistedKernelModules = [
"wwan"
2025-01-19 23:37:18 +01:00
# "qcom_soundwire"
# "snd_soc_qcom_sdw"
# "snd_soc_sc8280xp"
];
};
# TODO: debug this collision: collision between `/nix/store/cb32qlzc4pm6h4arw59kxqyzbvgnmx7g-b43-firmware-6.30.163.46-zstd/lib/firmware/b43/a0g0bsinitvals5.fw.zst' and `/nix/store/niffz3cf0v91y5knz0an29fwvm8amigm-b43-firmware-5.100.138-zstd/lib/firmware/b43/a0g0bsinitvals5.fw.zst'
hardware.firmware = lib.mkBefore [
(pkgs.runCommand "x13s-ath11k-firmware-before" { } ''
mkdir -p $out/lib/firmware/ath11k/WCN6855/hw2.1/
cp -v ${nodeFlake.inputs.ath11k-firmware}/WCN6855/hw2.1/{board-2,regdb}.bin $out/lib/firmware/ath11k/WCN6855/hw2.1/
cp -v ${nodeFlake.inputs.ath11k-firmware}/WCN6855/hw2.1/1.1/WLAN.HSP.1.1-03125-QCAHSPSWPL_V1_V2_SILICONZ_LITE-3.6510.41/{amss,m3}.bin $out/lib/firmware/ath11k/WCN6855/hw2.1/
'')
];
# see https://linrunner.de/tlp/
# TODO: find an equivalent to tlp that supports this machine
services.tlp = {
enable = false;
settings = {
START_CHARGE_THRESH_BAT0 = "80";
STOP_CHARGE_THRESH_BAT0 = "85";
};
};
# android on linux
virtualisation.waydroid.enable = true;
2024-02-07 11:08:46 +01:00
hardware.ledger.enable = true;
virtualisation.containers.enable = true;
virtualisation.podman.enable = true;
steveej.holo-zerotier = {
enable = true;
autostart = false;
};
2024-11-15 10:17:56 +01:00
services.udev.packages = [ pkgs.android-udev-rules ];
programs.adb.enable = true;
nix.settings.sandbox = lib.mkForce "relaxed";
systemd.user.services.wireplumber.environment.LIBCAMERA_IPA_PROXY_PATH = "${pkgs.libcamera}/libexec/libcamera";
}