Skip to content

Commit e30d226

Browse files
authoredNov 12, 2024··
Merge pull request #1163 from LucasMendesl/feature/controlcenter
defaults: add `controlcenter` and other options
2 parents 5c74ab8 + 32df51b commit e30d226

File tree

9 files changed

+282
-4
lines changed

9 files changed

+282
-4
lines changed
 

‎modules/module-list.nix

+1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
./system/activation-scripts.nix
1515
./system/applications.nix
1616
./system/defaults-write.nix
17+
./system/defaults/controlcenter.nix
1718
./system/defaults/LaunchServices.nix
1819
./system/defaults/NSGlobalDomain.nix
1920
./system/defaults/GlobalPreferences.nix

‎modules/system/defaults-write.nix

+4
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,11 @@ let
3434
universalaccess = defaultsToList "com.apple.universalaccess" cfg.universalaccess;
3535
ActivityMonitor = defaultsToList "com.apple.ActivityMonitor" cfg.ActivityMonitor;
3636
WindowManager = defaultsToList "com.apple.WindowManager" cfg.WindowManager;
37+
controlcenter = defaultsToList "~/Library/Preferences/ByHost/com.apple.controlcenter" cfg.controlcenter;
3738
CustomUserPreferences = flatten (mapAttrsToList (name: value: defaultsToList name value) cfg.CustomUserPreferences);
3839
CustomSystemPreferences = flatten (mapAttrsToList (name: value: defaultsToList name value) cfg.CustomSystemPreferences);
3940

41+
4042
mkIfAttrs = list: mkIf (any (attrs: attrs != { }) list);
4143
in
4244

@@ -89,6 +91,7 @@ in
8991
ActivityMonitor
9092
CustomUserPreferences
9193
WindowManager
94+
controlcenter
9295
]
9396
''
9497
# Set defaults
@@ -113,6 +116,7 @@ in
113116
${concatStringsSep "\n" ActivityMonitor}
114117
${concatStringsSep "\n" CustomUserPreferences}
115118
${concatStringsSep "\n" WindowManager}
119+
${concatStringsSep "\n" controlcenter}
116120
117121
${optionalString (length dock > 0) ''
118122
# Only restart Dock if current user is logged in

‎modules/system/defaults/clock.nix

+8
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,14 @@ with lib;
55
{
66
options = {
77

8+
system.defaults.menuExtraClock.FlashDateSeparators = mkOption {
9+
type = types.nullOr types.bool;
10+
default = null;
11+
description = ''
12+
When enabled, the clock indicator (which by default is the colon) will flash on and off each second. Default is null.
13+
'';
14+
};
15+
816
system.defaults.menuExtraClock.IsAnalog = mkOption {
917
type = types.nullOr types.bool;
1018
default = null;
+100
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
{ config, lib, ... }:
2+
3+
{
4+
options = {
5+
6+
system.defaults.controlcenter.BatteryShowPercentage = lib.mkOption {
7+
type = lib.types.nullOr lib.types.bool;
8+
default = null;
9+
description = ''
10+
Apple menu > System Preferences > Control Center > Battery
11+
12+
Show a battery percentage in menu bar. Default is null.
13+
'';
14+
};
15+
16+
system.defaults.controlcenter.Sound = lib.mkOption {
17+
type = lib.types.nullOr lib.types.bool;
18+
apply = v: if v == null then null else if v == true then 18 else 24;
19+
default = null;
20+
description = ''
21+
Apple menu > System Preferences > Control Center > Sound
22+
23+
Show a sound control in menu bar . Default is null.
24+
25+
18 = Display icon in menu bar
26+
24 = Hide icon in menu bar
27+
'';
28+
};
29+
30+
system.defaults.controlcenter.Bluetooth = lib.mkOption {
31+
type = lib.types.nullOr lib.types.bool;
32+
apply = v: if v == null then null else if v == true then 18 else 24;
33+
default = null;
34+
description = ''
35+
Apple menu > System Preferences > Control Center > Bluetooth
36+
37+
Show a bluetooth control in menu bar. Default is null.
38+
39+
18 = Display icon in menu bar
40+
24 = Hide icon in menu bar
41+
'';
42+
};
43+
44+
system.defaults.controlcenter.AirDrop = lib.mkOption {
45+
type = lib.types.nullOr lib.types.bool;
46+
apply = v: if v == null then null else if v == true then 18 else 24;
47+
default = null;
48+
description = ''
49+
Apple menu > System Preferences > Control Center > AirDrop
50+
51+
Show a AirDrop control in menu bar. Default is null.
52+
53+
18 = Display icon in menu bar
54+
24 = Hide icon in menu bar
55+
'';
56+
};
57+
58+
system.defaults.controlcenter.Display = lib.mkOption {
59+
type = lib.types.nullOr lib.types.bool;
60+
apply = v: if v == null then null else if v == true then 18 else 24;
61+
default = null;
62+
description = ''
63+
Apple menu > System Preferences > Control Center > Display
64+
65+
Show a Screen Brightness control in menu bar. Default is null.
66+
67+
18 = Display icon in menu bar
68+
24 = Hide icon in menu bar
69+
'';
70+
};
71+
72+
system.defaults.controlcenter.FocusModes = lib.mkOption {
73+
type = lib.types.nullOr lib.types.bool;
74+
apply = v: if v == null then null else if v == true then 18 else 24;
75+
default = null;
76+
description = ''
77+
Apple menu > System Preferences > Control Center > Focus
78+
79+
Show a Focus control in menu bar. Default is null.
80+
81+
18 = Display icon in menu bar
82+
24 = Hide icon in menu bar
83+
'';
84+
};
85+
86+
system.defaults.controlcenter.NowPlaying = lib.mkOption {
87+
type = lib.types.nullOr lib.types.bool;
88+
apply = v: if v == null then null else if v == true then 18 else 24;
89+
default = null;
90+
description = ''
91+
Apple menu > System Preferences > Control Center > Now Playing
92+
93+
Show a Now Playing control in menu bar. Default is null.
94+
95+
18 = Display icon in menu bar
96+
24 = Hide icon in menu bar
97+
'';
98+
};
99+
};
100+
}

‎modules/system/defaults/dock.nix

+8
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,14 @@ in {
149149
else map (folder: { tile-data = { file-data = { _CFURLString = "file://" + folder; _CFURLStringType = 15; }; }; tile-type = if strings.hasInfix "." (last (splitString "/" folder)) then "file-tile" else "directory-tile"; }) value;
150150
};
151151

152+
system.defaults.dock.scroll-to-open = mkOption {
153+
type = types.nullOr types.bool;
154+
default = null;
155+
description = ''
156+
Scroll up on a Dock icon to show all Space's opened windows for an app, or open stack. The default is false.
157+
'';
158+
};
159+
152160
system.defaults.dock.show-process-indicators = mkOption {
153161
type = types.nullOr types.bool;
154162
default = null;

‎modules/system/defaults/finder.nix

+53-4
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,15 @@ in
4141
'';
4242
};
4343

44+
system.defaults.finder.FXRemoveOldTrashItems = mkOption {
45+
type = types.nullOr types.bool;
46+
default = null;
47+
description = ''
48+
Remove items in the trash after 30 days.
49+
The default is false.
50+
'';
51+
};
52+
4453
system.defaults.finder.FXPreferredViewStyle = mkOption {
4554
type = types.nullOr types.str;
4655
default = null;
@@ -55,7 +64,7 @@ in
5564
type = types.nullOr types.bool;
5665
default = null;
5766
description = ''
58-
Whether to always show file extensions. The default is false.
67+
Whether to always show file extensions. The default is false.
5968
'';
6069
};
6170

@@ -71,15 +80,47 @@ in
7180
type = types.nullOr types.bool;
7281
default = null;
7382
description = ''
74-
Whether to allow quitting of the Finder. The default is false.
83+
Whether to allow quitting of the Finder. The default is false.
84+
'';
85+
};
86+
87+
system.defaults.finder.ShowExternalHardDrivesOnDesktop = mkOption {
88+
type = types.nullOr types.bool;
89+
default = null;
90+
description = ''
91+
Whether to show external disks on desktop. The default is true.
92+
'';
93+
};
94+
95+
system.defaults.finder.ShowHardDrivesOnDesktop = mkOption {
96+
type = types.nullOr types.bool;
97+
default = null;
98+
description = ''
99+
Whether to show hard disks on desktop. The default is false.
100+
'';
101+
};
102+
103+
system.defaults.finder.ShowMountedServersOnDesktop = mkOption {
104+
type = types.nullOr types.bool;
105+
default = null;
106+
description = ''
107+
Whether to show connected servers on desktop. The default is false.
108+
'';
109+
};
110+
111+
system.defaults.finder.ShowRemovableMediaOnDesktop = mkOption {
112+
type = types.nullOr types.bool;
113+
default = null;
114+
description = ''
115+
Whether to show removable media (CDs, DVDs and iPods) on desktop. The default is true.
75116
'';
76117
};
77118

78119
system.defaults.finder._FXShowPosixPathInTitle = mkOption {
79120
type = types.nullOr types.bool;
80121
default = null;
81122
description = ''
82-
Whether to show the full POSIX filepath in the window title. The default is false.
123+
Whether to show the full POSIX filepath in the window title. The default is false.
83124
'';
84125
};
85126

@@ -91,11 +132,19 @@ in
91132
'';
92133
};
93134

135+
system.defaults.finder._FXSortFoldersFirstOnDesktop = mkOption {
136+
type = types.nullOr types.bool;
137+
default = null;
138+
description = ''
139+
Keep folders on top when sorting by name on the desktop. The default is false.
140+
'';
141+
};
142+
94143
system.defaults.finder.FXEnableExtensionChangeWarning = mkOption {
95144
type = types.nullOr types.bool;
96145
default = null;
97146
description = ''
98-
Whether to show warnings when change the file extension of files. The default is true.
147+
Whether to show warnings when change the file extension of files. The default is true.
99148
'';
100149
};
101150

‎modules/system/defaults/screencapture.nix

+12
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,18 @@ with lib;
2929
'';
3030
};
3131

32+
system.defaults.screencapture.include-date = mkOption {
33+
type = types.nullOr types.bool;
34+
default = null;
35+
description = ''
36+
Include date and time in screenshot filenames. The default is true.
37+
Screenshot 2024-01-09 at 13.27.20.png would be an example for true.
38+
39+
Screenshot.png
40+
Screenshot 1.png would be an example for false.
41+
'';
42+
};
43+
3244
system.defaults.screencapture.show-thumbnail = mkOption {
3345
type = types.nullOr types.bool;
3446
default = null;

‎tests/fixtures/system-defaults-write/activate-user.txt

+80
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,11 @@ defaults write .GlobalPreferences 'com.apple.sound.beep.sound' $'<?xml version="
205205
<string>/System/Library/Sounds/Funk.aiff</string>
206206
</plist>'
207207

208+
defaults write com.apple.menuextra.clock 'FlashDateSeparators' $'<?xml version="1.0" encoding="UTF-8"?>
209+
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
210+
<plist version="1.0">
211+
<false/>
212+
</plist>'
208213
defaults write com.apple.menuextra.clock 'Show24Hour' $'<?xml version="1.0" encoding="UTF-8"?>
209214
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
210215
<plist version="1.0">
@@ -299,6 +304,11 @@ defaults write com.apple.dock 'persistent-others' $'<?xml version="1.0" encoding
299304
</dict>
300305
</array>
301306
</plist>'
307+
defaults write com.apple.dock 'scroll-to-open' $'<?xml version="1.0" encoding="UTF-8"?>
308+
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
309+
<plist version="1.0">
310+
<false/>
311+
</plist>'
302312
defaults write com.apple.finder 'AppleShowAllExtensions' $'<?xml version="1.0" encoding="UTF-8"?>
303313
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
304314
<plist version="1.0">
@@ -329,6 +339,11 @@ defaults write com.apple.finder 'FXPreferredViewStyle' $'<?xml version="1.0" enc
329339
<plist version="1.0">
330340
<string>Flwv</string>
331341
</plist>'
342+
defaults write com.apple.finder 'FXRemoveOldTrashItems' $'<?xml version="1.0" encoding="UTF-8"?>
343+
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
344+
<plist version="1.0">
345+
<false/>
346+
</plist>'
332347
defaults write com.apple.finder 'NewWindowTarget' $'<?xml version="1.0" encoding="UTF-8"?>
333348
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
334349
<plist version="1.0">
@@ -344,11 +359,31 @@ defaults write com.apple.finder 'QuitMenuItem' $'<?xml version="1.0" encoding="U
344359
<plist version="1.0">
345360
<true/>
346361
</plist>'
362+
defaults write com.apple.finder 'ShowExternalHardDrivesOnDesktop' $'<?xml version="1.0" encoding="UTF-8"?>
363+
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
364+
<plist version="1.0">
365+
<false/>
366+
</plist>'
367+
defaults write com.apple.finder 'ShowHardDrivesOnDesktop' $'<?xml version="1.0" encoding="UTF-8"?>
368+
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
369+
<plist version="1.0">
370+
<false/>
371+
</plist>'
372+
defaults write com.apple.finder 'ShowMountedServersOnDesktop' $'<?xml version="1.0" encoding="UTF-8"?>
373+
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
374+
<plist version="1.0">
375+
<false/>
376+
</plist>'
347377
defaults write com.apple.finder 'ShowPathbar' $'<?xml version="1.0" encoding="UTF-8"?>
348378
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
349379
<plist version="1.0">
350380
<true/>
351381
</plist>'
382+
defaults write com.apple.finder 'ShowRemovableMediaOnDesktop' $'<?xml version="1.0" encoding="UTF-8"?>
383+
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
384+
<plist version="1.0">
385+
<false/>
386+
</plist>'
352387
defaults write com.apple.finder 'ShowStatusBar' $'<?xml version="1.0" encoding="UTF-8"?>
353388
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
354389
<plist version="1.0">
@@ -364,13 +399,23 @@ defaults write com.apple.finder '_FXSortFoldersFirst' $'<?xml version="1.0" enco
364399
<plist version="1.0">
365400
<true/>
366401
</plist>'
402+
defaults write com.apple.finder '_FXSortFoldersFirstOnDesktop' $'<?xml version="1.0" encoding="UTF-8"?>
403+
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
404+
<plist version="1.0">
405+
<false/>
406+
</plist>'
367407
defaults write com.apple.HIToolbox 'AppleFnUsageType' $'<?xml version="1.0" encoding="UTF-8"?>
368408
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
369409
<plist version="1.0">
370410
<integer>2</integer>
371411
</plist>'
372412

373413

414+
defaults write com.apple.screencapture 'include-date' $'<?xml version="1.0" encoding="UTF-8"?>
415+
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
416+
<plist version="1.0">
417+
<true/>
418+
</plist>'
374419
defaults write com.apple.screencapture 'location' $'<?xml version="1.0" encoding="UTF-8"?>
375420
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
376421
<plist version="1.0">
@@ -489,3 +534,38 @@ defaults write com.apple.WindowManager 'StandardHideWidgets' $'<?xml version="1.
489534
<plist version="1.0">
490535
<true/>
491536
</plist>'
537+
defaults write ~/Library/Preferences/ByHost/com.apple.controlcenter 'AirDrop' $'<?xml version="1.0" encoding="UTF-8"?>
538+
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
539+
<plist version="1.0">
540+
<integer>18</integer>
541+
</plist>'
542+
defaults write ~/Library/Preferences/ByHost/com.apple.controlcenter 'BatteryShowPercentage' $'<?xml version="1.0" encoding="UTF-8"?>
543+
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
544+
<plist version="1.0">
545+
<true/>
546+
</plist>'
547+
defaults write ~/Library/Preferences/ByHost/com.apple.controlcenter 'Bluetooth' $'<?xml version="1.0" encoding="UTF-8"?>
548+
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
549+
<plist version="1.0">
550+
<integer>18</integer>
551+
</plist>'
552+
defaults write ~/Library/Preferences/ByHost/com.apple.controlcenter 'Display' $'<?xml version="1.0" encoding="UTF-8"?>
553+
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
554+
<plist version="1.0">
555+
<integer>24</integer>
556+
</plist>'
557+
defaults write ~/Library/Preferences/ByHost/com.apple.controlcenter 'FocusModes' $'<?xml version="1.0" encoding="UTF-8"?>
558+
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
559+
<plist version="1.0">
560+
<integer>24</integer>
561+
</plist>'
562+
defaults write ~/Library/Preferences/ByHost/com.apple.controlcenter 'NowPlaying' $'<?xml version="1.0" encoding="UTF-8"?>
563+
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
564+
<plist version="1.0">
565+
<integer>18</integer>
566+
</plist>'
567+
defaults write ~/Library/Preferences/ByHost/com.apple.controlcenter 'Sound' $'<?xml version="1.0" encoding="UTF-8"?>
568+
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
569+
<plist version="1.0">
570+
<integer>24</integer>
571+
</plist>'

‎tests/system-defaults-write.nix

+16
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
system.defaults.NSGlobalDomain."com.apple.springing.delay" = 0.0;
4343
system.defaults.NSGlobalDomain."com.apple.swipescrolldirection" = true;
4444
system.defaults.".GlobalPreferences"."com.apple.sound.beep.sound" = "/System/Library/Sounds/Funk.aiff";
45+
system.defaults.menuExtraClock.FlashDateSeparators = false;
4546
system.defaults.menuExtraClock.Show24Hour = false;
4647
system.defaults.menuExtraClock.ShowDayOfWeek = true;
4748
system.defaults.menuExtraClock.ShowDate = 2;
@@ -50,21 +51,29 @@
5051
system.defaults.dock.orientation = "left";
5152
system.defaults.dock.persistent-apps = ["MyApp.app" "Cool.app"];
5253
system.defaults.dock.persistent-others = ["~/Documents" "~/Downloads/file.txt"];
54+
system.defaults.dock.scroll-to-open = false;
5355
system.defaults.finder.AppleShowAllFiles = true;
5456
system.defaults.finder.ShowStatusBar = true;
5557
system.defaults.finder.ShowPathbar = true;
5658
system.defaults.finder.FXDefaultSearchScope = "SCcf";
5759
system.defaults.finder.FXPreferredViewStyle = "Flwv";
60+
system.defaults.finder.FXRemoveOldTrashItems = false;
5861
system.defaults.finder.AppleShowAllExtensions = true;
5962
system.defaults.finder.CreateDesktop = false;
6063
system.defaults.finder.NewWindowTarget = "Other";
6164
system.defaults.finder.NewWindowTargetPath = "file:///Library/Apple";
6265
system.defaults.finder.QuitMenuItem = true;
6366
system.defaults.finder._FXShowPosixPathInTitle = true;
6467
system.defaults.finder._FXSortFoldersFirst = true;
68+
system.defaults.finder._FXSortFoldersFirstOnDesktop = false;
6569
system.defaults.finder.FXEnableExtensionChangeWarning = false;
70+
system.defaults.finder.ShowExternalHardDrivesOnDesktop = false;
71+
system.defaults.finder.ShowHardDrivesOnDesktop = false;
72+
system.defaults.finder.ShowMountedServersOnDesktop = false;
73+
system.defaults.finder.ShowRemovableMediaOnDesktop = false;
6674
system.defaults.hitoolbox.AppleFnUsageType = "Show Emoji & Symbols";
6775
system.defaults.screencapture.location = "/tmp";
76+
system.defaults.screencapture.include-date = true;
6877
system.defaults.screensaver.askForPassword = true;
6978
system.defaults.screensaver.askForPasswordDelay = 5;
7079
system.defaults.smb.NetBIOSName = "IMAC-000000";
@@ -94,6 +103,13 @@
94103
true;
95104
};
96105
};
106+
system.defaults.controlcenter.BatteryShowPercentage = true;
107+
system.defaults.controlcenter.Sound = false;
108+
system.defaults.controlcenter.Bluetooth = true;
109+
system.defaults.controlcenter.AirDrop = true;
110+
system.defaults.controlcenter.Display = false;
111+
system.defaults.controlcenter.FocusModes = false;
112+
system.defaults.controlcenter.NowPlaying = true;
97113
test = lib.strings.concatMapStringsSep "\n"
98114
(x: ''
99115
echo >&2 "checking defaults write in /${x}"

0 commit comments

Comments
 (0)
Please sign in to comment.