mirror of
https://github.com/ryan4yin/nix-config.git
synced 2026-01-11 22:30:25 +01:00
184 lines
7.5 KiB
Nix
184 lines
7.5 KiB
Nix
{
|
||
pkgs,
|
||
myvars,
|
||
...
|
||
}:
|
||
###################################################################################
|
||
#
|
||
# macOS's System configuration
|
||
#
|
||
# All the configuration options are documented here:
|
||
# https://daiderd.com/nix-darwin/manual/index.html#sec-options
|
||
# Incomplete list of macOS `defaults` commands :
|
||
# https://github.com/yannbertrand/macos-defaults
|
||
#
|
||
#
|
||
# NOTE: Some options are not supported by nix-darwin directly, manually set them:
|
||
# 1. To avoid conflicts with neovim, disable ctrl + up/down/left/right to switch spaces in:
|
||
# [System Preferences] -> [Keyboard] -> [Keyboard Shortcuts] -> [Mission Control]
|
||
# 2. Disable use Caps Lock as 中/英 switch in:
|
||
# [System Preferences] -> [Keyboard] -> [Input Sources] -> [Edit] -> [Use 中/英 key to switch ] -> [Disable]
|
||
###################################################################################
|
||
{
|
||
# Add ability to used TouchID for sudo authentication
|
||
security.pam.services.sudo_local.touchIdAuth = true;
|
||
|
||
time.timeZone = "Asia/Shanghai";
|
||
|
||
system = {
|
||
primaryUser = myvars.username;
|
||
|
||
defaults = {
|
||
menuExtraClock.Show24Hour = true; # show 24 hour clock
|
||
|
||
# customize dock
|
||
dock = {
|
||
autohide = true; # automatically hide and show the dock
|
||
show-recents = false; # do not show recent apps in dock
|
||
# do not automatically rearrange spaces based on most recent use.
|
||
mru-spaces = false;
|
||
expose-group-apps = true; # Group windows by application
|
||
|
||
# customize Hot Corners(触发角, 鼠标移动到屏幕角落时触发的动作)
|
||
wvous-tl-corner = 2; # top-left - Mission Control
|
||
wvous-tr-corner = 4; # top-right - Desktop
|
||
wvous-bl-corner = 3; # bottom-left - Application Windows
|
||
wvous-br-corner = 13; # bottom-right - Lock Screen
|
||
};
|
||
|
||
# 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 = {
|
||
# tap - 轻触触摸板, click - 点击触摸板
|
||
Clicking = true; # enable tap to click(轻触触摸板相当于点击)
|
||
TrackpadRightClick = true; # enable two finger right click
|
||
TrackpadThreeFingerDrag = true; # enable three finger drag
|
||
};
|
||
|
||
# customize macOS
|
||
NSGlobalDomain = {
|
||
# `defaults read NSGlobalDomain "xxx"`
|
||
"com.apple.swipescrolldirection" = true; # enable natural scrolling(default to true)
|
||
"com.apple.sound.beep.feedback" = 0; # disable beep sound when pressing volume up/down key
|
||
|
||
# Appearance
|
||
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
|
||
# Incomplete list of macOS `defaults` commands :
|
||
# https://github.com/yannbertrand/macos-defaults
|
||
CustomUserPreferences = {
|
||
".GlobalPreferences" = {
|
||
# automatically switch to a new space when switching to the application
|
||
AppleSpacesSwitchOnActivate = true;
|
||
};
|
||
NSGlobalDomain = {
|
||
# Add a context menu item for showing the Web Inspector in web views
|
||
WebKitDeveloperExtras = true;
|
||
};
|
||
"com.apple.finder" = {
|
||
AppleShowAllFiles = true;
|
||
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.spaces" = {
|
||
# Display have separate spaces
|
||
# true => disable this feature
|
||
# false => enable this feature
|
||
"spans-displays" = true;
|
||
};
|
||
"com.apple.WindowManager" = {
|
||
EnableStandardClickToShowDesktop = 0; # Click wallpaper to reveal desktop
|
||
StandardHideDesktopIcons = 0; # Show items on desktop
|
||
HideDesktop = 0; # Do not hide items on desktop & stage manager
|
||
StageManagerHideWidgets = 0;
|
||
StandardHideWidgets = 0;
|
||
};
|
||
"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`
|
||
|
||
# NOTE: do NOT support remap capslock to both control and escape at the same time
|
||
remapCapsLockToControl = false; # remap caps lock to control, useful for emac users
|
||
remapCapsLockToEscape = true; # remap caps lock to escape, useful for vim users
|
||
|
||
# swap left command and left alt
|
||
# so it matches common keyboard layout: `ctrl | command | alt`
|
||
#
|
||
# disabled, caused only problems!
|
||
swapLeftCommandAndLeftAlt = false;
|
||
|
||
userKeyMapping = [
|
||
# remap escape to caps lock
|
||
# so we swap caps lock and escape, then we can use caps lock as escape
|
||
{
|
||
HIDKeyboardModifierMappingSrc = 30064771113;
|
||
HIDKeyboardModifierMappingDst = 30064771129;
|
||
}
|
||
];
|
||
};
|
||
};
|
||
}
|