Files
nixos/users/mac/home.nix
T
Hermes Agent 7498ea4971 feat(macos): setup nix-darwin pour builder l'app Winnie
L'app se build sur le Mac en trois commandes, le toolchain restant dans le
devShell du flake winnie (jamais installé sur le Mac) :
  cd ~/git/nixos && just mac   # déploie ce setup
  winnie-sync                  # attrape ~/git/winnie depuis tower (rsync ssh)
  winnie-ios                   # simulateur ; npm ci + tauri ios init au besoin

- modules/home-mac/winnie : winnie-doctor [--fix], winnie-sync [--delete],
  winnie-shell, winnie-front, winnie-macos, winnie-build-macos, winnie-ios,
  winnie-build-ios, winnie-verify. Scripts en writeShellApplication (shellcheck
  au build) ; scripts.nix est séparé du module pour être constructible depuis
  tower avec les pkgs linux et testable sans Mac.
- profiles/macos : flakes + trusted-users dans nix.conf, et
  system.activationScripts.winnie-xcode (xcode-select -s, licence Xcode,
  -runFirstLaunch) pour que seule l'installation App Store reste manuelle.
- Embarque aussi le setup SSH entrant du Mac (sshd, clé hermes@tower, tunnel
  inverse autossh) qui était déjà dans l'arbre de travail.

Vérifié depuis tower : nix eval du darwinConfigurations.macos (toplevel et
home-manager-generation) + build des scripts en x86_64-linux (shellcheck) et
rsync de bout en bout depuis le dépôt de tower.
2026-10-24 14:33:35 -04:00

169 lines
4.4 KiB
Nix

{
pkgs,
inputs,
config,
lib,
...
}: {
imports = [
inputs.sops.homeManagerModules.sops
../../modules/home/claude-commit
../../modules/home/ssh
../../modules/home/eternal-terminal
../../modules/home/zsh
../../modules/home/alacritty
../../modules/home/kitty
../../modules/home/starship
../../modules/home/yt-dlp
../../modules/home/syncthing
../../modules/home/pgcli
../../modules/home/python
# ../../modules/home/librewolf
../../modules/home-mac/aerospace
../../modules/home-mac/hermes-skins
../../modules/home-mac/winnie
# ../../modules/home-mac/autossh
];
home.username = "marc";
home.homeDirectory = pkgs.lib.mkForce (
if pkgs.stdenv.isDarwin
then "/Users/marc"
else "/home/marc"
);
home.stateVersion = "25.11";
home.packages = with pkgs; [
fzf
gemini-cli
geminicommit
tree
eza
bat
gnupg
# claude-code
# black
ncdu
nix-du
util-linux
sops
typer
nerd-fonts.meslo-lg # MesloLGS NF
nmap
just
age
speedtest-go
gh
uv
# neovim deps manquants
ripgrep # telescope live-grep + vim.health
fd # telescope extended
stylua # conform lua formatter
prettier # conform prettier
tree-sitter # lspsaga + nvim-treesitter CLI
sox # gp.nvim audio
pngpaste # img-clip (macOS)
findutils # GNU find (fix fzf-lua "illegal option")
luarocks # lazy.nvim rocks
neovim-node-client # node provider
# (nerdfonts.override { fonts = [ "Meslo" ]; })
# ou sur nixpkgs récent :
nerd-fonts.meslo-lg
meslo-lg
meslo-lgs-nf
fastfetch
htop
nodejs
upscayl
upscayl-ncnn
realesrgan-ncnn-vulkan
imagemagick
wireguard-tools
iproute2mac
];
# nixpkgs.config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [
# "claude-code"
# ];
home.sessionVariables = {
SOPS_AGE_KEY_FILE = "${config.home.homeDirectory}/.config/sops/age/keys.txt";
};
# sops.age.keyFile = "/Users/marc/.config/sops/age/keys.txt";
sops.age.keyFile = "${config.home.homeDirectory}/.config/sops/age/keys.txt";
sops.defaultSopsFile = ../../secrets/mac.yml;
services.gpg-agent = {
enable = true;
pinentry.package = pkgs.pinentry-curses;
};
programs.home-manager = {
enable = true;
# backupFileExtension = "backup";
# backupCommand',
};
programs.git = {
enable = true;
settings.user.name = "Marc Partensky";
settings.user.email = "marc.partensky@gmail.com";
};
programs.zsh.enable = true;
# Skins Hermes (pack Hermes Menagerie) -> ~/.hermes/skins/
my.hermesSkins.enable = true;
# Build de l'app Winnie sur le Mac : winnie-doctor, winnie-sync, winnie-ios,
# winnie-macos, winnie-front, winnie-verify. Le toolchain reste dans le
# devShell du flake `winnie`, ces commandes ne font que l'appeler.
my.winnie.enable = true;
# Connexions Eternal Terminal vers les hôtes NixOS : `et tower` = zellij enregistré.
my.et = {
enable = true;
hosts = {
tower = {};
towerlocal = {};
};
};
# Clé SSH de l'agent hermes@tower : l'agent (qui tourne sur tower) peut se
# connecter au Mac en marc@… (sshd activé par services.openssh dans
# profiles/macos/configuration.nix). Append idempotent plutôt que
# home.file.".ssh/authorized_keys" : ne remplace JAMAIS un authorized_keys
# déjà en place (le .bak de home-manager perdrait les clés existantes).
home.activation.addHermesAuthorizedKey = lib.hm.dag.entryAfter ["writeBoundary"] ''
key='ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKF3huPUXHP6P6SBXHHw9k7HGh6Cs8ntoRk2pnqrG2Hc hermes@tower'
mkdir -p "$HOME/.ssh"
chmod 700 "$HOME/.ssh"
touch "$HOME/.ssh/authorized_keys"
grep -qxF "$key" "$HOME/.ssh/authorized_keys" || echo "$key" >> "$HOME/.ssh/authorized_keys"
chmod 600 "$HOME/.ssh/authorized_keys"
'';
# Accès distant par rack (VPS à IP publique) : marche depuis n'importe quel
# réseau, sans VPN sur le Mac. rack joint tower par le tunnel wg1
# (10.100.0.3) et le LAN (192.168.1.0/24) que tower route pour wg1.
# mkForce : ces deux entrées remplacent celles du module partagé.
programs.ssh.settings = {
"tower" = lib.mkForce {
HostName = "10.100.0.3";
User = "marc";
ProxyJump = "rack";
};
"deck" = lib.mkForce {
HostName = "192.168.1.67";
User = "marc";
ProxyJump = "rack";
};
};
}