From 011486787f639f2d2474bbaf5a6ef3d77fb45a43 Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Sun, 1 Mar 2026 18:56:27 +0100 Subject: Refactor dotfiles to declarative Nix management (nix-darwin + home-manager) (#5) --- modules/darwin/default.nix | 27 +++++++ modules/darwin/homebrew.nix | 191 ++++++++++++++++++++++++++++++++++++++++++++ modules/darwin/macos.nix | 139 ++++++++++++++++++++++++++++++++ 3 files changed, 357 insertions(+) create mode 100644 modules/darwin/default.nix create mode 100644 modules/darwin/homebrew.nix create mode 100644 modules/darwin/macos.nix (limited to 'modules/darwin') diff --git a/modules/darwin/default.nix b/modules/darwin/default.nix new file mode 100644 index 0000000..5474b91 --- /dev/null +++ b/modules/darwin/default.nix @@ -0,0 +1,27 @@ +{ pkgs, ... }: + +{ + imports = [ + ./homebrew.nix + ./macos.nix + ]; + + # Enable experimental Nix features + nix.settings.experimental-features = "nix-command flakes"; + + # Allow unfree packages + nixpkgs.config.allowUnfree = true; + + # System state version – do not change after first installation + system.stateVersion = 5; + + # Enable Touch ID for sudo + security.pam.enableSudoTouchIdAuth = true; + + # Core system packages available to all users + environment.systemPackages = with pkgs; [ + curl + git + wget + ]; +} diff --git a/modules/darwin/homebrew.nix b/modules/darwin/homebrew.nix new file mode 100644 index 0000000..3c3f469 --- /dev/null +++ b/modules/darwin/homebrew.nix @@ -0,0 +1,191 @@ +{ ... }: + +{ + homebrew = { + enable = true; + + onActivation = { + autoUpdate = true; + upgrade = true; + cleanup = "zap"; + }; + + taps = [ + "bramstein/webfonttools" + "danielgtaylor/restish" + "oven-sh/bun" + "pulumi/tap" + "go-task/tap" + "tursodatabase/tap" + "yakitrak/yakitrak" + "simenandre/tools" + ]; + + brews = [ + # Editors and terminal multiplexers + "neovim" + "tmux" + + # Shells and shell utilities + "zsh" + "bash" + "bash-completion" + "ghq" + "moreutils" + + # GNU tools + "findutils" + "gnu-sed" + "grep" + + # Networking tools + "openssh" + "nmap" + "wget" + + # Security and encryption + "gnupg" + "git-secret" + "ssh-copy-id" + + # Compression libraries and tools + "lz4" + "zlib" + "zstd" + "libffi" + "p7zip" + "pigz" + "zopfli" + + # Programming languages and runtimes + "golang" + "golangci-lint" + "python@3.11" + "rust" + "zig" + "pkl" + + # Font tools + "sfnt2woff" + "sfnt2woff-zopfli" + "woff2" + + # JavaScript runtimes and package managers + "bun" + "pnpm" + "volta" + "corepack" + "deno" + + # REST API clients + "danielgtaylor/restish/restish" + + # Version control + "git" + "git-lfs" + "lazygit" + "microplane" + + # Search tools + "ripgrep" + "ack" + "fzf" + + # JSON/YAML processing tools + "jq" + "yq" + + # Cloud and IaC tools + "pulumi" + "crd2pulumi" + "kube2pulumi" + "pulumictl" + "tf2pulumi" + "azure-cli" + "kubectl" + "helm" + "cilium-cli" + "doctl" + "flyctl" + + # Container tools + "podman" + "podman-compose" + + # Task runners and automation + "go-task" + "act" + + # Databases and database tools + "turso" + "libpq" + "sqld" + + # Terminal tools + "pv" + "rename" + "rlwrap" + "tree" + "screen" + "vbindiff" + "tmate" + "asciinema" + "dasel" + "tldr" + "starship" + "gh" + + # HTTP and web servers + "caddy" + "goreleaser" + + # Specific toolsets + "whalebrew" + "gd" + "ghostscript" + "rclone" + "graphviz" + + # Mac App Store CLI + "mas" + ]; + + casks = [ + "spotify" + "slack" + "sonos" + "figma" + "discord" + "grammarly" + "microsoft-remote-desktop" + "postico" + "cyberduck" + "adobe-creative-cloud" + "1password-cli" + "protonvpn" + "openvpn-connect" + "raycast" + "rectangle" + "google-chrome" + "google-drive" + "karabiner-elements" + "postman" + "ghostty" + "proton-mail" + "claude" + "font-symbols-only-nerd-font" + "font-jetbrains-mono" + "google-cloud-sdk" + "docker" + "podman-desktop" + "microsoft-teams" + "zoom" + "obsidian" + ]; + + masApps = { + "Outline" = 1356178125; + "Remote Desktop" = 409907375; + }; + }; +} diff --git a/modules/darwin/macos.nix b/modules/darwin/macos.nix new file mode 100644 index 0000000..8927903 --- /dev/null +++ b/modules/darwin/macos.nix @@ -0,0 +1,139 @@ +{ ... }: + +{ + system.defaults = { + NSGlobalDomain = { + # Sidebar icon size: medium + NSTableViewDefaultSizeMode = 2; + # Always show scrollbars + AppleShowScrollBars = "Always"; + # Expand save panel by default + NSNavPanelExpandedStateForSaveMode = true; + NSNavPanelExpandedStateForSaveMode2 = true; + # Expand print panel by default + PMPrintingExpandedStateForPrint = true; + PMPrintingExpandedStateForPrint2 = true; + # Save to disk (not to iCloud) by default + NSDocumentSaveNewDocumentsToCloud = false; + # Disable auto-correct + NSAutomaticSpellingCorrectionEnabled = false; + # Font smoothing + AppleFontSmoothing = 1; + }; + + dock = { + # Minimize windows into their application's icon + minimize-to-application = true; + # Show indicator lights for open applications in the Dock + show-process-indicators = true; + # Wipe all default app icons from the Dock + persistent-apps = [ ]; + # Speed up Mission Control animations + expose-animation-duration = 0.1; + # Remove the auto-hiding Dock delay + autohide-delay = 0.0; + # Remove the animation when hiding/showing the Dock + autohide-time-modifier = 0.0; + # Automatically hide and show the Dock + autohide = true; + # Make Dock icons of hidden applications translucent + showhidden = true; + # Don't show recent applications in Dock + show-recents = false; + }; + + finder = { + # Show status bar + ShowStatusBar = true; + # Show path bar + ShowPathbar = true; + # Search the current folder by default + FXDefaultSearchScope = "SCcf"; + # Disable warning when changing a file extension + FXEnableExtensionChangeWarning = false; + }; + + screencapture = { + # Save screenshots to ~/Screenshots + location = "~/Screenshots"; + # Save screenshots as JPG + type = "jpg"; + }; + + trackpad = { + # Enable tap to click for this user and the login screen + Clicking = true; + }; + + ActivityMonitor = { + # Show the main window when launching Activity Monitor + OpenMainWindow = true; + # Visualize CPU usage in the Activity Monitor Dock icon + IconType = 5; + # Show all processes in Activity Monitor + ShowCategory = 0; + # Sort Activity Monitor results by CPU usage + SortColumn = "CPUUsage"; + SortDirection = 0; + }; + + LaunchServices = { + # Disable the "Are you sure you want to open this application?" dialog + LSQuarantine = false; + }; + + CustomUserPreferences = { + "com.apple.print.PrintingPrefs" = { + # Automatically quit printer app once the print jobs complete + "Quit When Finished" = true; + }; + "com.apple.desktopservices" = { + # Avoid creating .DS_Store files on network or USB volumes + DSDontWriteNetworkStores = true; + DSDontWriteUSBStores = true; + }; + "com.apple.Safari" = { + # Privacy: don't send search queries to Apple + UniversalSearchEnabled = false; + SuppressSearchSuggestions = true; + }; + "com.apple.TimeMachine" = { + # Prevent Time Machine from prompting to use new hard drives + DoNotOfferNewDisksForBackup = true; + }; + "com.apple.TextEdit" = { + PlainTextEncoding = 4; + PlainTextEncodingForWrite = 4; + }; + "com.apple.SoftwareUpdate" = { + AutomaticCheckEnabled = true; + ScheduleFrequency = 1; + AutomaticDownload = 1; + CriticalUpdateInstall = 1; + }; + "com.apple.commerce" = { + AutoUpdate = true; + AutoUpdateRestartRequired = true; + }; + "com.apple.helpviewer" = { + DevMode = true; + }; + "com.apple.BluetoothAudioAgent" = { + "Apple Bitpool Min (editable)" = 40; + }; + "com.google.Chrome" = { + # Disable the all too sensitive backswipe on trackpads and Magic Mouse + AppleEnableSwipeNavigateWithScrolls = false; + AppleEnableMouseSwipeNavigateWithScrolls = false; + # Expand the print dialog by default + PMPrintingExpandedStateForPrint2 = true; + }; + "com.apple.messageshelper.MessageController" = { + SOInputLineSettings = { + automaticQuoteSubstitutionEnabled = false; + continuousSpellCheckingEnabled = false; + }; + }; + }; + }; +} -- cgit v1.2.3