100 lines
2.8 KiB
HolyC
100 lines
2.8 KiB
HolyC
{ config, pkgs, ... }:
|
|
|
|
{
|
|
imports = [
|
|
../../configuration.nix
|
|
./hardware-configuration.nix
|
|
];
|
|
|
|
networking.hostName = "framework";
|
|
|
|
# Tailscale and tailnet exposure are personal-laptop only.
|
|
networking.firewall.checkReversePath = "loose";
|
|
networking.firewall.interfaces."tailscale0".allowedTCPPorts = [ 4096 ];
|
|
|
|
services.tailscale.enable = true;
|
|
|
|
systemd.services.tailscale-set-operator = {
|
|
description = "Set Tailscale local preferences";
|
|
after = [ "tailscaled.service" ];
|
|
requires = [ "tailscaled.service" ];
|
|
wantedBy = [ "multi-user.target" ];
|
|
serviceConfig.Type = "oneshot";
|
|
serviceConfig.RemainAfterExit = true;
|
|
path = [ pkgs.tailscale ];
|
|
script = ''
|
|
tailscale set --operator=jet
|
|
tailscale set --exit-node-allow-lan-access=true
|
|
'';
|
|
};
|
|
|
|
systemd.services.opencode-tailnet = {
|
|
description = "Expose OpenCode on the tailnet";
|
|
after = [
|
|
"network-online.target"
|
|
"tailscaled.service"
|
|
"tailscale-set-operator.service"
|
|
];
|
|
wants = [ "network-online.target" ];
|
|
requires = [
|
|
"tailscaled.service"
|
|
"tailscale-set-operator.service"
|
|
];
|
|
wantedBy = [ "multi-user.target" ];
|
|
path = [
|
|
pkgs.tailscale
|
|
pkgs.coreutils
|
|
pkgs.gnugrep
|
|
];
|
|
preStart = ''
|
|
for attempt in {1..60}; do
|
|
if tailscale status --json --peers=false | grep -q '"BackendState": *"Running"'; then
|
|
tailscale serve --bg 4096
|
|
exit 0
|
|
fi
|
|
|
|
sleep 1
|
|
done
|
|
|
|
echo "Timed out waiting for Tailscale to reach Running state"
|
|
exit 1
|
|
'';
|
|
serviceConfig = {
|
|
Type = "simple";
|
|
User = "jet";
|
|
Environment = [ "OPENCODE_DB=opencode.db" ];
|
|
Restart = "always";
|
|
RestartSec = 5;
|
|
TimeoutStartSec = 75;
|
|
ExecStart = "/etc/profiles/per-user/jet/bin/o serve --hostname 127.0.0.1 --port 4096";
|
|
WorkingDirectory = config.users.users.jet.home;
|
|
};
|
|
};
|
|
|
|
programs.steam.enable = true;
|
|
|
|
# Personal media/gaming hardware support.
|
|
boot.extraModulePackages = with config.boot.kernelPackages; [ v4l2loopback ];
|
|
boot.kernelModules = [ "v4l2loopback" ];
|
|
boot.extraModprobeConfig = ''
|
|
options v4l2loopback devices=1 video_nr=1 card_label="OBS Virtual Camera" exclusive_caps=1
|
|
'';
|
|
|
|
services.udev.extraRules = ''
|
|
# GameCube adapter USB device (vendor ID 057e, product ID 0337)
|
|
SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ATTRS{idVendor}=="057e", ATTRS{idProduct}=="0337", MODE="0666"
|
|
# GameCube adapter HID device (needed for Dolphin to access controllers)
|
|
KERNEL=="hidraw*", ATTRS{idVendor}=="057e", ATTRS{idProduct}=="0337", MODE="0666", GROUP="input"
|
|
'';
|
|
|
|
fileSystems."/tmp" = {
|
|
device = "tmpfs";
|
|
fsType = "tmpfs";
|
|
options = [
|
|
"size=32G"
|
|
"mode=1777"
|
|
"nosuid"
|
|
"nodev"
|
|
];
|
|
};
|
|
}
|