2024-01-22 22:50:51 +01:00
{
2024-02-08 20:53:22 +01:00
repoFlake ,
nodeFlake ,
pkgs ,
lib ,
config ,
nodeName ,
localDomainName ,
system ,
2024-08-04 09:31:50 +02:00
packages' ,
2024-02-08 20:53:22 +01:00
. . .
} : {
2024-06-13 16:42:55 +02:00
nixpkgs . overlays = [
( final : previous : {
# inherit (nodeFlake.inputs.nixpkgs-systemd256.legacyPackages.${system}) systemd systemdMinimal;
} )
] ;
2024-01-24 00:24:04 +00:00
nixos-x13s = {
enable = true ;
# TODO: use hardware address
bluetoothMac = " 6 5 : 9 e : 7 a : 8 b : 8 6 : 2 8 " ;
2024-03-07 22:01:03 +01:00
kernel = " j h o v o l d " ;
2024-01-24 00:24:04 +00:00
} ;
2024-02-07 11:15:16 +01:00
services . illum . enable = true ;
2024-07-26 14:09:34 +02:00
systemd . services . bluetooth-x13s-mac = lib . mkForce {
2024-01-24 00:24:04 +00:00
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-02-08 20:53:22 +01:00
requiredBy = [ " b l u e t o o t h . s e r v i c e " ] ;
before = [ " b l u e t o o t h . s e r v i c e " ] ;
2024-01-24 00:24:04 +00:00
serviceConfig = {
Type = " o n e s h o t " ;
RemainAfterExit = true ;
# we need a tty, otherwise btmgmt will hang
StandardInput = " t t y " ;
TTYPath = " / d e v / t t y 2 " ;
TTYReset = " y e s " ;
TTYVHangup = " y e s " ;
} ;
} ;
2024-01-22 22:50:51 +01:00
imports = [
2024-01-24 00:24:04 +00:00
nodeFlake . inputs . nixos-x13s . nixosModules . default
2024-01-22 23:05:23 +01:00
repoFlake . inputs . sops-nix . nixosModules . sops
2024-01-22 22:50:51 +01:00
nodeFlake . inputs . disko . nixosModules . disko
./disko.nix
2024-01-24 00:24:04 +00:00
../../snippets/nix-settings.nix
2024-03-07 22:01:03 +01:00
../../snippets/nix-settings-holo-chain.nix
2024-05-25 11:35:26 +02:00
../../snippets/mycelium.nix
2024-01-22 23:05:23 +01:00
../../profiles/common/user.nix
2024-01-22 22:50:51 +01:00
{
services . openssh . enable = true ;
services . openssh . settings . PermitRootLogin = " y e s " ;
services . openssh . openFirewall = true ;
2024-01-24 00:24:04 +00:00
sops . defaultSopsFile = ../../../../secrets / $ { nodeName } /secrets.yaml ;
sops . defaultSopsFormat = " y a m l " ;
2024-01-22 22:50:51 +01:00
2024-01-22 22:45:42 +00:00
users . commonUsers = {
enable = true ;
enableNonRoot = true ;
} ;
2024-05-02 09:45:30 +02:00
sops . secrets . builder-private-key = { } ;
nix . distributedBuilds = true ;
nix . buildMachines = [
2024-06-13 16:42:55 +02:00
# test these with: sudo nix store ping --store 'ssh-ng://nix-remote-builder@sj-bm-hostkey0.dev.infra.holochain.org?ssh-key=/run/secrets/builder-private-key'
2024-05-02 09:45:30 +02:00
{
hostName = " s j - b m - h o s t k e y 0 . d e v . i n f r a . h o l o c h a i n . o r g " ;
sshUser = " n i x - r e m o t e - b u i l d e r " ;
sshKey = config . sops . secrets . builder-private-key . path ;
protocol = " s s h - n g " ;
systems = [
" x 8 6 _ 6 4 - l i n u x "
2024-06-02 23:26:26 +02:00
# "aarch64-linux"
2024-05-02 09:45:30 +02:00
] ;
supportedFeatures = [
" b i g - p a r a l l e l "
" k v m "
] ;
2024-07-26 14:31:25 +02:00
maxJobs = 0 ;
}
{
hostName = " x 6 4 - l i n u x - d e v - 0 1 . d e v . i n f r a . h o l o c h a i n . o r g " ;
sshUser = " n i x - r e m o t e - b u i l d e r " ;
sshKey = config . sops . secrets . builder-private-key . path ;
protocol = " s s h - n g " ;
systems = [
" x 8 6 _ 6 4 - l i n u x "
# "aarch64-linux"
] ;
supportedFeatures = [
" b i g - p a r a l l e l "
" k v m "
] ;
2024-05-02 09:45:30 +02:00
maxJobs = 32 ;
}
] ;
2024-01-22 22:50:51 +01:00
}
2024-03-07 22:01:03 +01:00
# TODO: create syncthing os snippet
( let
tcp = [ 22000 ] ;
udp = [
22000
21027
] ;
in {
# TODO: upstream feature for inverse rule to work: `! --in-interface zt+`
networking . firewall . interfaces . " e n + " . allowedTCPPorts = tcp ;
networking . firewall . interfaces . " e n + " . allowedUDPPorts = udp ;
networking . firewall . interfaces . " w l + " . allowedTCPPorts = tcp ;
networking . firewall . interfaces . " w l + " . allowedUDPPorts = udp ;
2024-04-18 17:36:13 +02:00
networking . firewall . allowedTCPPorts = [
# iperf3
5201
] ;
2024-03-07 22:01:03 +01:00
} )
2024-01-24 00:24:04 +00:00
../../snippets/home-manager-with-zsh.nix
2024-01-22 23:05:23 +01:00
../../snippets/sway-desktop.nix
2024-01-24 00:24:04 +00:00
../../snippets/bluetooth.nix
2024-01-22 23:47:48 +00:00
../../snippets/timezone.nix
2024-01-25 00:32:37 +01:00
../../snippets/radicale.nix
2024-03-01 11:21:37 +01:00
../../snippets/holo-zerotier.nix
2024-06-13 16:42:55 +02:00
../../snippets/k3s-w-nix-snapshotter.nix
2024-01-22 22:50:51 +01:00
] ;
2024-01-22 22:45:42 +00:00
networking . hostName = nodeName ;
networking . firewall . enable = true ;
networking . networkmanager . enable = true ;
2024-01-22 22:50:51 +01:00
nixpkgs . config . allowUnfree = true ;
environment . systemPackages = [
pkgs . sshfs
pkgs . util-linux
pkgs . coreutils
pkgs . vim
pkgs . git
pkgs . git-crypt
] ;
2024-01-22 23:05:23 +01:00
system . stateVersion = " 2 3 . 1 1 " ;
2024-01-22 23:47:48 +00:00
home-manager . users . root = _ : {
home . stateVersion = " 2 3 . 1 1 " ;
} ;
2024-01-22 23:05:23 +01:00
home-manager . users . steveej = _ : {
home . stateVersion = " 2 3 . 1 1 " ;
2024-01-22 22:50:51 +01:00
2024-01-22 23:05:23 +01:00
imports = [
../../../home-manager/configuration/graphical-fullblown.nix
] ;
2024-01-22 22:50:51 +01:00
2024-02-08 20:53:22 +01:00
home . sessionVariables = { } ;
2024-01-22 22:50:51 +01:00
2024-01-22 23:05:23 +01:00
home . packages = with pkgs ; [
] ;
2024-01-24 00:24:04 +00:00
# TODO: currently unsupported
services . gammastep . enable = lib . mkForce false ;
} ;
boot = {
loader . systemd-boot . enable = true ;
2024-08-22 14:34:01 +02:00
loader . systemd-boot . configurationLimit = 5 ;
2024-01-24 00:24:04 +00:00
loader . efi . canTouchEfiVariables = lib . mkForce false ;
loader . efi . efiSysMountPoint = " / b o o t " ;
2024-02-08 20:53:22 +01:00
blacklistedKernelModules = [ " w w a n " ] ;
2024-01-22 23:05:23 +01:00
} ;
2024-01-25 00:32:37 +01:00
2024-07-26 14:09:34 +02:00
hardware . firmware = lib . mkBefore [
2024-08-04 09:31:50 +02:00
packages' . x13s-bt-firmware
packages' . x13s-ath11k-firmware
2024-07-26 14:09:34 +02:00
] ;
2024-01-25 00:32:37 +01:00
# see https://linrunner.de/tlp/
2024-02-07 11:15:16 +01:00
# TODO: find an equivalent to tlp that supports this machine
2024-01-25 00:32:37 +01:00
services . tlp = {
2024-02-07 11:15:16 +01:00
enable = false ;
2024-01-25 00:32:37 +01:00
settings = {
START_CHARGE_THRESH_BAT0 = " 8 0 " ;
STOP_CHARGE_THRESH_BAT0 = " 8 5 " ;
} ;
} ;
# android on linux
2024-08-08 14:37:38 +02:00
virtualisation . waydroid . enable = true ;
2024-02-07 11:08:46 +01:00
hardware . ledger . enable = true ;
2024-03-01 11:21:37 +01:00
2024-06-13 16:42:55 +02:00
virtualisation . containers . enable = true ;
virtualisation . podman . enable = true ;
2024-03-07 22:01:03 +01:00
nix . settings . substituters = [
" h t t p s : / / n i x o s - x 1 3 s . c a c h i x . o r g "
] ;
nix . settings . trusted-public-keys = [
" n i x o s - x 1 3 s . c a c h i x . o r g - 1 : S z r o H b i d o l B D 3 S f 6 U u s X p 1 2 Y Z + a 5 y n W v 0 R t Y F 0 b t F o s = "
] ;
2024-03-01 11:21:37 +01:00
steveej . holo-zerotier = {
enable = true ;
autostart = false ;
} ;
2024-07-26 14:09:34 +02:00
services . udev . packages = [
pkgs . android-udev-rules
] ;
programs . adb . enable = true ;
nix . settings . sandbox = lib . mkForce " r e l a x e d " ;
2024-01-22 22:50:51 +01:00
}