{ config , pkgs , lib , ... }: { nixpkgs.overlays = [ (self: super: { darwin-zsh-completions = super.runCommand "darwin-zsh-completions-0.0.0" { preferLocalBuild = true; } '' mkdir -p $out/share/zsh/site-functions cat <<-'EOF' > $out/share/zsh/site-functions/_darwin-rebuild #compdef darwin-rebuild #autoload _nix-common-options local -a _1st_arguments _1st_arguments=( 'switch:Build, activate, and update the current generation'\ 'build:Build without activating or updating the current generation'\ 'check:Build and run the activation sanity checks'\ 'changelog:Show most recent entries in the changelog'\ ) _arguments \ '--list-generations[Print a list of all generations in the active profile]'\ '--rollback[Roll back to the previous configuration]'\ {--switch-generation,-G}'[Activate specified generation]'\ '(--profile-name -p)'{--profile-name,-p}'[Profile to use to track current and previous system configurations]:Profile:_nix_profiles'\ '1:: :->subcmds' && return 0 case $state in subcmds) _describe -t commands 'darwin-rebuild subcommands' _1st_arguments ;; esac EOF ''; }) ]; home.packages = with pkgs; [ darwin-zsh-completions darwin.trash ]; programs.emacs.package = pkgs.commercial-emacs; home.file.".hushlogin".text = ""; services.syncthing = { enable = true; }; launchd.agents = { home-manager-expire-generations = { enable = true; config = { ProgramArguments = [ "${pkgs.home-manager}/bin/home-manager" "expire-generations" "-30 days" ]; KeepAlive = false; RunAtLoad = false; StartCalendarInterval = [{ Hour = 12; Minute = 00; Weekday = 6; # Saturday }]; ProcessType = "Background"; LowPriorityBackgroundIO = true; }; }; setenv = { enable = true; config = { ProgramArguments = [ "/bin/launchctl" "setenv" "XDG_CACHE_HOME" config.xdg.cacheHome "SSH_AUTH_SOCK" config.programs.zsh.sessionVariables.SSH_AUTH_SOCK ]; RunAtLoad = true; StandardErrorPath = "/dev/null"; StandardOutputPath = "/dev/null"; }; }; dark-light-mode = { enable = true; config = { WatchPaths = [ "${config.home.homeDirectory}/Library/Preferences/.GlobalPreferences.plist" ]; StandardOutputPath = "/dev/null"; StandardErrorPath = "/dev/null"; RunAtLoad = true; KeepAlive = false; ProgramArguments = [ "/bin/sh" ( toString ( pkgs.writeShellScript "toggle-dark-light-mode" '' wait4path /nix if defaults read -g AppleInterfaceStyle &>/dev/null ; then MODE="dark" else MODE="light" fi emacsclient="${config.programs.emacs.finalPackage}/bin/emacsclient" emacsSwitchTheme () { if pgrep -q Emacs; then if [[ $MODE == "dark" ]]; then $emacsclient --eval "(modus-themes-load-theme (cadr modus-themes-to-toggle))" \ --eval "(modify-all-frames-parameters '((ns-appearance '$MODE)))" elif [[ $MODE == "light" ]]; then $emacsclient --eval "(modus-themes-load-theme (car modus-themes-to-toggle))" \ --eval "(modify-all-frames-parameters '((ns-appearance '$MODE)))" fi fi } emacsSwitchTheme $@ '' ) ) ]; }; }; }; programs.zsh.shellAliases = { rb = "darwin-rebuild"; rbs = "darwin-rebuild switch --flake $(ghq list -p nixfiles)"; dig = "dig +noall +answer"; }; programs.zsh.sessionVariables = { SSH_AUTH_SOCK = "~/.strongbox/agent.sock"; }; programs.ssh.extraConfig = '' IdentityAgent ${config.programs.zsh.sessionVariables.SSH_AUTH_SOCK} ''; programs.zsh.envExtra = '' SHELL_SESSIONS_DISABLE=1 path+=($HOME/Library/Python/3.9/bin) ''; home.activation.linkStrongboxSSHAgentSocket = lib.hm.dag.entryAfter [ "writeBoundary" ] '' if [[ ! -d ~/.strongbox ]] then $DRY_RUN_CMD mkdir ~/.strongbox fi if [[ ! -S ~/.strongbox/agent.sock ]] then $DRY_RUN_CMD ln -s $VERBOSE_ARG \ ~/Library/Group\ Containers/group.strongbox.mac.mcguill/agent.sock ~/.strongbox/agent.sock fi ''; # Use GPG from GPGTools programs.git.signing.gpgPath = "/usr/local/bin/gpg"; }