{ pkgs, ...}: { ########################################################################## # # MacOS specific nix-darwin configuration # # Nix is not well supported on macOS, I met some strange bug recently. # So install apps using [homebrew](https://daiderd.com/nix-darwin/manual/index.html#opt-homebrew.enable) here. # ########################################################################## system = { # activationScripts are executed every time you boot the system or run `nixos-rebuild` / `darwin-rebuild`. activationScripts.postUserActivation.text = '' # activateSettings -u will reload the settings from the database and apply them to the current session, # so we do not need to logout and login again to make the changes take effect. /System/Library/PrivateFrameworks/SystemAdministration.framework/Resources/activateSettings -u ''; defaults = { # customize dock dock = { autohide = true; show-recents = false; # disable recent apps # customize Hot Corners(触发角, 鼠标移动到屏幕角落时触发的动作) wvous-tl-corner = 2; # top-left - Mission Control wvous-tr-corner = 13; # top-right - Lock Screen wvous-bl-corner = 3; # bottom-left - Application Windows wvous-br-corner = 4; # bottom-right - Desktop }; # customize finder finder = { _FXShowPosixPathInTitle = true; # show full path in finder title AppleShowAllExtensions = true; # show all file extensions FXEnableExtensionChangeWarning = false; # disable warning when changing file extension QuitMenuItem = true; # enable quit menu item ShowPathbar = true; # show path bar ShowStatusBar = true; # show status bar }; # customize trackpad trackpad = { Clicking = true; # enable tap to click Dragging = true; # enable tap to drag TrackpadRightClick = true; # enable two finger right click TrackpadThreeFingerDrag = true; # enable three finger drag }; # customize macOS NSGlobalDomain = { "com.apple.swipescrolldirection" = true; # enable natural scrolling "com.apple.sound.beep.feedback" = 0; # disable beep sound when pressing volume up/down key AppleInterfaceStyle = "Dark"; # dark mode AppleKeyboardUIMode = 3; # Mode 3 enables full keyboard control. ApplePressAndHoldEnabled = true; # enable press and hold # If you press and hold certain keyboard keys when in a text area, the key’s character begins to repeat. # This is very useful for vim users, they use `hjkl` to move cursor. # sets how long it takes before it starts repeating. InitialKeyRepeat = 15; # normal minimum is 15 (225 ms), maximum is 120 (1800 ms) # sets how fast it repeats once it starts. KeyRepeat = 3; # normal minimum is 2 (30 ms), maximum is 120 (1800 ms) NSAutomaticCapitalizationEnabled = false; # disable auto capitalization(自动大写) NSAutomaticDashSubstitutionEnabled = false; # disable auto dash substitution(智能破折号替换) NSAutomaticPeriodSubstitutionEnabled = false; # disable auto period substitution(智能句号替换) NSAutomaticQuoteSubstitutionEnabled = false; # disable auto quote substitution(智能引号替换) NSAutomaticSpellingCorrectionEnabled = false; # disable auto spelling correction(自动拼写检查) NSNavPanelExpandedStateForSaveMode = true; # expand save panel by default(保存文件时的路径选择/文件名输入页) NSNavPanelExpandedStateForSaveMode2 = true; }; # customize settings that not supported by nix-darwin directly CustomUserPreferences = { NSGlobalDomain = { # Add a context menu item for showing the Web Inspector in web views WebKitDeveloperExtras = true; }; "com.apple.finder" = { ShowExternalHardDrivesOnDesktop = true; ShowHardDrivesOnDesktop = true; ShowMountedServersOnDesktop = true; ShowRemovableMediaOnDesktop = true; _FXSortFoldersFirst = true; # When performing a search, search the current folder by default FXDefaultSearchScope = "SCcf"; }; "com.apple.desktopservices" = { # Avoid creating .DS_Store files on network or USB volumes DSDontWriteNetworkStores = true; DSDontWriteUSBStores = true; }; "com.apple.screensaver" = { # Require password immediately after sleep or screen saver begins askForPassword = 1; askForPasswordDelay = 0; }; "com.apple.screencapture" = { location = "~/Desktop"; type = "png"; }; "com.apple.AdLib" = { allowApplePersonalizedAdvertising = false; }; # Prevent Photos from opening automatically when devices are plugged in "com.apple.ImageCapture".disableHotPlug = true; }; loginwindow = { GuestEnabled = false; # disable guest user SHOWFULLNAME = true; # show full name in login window }; }; # keyboard settings is not very useful on macOS # the most important thing is to remap option key to alt key globally, # but it's not supported by macOS yet. keyboard = { enableKeyMapping = true; # enable key mapping so that we can use `option` as `control` remapCapsLockToControl = false; # remap caps lock to control remapCapsLockToEscape = false; # remap caps lock to escape }; }; # Homebrew Mirror environment.variables = { HOMEBREW_API_DOMAIN = "https://mirrors.tuna.tsinghua.edu.cn/homebrew-bottles/api"; HOMEBREW_BOTTLE_DOMAIN = "https://mirrors.tuna.tsinghua.edu.cn/homebrew-bottles"; HOMEBREW_BREW_GIT_REMOTE = "https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/brew.git"; HOMEBREW_CORE_GIT_REMOTE = "https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-core.git"; HOMEBREW_PIP_INDEX_URL = "https://pypi.tuna.tsinghua.edu.cn/simple"; }; homebrew = { # TODO Homebrew install takes a long time, # So only enable this when you make changes. enable = false; onActivation = { autoUpdate = false; # 'zap': uninstalls all formulae(and related files) not listed in the generated Brewfile cleanup = "zap"; }; # Applications to install from Mac App Store using mas. # You need to install all these Apps manually first so that your apple account have records for them. # otherwise Apple Store will refuse to install them. # For details, see https://github.com/mas-cli/mas masApps = { # Xcode = 497799835; Wechat = 836500024; QQ = 451108668; WeCom = 1189898970; # Wechat for Work TecentMetting = 1484048379; NeteaseCloudMusic = 944848654; QQMusic = 595615424; }; taps = [ "homebrew/cask" "homebrew/cask-fonts" "homebrew/services" "homebrew/cask-versions" "hashicorp/tap" "pulumi/tap" ]; brews = [ # `brew install` "wget" # download tool "curl" # no not install curl via nixpkgs, it's not working well on macOS! "aria2" # download tool "httpie" # http client "wireguard-tools" # wireguard "tailscale" # tailscale ]; # `brew install --cask` casks = [ "firefox" "google-chrome" "visual-studio-code" # IM & audio & remote desktop & meeting "telegram" "discord" "neteasemusic" "qqmusic" "microsoft-remote-desktop" # "anki" "clashx" # proxy tool "iina" # video player "openinterminal-lite" # open current folder in terminal "syncthing" # file sync "raycast" # (HotKey: alt/option + space)search, caculate and run scripts(with many plugins) "iglance" # beautiful system monitor "eudic" # 欧路词典 # "reaper" # audio editor # Development "insomnia" # REST client "wireshark" # network analyzer "jdk-mission-control" # Java Mission Control "google-cloud-sdk" # Google Cloud SDK ]; }; }