Files
chiasson-nix/modules/hosts/t2mbp/configuration.nix
T
2026-05-01 15:44:19 -03:00

170 lines
5.9 KiB
Nix

{ self, inputs, ... }: {
flake.nixosModules.t2mbpConfiguration =
{ self, config, pkgs, ... }:
{
imports = [
self.nixosModules.t2mbpHardware
self.nixosModules.t2linux
inputs.t2fanrd.nixosModules.t2fanrd
inputs.home-manager.nixosModules.home-manager
inputs.sops-nix.nixosModules.sops
self.nixosModules.system
self.nixosModules.desktop
self.nixosModules.users
self.nixosModules."client-services"
./_private/platform.nix
./_private/firmware.nix
];
# ───────────────────────────── Sops (see repo secrets/.sops.yaml) ───────────
sops = {
defaultSopsFile = ../../../secrets/secrets.yaml;
defaultSopsFormat = "yaml";
age.sshKeyPaths = [ "/etc/ssh/ssh_host_ed25519_key" ];
};
sops.secrets."caching/attic/token" = {
owner = "olivier";
group = "users";
mode = "0400";
};
sops.secrets."users/olivier/hashedPassword".neededForUsers = true;
sops.secrets."swiftshare/API_KEY" = {
owner = "olivier";
group = "users";
mode = "0400";
};
chiasson.system.librepods.enable = true;
chiasson.system.palera1n.enable = true;
# T2 SMC fans: without a daemon they sit near minimum while thermald only throttles CPU —
# https://wiki.t2linux.org/guides/fan/
services.t2fanrd = {
enable = true;
# Upstream averages 50 samples (~5s); peak tracks spikes so fans hit sysfs max sooner
# under bursty browser/GPU load (see patches/t2fanrd-use-peak-temperature.patch).
package = inputs.t2fanrd.packages.x86_64-linux.default.overrideAttrs (old: {
patches = (old.patches or [ ]) ++ [ ../../../patches/t2fanrd-use-peak-temperature.patch ]; #TODO[epic=Moderate] Move patch file to host's directory.
});
config = {
Fan1 = {
low_temp = 40;
high_temp = 65;
speed_curve = "exponential";
always_full_speed = false;
};
Fan2 = {
low_temp = 40;
high_temp = 65;
speed_curve = "exponential";
always_full_speed = false;
};
};
};
# Dynamic function row on the Touch Bar (`tiny-dfr`; needs `DRM_APPLETBDRM` — see t2linux kernel opts).
hardware.apple.touchBar.enable = true;
# ─────────────────────── Attic (pull + push + CLI token) ────────────────────
chiasson.system.caching.attic = {
enable = true;
cacheName = "nixos-new";
endpoint = "http://192.168.2.238:8080/";
publicKey = "nixos-new:8NySIcT0HP7KvGQKgBRWoWESxxRA8BVYo8S85UNpNX0=";
tokenFile = config.sops.secrets."caching/attic/token".path;
push.enable = true;
userCli.enable = true;
};
# ─────────────────────── Display Server & Desktop ──────────────────────────
chiasson.desktop = {
niri = {
enable = true;
# Hybrid T2 + `apple-gmux force_igd` + blacklisted amdgpu: a TB/DP encoder often stays
# "connected" with junk EDID → niri sees a second head (`Unknown-1`, absurd mode). Off.
extraSettings.extraConfig = ''
output "Unknown-1" {
off
}
'';
};
defaultSession = "niri";
shell = "dms";
};
chiasson.system = {
remoteDesktop = {
enable = false;
moonlight.enable = false;
sunshine.enable = false;
};
audio.enable = true;
extraPackages = [ pkgs.sops ];
networking = {
hostName = "t2mbp";
networkManager.enable = true;
};
};
chiasson.users.enabled = [ "olivier" ];
chiasson.users.extraModules.olivier = [
self.homeManagerModules.wisdomFilebrowsersDolphin
self.homeManagerModules.wisdomTerminalsKitty
self.homeManagerModules.wisdomBrowsersZen
self.homeManagerModules.wisdomBrowsersChrome
self.homeManagerModules.wisdomBrowsersEdge
self.homeManagerModules.wisdomEditorsCursor
self.homeManagerModules.wisdomEditorsKate
self.homeManagerModules.wisdomEditorsObsidian
self.homeManagerModules.wisdomShellYazi
self.homeManagerModules.wisdomShellFish
self.homeManagerModules.wisdomShellOhMyPosh
self.homeManagerModules.wisdomAppsDiscord
self.homeManagerModules.wisdomAppsSpotify
self.homeManagerModules.wisdomAppsLocalsend
self.homeManagerModules.wisdomAppsPokeclicker
self.homeManagerModules.wisdomDesktopScreenshot
{
chiasson.home = {
shell = {
fish.enable = true;
yazi.enable = true;
ohMyPosh.enable = true;
};
terminals.kitty.enable = true;
filebrowsers.dolphin.enable = true;
browsers = {
zen.enable = false;
chrome.enable = false;
edge.enable = true;
};
editors = {
cursor.enable = true;
kate.enable = false;
obsidian.enable = true;
};
apps = {
discord.enable = true;
spotify.enable = false;
localsend.enable = true;
pokeclicker.enable = true;
};
desktop = {
screenshot = {
enable = true;
swiftshareApiKeyFile = "/run/secrets/swiftshare/API_KEY"; #TODO[epic=sops] redo this by passing sops file output directly
};
};
};
}
];
};
}