Initial commit: NixOS flake with Cursor 1.3.9
- Complete NixOS configuration with Cursor AppImage - Development environment with Node.js, Python, Rust - Modern shell setup with Zsh and Starship - AppImage support and desktop integration - Comprehensive documentation and quick start guide
This commit is contained in:
@@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2025 Cursor Flake
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
@@ -0,0 +1,60 @@
|
||||
# Quick Start Guide
|
||||
|
||||
Get Cursor 1.3.9 running on NixOS in minutes!
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- NixOS system with flakes enabled
|
||||
- Git installed
|
||||
|
||||
## Quick Setup
|
||||
|
||||
1. **Clone and enter the repository:**
|
||||
```bash
|
||||
git clone <your-repo-url>
|
||||
cd cursor-flake
|
||||
```
|
||||
|
||||
2. **Customize the username** (optional):
|
||||
- Edit `home.nix` and change `home.username = "liam";` to your username
|
||||
- Edit `configuration.nix` and change `users.users.liam` to your username
|
||||
|
||||
3. **Deploy to your system:**
|
||||
```bash
|
||||
sudo nixos-rebuild switch --flake .#cursor-system
|
||||
```
|
||||
|
||||
4. **Launch Cursor:**
|
||||
- From applications menu: Look for "Cursor"
|
||||
- From terminal: Run `cursor`
|
||||
|
||||
## What You Get
|
||||
|
||||
- ✅ **Cursor 1.3.9**: Latest AI-first code editor
|
||||
- ✅ **Development Environment**: Node.js, Python, Rust, Git
|
||||
- ✅ **Modern Shell**: Zsh with Starship prompt
|
||||
- ✅ **CLI Tools**: ripgrep, fd, bat, eza, fzf, tmux
|
||||
- ✅ **Desktop Integration**: GNOME with proper launcher
|
||||
|
||||
## Testing
|
||||
|
||||
To test before deploying:
|
||||
```bash
|
||||
# Build the system (takes a few minutes)
|
||||
nix build .#nixosConfigurations.cursor-system.config.system.build.vm
|
||||
|
||||
# Run in VM (optional)
|
||||
./result/bin/run-cursor-system-vm
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
- **Cursor won't start**: Make sure you have FUSE support enabled
|
||||
- **Permission issues**: Check that your user is in the correct groups
|
||||
- **Build fails**: Run `nix flake check` to validate the configuration
|
||||
|
||||
## Next Steps
|
||||
|
||||
- Customize your development environment in `home.nix`
|
||||
- Add your own packages to the configuration
|
||||
- Check the full README.md for detailed documentation
|
||||
@@ -0,0 +1,165 @@
|
||||
# Cursor Flake
|
||||
|
||||
A NixOS flake that provides a complete development environment with Cursor 1.3.9 (AI-first code editor) as an AppImage.
|
||||
|
||||
## Features
|
||||
|
||||
- **Cursor 1.3.9**: Latest version of the AI-first code editor
|
||||
- **AppImage Support**: Full AppImage compatibility with proper desktop integration
|
||||
- **Development Tools**: Complete development environment with Node.js, Python, Rust, and more
|
||||
- **Modern Shell**: Zsh with Starship prompt and useful aliases
|
||||
- **Desktop Environment**: GNOME with essential utilities
|
||||
- **Git Integration**: Pre-configured Git with modern defaults
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- NixOS system with flakes enabled
|
||||
- At least 8GB RAM recommended
|
||||
- 20GB free disk space
|
||||
|
||||
## Installation
|
||||
|
||||
### 1. Clone the Repository
|
||||
|
||||
```bash
|
||||
git clone <your-repo-url>
|
||||
cd cursor-flake
|
||||
```
|
||||
|
||||
### 2. Update the SHA256 Hash (if needed)
|
||||
|
||||
The current configuration uses the working Cursor 1.3.9 download URL. If you need to update to a newer version, run:
|
||||
|
||||
```bash
|
||||
./update-cursor-hash.sh
|
||||
```
|
||||
|
||||
This will automatically update the hash in `home.nix` with the correct value.
|
||||
|
||||
### 3. Customize Configuration
|
||||
|
||||
Edit the following files to match your system:
|
||||
|
||||
- `configuration.nix`: System-wide settings
|
||||
- `home.nix`: User-specific settings (change username from "liam" to your username)
|
||||
- `hardware-configuration.nix`: Hardware-specific settings (run `nixos-generate-config` on your target system)
|
||||
|
||||
### 4. Build and Switch
|
||||
|
||||
```bash
|
||||
# Build the configuration
|
||||
sudo nixos-rebuild build --flake .#cursor-system
|
||||
|
||||
# Switch to the new configuration
|
||||
sudo nixos-rebuild switch --flake .#cursor-system
|
||||
```
|
||||
|
||||
### 5. First Boot Setup
|
||||
|
||||
After the first boot:
|
||||
|
||||
1. Log in as the configured user
|
||||
2. Cursor will be available in the applications menu
|
||||
3. You can also launch it from the terminal with `cursor`
|
||||
|
||||
## Configuration
|
||||
|
||||
### Cursor Settings
|
||||
|
||||
The flake includes pre-configured Cursor settings in `~/.config/Cursor/User/settings.json`:
|
||||
|
||||
- Modern font (JetBrains Mono with ligatures)
|
||||
- Dark theme
|
||||
- Optimized editor settings
|
||||
- Cursor AI features enabled
|
||||
|
||||
### Development Environment
|
||||
|
||||
The flake includes:
|
||||
|
||||
- **Languages**: Node.js 20, Python 3, Rust
|
||||
- **Tools**: Git, ripgrep, fd, bat, exa, fzf, tmux
|
||||
- **Shell**: Zsh with Starship prompt
|
||||
- **Terminal**: Alacritty
|
||||
|
||||
### Customization
|
||||
|
||||
To customize the configuration:
|
||||
|
||||
1. **Add packages**: Edit `home.nix` and add to `home.packages`
|
||||
2. **Change shell**: Modify the shell configuration in `home.nix`
|
||||
3. **Update Cursor settings**: Edit the settings in `home.nix`
|
||||
4. **System packages**: Add to `environment.systemPackages` in `configuration.nix`
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### AppImage Issues
|
||||
|
||||
If Cursor doesn't run properly:
|
||||
|
||||
1. Check if AppImage support is enabled:
|
||||
```bash
|
||||
ls /proc/sys/fs/binfmt_misc/
|
||||
```
|
||||
|
||||
2. Reinstall AppImage support:
|
||||
```bash
|
||||
sudo nixos-rebuild switch --flake .#cursor-system
|
||||
```
|
||||
|
||||
### Permission Issues
|
||||
|
||||
If you encounter permission issues:
|
||||
|
||||
1. Ensure the user is in the correct groups:
|
||||
```bash
|
||||
groups
|
||||
```
|
||||
|
||||
2. Add user to additional groups if needed in `configuration.nix`
|
||||
|
||||
### Update Cursor
|
||||
|
||||
To update to a newer version of Cursor:
|
||||
|
||||
1. Update the version number in `home.nix`
|
||||
2. Update the download URL if needed
|
||||
3. Update the SHA256 hash
|
||||
4. Rebuild the system
|
||||
|
||||
## File Structure
|
||||
|
||||
```
|
||||
cursor-flake/
|
||||
├── flake.nix # Main flake definition
|
||||
├── configuration.nix # NixOS system configuration
|
||||
├── home.nix # Home Manager user configuration
|
||||
├── hardware-configuration.nix # Hardware-specific settings
|
||||
└── README.md # This file
|
||||
```
|
||||
|
||||
## Contributing
|
||||
|
||||
1. Fork the repository
|
||||
2. Create a feature branch
|
||||
3. Make your changes
|
||||
4. Test the configuration
|
||||
5. Submit a pull request
|
||||
|
||||
## License
|
||||
|
||||
This project is licensed under the MIT License - see the LICENSE file for details.
|
||||
|
||||
## Support
|
||||
|
||||
For issues and questions:
|
||||
|
||||
1. Check the troubleshooting section
|
||||
2. Search existing issues
|
||||
3. Create a new issue with detailed information
|
||||
|
||||
## Acknowledgments
|
||||
|
||||
- Cursor team for the excellent AI-first editor
|
||||
- NixOS community for the amazing package management system
|
||||
- Home Manager for user configuration management
|
||||
@@ -0,0 +1,108 @@
|
||||
{ config, pkgs, lib, ... }:
|
||||
|
||||
{
|
||||
imports = [
|
||||
./hardware-configuration.nix
|
||||
];
|
||||
|
||||
# Bootloader
|
||||
boot.loader.systemd-boot.enable = true;
|
||||
boot.loader.efi.canTouchEfiVariables = true;
|
||||
|
||||
# Enable AppImage support
|
||||
boot.binfmt.emulatedSystems = [ ];
|
||||
|
||||
# Networking
|
||||
networking.networkmanager.enable = true;
|
||||
networking.hostName = "cursor-system";
|
||||
|
||||
# Time zone
|
||||
time.timeZone = "UTC";
|
||||
|
||||
# Internationalisation
|
||||
i18n.defaultLocale = "en_US.UTF-8";
|
||||
i18n.extraLocaleSettings = {
|
||||
LC_ADDRESS = "en_US.UTF-8";
|
||||
LC_IDENTIFICATION = "en_US.UTF-8";
|
||||
LC_MEASUREMENT = "en_US.UTF-8";
|
||||
LC_MONETARY = "en_US.UTF-8";
|
||||
LC_NAME = "en_US.UTF-8";
|
||||
LC_NUMERIC = "en_US.UTF-8";
|
||||
LC_PAPER = "en_US.UTF-8";
|
||||
LC_TELEPHONE = "en_US.UTF-8";
|
||||
LC_TIME = "en_US.UTF-8";
|
||||
};
|
||||
|
||||
# X11 and Desktop Environment
|
||||
services.xserver.enable = true;
|
||||
services.displayManager.gdm.enable = true;
|
||||
services.desktopManager.gnome.enable = true;
|
||||
|
||||
# Enable sound with pipewire
|
||||
security.rtkit.enable = true;
|
||||
services.pipewire = {
|
||||
enable = true;
|
||||
alsa.enable = true;
|
||||
alsa.support32Bit = true;
|
||||
pulse.enable = true;
|
||||
};
|
||||
|
||||
# User configuration
|
||||
users.users.liam = {
|
||||
isNormalUser = true;
|
||||
description = "Liam";
|
||||
extraGroups = [ "networkmanager" "wheel" "video" "audio" ];
|
||||
# Set explicit password (password: cursor)
|
||||
hashedPassword = "$6$thkdqD1PCLUj6X9i$iPEOKRohaybp7XMYpyb7Zjd.Gdcl/weC732CYMlQ4ql7YDY8CLmSIqSUeH/efSnW.Wq9ICn2T5P5RSOqTqNlF0";
|
||||
packages = with pkgs; [
|
||||
# Essential tools
|
||||
git
|
||||
wget
|
||||
curl
|
||||
unzip
|
||||
# AppImage support
|
||||
appimage-run
|
||||
# Development tools
|
||||
gcc
|
||||
gnumake
|
||||
# Terminal
|
||||
alacritty
|
||||
# File manager
|
||||
nautilus
|
||||
];
|
||||
};
|
||||
|
||||
# Allow unfree packages (needed for some AppImages)
|
||||
nixpkgs.config.allowUnfree = true;
|
||||
|
||||
# System packages
|
||||
environment.systemPackages = with pkgs; [
|
||||
# AppImage utilities
|
||||
appimage-run
|
||||
# Desktop utilities
|
||||
gnome-tweaks
|
||||
gnome-software
|
||||
# System utilities
|
||||
htop
|
||||
neofetch
|
||||
# Media support
|
||||
ffmpeg
|
||||
vlc
|
||||
];
|
||||
|
||||
# Enable flakes
|
||||
nix.settings.experimental-features = [ "nix-command" "flakes" ];
|
||||
|
||||
# Garbage collection
|
||||
nix.gc = {
|
||||
automatic = true;
|
||||
dates = "weekly";
|
||||
options = "--delete-older-than 30d";
|
||||
};
|
||||
|
||||
# This value determines the NixOS release from which the default
|
||||
# settings for stateful data, like file locations and database versions
|
||||
# on your system were taken. It's perfectly fine and recommended to leave
|
||||
# this value at the release version of the first install of this system.
|
||||
system.stateVersion = "23.11";
|
||||
}
|
||||
Generated
+48
@@ -0,0 +1,48 @@
|
||||
{
|
||||
"nodes": {
|
||||
"home-manager": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1754421590,
|
||||
"narHash": "sha256-TrlzGR5l/OltcTnBtihUxoKqv+JNEKWmUamDVWICtX0=",
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"rev": "a0b1afdb5efbf59f4b6e934d090cf8d150517890",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1754214453,
|
||||
"narHash": "sha256-Q/I2xJn/j1wpkGhWkQnm20nShYnG7TI99foDBpXm1SY=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "5b09dc45f24cf32316283e62aec81ffee3c3e376",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixos-unstable",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"home-manager": "home-manager",
|
||||
"nixpkgs": "nixpkgs"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
"version": 7
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
{
|
||||
description = "NixOS configuration with Cursor 1.3.9 AppImage";
|
||||
|
||||
inputs = {
|
||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||
home-manager = {
|
||||
url = "github:nix-community/home-manager";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
};
|
||||
|
||||
outputs = { self, nixpkgs, home-manager }: {
|
||||
nixosConfigurations = {
|
||||
cursor-system = nixpkgs.lib.nixosSystem {
|
||||
system = "x86_64-linux";
|
||||
modules = [
|
||||
./configuration.nix
|
||||
home-manager.nixosModules.home-manager
|
||||
{
|
||||
home-manager.useGlobalPkgs = true;
|
||||
home-manager.useUserPackages = true;
|
||||
home-manager.users.liam = import ./home.nix;
|
||||
}
|
||||
];
|
||||
};
|
||||
test-system = nixpkgs.lib.nixosSystem {
|
||||
system = "x86_64-linux";
|
||||
modules = [
|
||||
./test-configuration.nix
|
||||
home-manager.nixosModules.home-manager
|
||||
{
|
||||
home-manager.useGlobalPkgs = true;
|
||||
home-manager.useUserPackages = true;
|
||||
home-manager.users.liam = import ./test-home.nix;
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
# Do not modify this file! It was generated by 'nixos-generate-config'
|
||||
# and may be overwritten by future invocations. Please make changes
|
||||
# to /etc/nixos/configuration.nix instead.
|
||||
{ config, lib, pkgs, modulesPath, ... }:
|
||||
|
||||
{
|
||||
imports = [ ];
|
||||
|
||||
boot.initrd.availableKernelModules = [ "ata_piix" "ohci_pci" "ehci_pci" "ahci" "sd_mod" "sr_mod" ];
|
||||
boot.initrd.kernelModules = [ ];
|
||||
boot.kernelModules = [ ];
|
||||
boot.extraModulePackages = [ ];
|
||||
|
||||
fileSystems."/" =
|
||||
{ device = "/dev/disk/by-uuid/placeholder";
|
||||
fsType = "ext4";
|
||||
};
|
||||
|
||||
fileSystems."/boot" =
|
||||
{ device = "/dev/disk/by-uuid/placeholder";
|
||||
fsType = "vfat";
|
||||
};
|
||||
|
||||
swapDevices = [ ];
|
||||
|
||||
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
|
||||
# (the default) this is the recommended approach. When using systemd-networkd it's
|
||||
# still possible to use this option, but it's recommended to use it in conjunction
|
||||
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
|
||||
networking.useDHCP = lib.mkDefault true;
|
||||
# networking.interfaces.enp0s3.useDHCP = lib.mkDefault true;
|
||||
|
||||
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
||||
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
||||
}
|
||||
@@ -0,0 +1,134 @@
|
||||
{ config, pkgs, lib, ... }:
|
||||
|
||||
let
|
||||
# Cursor 1.3.9 AppImage wrapper
|
||||
cursorAppImage = pkgs.writeShellScriptBin "cursor" ''
|
||||
exec ${pkgs.appimage-run}/bin/appimage-run ${pkgs.fetchurl {
|
||||
url = "https://downloads.cursor.com/production/54c27320fab08c9f5dd5873f07fca101f7a3e076/linux/x64/Cursor-1.3.9-x86_64.AppImage";
|
||||
sha256 = "076ijp033xjg09aqjhjm6sslvq0hsjga35840m3br722lqpi6jfj";
|
||||
}} "$@"
|
||||
'';
|
||||
in
|
||||
{
|
||||
home.username = "liam";
|
||||
home.homeDirectory = "/home/liam";
|
||||
home.stateVersion = "23.11";
|
||||
|
||||
# Let Home Manager install and manage itself
|
||||
programs.home-manager.enable = true;
|
||||
|
||||
# Add Cursor to home packages
|
||||
home.packages = with pkgs; [
|
||||
cursorAppImage
|
||||
# Additional development tools
|
||||
nodejs_20
|
||||
python3
|
||||
rustc
|
||||
cargo
|
||||
# Terminal improvements
|
||||
starship
|
||||
zsh
|
||||
# Git tools
|
||||
git-crypt
|
||||
git-lfs
|
||||
# Additional utilities
|
||||
ripgrep
|
||||
fd
|
||||
bat
|
||||
eza
|
||||
fzf
|
||||
tmux
|
||||
];
|
||||
|
||||
# Shell configuration
|
||||
programs.zsh = {
|
||||
enable = true;
|
||||
autosuggestion.enable = true;
|
||||
enableCompletion = true;
|
||||
syntaxHighlighting.enable = true;
|
||||
shellAliases = {
|
||||
ll = "eza -la";
|
||||
la = "eza -a";
|
||||
cat = "bat";
|
||||
find = "fd";
|
||||
grep = "rg";
|
||||
};
|
||||
};
|
||||
|
||||
# Starship prompt
|
||||
programs.starship = {
|
||||
enable = true;
|
||||
enableZshIntegration = true;
|
||||
settings = {
|
||||
add_newline = false;
|
||||
prompt_order = [ "directory" "git_branch" "git_status" "nodejs" "rust" "python" "cmd_duration" "line_break" "$all" ];
|
||||
};
|
||||
};
|
||||
|
||||
# Git configuration
|
||||
programs.git = {
|
||||
enable = true;
|
||||
userName = "Liam";
|
||||
userEmail = "liam@example.com";
|
||||
extraConfig = {
|
||||
init.defaultBranch = "main";
|
||||
pull.rebase = true;
|
||||
};
|
||||
};
|
||||
|
||||
# VS Code settings (for Cursor compatibility)
|
||||
home.file.".config/Code/User/settings.json".text = builtins.toJSON {
|
||||
"editor.fontSize" = 14;
|
||||
"editor.fontFamily" = "'JetBrains Mono', 'Fira Code', Consolas, 'Courier New', monospace";
|
||||
"editor.fontLigatures" = true;
|
||||
"editor.tabSize" = 2;
|
||||
"editor.insertSpaces" = true;
|
||||
"editor.rulers" = [ 80 120 ];
|
||||
"editor.minimap.enabled" = false;
|
||||
"workbench.colorTheme" = "Default Dark+";
|
||||
"workbench.iconTheme" = "material-icon-theme";
|
||||
"terminal.integrated.fontSize" = 14;
|
||||
"terminal.integrated.fontFamily" = "'JetBrains Mono', 'Fira Code', Consolas, 'Courier New', monospace";
|
||||
};
|
||||
|
||||
# Cursor-specific settings
|
||||
home.file.".config/Cursor/User/settings.json".text = builtins.toJSON {
|
||||
"editor.fontSize" = 14;
|
||||
"editor.fontFamily" = "'JetBrains Mono', 'Fira Code', Consolas, 'Courier New', monospace";
|
||||
"editor.fontLigatures" = true;
|
||||
"editor.tabSize" = 2;
|
||||
"editor.insertSpaces" = true;
|
||||
"editor.rulers" = [ 80 120 ];
|
||||
"editor.minimap.enabled" = false;
|
||||
"workbench.colorTheme" = "Default Dark+";
|
||||
"workbench.iconTheme" = "material-icon-theme";
|
||||
"terminal.integrated.fontSize" = 14;
|
||||
"terminal.integrated.fontFamily" = "'JetBrains Mono', 'Fira Code', Consolas, 'Courier New', monospace";
|
||||
"cursor.chat.enabled" = true;
|
||||
"cursor.chat.autoComplete" = true;
|
||||
};
|
||||
|
||||
# Environment variables
|
||||
home.sessionVariables = {
|
||||
EDITOR = "cursor";
|
||||
VISUAL = "cursor";
|
||||
BROWSER = "firefox";
|
||||
};
|
||||
|
||||
# XDG directories
|
||||
xdg = {
|
||||
enable = true;
|
||||
userDirs = {
|
||||
enable = true;
|
||||
createDirectories = true;
|
||||
desktop = "$HOME/Desktop";
|
||||
documents = "$HOME/Documents";
|
||||
download = "$HOME/Downloads";
|
||||
music = "$HOME/Music";
|
||||
pictures = "$HOME/Pictures";
|
||||
publicShare = "$HOME/Public";
|
||||
templates = "$HOME/Templates";
|
||||
videos = "$HOME/Videos";
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,88 @@
|
||||
{ config, pkgs, lib, ... }:
|
||||
|
||||
{
|
||||
imports = [
|
||||
./hardware-configuration.nix
|
||||
];
|
||||
|
||||
# Bootloader
|
||||
boot.loader.systemd-boot.enable = true;
|
||||
boot.loader.efi.canTouchEfiVariables = true;
|
||||
|
||||
# Networking
|
||||
networking.networkmanager.enable = true;
|
||||
networking.hostName = "cursor-test-system";
|
||||
|
||||
# Time zone
|
||||
time.timeZone = "UTC";
|
||||
|
||||
# Internationalisation
|
||||
i18n.defaultLocale = "en_US.UTF-8";
|
||||
|
||||
# X11 and Desktop Environment
|
||||
services.xserver.enable = true;
|
||||
services.displayManager.gdm.enable = true;
|
||||
services.desktopManager.gnome.enable = true;
|
||||
|
||||
# Enable sound with pipewire
|
||||
security.rtkit.enable = true;
|
||||
services.pipewire = {
|
||||
enable = true;
|
||||
alsa.enable = true;
|
||||
alsa.support32Bit = true;
|
||||
pulse.enable = true;
|
||||
};
|
||||
|
||||
# User configuration
|
||||
users.users.liam = {
|
||||
isNormalUser = true;
|
||||
description = "Liam";
|
||||
extraGroups = [ "networkmanager" "wheel" "video" "audio" ];
|
||||
packages = with pkgs; [
|
||||
# Essential tools
|
||||
git
|
||||
wget
|
||||
curl
|
||||
unzip
|
||||
# AppImage support
|
||||
appimage-run
|
||||
# Development tools
|
||||
gcc
|
||||
gnumake
|
||||
# Terminal
|
||||
alacritty
|
||||
# File manager
|
||||
nautilus
|
||||
];
|
||||
};
|
||||
|
||||
# Allow unfree packages
|
||||
nixpkgs.config.allowUnfree = true;
|
||||
|
||||
# System packages
|
||||
environment.systemPackages = with pkgs; [
|
||||
# AppImage utilities
|
||||
appimage-run
|
||||
# Desktop utilities
|
||||
gnome-tweaks
|
||||
gnome-software
|
||||
# System utilities
|
||||
htop
|
||||
neofetch
|
||||
# Media support
|
||||
ffmpeg
|
||||
vlc
|
||||
];
|
||||
|
||||
# Enable flakes
|
||||
nix.settings.experimental-features = [ "nix-command" "flakes" ];
|
||||
|
||||
# Garbage collection
|
||||
nix.gc = {
|
||||
automatic = true;
|
||||
dates = "weekly";
|
||||
options = "--delete-older-than 30d";
|
||||
};
|
||||
|
||||
system.stateVersion = "23.11";
|
||||
}
|
||||
@@ -0,0 +1,92 @@
|
||||
{ config, pkgs, lib, ... }:
|
||||
|
||||
{
|
||||
home.username = "liam";
|
||||
home.homeDirectory = "/home/liam";
|
||||
home.stateVersion = "23.11";
|
||||
|
||||
# Let Home Manager install and manage itself
|
||||
programs.home-manager.enable = true;
|
||||
|
||||
# Add development tools to home packages
|
||||
home.packages = with pkgs; [
|
||||
# Additional development tools
|
||||
nodejs_20
|
||||
python3
|
||||
rustc
|
||||
cargo
|
||||
# Terminal improvements
|
||||
starship
|
||||
zsh
|
||||
# Git tools
|
||||
git-crypt
|
||||
git-lfs
|
||||
# Additional utilities
|
||||
ripgrep
|
||||
fd
|
||||
bat
|
||||
eza
|
||||
fzf
|
||||
tmux
|
||||
];
|
||||
|
||||
# Shell configuration
|
||||
programs.zsh = {
|
||||
enable = true;
|
||||
autosuggestion.enable = true;
|
||||
enableCompletion = true;
|
||||
syntaxHighlighting.enable = true;
|
||||
shellAliases = {
|
||||
ll = "eza -la";
|
||||
la = "eza -a";
|
||||
cat = "bat";
|
||||
find = "fd";
|
||||
grep = "rg";
|
||||
};
|
||||
};
|
||||
|
||||
# Starship prompt
|
||||
programs.starship = {
|
||||
enable = true;
|
||||
enableZshIntegration = true;
|
||||
settings = {
|
||||
add_newline = false;
|
||||
prompt_order = [ "directory" "git_branch" "git_status" "nodejs" "rust" "python" "cmd_duration" "line_break" "$all" ];
|
||||
};
|
||||
};
|
||||
|
||||
# Git configuration
|
||||
programs.git = {
|
||||
enable = true;
|
||||
userName = "Liam";
|
||||
userEmail = "liam@example.com";
|
||||
extraConfig = {
|
||||
init.defaultBranch = "main";
|
||||
pull.rebase = true;
|
||||
};
|
||||
};
|
||||
|
||||
# Environment variables
|
||||
home.sessionVariables = {
|
||||
EDITOR = "nano";
|
||||
VISUAL = "nano";
|
||||
BROWSER = "firefox";
|
||||
};
|
||||
|
||||
# XDG directories
|
||||
xdg = {
|
||||
enable = true;
|
||||
userDirs = {
|
||||
enable = true;
|
||||
createDirectories = true;
|
||||
desktop = "$HOME/Desktop";
|
||||
documents = "$HOME/Documents";
|
||||
download = "$HOME/Downloads";
|
||||
music = "$HOME/Music";
|
||||
pictures = "$HOME/Pictures";
|
||||
publicShare = "$HOME/Public";
|
||||
templates = "$HOME/Templates";
|
||||
videos = "$HOME/Videos";
|
||||
};
|
||||
};
|
||||
}
|
||||
Executable
+32
@@ -0,0 +1,32 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Script to update the SHA256 hash for Cursor AppImage
|
||||
# Run this script to get the correct hash and update home.nix
|
||||
|
||||
set -e
|
||||
|
||||
echo "Fetching SHA256 hash for Cursor 1.3.9 AppImage..."
|
||||
echo ""
|
||||
|
||||
# Get the hash
|
||||
HASH=$(nix-prefetch-url https://downloads.cursor.com/production/54c27320fab08c9f5dd5873f07fca101f7a3e076/linux/x64/Cursor-1.3.9-x86_64.AppImage)
|
||||
|
||||
echo "SHA256 hash: $HASH"
|
||||
echo ""
|
||||
echo "Please update the hash in home.nix:"
|
||||
echo "Replace the placeholder hash with:"
|
||||
echo "sha256 = \"$HASH\";"
|
||||
echo ""
|
||||
echo "You can do this manually or run:"
|
||||
echo "sed -i 's/sha256 = \"sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\";/sha256 = \"$HASH\";/' home.nix"
|
||||
echo ""
|
||||
|
||||
# Optionally update the file automatically
|
||||
read -p "Do you want to update home.nix automatically? (y/N): " -n 1 -r
|
||||
echo
|
||||
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
||||
sed -i "s/sha256 = \"sha256-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\";/sha256 = \"$HASH\";/" home.nix
|
||||
echo "Updated home.nix with the correct hash!"
|
||||
else
|
||||
echo "Please update home.nix manually with the hash above."
|
||||
fi
|
||||
Reference in New Issue
Block a user