Compare commits

..

No commits in common. "cc173b20b9b7309d235be8e76668fbc3373f0212" and "af6c06e82f2274134cbd238f1542cf13092d4620" have entirely different histories.

7 changed files with 12 additions and 168 deletions

View file

@ -16,7 +16,6 @@ in {
./../programs/lsd.nix
./../programs/neovim.nix
./../programs/starship.nix
./../programs/yt-dlp.nix
];
home = {
stateVersion = "23.11";
@ -108,6 +107,7 @@ in {
gh.enable = true;
gpg.enable = true;
pandoc.enable = true;
yt-dlp.enable = true;
};
xdg = {
dataFile = { "julia/config/startup.jl".source = ./../dotfiles/startup.jl; };

View file

@ -1,10 +1,4 @@
{ config, lib, pkgs, pkgs-unstable, ... }: {
imports = [
./../modules/defaults.nix
./../programs/alttab.nix
./../programs/taskbar.nix
];
home = {
packages = with pkgs; [
asitop

View file

@ -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
'';
};
}

View file

@ -1,10 +0,0 @@
{ ... }: {
defaults."AltTab" = {
appearanceStyle = 0;
nextWindowGesture = 1;
screenRecordingPermissionSkipped = true;
showFullscreenWindows = 0;
showHiddenWindows = 1;
updatePolicy = 2;
};
}

View file

@ -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;
};
}

View file

@ -1,6 +0,0 @@
{ pkgs-unstable, ... }: {
programs.yt-dlp = {
enable = true;
package = pkgs-unstable.yt-dlp;
};
}

View file

@ -39,10 +39,9 @@ in {
system.primaryUser = "millironx";
system.defaults.dock = {
autohide = true;
autohide = false;
minimize-to-application = true;
mru-spaces = false;
orientation = "left";
persistent-apps = let
dedupDotApp = appName:
if pkgs.lib.strings.hasSuffix ".app" appName then
@ -70,10 +69,20 @@ in {
};
in [
(sysApp "Firefox")
(chromeApp "Messages")
(sysApp "Signal")
(sysApp "Thunderbird")
(localApp "Immich")
(sysApp "Logseq")
(sysApp "Zed")
(sysApp "Steam")
(sysApp "Amperfy")
(sysApp "Microsoft Word")
(sysApp "Microsoft Excel")
(sysApp "Microsoft PowerPoint")
(localApp "Canvas")
(sysApp "Zotero")
(localApp "VetPrep")
(chromeApp "Instinct Dashboard")
(chromeApp "Carestream")
];
@ -204,7 +213,6 @@ in {
"slack"
"stats"
"steam"
"taskbar"
"textmate"
"thunderbird@esr"
"ungoogled-chromium"