diff options
| author | Simen A. W. Olsen <cobraz@Simens-MacBook-Pro-4.local> | 2026-03-21 13:49:10 +0100 |
|---|---|---|
| committer | Simen A. W. Olsen <cobraz@Simens-MacBook-Pro-4.local> | 2026-03-21 13:49:10 +0100 |
| commit | 1fd92fcaf3aadea1e9509f859340f57100218c41 (patch) | |
| tree | db88f38eef0b04000cfd7affbbd5ab9175027f08 | |
| parent | 95083ca2ac000adeaaaa9a14c8e64b015979d0b1 (diff) | |
| download | dotfiles-1fd92fcaf3aadea1e9509f859340f57100218c41.tar.gz dotfiles-1fd92fcaf3aadea1e9509f859340f57100218c41.zip | |
refactor: consolidate dotfiles into declarative Nix modules
- Remove nvim git submodule, use flake input instead
- Inline all shell configurations into Nix modules
- Remove legacy bootstrap.sh and macos/macos script
- Add NixOS system configuration support
- Update documentation with platform-specific setup
- Add claude-code to macOS Homebrew
- Remove stow-based dotfile management approach
| -rw-r--r-- | .DS_Store | bin | 0 -> 8196 bytes | |||
| -rw-r--r-- | .gitmodules | 3 | ||||
| -rw-r--r-- | README.md | 44 | ||||
| -rw-r--r-- | apps/Brewfile | 178 | ||||
| -rwxr-xr-x | bootstrap.sh | 44 | ||||
| -rw-r--r-- | flake.nix | 22 | ||||
| -rw-r--r-- | ghostty/.config/ghostty/config | 8 | ||||
| -rw-r--r-- | git/.gitconfig | 70 | ||||
| -rwxr-xr-x | macos/macos | 658 | ||||
| -rw-r--r-- | modules/darwin/homebrew.nix | 1 | ||||
| -rw-r--r-- | modules/home/default.nix | 14 | ||||
| -rw-r--r-- | modules/home/ghostty.nix | 11 | ||||
| -rw-r--r-- | modules/home/starship.nix | 4 | ||||
| -rw-r--r-- | modules/home/tmux.nix | 28 | ||||
| -rw-r--r-- | modules/home/zsh.nix | 159 | ||||
| m--------- | nvim/.config/nvim | 0 | ||||
| -rw-r--r-- | starship/.config/starship.toml | 0 | ||||
| -rw-r--r-- | tmux/.tmux.conf | 26 | ||||
| -rwxr-xr-x | zsh/.config/zsh/.zshrc | 28 | ||||
| -rwxr-xr-x | zsh/.config/zsh/aliases | 32 | ||||
| -rwxr-xr-x | zsh/.config/zsh/extras | 37 | ||||
| -rwxr-xr-x | zsh/.config/zsh/path | 18 | ||||
| -rw-r--r-- | zsh/.hushlogin | 0 | ||||
| -rwxr-xr-x | zsh/.zshenv | 24 |
24 files changed, 247 insertions, 1162 deletions
diff --git a/.DS_Store b/.DS_Store Binary files differnew file mode 100644 index 0000000..bc10696 --- /dev/null +++ b/.DS_Store diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index ba7db14..0000000 --- a/.gitmodules +++ /dev/null @@ -1,3 +0,0 @@ -[submodule "nvim/.config/nvim"] - path = nvim/.config/nvim - url = git@github.com:simenandre/config.nvim.git @@ -1,6 +1,6 @@ # dotfiles -My Development Setup, managed with [Nix](https://nixos.org), [nix-darwin](https://github.com/LnL7/nix-darwin), and [home-manager](https://github.com/nix-community/home-manager). Works on macOS and Linux. +My Development Setup, managed with [Nix](https://nixos.org), [nix-darwin](https://github.com/LnL7/nix-darwin), and [home-manager](https://github.com/nix-community/home-manager). Works on macOS, NixOS, and standalone Linux. ## Quickstart @@ -15,7 +15,6 @@ curl --proto '=https' --tlsv1.2 -sSf -L https://install.determinate.systems/nix ```shell git clone git@github.com:simenandre/dotfiles.git ~/dotfiles cd ~/dotfiles -git submodule update --init --recursive ``` ### 3. Apply the configuration @@ -34,36 +33,43 @@ On subsequent runs: darwin-rebuild switch --flake .#default ``` -#### Linux +#### NixOS -Install [home-manager](https://github.com/nix-community/home-manager) as a standalone tool and apply the configuration: +Generate hardware config and rebuild: ```shell -# x86_64 (most common) +sudo nixos-generate-config --show-hardware-config > modules/nixos/hardware-configuration.nix +sudo nixos-rebuild switch --flake .#nixbox +``` + +#### Linux (standalone home-manager) + +```shell +# x86_64 home-manager switch --flake .#simenandre -# aarch64 (ARM64, e.g. Raspberry Pi or ARM cloud instances) +# aarch64 home-manager switch --flake .#simenandre@aarch64-linux ``` ## Structure ``` -flake.nix # Entry point – nix-darwin (macOS) + home-manager (macOS & Linux) +flake.nix # Entry point – inputs & all configurations modules/ darwin/ default.nix # System-level configuration (nix settings, core packages) - homebrew.nix # Homebrew packages (taps, brews, casks, Mac App Store) - macos.nix # macOS system defaults (replaces macos/macos script) + homebrew.nix # Homebrew packages (taps, brews, casks, Mac App Store) + macos.nix # macOS system defaults home/ - default.nix # home-manager entry point (platform-aware home directory) - git.nix # Git configuration (platform-aware SSH signing path) - zsh.nix # Zsh configuration files - starship.nix # Starship prompt configuration - tmux.nix # Tmux configuration - ghostty.nix # Ghostty terminal configuration -apps/ - Brewfile # Legacy Brewfile (superseded by modules/darwin/homebrew.nix) -macos/ - macos # Legacy macOS defaults script (superseded by modules/darwin/macos.nix) + default.nix # home-manager entry point (platform-aware home directory) + git.nix # Git configuration (platform-aware SSH signing path) + zsh.nix # Zsh configuration (zshenv, zshrc, aliases, path, extras) + starship.nix # Starship prompt + tmux.nix # Tmux configuration + ghostty.nix # Ghostty terminal configuration + nixos/ + default.nix # NixOS system configuration +scripts/ + cleanup.sh # macOS cleanup utility ``` diff --git a/apps/Brewfile b/apps/Brewfile deleted file mode 100644 index 9290df6..0000000 --- a/apps/Brewfile +++ /dev/null @@ -1,178 +0,0 @@ -# Taps -tap "bramstein/webfonttools" # Tools for working with web fonts -tap "homebrew/cask-drivers" # Tap for cask drivers -tap "danielgtaylor/restish" # REST API client -tap "oven-sh/bun" # Bun JavaScript runtime -tap "pulumi/tap" # Pulumi infrastructure as code tools -tap "go-task/tap" # Task runner for Go -tap "tursodatabase/tap" # Turso database tools -tap "libsql/sqld" -tap "yakitrak/yakitrak" # Tap for yakitrak tools -tap "simenandre/tools" # Tap for Simen Andre's tools - -# Applications -cask "spotify" # Spotify music streaming -brew "neovim" # Hyperextensible Vim-based text editor -cask "slack" # Slack messaging app -cask "sonos" # Sonos controller app -brew "tmux" # Terminal multiplexer -cask "figma" # Figma design tool -cask "discord" # Discord chat and voice app -cask "grammarly" # Grammarly writing assistant -cask "microsoft-remote-desktop" # Microsoft Remote Desktop app -cask "postico" # PostgreSQL GUI client -cask "cyberduck" # FTP and cloud storage browser -cask "adobe-creative-cloud" # Adobe Creative Cloud -# TODO: Figure out how to handle 1password when it updates itself -# cask "1password" # 1Password password manager -cask "1password-cli" # 1Password command-line tool -cask "protonvpn" # ProtonVPN client -cask "openvpn-connect" # OpenVPN client -cask "raycast" # Command launcher -cask "rectangle" # Window management app -cask "google-chrome" # Google Chrome browser -cask "google-drive" # Google Drive -cask "google-drive-file-stream" # Google Drive for desktop -cask "karabiner-elements" # Keyboard customizer -cask "postman" # API platform -cask "ghostty" # Modern terminal emulator -cask "proton-mail" # ProtonMail client -cask "claude" - -# Mas -brew "mas" # Mac App Store command-line interface -mas "Outline", id: 1356178125 # Outline VPN -mas "Remote Desktop", id: 409907375 # Microsoft Remote Desktop application - -# Shells and Shell Utilities -brew "zsh" # Z shell -brew "bash" # Modern version of Bash -brew "bash-completion" # Bash completion -brew "ghq" # Manage remote repository clones -brew "moreutils" # Collection of additional Unix utilities - -# GNU Tools -brew "findutils" # GNU `find`, `locate`, `updatedb`, and `xargs`, `g`-prefixed. -brew "gnu-sed" # GNU `sed`, overwriting the built-in `sed`. -brew "grep" # More recent version of macOS `grep` -brew "stow" - -# Networking Tools -brew "wget" # `wget` with IRI support. -brew "openssh" # OpenSSH utilities -brew "nmap" # Network mapper - -# Security and Encryption -brew "gnupg" # GnuPG to enable PGP-signing commits. -brew "git-secret" # Bash tool to store encrypted secrets in a Git repository -brew "ssh-copy-id" # Add SSH key to a server's authorized_keys - -# Compression Libraries and Tools -brew "lz4" # Compression library -brew "zlib" # Compression library -brew "zstd" # Compression library -brew "libffi" # Foreign Function Interface library -brew "p7zip" # File archiver with high compression ratio -brew "pigz" # Parallel implementation of gzip -brew "zopfli" # Compression tool - -# Programming Languages and Runtimes -brew "golang" # Go programming language -brew "golangci-lint" # Go linter -brew "python@3.11" # Python 3.11 -brew "rust" # Rust programming language -brew "zig" # Zig programming language -brew "pkl" # Configuration language - -# Font Tools -brew "sfnt2woff" # Convert TTF to WOFF -brew "sfnt2woff-zopfli" # Convert TTF to WOFF (with Zopfli compression) -brew "woff2" # Convert TTF to WOFF2 -cask "font-symbols-only-nerd-font" # Symbols Only Nerd Font -cask "font-jetbrains-mono" # JetBrains Mono font - -# JavaScript Runtimes and Package Managers -brew "bun" # Bun JavaScript runtime -brew "pnpm" # Fast, disk space efficient package manager -brew "volta" # JavaScript tool manager -brew "corepack" # Yarn and pnpm binary manager -brew "deno" # Secure JavaScript and TypeScript runtime - -# REST API Clients -brew "danielgtaylor/restish/restish" # REST API client - -# Version Control -brew "git" # Distributed version control system -brew "git-lfs" # Git extension for versioning large files -brew "lazygit" # Simple terminal UI for git commands -brew "microplane" # Tool for mass refactoring - -# Search Tools -brew "ripgrep" # Line-oriented search tool -brew "ack" # Search tool like grep, optimized for programmers -brew "fzf" # Command-line fuzzy finder - -# JSON/YAML Processing Tools -brew "jq" # Command-line JSON processor -brew "yq" # Command-line YAML processor - -# Cloud and IaC Tools -brew "pulumi" # Infrastructure as code tool -brew "crd2pulumi" # Generate Pulumi code from Kubernetes CRDs -brew "kube2pulumi" # Generate Pulumi code from Kubernetes YAML -brew "pulumictl" # Pulumi command-line tool -brew "tf2pulumi" # Convert Terraform code to Pulumi -brew "azure-cli" # Microsoft Azure command-line tool -brew "kubectl" # Kubernetes command-line tool -brew "helm" # Kubernetes package manager -brew "cilium-cli" # CLI to install, manage & troubleshoot Kubernetes clusters -cask "google-cloud-sdk" # Google Cloud SDK -brew "doctl" # DigitalOcean CLI -brew "flyctl" # Fly.io CLI - -# Container Tools -brew "podman" # Manage pods, containers, and container images -brew "podman-compose" # Docker Compose replacement for Podman -cask "docker" # Docker desktop -cask "podman-desktop" # Podman desktop - -# Task Runners and Automation -brew "go-task" # Task runner for Go -brew "act" # Run GitHub Actions locally - -# Databases and Database Tools -brew "turso" # Turso database command-line tool -brew "libpq" # PostgreSQL C library -brew "sqld" # SQL daemon - -# Video Meeting Applications -cask "microsoft-teams" # Microsoft Teams -cask "zoom" # Zoom video conferencing - -# Terminal Tools -brew "pv" # Pipe viewer -brew "rename" # Perl-powered file rename script -brew "rlwrap" # Readline wrapper -brew "tree" # Display directories as trees -brew "screen" # Terminal multiplexer -brew "vbindiff" # Visual binary diff -brew "tmate" # Instant terminal sharing -brew "asciinema" # Record and share terminal sessions -brew "dasel" # Query and update data structures from the command line -brew "tldr" # Simplified and community-driven man pages -brew "starship" # Cross-shell prompt -brew "gh" # GitHub CLI - -# HTTP and Web Servers -brew "caddy" # Fast, multi-platform web server with automatic HTTPS -brew "goreleaser" # Deliver Go binaries as fast and easily as possible - -# Specific Toolsets -brew "whalebrew" # Dockerized CLI applications -brew "gd" # Graphics library -brew "ghostscript" # PostScript interpreter -brew "rclone" # Manage cloud storage -brew "graphviz" # Graph visualization software -# -# Obsidian -cask "obsidian" # Obsidian note-taking app diff --git a/bootstrap.sh b/bootstrap.sh deleted file mode 100755 index aa5e103..0000000 --- a/bootstrap.sh +++ /dev/null @@ -1,44 +0,0 @@ -#!/bin/bash - -# Install Homebrew if not installed -if ! command -v brew >/dev/null 2>&1; then - /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" -fi - -# Install packages from Brewfile -cd apps && brew bundle - -# Install Cargos -cargo install \ - git-trim \ - starship \ - twm - -# Create symlinks using stow -cd .. -stow_folders=(zsh git starship tmux nvim ghostty) -for folder in "${stow_folders[@]}"; do - echo "stow $folder" - stow -t $HOME -D $folder - stow -t $HOME $folder -done - -# Install TPM for tmux -if [ ! -d "$HOME/.tmux/plugins/tpm" ]; then - git clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm -fi - -# Configure macOS defaults with countdown -echo "Setting MacOS defaults in 10 seconds. Press CTRL+C to abort..." -sleep 10 -echo "" - -# Configure macOS defaults -sh macos/macos - -# Setup Zsh -if [ ! -d "$HOME/.zsh-repos/znap" ]; then - git clone --depth 1 https://github.com/marlonrichert/zsh-snap.git ~/.zsh-repos/znap -fi - -echo "Setup complete! Please restart your terminal." @@ -13,6 +13,11 @@ url = "github:nix-community/home-manager"; inputs.nixpkgs.follows = "nixpkgs"; }; + + config-nvim = { + url = "github:simenandre/config.nvim"; + flake = false; + }; }; outputs = @@ -21,7 +26,16 @@ nixpkgs, nix-darwin, home-manager, + config-nvim, }: + let + homeModules = [ + ./modules/home + { + home.file.".config/nvim".source = config-nvim; + } + ]; + in { darwinConfigurations."default" = nix-darwin.lib.darwinSystem { system = "aarch64-darwin"; @@ -31,7 +45,7 @@ { home-manager.useGlobalPkgs = true; home-manager.useUserPackages = true; - home-manager.users.simenandre = import ./modules/home; + home-manager.users.simenandre = { imports = homeModules; }; } ]; }; @@ -44,19 +58,19 @@ { home-manager.useGlobalPkgs = true; home-manager.useUserPackages = true; - home-manager.users.simenandre = import ./modules/home; + home-manager.users.simenandre = { imports = homeModules; }; } ]; }; homeConfigurations."simenandre" = home-manager.lib.homeManagerConfiguration { pkgs = nixpkgs.legacyPackages."x86_64-linux"; - modules = [ ./modules/home ]; + modules = homeModules; }; homeConfigurations."simenandre@aarch64-linux" = home-manager.lib.homeManagerConfiguration { pkgs = nixpkgs.legacyPackages."aarch64-linux"; - modules = [ ./modules/home ]; + modules = homeModules; }; }; } diff --git a/ghostty/.config/ghostty/config b/ghostty/.config/ghostty/config deleted file mode 100644 index 0743e2d..0000000 --- a/ghostty/.config/ghostty/config +++ /dev/null @@ -1,8 +0,0 @@ -theme = tokyonight-storm - -window-padding-x = 12 -window-padding-y = 12 -window-decoration = true -window-theme = "dark" -window-inherit-working-directory = true -window-inherit-font-size = true diff --git a/git/.gitconfig b/git/.gitconfig deleted file mode 100644 index 7e5bd8d..0000000 --- a/git/.gitconfig +++ /dev/null @@ -1,70 +0,0 @@ -[user] -name = Simen A. W. Olsen -email = hello@simenandre.no -signingkey = ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMCyUn5BfmAnd/6xi0X1mYF/+jPOmCS0bpNUePF55gCY - -[apply] -# Detect whitespace errors when applying a patch -whitespace = fix - -[core] -# Make `git rebase` safer on OS X -# More info: <http://www.git-tower.com/blog/make-git-rebase-safe-on-osx/> -trustctime = false -editor = nvim -excludesfile = ~/.gitignore_global - -[color] -# Use colors in Git commands that are capable of colored output when -# outputting to the terminal. (This is the default setting in Git ≥ 1.8.4.) -ui = auto - -[color "branch"] -current = yellow reverse -local = yellow -remote = green - -[color "diff"] -meta = yellow bold -frag = magenta bold # line info -old = red # deletions -new = green # additions - -[color "status"] -added = yellow -changed = green -untracked = cyan - -[diff] -# Detect copies as well as renames -renames = copies - -[help] -# Automatically correct and execute mistyped commands -autocorrect = 1 - -[merge] -# Include summaries of merged commits in newly created merge commit messages -log = true - -[push] -autoSetupRemote = true - -[gpg] -program = ssh -format = ssh - -[github] -user = simenandre - -[pull] -rebase = true - rebase = true - -[url "ssh://git@github.com/"] - insteadOf = https://github.com/ - -[gpg "ssh"] - program = /Applications/1Password.app/Contents/MacOS/op-ssh-sign -[commit] - gpgsign = true diff --git a/macos/macos b/macos/macos deleted file mode 100755 index 77b3d29..0000000 --- a/macos/macos +++ /dev/null @@ -1,658 +0,0 @@ -#!/usr/bin/env bash - -# ~/.macos — https://mths.be/macos - -# Close any open System Preferences panes, to prevent them from overriding -# settings we’re about to change -osascript -e 'tell application "System Preferences" to quit' - -# Ask for the administrator password upfront -sudo -v - -# Keep-alive: update existing `sudo` time stamp until `.macos` has finished -while true; do sudo -n true; sleep 60; kill -0 "$$" || exit; done 2>/dev/null & - -############################################################################### -# General UI/UX # -############################################################################### - -# Set computer name (as done via System Preferences → Sharing) -#sudo scutil --set ComputerName "0x6D746873" -#sudo scutil --set HostName "0x6D746873" -#sudo scutil --set LocalHostName "0x6D746873" -#sudo defaults write /Library/Preferences/SystemConfiguration/com.apple.smb.server NetBIOSName -string "0x6D746873" - -# Set sidebar icon size to medium -defaults write NSGlobalDomain NSTableViewDefaultSizeMode -int 2 - -# Always show scrollbars -defaults write NSGlobalDomain AppleShowScrollBars -string "Always" -# Possible values: `WhenScrolling`, `Automatic` and `Always` - -# Adjust toolbar title rollover delay -defaults write NSGlobalDomain NSToolbarTitleViewRolloverDelay -float 0 - -# Expand save panel by default -defaults write NSGlobalDomain NSNavPanelExpandedStateForSaveMode -bool true -defaults write NSGlobalDomain NSNavPanelExpandedStateForSaveMode2 -bool true - -# Expand print panel by default -defaults write NSGlobalDomain PMPrintingExpandedStateForPrint -bool true -defaults write NSGlobalDomain PMPrintingExpandedStateForPrint2 -bool true - -# Save to disk (not to iCloud) by default -defaults write NSGlobalDomain NSDocumentSaveNewDocumentsToCloud -bool false - -# Automatically quit printer app once the print jobs complete -defaults write com.apple.print.PrintingPrefs "Quit When Finished" -bool true - -# Disable the “Are you sure you want to open this application?” dialog -defaults write com.apple.LaunchServices LSQuarantine -bool false - -# Remove duplicates in the “Open With” menu (also see `lscleanup` alias) -/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -kill -r -domain local -domain system -domain user - -# Display ASCII control characters using caret notation in standard text views -# Try e.g. `cd /tmp; unidecode "\x{0000}" > cc.txt; open -e cc.txt` -#defaults write NSGlobalDomain NSTextShowsControlCharacters -bool true - -# Disable Resume system-wide -# defaults write com.apple.systempreferences NSQuitAlwaysKeepsWindows -bool false - -# Disable automatic termination of inactive apps -#defaults write NSGlobalDomain NSDisableAutomaticTermination -bool true - -# Disable the crash reporter -#defaults write com.apple.CrashReporter DialogType -string "none" - -# Set Help Viewer windows to non-floating mode -defaults write com.apple.helpviewer DevMode -bool true - -# Fix for the ancient UTF-8 bug in QuickLook (https://mths.be/bbo) -# Commented out, as this is known to cause problems in various Adobe apps :( -# See https://github.com/mathiasbynens/dotfiles/issues/237 -#echo "0x08000100:0" > ~/.CFUserTextEncoding - -# Reveal IP address, hostname, OS version, etc. when clicking the clock -# in the login window -sudo defaults write /Library/Preferences/com.apple.loginwindow AdminHostInfo HostName - -# Disable Notification Center and remove the menu bar icon -#launchctl unload -w /System/Library/LaunchAgents/com.apple.notificationcenterui.plist 2> /dev/null - -# Disable automatic capitalization as it’s annoying when typing code -#defaults write NSGlobalDomain NSAutomaticCapitalizationEnabled -bool false - -# Disable smart dashes as they’re annoying when typing code -#defaults write NSGlobalDomain NSAutomaticDashSubstitutionEnabled -bool false - -# Disable automatic period substitution as it’s annoying when typing code -#defaults write NSGlobalDomain NSAutomaticPeriodSubstitutionEnabled -bool false - -# Disable smart quotes as they’re annoying when typing code -#defaults write NSGlobalDomain NSAutomaticQuoteSubstitutionEnabled -bool false - -# Disable auto-correct -defaults write NSGlobalDomain NSAutomaticSpellingCorrectionEnabled -bool false - -############################################################################### -# Trackpad, mouse, keyboard, Bluetooth accessories, and input # -############################################################################### - -# Trackpad: enable tap to click for this user and for the login screen -defaults write com.apple.driver.AppleBluetoothMultitouch.trackpad Clicking -bool true -defaults -currentHost write NSGlobalDomain com.apple.mouse.tapBehavior -int 1 -defaults write NSGlobalDomain com.apple.mouse.tapBehavior -int 1 - -# Trackpad: map bottom right corner to right-click -#defaults write com.apple.driver.AppleBluetoothMultitouch.trackpad TrackpadCornerSecondaryClick -int 2 -#defaults write com.apple.driver.AppleBluetoothMultitouch.trackpad TrackpadRightClick -bool true -#defaults -currentHost write NSGlobalDomain com.apple.trackpad.trackpadCornerClickBehavior -int 1 -#defaults -currentHost write NSGlobalDomain com.apple.trackpad.enableSecondaryClick -bool true - -# Disable “natural” (Lion-style) scrolling -#defaults write NSGlobalDomain com.apple.swipescrolldirection -bool false - -# Increase sound quality for Bluetooth headphones/headsets -defaults write com.apple.BluetoothAudioAgent "Apple Bitpool Min (editable)" -int 40 - -# Enable full keyboard access for all controls -# (e.g. enable Tab in modal dialogs) -#defaults write NSGlobalDomain AppleKeyboardUIMode -int 3 - -# Use scroll gesture with the Ctrl (^) modifier key to zoom -#defaults write com.apple.universalaccess closeViewScrollWheelToggle -bool true -#defaults write com.apple.universalaccess HIDScrollZoomModifierMask -int 262144 -# Follow the keyboard focus while zoomed in -#defaults write com.apple.universalaccess closeViewZoomFollowsFocus -bool true - -# Disable press-and-hold for keys in favor of key repeat -#defaults write NSGlobalDomain ApplePressAndHoldEnabled -bool false - -# Set a blazingly fast keyboard repeat rate -#defaults write NSGlobalDomain KeyRepeat -int 1 -#defaults write NSGlobalDomain InitialKeyRepeat -int 10 - -# Set language and text formats -# Note: if you’re in the US, replace `EUR` with `USD`, `Centimeters` with -# `Inches`, `en_GB` with `en_US`, and `true` with `false`. -#defaults write NSGlobalDomain AppleLanguages -array "en" "nl" -#defaults write NSGlobalDomain AppleLocale -string "en_GB@currency=EUR" -#defaults write NSGlobalDomain AppleMeasurementUnits -string "Centimeters" -#defaults write NSGlobalDomain AppleMetricUnits -bool true - -# Show language menu in the top right corner of the boot screen -#sudo defaults write /Library/Preferences/com.apple.loginwindow showInputMenu -bool true - -# Set the timezone; see `sudo systemsetup -listtimezones` for other values -#sudo systemsetup -settimezone "Europe/Brussels" > /dev/null - -# Stop iTunes from responding to the keyboard media keys -#launchctl unload -w /System/Library/LaunchAgents/com.apple.rcd.plist 2> /dev/null - -############################################################################### -# Energy saving # -############################################################################### - -# Enable lid wakeup -sudo pmset -a lidwake 1 - -# Restart automatically on power loss -sudo pmset -a autorestart 1 - -# Restart automatically if the computer freezes -sudo systemsetup -setrestartfreeze on - -# Sleep the display after 15 minutes -sudo pmset -a displaysleep 15 - -# Disable machine sleep while charging -sudo pmset -c sleep 0 - -# Set machine sleep to 5 minutes on battery -sudo pmset -b sleep 5 - -# Set standby delay to 24 hours (default is 1 hour) -sudo pmset -a standbydelay 86400 - -# Never go into computer sleep mode -#sudo systemsetup -setcomputersleep Off > /dev/null - -# Hibernation mode -# 0: Disable hibernation (speeds up entering sleep mode) -# 3: Copy RAM to disk so the system state can still be restored in case of a -# power failure. -#sudo pmset -a hibernatemode 0 - -# Remove the sleep image file to save disk space -#sudo rm /private/var/vm/sleepimage -# Create a zero-byte file instead… -#sudo touch /private/var/vm/sleepimage -# …and make sure it can’t be rewritten -#sudo chflags uchg /private/var/vm/sleepimage - -############################################################################### -# Screen # -############################################################################### - -# Require password immediately after sleep or screen saver begins -#defaults write com.apple.screensaver askForPassword -int 1 -#defaults write com.apple.screensaver askForPasswordDelay -int 0 - -# Save screenshots to the desktop -defaults write com.apple.screencapture location -string "${HOME}/Screenshots" - -# Save screenshots in PNG format (other options: BMP, GIF, JPG, PDF, TIFF) -defaults write com.apple.screencapture type -string "jpg" - -# Disable shadow in screenshots -#defaults write com.apple.screencapture disable-shadow -bool true - -# Enable subpixel font rendering on non-Apple LCDs -# Reference: https://github.com/kevinSuttle/macOS-Defaults/issues/17#issuecomment-266633501 -defaults write NSGlobalDomain AppleFontSmoothing -int 1 - -# Enable HiDPI display modes (requires restart) -sudo defaults write /Library/Preferences/com.apple.windowserver DisplayResolutionEnabled -bool true - -############################################################################### -# Finder # -############################################################################### - -# Finder: allow quitting via ⌘ + Q; doing so will also hide desktop icons -#defaults write com.apple.finder QuitMenuItem -bool true - -# Finder: disable window animations and Get Info animations -#defaults write com.apple.finder DisableAllAnimations -bool true - -# Set Desktop as the default location for new Finder windows -# For other paths, use `PfLo` and `file:///full/path/here/` -#defaults write com.apple.finder NewWindowTarget -string "PfDe" -#defaults write com.apple.finder NewWindowTargetPath -string "file://${HOME}/Desktop/" - -# Show icons for hard drives, servers, and removable media on the desktop -#defaults write com.apple.finder ShowExternalHardDrivesOnDesktop -bool true -#defaults write com.apple.finder ShowHardDrivesOnDesktop -bool true -#defaults write com.apple.finder ShowMountedServersOnDesktop -bool true -#defaults write com.apple.finder ShowRemovableMediaOnDesktop -bool true - -# Finder: show hidden files by default -#defaults write com.apple.finder AppleShowAllFiles -bool true - -# Finder: show all filename extensions -#defaults write NSGlobalDomain AppleShowAllExtensions -bool true - -# Finder: show status bar -defaults write com.apple.finder ShowStatusBar -bool true - -# Finder: show path bar -defaults write com.apple.finder ShowPathbar -bool true - -# Display full POSIX path as Finder window title -#defaults write com.apple.finder _FXShowPosixPathInTitle -bool true - -# Keep folders on top when sorting by name -#defaults write com.apple.finder _FXSortFoldersFirst -bool true - -# When performing a search, search the current folder by default -defaults write com.apple.finder FXDefaultSearchScope -string "SCcf" - -# Disable the warning when changing a file extension -defaults write com.apple.finder FXEnableExtensionChangeWarning -bool false - -# Enable spring loading for directories -#defaults write NSGlobalDomain com.apple.springing.enabled -bool true - -# Remove the spring loading delay for directories -#defaults write NSGlobalDomain com.apple.springing.delay -float 0 - -# Avoid creating .DS_Store files on network or USB volumes -defaults write com.apple.desktopservices DSDontWriteNetworkStores -bool true -defaults write com.apple.desktopservices DSDontWriteUSBStores -bool true - -# Disable disk image verification -defaults write com.apple.frameworks.diskimages skip-verify -bool true -defaults write com.apple.frameworks.diskimages skip-verify-locked -bool true -defaults write com.apple.frameworks.diskimages skip-verify-remote -bool true - -# Automatically open a new Finder window when a volume is mounted -defaults write com.apple.frameworks.diskimages auto-open-ro-root -bool true -defaults write com.apple.frameworks.diskimages auto-open-rw-root -bool true -defaults write com.apple.finder OpenWindowForNewRemovableDisk -bool true - -# Show item info near icons on the desktop and in other icon views -#/usr/libexec/PlistBuddy -c "Set :DesktopViewSettings:IconViewSettings:showItemInfo true" ~/Library/Preferences/com.apple.finder.plist -#/usr/libexec/PlistBuddy -c "Set :FK_StandardViewSettings:IconViewSettings:showItemInfo true" ~/Library/Preferences/com.apple.finder.plist -#/usr/libexec/PlistBuddy -c "Set :StandardViewSettings:IconViewSettings:showItemInfo true" ~/Library/Preferences/com.apple.finder.plist - -# Show item info to the right of the icons on the desktop -#/usr/libexec/PlistBuddy -c "Set DesktopViewSettings:IconViewSettings:labelOnBottom false" ~/Library/Preferences/com.apple.finder.plist - -# Enable snap-to-grid for icons on the desktop and in other icon views -#/usr/libexec/PlistBuddy -c "Set :DesktopViewSettings:IconViewSettings:arrangeBy grid" ~/Library/Preferences/com.apple.finder.plist -#/usr/libexec/PlistBuddy -c "Set :FK_StandardViewSettings:IconViewSettings:arrangeBy grid" ~/Library/Preferences/com.apple.finder.plist -#/usr/libexec/PlistBuddy -c "Set :StandardViewSettings:IconViewSettings:arrangeBy grid" ~/Library/Preferences/com.apple.finder.plist - -# Increase grid spacing for icons on the desktop and in other icon views -#/usr/libexec/PlistBuddy -c "Set :DesktopViewSettings:IconViewSettings:gridSpacing 100" ~/Library/Preferences/com.apple.finder.plist -#/usr/libexec/PlistBuddy -c "Set :FK_StandardViewSettings:IconViewSettings:gridSpacing 100" ~/Library/Preferences/com.apple.finder.plist -#/usr/libexec/PlistBuddy -c "Set :StandardViewSettings:IconViewSettings:gridSpacing 100" ~/Library/Preferences/com.apple.finder.plist - -# Increase the size of icons on the desktop and in other icon views -#/usr/libexec/PlistBuddy -c "Set :DesktopViewSettings:IconViewSettings:iconSize 80" ~/Library/Preferences/com.apple.finder.plist -#/usr/libexec/PlistBuddy -c "Set :FK_StandardViewSettings:IconViewSettings:iconSize 80" ~/Library/Preferences/com.apple.finder.plist -#/usr/libexec/PlistBuddy -c "Set :StandardViewSettings:IconViewSettings:iconSize 80" ~/Library/Preferences/com.apple.finder.plist - -# Use list view in all Finder windows by default -# Four-letter codes for the other view modes: `icnv`, `clmv`, `glyv` -#defaults write com.apple.finder FXPreferredViewStyle -string "Nlsv" - -# Disable the warning before emptying the Trash -#defaults write com.apple.finder WarnOnEmptyTrash -bool false - -# Enable AirDrop over Ethernet and on unsupported Macs running Lion -defaults write com.apple.NetworkBrowser BrowseAllInterfaces -bool true - -# Show the ~/Library folder -#chflags nohidden ~/Library && xattr -d com.apple.FinderInfo ~/Library - -# Show the /Volumes folder -#sudo chflags nohidden /Volumes - -# Expand the following File Info panes: -# “General”, “Open with”, and “Sharing & Permissions” -#defaults write com.apple.finder FXInfoPanesExpanded -dict \ -# General -bool true \ -# OpenWith -bool true \ -# Privileges -bool true - -############################################################################### -# Dock, Dashboard, and hot corners # -############################################################################### - -# Enable highlight hover effect for the grid view of a stack (Dock) -#defaults write com.apple.dock mouse-over-hilite-stack -bool true - -# Set the icon size of Dock items to 36 pixels -#defaults write com.apple.dock tilesize -int 36 - -# Change minimize/maximize window effect -#defaults write com.apple.dock mineffect -string "scale" - -# Minimize windows into their application’s icon -defaults write com.apple.dock minimize-to-application -bool true - -# Enable spring loading for all Dock items -#defaults write com.apple.dock enable-spring-load-actions-on-all-items -bool true - -# Show indicator lights for open applications in the Dock -defaults write com.apple.dock show-process-indicators -bool true - -# Wipe all (default) app icons from the Dock -# This is only really useful when setting up a new Mac, or if you don’t use -# the Dock to launch apps. -defaults write com.apple.dock persistent-apps -array - -# Show only open applications in the Dock -#defaults write com.apple.dock static-only -bool true - -# Don’t animate opening applications from the Dock -#defaults write com.apple.dock launchanim -bool false - -# Speed up Mission Control animations -defaults write com.apple.dock expose-animation-duration -float 0.1 - -# Don’t group windows by application in Mission Control -# (i.e. use the old Exposé behavior instead) -#defaults write com.apple.dock expose-group-by-app -bool false - -# Disable Dashboard -#defaults write com.apple.dashboard mcx-disabled -bool true - -# Don’t show Dashboard as a Space -#defaults write com.apple.dock dashboard-in-overlay -bool true - -# Don’t automatically rearrange Spaces based on most recent use -#defaults write com.apple.dock mru-spaces -bool false - -# Remove the auto-hiding Dock delay -defaults write com.apple.dock autohide-delay -float 0 -# Remove the animation when hiding/showing the Dock -defaults write com.apple.dock autohide-time-modifier -float 0 - -# Automatically hide and show the Dock -defaults write com.apple.dock autohide -bool true - -# Make Dock icons of hidden applications translucent -defaults write com.apple.dock showhidden -bool true - -# Don’t show recent applications in Dock -defaults write com.apple.dock show-recents -bool false - -# Disable the Launchpad gesture (pinch with thumb and three fingers) -#defaults write com.apple.dock showLaunchpadGestureEnabled -int 0 - -# Reset Launchpad, but keep the desktop wallpaper intact -#find "${HOME}/Library/Application Support/Dock" -name "*-*.db" -maxdepth 1 -delete - -# Add iOS & Watch Simulator to Launchpad -#sudo ln -sf "/Applications/Xcode.app/Contents/Developer/Applications/Simulator.app" "/Applications/Simulator.app" -#sudo ln -sf "/Applications/Xcode.app/Contents/Developer/Applications/Simulator (Watch).app" "/Applications/Simulator (Watch).app" - -# Add a spacer to the left side of the Dock (where the applications are) -#defaults write com.apple.dock persistent-apps -array-add '{tile-data={}; tile-type="spacer-tile";}' -# Add a spacer to the right side of the Dock (where the Trash is) -#defaults write com.apple.dock persistent-others -array-add '{tile-data={}; tile-type="spacer-tile";}' - -# Hot corners -# Possible values: -# 0: no-op -# 2: Mission Control -# 3: Show application windows -# 4: Desktop -# 5: Start screen saver -# 6: Disable screen saver -# 7: Dashboard -# 10: Put display to sleep -# 11: Launchpad -# 12: Notification Center -# 13: Lock Screen -# Top left screen corner → Mission Control -#defaults write com.apple.dock wvous-tl-corner -int 2 -#defaults write com.apple.dock wvous-tl-modifier -int 0 -# Top right screen corner → Desktop -#defaults write com.apple.dock wvous-tr-corner -int 4 -#defaults write com.apple.dock wvous-tr-modifier -int 0 -# Bottom left screen corner → Start screen saver -#defaults write com.apple.dock wvous-bl-corner -int 5 -#defaults write com.apple.dock wvous-bl-modifier -int 0 - -############################################################################### -# Safari & WebKit # -############################################################################### - -# Privacy: don’t send search queries to Apple -defaults write com.apple.Safari UniversalSearchEnabled -bool false -defaults write com.apple.Safari SuppressSearchSuggestions -bool true - -############################################################################### -# Spotlight # -############################################################################### - -# Hide Spotlight tray-icon (and subsequent helper) -#sudo chmod 600 /System/Library/CoreServices/Search.bundle/Contents/MacOS/Search -# Disable Spotlight indexing for any volume that gets mounted and has not yet -# been indexed before. -# Use `sudo mdutil -i off "/Volumes/foo"` to stop indexing any volume. -# sudo defaults write /.Spotlight-V100/VolumeConfiguration Exclusions -array "/Volumes" -# Change indexing order and disable some search results -# Load new settings before rebuilding the index -#killall mds > /dev/null 2>&1 -# Make sure indexing is enabled for the main volume -#sudo mdutil -i on / > /dev/null -# Rebuild the index from scratch -#sudo mdutil -E / > /dev/null - -############################################################################### -# Terminal & iTerm 2 # -############################################################################### - -# Only use UTF-8 in Terminal.app -defaults write com.apple.terminal StringEncodings -array 4 - -# Enable “focus follows mouse” for Terminal.app and all X11 apps -# i.e. hover over a window and start typing in it without clicking first -#defaults write com.apple.terminal FocusFollowsMouse -bool true -#defaults write org.x.X11 wm_ffm -bool true - -# Enable Secure Keyboard Entry in Terminal.app -# See: https://security.stackexchange.com/a/47786/8918 -#defaults write com.apple.terminal SecureKeyboardEntry -bool true - -# Disable the annoying line marks -#defaults write com.apple.Terminal ShowLineMarks -int 0 - -# Install the Solarized Dark theme for iTerm -#open "${HOME}/init/Solarized Dark.itermcolors" - -# Don’t display the annoying prompt when quitting iTerm -defaults write com.googlecode.iterm2 PromptOnQuit -bool false - -############################################################################### -# Time Machine # -############################################################################### - -# Prevent Time Machine from prompting to use new hard drives as backup volume -defaults write com.apple.TimeMachine DoNotOfferNewDisksForBackup -bool true - -# Disable local Time Machine backups -hash tmutil &> /dev/null && sudo tmutil disablelocal - -############################################################################### -# Activity Monitor # -############################################################################### - -# Show the main window when launching Activity Monitor -defaults write com.apple.ActivityMonitor OpenMainWindow -bool true - -# Visualize CPU usage in the Activity Monitor Dock icon -defaults write com.apple.ActivityMonitor IconType -int 5 - -# Show all processes in Activity Monitor -defaults write com.apple.ActivityMonitor ShowCategory -int 0 - -# Sort Activity Monitor results by CPU usage -defaults write com.apple.ActivityMonitor SortColumn -string "CPUUsage" -defaults write com.apple.ActivityMonitor SortDirection -int 0 - -############################################################################### -# Address Book, Dashboard, iCal, TextEdit, and Disk Utility # -############################################################################### - -# Enable the debug menu in Address Book -#defaults write com.apple.addressbook ABShowDebugMenu -bool true - -# Enable Dashboard dev mode (allows keeping widgets on the desktop) -#defaults write com.apple.dashboard devmode -bool true - -# Enable the debug menu in iCal (pre-10.8) -#defaults write com.apple.iCal IncludeDebugMenu -bool true - -# Use plain text mode for new TextEdit documents -#defaults write com.apple.TextEdit RichText -int 0 -# Open and save files as UTF-8 in TextEdit -defaults write com.apple.TextEdit PlainTextEncoding -int 4 -defaults write com.apple.TextEdit PlainTextEncodingForWrite -int 4 - -# Enable the debug menu in Disk Utility -#defaults write com.apple.DiskUtility DUDebugMenuEnabled -bool true -#defaults write com.apple.DiskUtility advanced-image-options -bool true - -# Auto-play videos when opened with QuickTime Player -#defaults write com.apple.QuickTimePlayerX MGPlayMovieOnOpen -bool true - -############################################################################### -# Mac App Store # -############################################################################### - -# Enable the WebKit Developer Tools in the Mac App Store -#defaults write com.apple.appstore WebKitDeveloperExtras -bool true - -# Enable Debug Menu in the Mac App Store -#defaults write com.apple.appstore ShowDebugMenu -bool true - -# Enable the automatic update check -defaults write com.apple.SoftwareUpdate AutomaticCheckEnabled -bool true - -# Check for software updates daily, not just once per week -defaults write com.apple.SoftwareUpdate ScheduleFrequency -int 1 - -# Download newly available updates in background -defaults write com.apple.SoftwareUpdate AutomaticDownload -int 1 - -# Install System data files & security updates -defaults write com.apple.SoftwareUpdate CriticalUpdateInstall -int 1 - -# Automatically download apps purchased on other Macs -#defaults write com.apple.SoftwareUpdate ConfigDataInstall -int 1 - -# Turn on app auto-update -defaults write com.apple.commerce AutoUpdate -bool true - -# Allow the App Store to reboot machine on macOS updates -defaults write com.apple.commerce AutoUpdateRestartRequired -bool true - -############################################################################### -# Photos # -############################################################################### - -# Prevent Photos from opening automatically when devices are plugged in -defaults -currentHost write com.apple.ImageCapture disableHotPlug -bool true - -############################################################################### -# Messages # -############################################################################### - -# Disable automatic emoji substitution (i.e. use plain text smileys) -#defaults write com.apple.messageshelper.MessageController SOInputLineSettings -dict-add "automaticEmojiSubstitutionEnablediMessage" -bool false - -# Disable smart quotes as it’s annoying for messages that contain code -defaults write com.apple.messageshelper.MessageController SOInputLineSettings -dict-add "automaticQuoteSubstitutionEnabled" -bool false - -# Disable continuous spell checking -defaults write com.apple.messageshelper.MessageController SOInputLineSettings -dict-add "continuousSpellCheckingEnabled" -bool false - -############################################################################### -# Google Chrome & Google Chrome Canary # -############################################################################### - -# Disable the all too sensitive backswipe on trackpads -defaults write com.google.Chrome AppleEnableSwipeNavigateWithScrolls -bool false -defaults write com.google.Chrome.canary AppleEnableSwipeNavigateWithScrolls -bool false - -# Disable the all too sensitive backswipe on Magic Mouse -defaults write com.google.Chrome AppleEnableMouseSwipeNavigateWithScrolls -bool false -defaults write com.google.Chrome.canary AppleEnableMouseSwipeNavigateWithScrolls -bool false - -# Use the system-native print preview dialog -#defaults write com.google.Chrome DisablePrintPreview -bool true -#defaults write com.google.Chrome.canary DisablePrintPreview -bool true - -# Expand the print dialog by default -defaults write com.google.Chrome PMPrintingExpandedStateForPrint2 -bool true -defaults write com.google.Chrome.canary PMPrintingExpandedStateForPrint2 -bool true - -############################################################################### -# Twitter.app # -############################################################################### - -# Disable smart quotes as it’s annoying for code tweets -defaults write com.twitter.twitter-mac AutomaticQuoteSubstitutionEnabled -bool false - -# Show the app window when clicking the menu bar icon -defaults write com.twitter.twitter-mac MenuItemBehavior -int 1 - -# Enable the hidden ‘Develop’ menu -defaults write com.twitter.twitter-mac ShowDevelopMenu -bool true - -# Open links in the background -defaults write com.twitter.twitter-mac openLinksInBackground -bool true - -# Allow closing the ‘new tweet’ window by pressing `Esc` -defaults write com.twitter.twitter-mac ESCClosesComposeWindow -bool true - -# Show full names rather than Twitter handles -defaults write com.twitter.twitter-mac ShowFullNames -bool true - -# Hide the app in the background if it’s not the front-most window -defaults write com.twitter.twitter-mac HideInBackground -bool true - -############################################################################### -# Kill affected applications # -############################################################################### - -for app in "Activity Monitor" \ - "Address Book" \ - "Calendar" \ - "cfprefsd" \ - "Contacts" \ - "Dock" \ - "Finder" \ - "Google Chrome Canary" \ - "Google Chrome" \ - "Mail" \ - "Messages" \ - "Opera" \ - "Photos" \ - "Safari" \ - "SizeUp" \ - "Spectacle" \ - "SystemUIServer" \ - "Terminal" \ - "Transmission" \ - "Tweetbot" \ - "Twitter" \ - "iCal"; do - killall "${app}" &> /dev/null -done -echo "Done. Note that some of these changes require a logout/restart to take effect." diff --git a/modules/darwin/homebrew.nix b/modules/darwin/homebrew.nix index 3c3f469..9ac9816 100644 --- a/modules/darwin/homebrew.nix +++ b/modules/darwin/homebrew.nix @@ -134,6 +134,7 @@ "tldr" "starship" "gh" + "claude-code" # HTTP and web servers "caddy" diff --git a/modules/home/default.nix b/modules/home/default.nix index bf1900d..1ff1c19 100644 --- a/modules/home/default.nix +++ b/modules/home/default.nix @@ -1,4 +1,4 @@ -{ pkgs, ... }: +{ pkgs, lib, ... }: { imports = [ @@ -16,9 +16,17 @@ stateVersion = "24.11"; }; + home.packages = with pkgs; [ + nodejs_22 + ]; + # Let home-manager manage itself programs.home-manager.enable = true; - # Link neovim config (managed as a git submodule) - home.file.".config/nvim".source = ../../nvim/.config/nvim; + # Install Claude Code via npm on Linux (on macOS it's managed by Homebrew) + home.activation.installClaudeCode = lib.mkIf (!pkgs.stdenv.isDarwin) + (lib.hm.dag.entryAfter [ "writeBoundary" ] '' + export PATH="${pkgs.nodejs_22}/bin:$PATH" + npm install -g @anthropic-ai/claude-code 2>/dev/null || true + ''); } diff --git a/modules/home/ghostty.nix b/modules/home/ghostty.nix index e854c6e..1d42944 100644 --- a/modules/home/ghostty.nix +++ b/modules/home/ghostty.nix @@ -1,5 +1,14 @@ { ... }: { - home.file.".config/ghostty/config".source = ../../ghostty/.config/ghostty/config; + home.file.".config/ghostty/config".text = '' + theme = tokyonight-storm + + window-padding-x = 12 + window-padding-y = 12 + window-decoration = true + window-theme = "dark" + window-inherit-working-directory = true + window-inherit-font-size = true + ''; } diff --git a/modules/home/starship.nix b/modules/home/starship.nix index 05a70f3..4f3cb61 100644 --- a/modules/home/starship.nix +++ b/modules/home/starship.nix @@ -1,5 +1,7 @@ { ... }: { - home.file.".config/starship.toml".source = ../../starship/.config/starship.toml; + programs.starship = { + enable = true; + }; } diff --git a/modules/home/tmux.nix b/modules/home/tmux.nix index 473ce5e..fa01331 100644 --- a/modules/home/tmux.nix +++ b/modules/home/tmux.nix @@ -1,5 +1,31 @@ { ... }: { - home.file.".tmux.conf".source = ../../tmux/.tmux.conf; + home.file.".tmux.conf".text = '' + unbind r + bind r source-file ~/.tmux.conf \; display-message "Config reloaded" + + set -g default-terminal "tmux-256color" + set -ag terminal-overrides ",xterm-256color:RGB" + + set -g prefix C-s + + set -g mouse on + + set -g base-index 1 + set-window-option -g mode-keys vi + + bind g new-window -c "#{pane_current_path}" -n "lazygit" lazygit + + bind f run-shell "tmux neww twm" + bind F run-shell "tmux neww twm -l" + bind s run-shell "tmux neww twm -e" # i rebind the original `s` to `S` so I can still use it + bind e run-shell "tmux switch -t $TWM_DEFAULT" # i set TWM_DEFAULT in my shellrc, just a session that is always available as a scratch area + + set -g @plugin 'tmux-plugins/tpm' + set -g @plugin 'christoomey/vim-tmux-navigator' + set -g @plugin 'tmux-plugins/tmux-sensible' + + run '~/.tmux/plugins/tpm/tpm' + ''; } diff --git a/modules/home/zsh.nix b/modules/home/zsh.nix index b7dc9c1..1b24133 100644 --- a/modules/home/zsh.nix +++ b/modules/home/zsh.nix @@ -1,12 +1,157 @@ -{ ... }: +{ pkgs, ... }: { home.file = { - ".zshenv".source = ../../zsh/.zshenv; - ".hushlogin".source = ../../zsh/.hushlogin; - ".config/zsh/.zshrc".source = ../../zsh/.config/zsh/.zshrc; - ".config/zsh/aliases".source = ../../zsh/.config/zsh/aliases; - ".config/zsh/path".source = ../../zsh/.config/zsh/path; - ".config/zsh/extras".source = ../../zsh/.config/zsh/extras; + ".zshenv".text = '' + ##!/bin/zsh + # + # .zshenv - Zsh environment file, loaded always. + # + + # Set ZDOTDIR if you want to re-home Zsh. + export XDG_CONFIG_HOME=''${XDG_CONFIG_HOME:-$HOME/.config} + export XDG_DATA_HOME=''${XDG_DATA_HOME:-$HOME/.local/share} + export XDG_CACHE_HOME=''${XDG_CACHE_HOME:-$HOME/.cache} + export ZDOTDIR=''${ZDOTDIR:-$XDG_CONFIG_HOME/zsh} + + # Ensure path arrays do not contain duplicates. + typeset -gU path fpath + + # Set the list of directories that zsh searches for commands. + path=( + $HOME/{,s}bin(N) + $HOME/.local/{,s}bin(N) + /opt/{homebrew,local}/{,s}bin(N) + /usr/local/{,s}bin(N) + $path + ) + '' + ( + if pkgs.stdenv.isDarwin then '' + eval "$(/opt/homebrew/bin/brew shellenv)" + '' else "" + ) + '' + [ -f "$HOME/.cargo/env" ] && . "$HOME/.cargo/env" + ''; + + ".hushlogin".text = ""; + + ".config/zsh/.zshrc".text = '' + #!/bin/bash + # ^----- get shellcheck hints based on bash + # https://github.com/koalaman/shellcheck/issues/809 + # shellcheck disable=SC1090 # sourced filenames with variables + + # Download Znap, if it's not there yet. + [[ -r ~/.zsh_repos/znap/znap.zsh ]] || + git clone --depth 1 -- \ + https://github.com/marlonrichert/zsh-snap.git ~/.zsh_repos/znap + source ~/.zsh_repos/znap/znap.zsh # Start Znap + + znap eval starship 'starship init zsh --print-full-init' + znap prompt + + znap source marlonrichert/zsh-autocomplete + znap source zsh-users/zsh-autosuggestions + znap source jeffreytse/zsh-vi-mode + + for file in ~/.config/zsh/{aliases,path,extras}; do + if [[ -r "$file" ]] && [[ -f "$file" ]]; then + # shellcheck source=/dev/null + source "$file" + fi + done + + eval "$(twm --print-zsh-completion)" + + bindkey '^I^I' autosuggest-accept + ''; + + ".config/zsh/aliases".text = '' + # Git aliases + alias git-unpushed='git log --branches --not --remotes --no-walk --decorate --oneline' + alias gb='git checkout -b' + alias gfr='git fetch upstream && git rebase upstream/main' + alias git-undo='git reset --soft HEAD~1' + alias git-clean-branches="git for-each-ref --format '%(refname:short)' refs/heads | grep -v 'master\|main' | xargs git branch -D" + alias :q='exit' + alias ls='ls --color' + alias tailscale='/Applications/Tailscale.app/Contents/MacOS/Tailscale' + + # Generic / Random / Utility + alias rg="rg --hidden --glob '!.git' --glob '!node_modules'" + alias r='cd $REPOS/github.com/' + alias c='clear' + alias afk='pmset displaysleepnow' + alias dl="cd ~/Downloads" + alias l='ls -l' + alias todo='nt' + alias tasks="open 'obsidian://open?file=-%20Oppgaver'" + alias todos="mt ~/ghq/github.com/simenandre/notes/" + alias today="open 'obsidian://advanced-uri?daily=true'" + alias tre="tree -I '.git|node_modules'" + alias timeliste="open 'https://tripletex.no/execute/updateHourlist?contextId=11208568'" + alias t="open 'https://tripletex.no/execute/updateHourlist?contextId=11208568'" + alias fork-cleaner="fork-cleaner --token $(cat ~/.secrets/github-token)" + alias vi="nvim" + alias vim="nvim" + alias v="nvim" + + alias dump-issues="getBjerkIssues > ~/Downloads/issues-$(date -I).json" + ''; + + ".config/zsh/path".text = '' + #!/bin/bash + + # Add directories to the PATH and prevent to add the same directory multiple times upon shell reload. + add_to_path() { + if [[ -d "$1" ]] && [[ ":$PATH:" != *":$1:"* ]]; then + export PATH="$1:$PATH" + fi + } + + GOPATH="$HOME/go" + + add_to_path "$HOME/.volta/bin" + add_to_path "$GOPATH/bin" + add_to_path "/Library/Frameworks/Firebird.framework/Resources/bin" + add_to_path "/opt/homebrew/opt/libpq/bin" + ''; + + ".config/zsh/extras".text = '' + NOTES_DIR=$HOME/ghq/github.com/simenandre/notes/ + function note() { + if [ $1 ]; then + FILE=$NOTES_DIR/$(date +%Y-%m-%d).md + + if [ $2 ]; then + FILE=$2 + fi + + echo $1 >> $FILE + fi + } + + function nt() { + if [ $1 ]; then + CONTENT="- [ ] $1" + note $CONTENT $2 + fi + } + + function getBjerkIssues() { + gh issue list --repo bjerkio/internal \ + --search "-label:backlog -label:kind/system" \ + --json title,body,url,createdAt,assignees,number,labels,comments \ + --jq 'map({url, createdAt, title, labels: [.labels[].name], assignees: [.assignees[].login], body, number: "#\(.number)", comments: .comments | map({ body: .body, createdAt: .createdAt })})' + } + + function g() { + export GOOGLE_CLOUD_PROJECT="sokkel-sandbox" + export GOOGLE_CLOUD_LOCATION="europe-north1" + export GOOGLE_GENAI_USE_VERTEXAI=true + + gemini + } + ''; }; } diff --git a/nvim/.config/nvim b/nvim/.config/nvim deleted file mode 160000 -Subproject 9ae165fa0d8cd1ecc433026642484c167c3e0b8 diff --git a/starship/.config/starship.toml b/starship/.config/starship.toml deleted file mode 100644 index e69de29..0000000 --- a/starship/.config/starship.toml +++ /dev/null diff --git a/tmux/.tmux.conf b/tmux/.tmux.conf deleted file mode 100644 index 92783ac..0000000 --- a/tmux/.tmux.conf +++ /dev/null @@ -1,26 +0,0 @@ -unbind r -bind r source-file ~/.tmux.conf \; display-message "Config reloaded" - -set -g default-terminal "tmux-256color" -set -ag terminal-overrides ",xterm-256color:RGB" - -set -g prefix C-s - -set -g mouse on - -set -g base-index 1 -set-window-option -g mode-keys vi - -bind g new-window -c "#{pane_current_path}" -n "lazygit" lazygit - -bind f run-shell "tmux neww twm" -bind F run-shell "tmux neww twm -l" -bind s run-shell "tmux neww twm -e" # i rebind the original `s` to `S` so I can still use it -# bind g run-shell "tmux neww twm -g" -bind e run-shell "tmux switch -t $TWM_DEFAULT" # i set TWM_DEFAULT in my shellrc, just a session that is always available as a scratch area - -set -g @plugin 'tmux-plugins/tpm' -set -g @plugin 'christoomey/vim-tmux-navigator' -set -g @plugin 'tmux-plugins/tmux-sensible' - -run '~/.tmux/plugins/tpm/tpm' diff --git a/zsh/.config/zsh/.zshrc b/zsh/.config/zsh/.zshrc deleted file mode 100755 index ead1f79..0000000 --- a/zsh/.config/zsh/.zshrc +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/bash -# ^----- get shellcheck hints based on bash -# https://github.com/koalaman/shellcheck/issues/809 -# shellcheck disable=SC1090 # sourced filenames with variables - -# Download Znap, if it's not there yet. -[[ -r ~/.zsh_repos/znap/znap.zsh ]] || - git clone --depth 1 -- \ - https://github.com/marlonrichert/zsh-snap.git ~/.zsh_repos/znap -source ~/.zsh_repos/znap/znap.zsh # Start Znap - -znap eval starship 'starship init zsh --print-full-init' -znap prompt - -znap source marlonrichert/zsh-autocomplete -znap source zsh-users/zsh-autosuggestions -znap source jeffreytse/zsh-vi-mode - -for file in ~/.config/zsh/{aliases,path,extras}; do - if [[ -r "$file" ]] && [[ -f "$file" ]]; then - # shellcheck source=/dev/null - source "$file" - fi -done - -eval "$(twm --print-zsh-completion)" - -bindkey '^I^I' autosuggest-accept diff --git a/zsh/.config/zsh/aliases b/zsh/.config/zsh/aliases deleted file mode 100755 index 6be98da..0000000 --- a/zsh/.config/zsh/aliases +++ /dev/null @@ -1,32 +0,0 @@ -# Git aliases -alias git-unpushed='git log --branches --not --remotes --no-walk --decorate --oneline' -alias gb='git checkout -b' -alias gfr='git fetch upstream && git rebase upstream/main' -alias git-undo='git reset --soft HEAD~1' -alias git-clean-branches="git for-each-ref --format '%(refname:short)' refs/heads | grep -v 'master\|main' | xargs git branch -D" -alias :q='exit' -alias ls='ls --color' -alias tailscale='/Applications/Tailscale.app/Contents/MacOS/Tailscale' - -# Generic / Random / Utility -alias rg="rg --hidden --glob '!.git' --glob '!node_modules'" -alias r='cd $REPOS/github.com/' -alias c='clear' -alias afk='pmset displaysleepnow' -alias dl="cd ~/Downloads" -alias l='ls -l' -alias todo='nt' -alias tasks="open 'obsidian://open?file=-%20Oppgaver'" -alias todos="mt ~/ghq/github.com/simenandre/notes/" -# alias docker-compose=podman-compose -alias today="open 'obsidian://advanced-uri?daily=true'" -alias tre="tree -I '.git|node_modules'" -alias timeliste="open 'https://tripletex.no/execute/updateHourlist?contextId=11208568'" -alias t="open 'https://tripletex.no/execute/updateHourlist?contextId=11208568'" -alias fork-cleaner="fork-cleaner --token $(cat ~/.secrets/github-token)" -alias vi="nvim" -alias vim="nvim" -alias v="nvim" - -alias dump-issues="getBjerkIssues > ~/Downloads/issues-$(date -I).json" - diff --git a/zsh/.config/zsh/extras b/zsh/.config/zsh/extras deleted file mode 100755 index e3f9ef4..0000000 --- a/zsh/.config/zsh/extras +++ /dev/null @@ -1,37 +0,0 @@ -NOTES_DIR=$HOME/ghq/github.com/simenandre/notes/ -function note() { - if [ $1 ]; then - FILE=$NOTES_DIR/$(date +%Y-%m-%d).md - - if [ $2 ]; then - FILE=$2 - fi - - echo $1 >> $FILE - fi -} - -function nt() { - if [ $1 ]; then - CONTENT="- [ ] $1" - note $CONTENT $2 - fi -} - -function getBjerkIssues() { - gh issue list --repo bjerkio/internal \ - --search "-label:backlog -label:kind/system" \ - --json title,body,url,createdAt,assignees,number,labels,comments \ - --jq 'map({url, createdAt, title, labels: [.labels[].name], assignees: [.assignees[].login], body, number: "#\(.number)", comments: .comments | map({ body: .body, createdAt: .createdAt })})' -} - -function g() { - # export GEMINI_API_KEY="$(op read op://Employee/Google_Gemini_API/api_key)" - export GOOGLE_CLOUD_PROJECT="sokkel-sandbox" - export GOOGLE_CLOUD_LOCATION="europe-north1" - export GOOGLE_GENAI_USE_VERTEXAI=true - - gemini -} - - diff --git a/zsh/.config/zsh/path b/zsh/.config/zsh/path deleted file mode 100755 index ad2009f..0000000 --- a/zsh/.config/zsh/path +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/bash - -# Add directories to the PATH and prevent to add the same directory multiple times upon shell reload. -add_to_path() { - if [[ -d "$1" ]] && [[ ":$PATH:" != *":$1:"* ]]; then - export PATH="$1:$PATH" - fi -} - -GOPATH="$HOME/go" - -# Add ghq to PATH -add_to_path "$HOME/.volta/bin" -add_to_path "$GOPATH/bin" -add_to_path "/Library/Frameworks/Firebird.framework/Resources/bin" -add_to_path "/opt/homebrew/opt/libpq/bin" -add_to_path "$HOME/ghq/github.com/simenandre/dotfiles/scripts" - diff --git a/zsh/.hushlogin b/zsh/.hushlogin deleted file mode 100644 index e69de29..0000000 --- a/zsh/.hushlogin +++ /dev/null diff --git a/zsh/.zshenv b/zsh/.zshenv deleted file mode 100755 index 563696f..0000000 --- a/zsh/.zshenv +++ /dev/null @@ -1,24 +0,0 @@ -##!/bin/zsh -# -# .zshenv - Zsh environment file, loaded always. -# - -# Set ZDOTDIR if you want to re-home Zsh. -export XDG_CONFIG_HOME=${XDG_CONFIG_HOME:-$HOME/.config} -export XDG_DATA_HOME=${XDG_DATA_HOME:-$HOME/.local/share} -export XDG_CACHE_HOME=${XDG_CACHE_HOME:-$HOME/.cache} -export ZDOTDIR=${ZDOTDIR:-$XDG_CONFIG_HOME/zsh} - -# Ensure path arrays do not contain duplicates. -typeset -gU path fpath - -# Set the list of directories that zsh searches for commands. -path=( - $HOME/{,s}bin(N) - $HOME/.local/{,s}bin(N) - /opt/{homebrew,local}/{,s}bin(N) - /usr/local/{,s}bin(N) - $path -) -eval "$(/opt/homebrew/bin/brew shellenv)" -. "$HOME/.cargo/env" |
