aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimen A. W. Olsen <cobraz@Simens-MacBook-Pro-4.local>2026-03-21 13:49:10 +0100
committerSimen A. W. Olsen <cobraz@Simens-MacBook-Pro-4.local>2026-03-21 13:49:10 +0100
commit1fd92fcaf3aadea1e9509f859340f57100218c41 (patch)
treedb88f38eef0b04000cfd7affbbd5ab9175027f08
parent95083ca2ac000adeaaaa9a14c8e64b015979d0b1 (diff)
downloaddotfiles-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_Storebin0 -> 8196 bytes
-rw-r--r--.gitmodules3
-rw-r--r--README.md44
-rw-r--r--apps/Brewfile178
-rwxr-xr-xbootstrap.sh44
-rw-r--r--flake.nix22
-rw-r--r--ghostty/.config/ghostty/config8
-rw-r--r--git/.gitconfig70
-rwxr-xr-xmacos/macos658
-rw-r--r--modules/darwin/homebrew.nix1
-rw-r--r--modules/home/default.nix14
-rw-r--r--modules/home/ghostty.nix11
-rw-r--r--modules/home/starship.nix4
-rw-r--r--modules/home/tmux.nix28
-rw-r--r--modules/home/zsh.nix159
m---------nvim/.config/nvim0
-rw-r--r--starship/.config/starship.toml0
-rw-r--r--tmux/.tmux.conf26
-rwxr-xr-xzsh/.config/zsh/.zshrc28
-rwxr-xr-xzsh/.config/zsh/aliases32
-rwxr-xr-xzsh/.config/zsh/extras37
-rwxr-xr-xzsh/.config/zsh/path18
-rw-r--r--zsh/.hushlogin0
-rwxr-xr-xzsh/.zshenv24
24 files changed, 247 insertions, 1162 deletions
diff --git a/.DS_Store b/.DS_Store
new file mode 100644
index 0000000..bc10696
--- /dev/null
+++ b/.DS_Store
Binary files differ
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
diff --git a/README.md b/README.md
index 8f41851..41ec958 100644
--- a/README.md
+++ b/README.md
@@ -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."
diff --git a/flake.nix b/flake.nix
index 015881f..b117a71 100644
--- a/flake.nix
+++ b/flake.nix
@@ -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"