tahani: add headless niri workstation with Sunshine streaming

This commit is contained in:
2026-02-02 21:16:21 +00:00
parent 6ec2bbe02d
commit 631e32469f
7 changed files with 123 additions and 38 deletions

View File

@@ -14,7 +14,9 @@
../../profiles/core.nix
../../profiles/nixos.nix
../../profiles/openssh.nix
../../profiles/remote-desktop.nix
../../profiles/tailscale.nix
../../profiles/wayland-headless.nix
inputs.sops-nix.nixosModules.sops
];
@@ -30,12 +32,14 @@
../../profiles/fish.nix
../../profiles/fzf.nix
../../profiles/git.nix
../../profiles/ghostty.nix
../../profiles/home.nix
../../profiles/jjui.nix
../../profiles/jujutsu.nix
../../profiles/lazygit.nix
../../profiles/lumen.nix
../../profiles/mise.nix
../../profiles/niri.nix
../../profiles/nono.nix
../../profiles/neovim
../../profiles/opencode.nix

View File

@@ -36,44 +36,44 @@
};
};
on-window-detected = [
{
"if" = {
"app-id" = "com.apple.systempreferences";
};
run = "layout floating";
}
{
"if" = {
"app-id" = "com.mitchellh.ghostty";
};
run = ["layout tiling" "move-node-to-workspace 3"];
}
{
"if" = {
"app-id" = "net.imput.helium";
};
run = "move-node-to-workspace 2";
}
{
"if" = {
"app-id" = "com.tinyspeck.slackmacgap";
};
run = "move-node-to-workspace 5";
}
{
"if" = {
"app-id" = "net.whatsapp.WhatsApp";
};
run = "move-node-to-workspace 5";
}
{
"if" = {
"app-id" = "com.tidal.desktop";
};
run = "move-node-to-workspace 6";
}
];
on-window-detected = [
{
"if" = {
"app-id" = "com.apple.systempreferences";
};
run = "layout floating";
}
{
"if" = {
"app-id" = "com.mitchellh.ghostty";
};
run = ["layout tiling" "move-node-to-workspace 3"];
}
{
"if" = {
"app-id" = "net.imput.helium";
};
run = "move-node-to-workspace 2";
}
{
"if" = {
"app-id" = "com.tinyspeck.slackmacgap";
};
run = "move-node-to-workspace 5";
}
{
"if" = {
"app-id" = "net.whatsapp.WhatsApp";
};
run = "move-node-to-workspace 5";
}
{
"if" = {
"app-id" = "com.tidal.desktop";
};
run = "move-node-to-workspace 6";
}
];
mode = {
main.binding = {

View File

@@ -4,6 +4,7 @@
casks = [
"ghostty@tip"
"helium-browser"
"moonlight"
"tidal"
];
};

18
profiles/niri.nix Normal file
View File

@@ -0,0 +1,18 @@
{...}: {
xdg.configFile."niri/config.kdl".text = ''
input {
keyboard {
xkb {
layout "us"
}
}
}
binds {
Mod+Return { spawn "ghostty"; }
Mod+B { spawn "firefox"; }
Mod+Shift+Q { close-window; }
Mod+Shift+E { quit; }
}
'';
}

View File

@@ -61,6 +61,8 @@ with pkgs;
]
++ lib.optionals stdenv.isLinux [
gcc15
ghostty
ghostty.terminfo
google-chrome
lm_sensors
]

View File

@@ -0,0 +1,21 @@
{...}: {
services.sunshine = {
enable = true;
openFirewall = false;
capSysAdmin = true;
};
networking.firewall.interfaces.tailscale0 = {
allowedTCPPorts = [
47984
47989
47990
];
allowedUDPPorts = [
47998
47999
48000
48002
];
};
}

View File

@@ -0,0 +1,39 @@
{
pkgs,
user,
...
}: {
services.seatd.enable = true;
services.pipewire = {
enable = true;
wireplumber.enable = true;
};
xdg.portal = {
enable = true;
extraPortals = with pkgs; [
xdg-desktop-portal-wlr
xdg-desktop-portal-gtk
];
};
programs.niri.enable = true;
users.users.${user}.linger = true;
systemd.user.services.niri-headless = {
description = "Niri headless session";
environment = {
WLR_BACKENDS = "headless";
WLR_HEADLESS_OUTPUTS = "1";
WAYLAND_DISPLAY = "wayland-1";
};
serviceConfig = {
ExecStart = "${pkgs.niri}/bin/niri --session";
Restart = "always";
RestartSec = 2;
};
wantedBy = ["default.target"];
};
}