This is my nix-darwin configuration for macOS (Apple Silicon).
Purpose
This configuration manages my work MacBook, providing a declarative way to configure macOS system settings and install applications via Homebrew.
System Defaults
macOS-specific settings for a better developer experience:
{ pkgs, ... }:
{
system.defaults = {
# Dock
dock = {
autohide = true;
show-recents = false;
tilesize = 48;
orientation = "left";
wvous-br-corner = 14; # quick note
};
# Finder
finder = {
AppleShowAllExtensions = true;
ShowPathbar = true;
ShowStatusBar = true;
FXEnableExtensionChangeWarning = false;
FXPreferredViewStyle = "Nlsv"; # list view
_FXShowPosixPathInTitle = true;
_FXSortFoldersFirst = true;
AppleShowAllFiles = true;
QuitMenuItem = true;
NewWindowTarget = "Other";
NewWindowTargetPath = "file:///Users/gabriel.morin/";
};
# Screenshots
screencapture = {
location = "~/Pictures/Screenshots";
type = "png";
disable-shadow = true;
};
# Login
loginwindow = {
GuestEnabled = false;
DisableConsoleAccess = true;
};
# Menu bar clock
menuExtraClock = {
ShowAMPM = true;
ShowDate = 0; # when space allows
ShowDayOfWeek = true;
};
# Global settings
NSGlobalDomain = {
AppleShowAllExtensions = true;
AppleInterfaceStyle = "Dark";
InitialKeyRepeat = 15;
KeyRepeat = 2;
NSAutomaticCapitalizationEnabled = false;
NSAutomaticSpellingCorrectionEnabled = false;
NSAutomaticDashSubstitutionEnabled = false;
NSAutomaticQuoteSubstitutionEnabled = false;
NSAutomaticPeriodSubstitutionEnabled = false;
NSNavPanelExpandedStateForSaveMode = true;
NSNavPanelExpandedStateForSaveMode2 = true;
PMPrintingExpandedStateForPrint = true;
PMPrintingExpandedStateForPrint2 = true;
};
# Trackpad
trackpad = {
Clicking = true;
TrackpadRightClick = true;
};
};
fonts.packages = with pkgs.nerd-fonts; [
hack
jetbrains-mono
];
security.pam.services.sudo_local.touchIdAuth = true;
system.primaryUser = "gabriel.morin";
networking.hostName = "LNEGQ7JJR7FWG";
networking.computerName = "LNEGQ7JJR7FWG";
system.stateVersion = 6;
}
Homebrew
Since many macOS applications aren’t available in nixpkgs, Homebrew is used for GUI apps:
{ lib, ... }:
let
customConfigPath = ./_homebrew-tm.nix;
hasCustomConfig = builtins.pathExists customConfigPath;
customConfig = if hasCustomConfig then (import customConfigPath { inherit lib; }) else { homebrew = {}; };
in
{
homebrew = {
enable = true;
onActivation = {
autoUpdate = true;
cleanup = "zap";
upgrade = true;
};
taps = [
"openfga/tap"
"databricks/tap"
"LizardByte/homebrew"
"peonping/tap"
] ++ (customConfig.homebrew.taps or []);
brews = [
"awscli"
"databricks/tap/databricks"
"pulumi"
"openfga/tap/fga"
"kafka"
"ttyd"
"LizardByte/homebrew/sunshine"
"PeonPing/tap/peon-ping"
"jenv"
] ++ (customConfig.homebrew.brews or []);
# GUI Applications (casks)
casks = [
# Terminals
"ghostty"
"iterm2"
"wezterm"
# Editors & IDEs
"visual-studio-code"
"jetbrains-toolbox"
# Browsers & Communication
"discord"
"spotify"
# Development Tools
"docker-desktop"
"dbeaver-community"
"claude-code"
"burp-suite"
"meld"
"hoppscotch"
"jdk-mission-control"
"zulu@17"
"zulu@21"
# System Utilities
"amethyst"
"scroll-reverser"
"stats"
# Media
#"gimp"
"blackhole-2ch"
# Kubernetes
"freelens"
] ++ (customConfig.homebrew.casks or []);
};
}
Differences from NixOS
Unlike the NixOS hosts, macOS uses:
-
nix-darwininstead of NixOS modules - Homebrew for GUI applications (casks)
- Different system defaults API