Compare commits
No commits in common. "cc173b20b9b7309d235be8e76668fbc3373f0212" and "af6c06e82f2274134cbd238f1542cf13092d4620" have entirely different histories.
cc173b20b9
...
af6c06e82f
7 changed files with 12 additions and 168 deletions
|
|
@ -16,7 +16,6 @@ in {
|
||||||
./../programs/lsd.nix
|
./../programs/lsd.nix
|
||||||
./../programs/neovim.nix
|
./../programs/neovim.nix
|
||||||
./../programs/starship.nix
|
./../programs/starship.nix
|
||||||
./../programs/yt-dlp.nix
|
|
||||||
];
|
];
|
||||||
home = {
|
home = {
|
||||||
stateVersion = "23.11";
|
stateVersion = "23.11";
|
||||||
|
|
@ -108,6 +107,7 @@ in {
|
||||||
gh.enable = true;
|
gh.enable = true;
|
||||||
gpg.enable = true;
|
gpg.enable = true;
|
||||||
pandoc.enable = true;
|
pandoc.enable = true;
|
||||||
|
yt-dlp.enable = true;
|
||||||
};
|
};
|
||||||
xdg = {
|
xdg = {
|
||||||
dataFile = { "julia/config/startup.jl".source = ./../dotfiles/startup.jl; };
|
dataFile = { "julia/config/startup.jl".source = ./../dotfiles/startup.jl; };
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,4 @@
|
||||||
{ config, lib, pkgs, pkgs-unstable, ... }: {
|
{ config, lib, pkgs, pkgs-unstable, ... }: {
|
||||||
|
|
||||||
imports = [
|
|
||||||
./../modules/defaults.nix
|
|
||||||
./../programs/alttab.nix
|
|
||||||
./../programs/taskbar.nix
|
|
||||||
];
|
|
||||||
home = {
|
home = {
|
||||||
packages = with pkgs; [
|
packages = with pkgs; [
|
||||||
asitop
|
asitop
|
||||||
|
|
|
||||||
|
|
@ -1,93 +0,0 @@
|
||||||
# WARNING: This module was "vibe coded" by Claude Sonnet 4.5 Thinking
|
|
||||||
# Nix modules are mostly boilerplace, so the logic is (mostly) mine, and the
|
|
||||||
# rest comes from Claude. For reference, here was my prompt:
|
|
||||||
#
|
|
||||||
# I would like to write a new module for managing MacOS apps via the `defaults`
|
|
||||||
# cli. Ideally, the syntax that I want to include in my home-manager config
|
|
||||||
# should look like:
|
|
||||||
#
|
|
||||||
# ```nix
|
|
||||||
# darwin-defaults = {
|
|
||||||
# "com.fpfxtknjju.wbgcdolfev" = {
|
|
||||||
# centerTasksAndButtons = false;
|
|
||||||
# pinList = [
|
|
||||||
# { action = "finderNewWindow"; bundleIdentifier = "com.apple.finder"; }
|
|
||||||
# { action = "firefoxNewWindow"; bundleIdentifier = "org.mozilla.firefox"; }
|
|
||||||
# { action = "launchOrActivateApp"; bundleIdentifier = "com.electron.logseq"; }
|
|
||||||
# ];
|
|
||||||
# };
|
|
||||||
# "com.lwouis.alt-tab-macos" = {
|
|
||||||
# screenRecordingPermissionSkipped = true;
|
|
||||||
# nextWindowGesture = 1;
|
|
||||||
# };
|
|
||||||
# };
|
|
||||||
# ```
|
|
||||||
#
|
|
||||||
# This should be fairly easy to implement, as `defaults` accepts (escaped) plist
|
|
||||||
# strings, and Nix provides lib.generators.toPlist. Can you help me write the
|
|
||||||
# module, please?
|
|
||||||
|
|
||||||
{ config, lib, pkgs, ... }:
|
|
||||||
let
|
|
||||||
inherit (pkgs.stdenv.hostPlatform) isDarwin;
|
|
||||||
inherit (lib) mkOption types mkIf;
|
|
||||||
inherit (lib.generators) toPlist;
|
|
||||||
|
|
||||||
cfg = config.defaults;
|
|
||||||
|
|
||||||
# Convert domain settings to defaults import command
|
|
||||||
domainToScript = domain: settings:
|
|
||||||
let
|
|
||||||
plistContent = toPlist { escape = true; } settings;
|
|
||||||
escapedDomain = lib.escapeShellArg domain;
|
|
||||||
in ''
|
|
||||||
$DRY_RUN_CMD echo "Applying defaults for ${domain}..."
|
|
||||||
$DRY_RUN_CMD /usr/bin/defaults import -app ${escapedDomain} - <<'EOF'
|
|
||||||
${plistContent}
|
|
||||||
EOF
|
|
||||||
$DRY_RUN_CMD killall ${escapedDomain} && open -a ${escapedDomain}
|
|
||||||
'';
|
|
||||||
|
|
||||||
# Generate all activation scripts
|
|
||||||
activationScript =
|
|
||||||
lib.concatStringsSep "\n" (lib.mapAttrsToList domainToScript cfg);
|
|
||||||
|
|
||||||
in {
|
|
||||||
options.defaults = mkOption {
|
|
||||||
type = types.attrsOf (types.attrsOf types.anything);
|
|
||||||
default = { };
|
|
||||||
description = ''
|
|
||||||
Configuration for macOS defaults by domain.
|
|
||||||
|
|
||||||
Each attribute set key represents a domain (typically an app bundle identifier),
|
|
||||||
and its value is an attribute set of preference keys and values that will be
|
|
||||||
converted to a plist and imported using the `defaults` command.
|
|
||||||
|
|
||||||
This module only works on macOS (Darwin) systems.
|
|
||||||
'';
|
|
||||||
example = lib.literalExpression ''
|
|
||||||
{
|
|
||||||
"com.apple.dock" = {
|
|
||||||
autohide = true;
|
|
||||||
tilesize = 48;
|
|
||||||
orientation = "left";
|
|
||||||
};
|
|
||||||
"com.apple.finder" = {
|
|
||||||
AppleShowAllFiles = true;
|
|
||||||
ShowPathbar = true;
|
|
||||||
FXEnableExtensionChangeWarning = false;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
config = mkIf (isDarwin && cfg != { }) {
|
|
||||||
home.activation.defaults = lib.hm.dag.entryAfter [ "writeBoundary" ] ''
|
|
||||||
if [[ -x /usr/bin/defaults ]]; then
|
|
||||||
${activationScript}
|
|
||||||
else
|
|
||||||
echo "Warning: /usr/bin/defaults not found. Skipping darwin-defaults configuration."
|
|
||||||
fi
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
@ -1,10 +0,0 @@
|
||||||
{ ... }: {
|
|
||||||
defaults."AltTab" = {
|
|
||||||
appearanceStyle = 0;
|
|
||||||
nextWindowGesture = 1;
|
|
||||||
screenRecordingPermissionSkipped = true;
|
|
||||||
showFullscreenWindows = 0;
|
|
||||||
showHiddenWindows = 1;
|
|
||||||
updatePolicy = 2;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
@ -1,49 +0,0 @@
|
||||||
{ ... }: {
|
|
||||||
defaults."Taskbar" = {
|
|
||||||
centerTasksAndButtons = false;
|
|
||||||
hideReviewOptions = true;
|
|
||||||
permissionsResetOnce = true;
|
|
||||||
pinList = [
|
|
||||||
{
|
|
||||||
action = "finderNewWindow";
|
|
||||||
bundleIdentifier = "com.apple.finder";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
action = "launchOrActivateApp";
|
|
||||||
bundleIdentifier = "com.apple.AppStore";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
action = "firefoxNewWindow";
|
|
||||||
bundleIdentifier = "org.mozilla.firefox";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
action = "launchOrActivateApp";
|
|
||||||
bundleIdentifier = "com.apple.systempreferences";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
action = "launchOrActivateApp";
|
|
||||||
bundleIdentifier = "com.electron.logseq";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
action = "launchOrActivateApp";
|
|
||||||
bundleIdentifier = "org.mozilla.thunderbird";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
action = "launchOrActivateApp";
|
|
||||||
bundleIdentifier =
|
|
||||||
"com.apple.Safari.WebApp.2F51A6D0-087A-438F-92D3-A73FE09CB4CC";
|
|
||||||
}
|
|
||||||
{
|
|
||||||
action = "launchOrActivateApp";
|
|
||||||
bundleIdentifier =
|
|
||||||
"com.apple.Safari.WebApp.5EC6478E-03A6-4147-8A4D-6EF3DE3F06D3";
|
|
||||||
}
|
|
||||||
];
|
|
||||||
sendCrashReports = true;
|
|
||||||
showMenubarIcon = false;
|
|
||||||
showThumbnails = true;
|
|
||||||
showWindowTitleInThumbails = true;
|
|
||||||
taskViewMaxWidth = 200;
|
|
||||||
updatePolicy = 0;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
@ -1,6 +0,0 @@
|
||||||
{ pkgs-unstable, ... }: {
|
|
||||||
programs.yt-dlp = {
|
|
||||||
enable = true;
|
|
||||||
package = pkgs-unstable.yt-dlp;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
@ -39,10 +39,9 @@ in {
|
||||||
system.primaryUser = "millironx";
|
system.primaryUser = "millironx";
|
||||||
|
|
||||||
system.defaults.dock = {
|
system.defaults.dock = {
|
||||||
autohide = true;
|
autohide = false;
|
||||||
minimize-to-application = true;
|
minimize-to-application = true;
|
||||||
mru-spaces = false;
|
mru-spaces = false;
|
||||||
orientation = "left";
|
|
||||||
persistent-apps = let
|
persistent-apps = let
|
||||||
dedupDotApp = appName:
|
dedupDotApp = appName:
|
||||||
if pkgs.lib.strings.hasSuffix ".app" appName then
|
if pkgs.lib.strings.hasSuffix ".app" appName then
|
||||||
|
|
@ -70,10 +69,20 @@ in {
|
||||||
};
|
};
|
||||||
in [
|
in [
|
||||||
(sysApp "Firefox")
|
(sysApp "Firefox")
|
||||||
|
(chromeApp "Messages")
|
||||||
|
(sysApp "Signal")
|
||||||
(sysApp "Thunderbird")
|
(sysApp "Thunderbird")
|
||||||
|
(localApp "Immich")
|
||||||
(sysApp "Logseq")
|
(sysApp "Logseq")
|
||||||
(sysApp "Zed")
|
(sysApp "Zed")
|
||||||
(sysApp "Steam")
|
(sysApp "Steam")
|
||||||
|
(sysApp "Amperfy")
|
||||||
|
(sysApp "Microsoft Word")
|
||||||
|
(sysApp "Microsoft Excel")
|
||||||
|
(sysApp "Microsoft PowerPoint")
|
||||||
|
(localApp "Canvas")
|
||||||
|
(sysApp "Zotero")
|
||||||
|
(localApp "VetPrep")
|
||||||
(chromeApp "Instinct Dashboard")
|
(chromeApp "Instinct Dashboard")
|
||||||
(chromeApp "Carestream")
|
(chromeApp "Carestream")
|
||||||
];
|
];
|
||||||
|
|
@ -204,7 +213,6 @@ in {
|
||||||
"slack"
|
"slack"
|
||||||
"stats"
|
"stats"
|
||||||
"steam"
|
"steam"
|
||||||
"taskbar"
|
|
||||||
"textmate"
|
"textmate"
|
||||||
"thunderbird@esr"
|
"thunderbird@esr"
|
||||||
"ungoogled-chromium"
|
"ungoogled-chromium"
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue