Cursor NixOS Flake
A NixOS flake that provides Cursor 1.3.9 (AI-first code editor) as an AppImage with enhanced compatibility for NixOS systems.
Features
- Cursor 1.4.2: Latest version of the AI-first code editor
- Enhanced AppImage Support: Optimized for NixOS with proper library paths and environment setup
- Easy Integration: Can be used as a standalone system or integrated into existing NixOS flakes
- Development Tools: Complete development environment with modern tools
- Modern Shell: Zsh with Starship prompt and useful aliases
Quick Start
Option 1: Use as a Standalone System
# Clone the repository
git clone https://github.com/thinktankmachine/cursor-nixos-flake
cd cursor-nixos-flake
# Build and switch to the configuration
sudo nixos-rebuild switch --flake .#cursor-system
Option 2: Integrate into Existing NixOS Flake
Add to your /etc/nixos/flake.nix:
{
inputs = {
# ... your existing inputs
cursor-flake = {
url = "github:thinktankmachine/cursor-nixos-flake";
inputs.nixpkgs.follows = "nixpkgs";
inputs.home-manager.follows = "home-manager";
};
};
outputs = { nixpkgs, home-manager, cursor-flake, ... }: {
nixosConfigurations.your-system = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
modules = [
# ... your existing modules
{
home-manager.users.your-username = { pkgs, ... }: {
home.packages = with pkgs; [
# ... your existing packages
] ++ [
# Add Cursor from the flake
cursor-flake.packages.x86_64-linux.cursor
];
};
}
];
};
};
}
Then rebuild:
sudo nix flake update
sudo nixos-rebuild switch --flake .#your-system
Usage
After installation, Cursor will be available:
- Applications Menu: Look for "Cursor" in your desktop environment
- Terminal: Run
cursorfrom any terminal - Command Line: Use
cursor --versionto verify installation
Updating Cursor
When a new version of Cursor is released, follow these steps to update the flake:
Step 1: Find the New Download URL
- Go to Cursor's download page
- Find the Linux AppImage download link
- Copy the URL (it will look like:
https://downloads.cursor.com/production/[hash]/linux/x64/Cursor-[version]-x86_64.AppImage)
Step 2: Update the Flake
-
Update the URL in
home.nix:# Find this section in home.nix cursorAppImage = pkgs.writeShellScriptBin "cursor" '' # ... environment setup ... # Run the AppImage with appimage-run exec ${pkgs.appimage-run}/bin/appimage-run ${pkgs.fetchurl { url = "https://downloads.cursor.com/production/[NEW_HASH]/linux/x64/Cursor-[NEW_VERSION]-x86_64.AppImage"; sha256 = "OLD_HASH_HERE"; # This will be updated in the next step }} "$@" ''; -
Update the SHA256 hash:
# Run the update script (it will fetch the new URL and update the hash) ./update-cursor-hash.sh -
Test the build:
# Test that the flake builds correctly nix build .#packages.x86_64-linux.cursor -
Update your system:
# If using standalone system sudo nixos-rebuild switch --flake .#cursor-system # If integrated into main system cd /etc/nixos sudo nix flake update sudo nixos-rebuild switch --flake .#your-system
Step 3: Verify the Update
# Check the version
cursor --version
# Launch Cursor to ensure it works
cursor
Step 4: Commit and Push (Optional)
# Commit the changes
git add .
git commit -m "Update Cursor to version [NEW_VERSION]"
git push origin main
Configuration
Customizing the Cursor Wrapper
The Cursor AppImage wrapper in home.nix includes enhanced compatibility settings:
cursorAppImage = pkgs.writeShellScriptBin "cursor" ''
# Set up environment for better AppImage compatibility
export APPDIR=""
export ARGV0=""
export OWD=""
# Ensure proper library paths
export LD_LIBRARY_PATH="${pkgs.lib.makeLibraryPath [
pkgs.glib
pkgs.gtk3
pkgs.cairo
pkgs.pango
pkgs.atk
pkgs.gdk-pixbuf
pkgs.xorg.libX11
pkgs.xorg.libXcomposite
pkgs.xorg.libXcursor
pkgs.xorg.libXext
pkgs.xorg.libXfixes
pkgs.xorg.libXi
pkgs.xorg.libXrandr
pkgs.xorg.libXrender
pkgs.xorg.libXtst
pkgs.nss
pkgs.nspr
pkgs.dbus
pkgs.at-spi2-atk
pkgs.at-spi2-core
pkgs.mesa
pkgs.alsa-lib
]}:$LD_LIBRARY_PATH"
# Run the AppImage with appimage-run
exec ${pkgs.appimage-run}/bin/appimage-run ${pkgs.fetchurl {
url = "https://downloads.cursor.com/production/[hash]/linux/x64/Cursor-[version]-x86_64.AppImage";
sha256 = "[hash]";
}} "$@"
'';
Adding Additional Packages
To add more development tools, edit home.nix:
home.packages = with pkgs; [
# Existing packages...
# Add your packages here
nodejs_20
python3
rustc
cargo
# ... more packages
];
Troubleshooting
Common Issues
1. AppImage Won't Run
Symptoms: bwrap: Can't chdir to /etc/nixos: No such file or directory
Solution: Run Cursor from your home directory, not from system directories:
cd ~
cursor
2. Keymapping Errors
Symptoms: Error: Cannot find module './build/Debug/keymapping'
Solution: These are cosmetic errors and don't prevent Cursor from working. The enhanced wrapper includes additional environment variables to reduce these errors.
3. Update Mechanism Crashes
Symptoms: Cursor crashes when trying to update, shows "update available" but fails to install
Solution: The enhanced wrapper disables Cursor's auto-update mechanism to prevent crashes. To update Cursor, use the flake's update process instead:
# Update to a new version
./update-cursor-hash.sh
sudo nixos-rebuild switch --flake .#your-system
4. Library Loading Issues
Symptoms: Various library-related errors
Solution: The enhanced wrapper includes all necessary libraries. If issues persist, try:
# Rebuild the system
sudo nixos-rebuild switch --flake .#your-system
# Clear AppImage cache
rm -rf ~/.cache/appimage-run/*
5. Git Authentication Issues
Symptoms: fatal: Authentication failed
Solution: Ensure your remote uses SSH:
git remote set-url origin git@github.com:username/repo.git
Testing the Flake
You can test the flake without affecting your system:
# Build the VM image
nix build .#nixosConfigurations.cursor-system.config.system.build.vm
# Run the VM
./result/bin/run-cursor-system-vm
File Structure
cursor-flake/
├── flake.nix # Main flake definition with outputs
├── configuration.nix # NixOS system configuration
├── home.nix # Home Manager configuration with Cursor wrapper
├── hardware-configuration.nix # Hardware-specific settings
├── update-cursor-hash.sh # Script to update Cursor hash
├── test-configuration.nix # Minimal test configuration
├── test-home.nix # Minimal test home configuration
└── README.md # This documentation
Development
Adding Features
- New packages: Add to
home.packagesinhome.nix - System changes: Modify
configuration.nix - User settings: Update
home.nixconfiguration
Testing Changes
# Test the flake syntax
nix flake check
# Test building the package
nix build .#packages.x86_64-linux.cursor
# Test the full system
nix build .#nixosConfigurations.cursor-system.config.system.build.vm
Contributing
- Fork the repository
- Create a feature branch:
git checkout -b feature-name - Make your changes
- Test thoroughly:
nix flake check - Commit:
git commit -m "Add feature description" - Push:
git push origin feature-name - Submit a pull request
License
This project is licensed under the MIT License.
Support
- Issues: GitHub Issues
- Discussions: GitHub Discussions
Acknowledgments
- Cursor team for the excellent AI-first editor
- NixOS community for the amazing package management system
- Home Manager for user configuration management