diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..af5e32c --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,89 @@ +# CLAUDE.md + +This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. + +## System Overview + +This is a NixOS system configuration repository using Nix flakes with home-manager integration. The configuration manages multiple machines: +- **xps13**: Dell XPS 13 laptop with Hyprland desktop environment +- **Titan**: Server configuration +- **Athena**: Server configuration + +## Architecture + +The configuration is organized using a modular structure: + +- `flake.nix`: Main flake configuration defining system inputs and outputs for all machines +- `modules/`: Shared configuration modules + - `configuration-common.nix`: Common system settings shared across machines + - `configuration-[machine].nix`: Machine-specific system configurations + - `hardware-configuration-[machine].nix`: Hardware-specific configurations + - `home-manager-common.nix`: Common home-manager packages and settings + - `hyprland.nix`: Hyprland window manager configuration + - `waybar.nix`: Waybar status bar configuration +- `home-[machine].nix`: Machine-specific home-manager configurations +- `home/`: User dotfiles and configuration files +- `secrets/`: SOPS encrypted secrets + +## Key Technologies + +- **NixOS**: Declarative Linux distribution +- **Nix Flakes**: Modern Nix package management with lockfile +- **Home Manager**: Dotfile and user environment management +- **SOPS**: Secret management with encryption +- **Disko**: Declarative disk partitioning +- **Hyprland**: Wayland compositor (xps13 only) +- **Neovim**: Custom neovim configuration from external git repository + +## Common Commands + +### System Management +```bash +# Build and switch to new configuration (requires sudo) +sudo nixos-rebuild switch --flake .#[machine-name] + +# Build without switching (test configuration) +nixos-rebuild build --flake .#[machine-name] + +# Test configuration (temporary, reverts on reboot) +sudo nixos-rebuild test --flake .#[machine-name] + +# Check flake for errors +nix flake check + +# Update flake inputs +nix flake update + +# Show available system generations +nixos-rebuild list-generations +``` + +### Machine-Specific Examples +```bash +# XPS 13 laptop +sudo nixos-rebuild switch --flake .#xps13 + +# Titan server +sudo nixos-rebuild switch --flake .#Titan + +# Athena server +sudo nixos-rebuild switch --flake .#Athena +``` + +### Development +```bash +# Enter development shell with nix tools +nix develop + +# Format nix files +nix fmt +``` + +## Important Notes + +- All machines use the username `th3r00t` +- Neovim configuration is managed externally from `git.th3r00t.net/th3r00t/nvim-config.git` +- SOPS is used for secret management - encrypted files are in `secrets/` +- Hardware configurations are machine-specific and auto-generated +- The flake uses nixos-unstable channel +- Custom overlays are defined in flake.nix for package modifications \ No newline at end of file diff --git a/flake.lock b/flake.lock index 028bfc9..203f5da 100644 --- a/flake.lock +++ b/flake.lock @@ -182,11 +182,11 @@ "neovim-config": { "flake": false, "locked": { - "lastModified": 1756442459, - "narHash": "sha256-YfZ9KdGGnhG1t+7TKw3kbH6oUhvbchhpUxACasP87f8=", + "lastModified": 1757104099, + "narHash": "sha256-WEGbE3KUM/DlHdPRd8RCAGkMyUuDGdhuR98TBapSgYg=", "ref": "master", - "rev": "ee941c351daa870d4a40b933fe93ffb8459884f7", - "revCount": 2, + "rev": "4ae2d233c27e26b9f8470c953021fbf834cad943", + "revCount": 8, "type": "git", "url": "https://git.th3r00t.net/th3r00t/nvim-config.git" }, diff --git a/flake.nix b/flake.nix index 178fa08..a527545 100644 --- a/flake.nix +++ b/flake.nix @@ -15,12 +15,7 @@ sops-nix.inputs.nixpkgs.follows = "nixpkgs"; nixos-hardware.url = "github:NixOS/nixos-hardware/master"; neovim-config = { - # pick ONE of these URLs: - - # Public over HTTPS: url = "git+https://git.th3r00t.net/th3r00t/nvim-config.git?ref=master"; - - # OR private over SSH (recommended if the repo is private): # url = "git+ssh://git@git.th3r00t.net/th3r00t/nvim-config.git?ref=main"; flake = false; diff --git a/home-xps13.nix b/home-xps13.nix index e4d56f5..fbdaf13 100644 --- a/home-xps13.nix +++ b/home-xps13.nix @@ -100,6 +100,7 @@ logmein-hamachi openmw virt-viewer + kitty ]; services.udiskie = { enable = false; diff --git a/home/.local/usr/bin/pytui b/home/.local/usr/bin/pytui index 8713261..121819e 100755 Binary files a/home/.local/usr/bin/pytui and b/home/.local/usr/bin/pytui differ diff --git a/home/Wallpapers/kylo-ren-dark-wallpaper.jpg b/home/Wallpapers/kylo-ren-dark-wallpaper.jpg index 13468c6..fbfca8c 100644 Binary files a/home/Wallpapers/kylo-ren-dark-wallpaper.jpg and b/home/Wallpapers/kylo-ren-dark-wallpaper.jpg differ diff --git a/home/Wallpapers/starwars-hires-sith-wallpaper.jpg b/home/Wallpapers/starwars-hires-sith-wallpaper.jpg index 2b32711..d0dc28f 100644 Binary files a/home/Wallpapers/starwars-hires-sith-wallpaper.jpg and b/home/Wallpapers/starwars-hires-sith-wallpaper.jpg differ diff --git a/modules/hardware-configuration-xps13.nix b/modules/hardware-configuration-xps13.nix index 18ba544..df7e0d0 100644 --- a/modules/hardware-configuration-xps13.nix +++ b/modules/hardware-configuration-xps13.nix @@ -71,6 +71,17 @@ fi ''; }; + # TODO: Fix this to work on nixos, fails finding python env + # systemd.services.pytui-note-ui = { + # description = "Launch Pytui note server"; + # wantedBy = [ "multi-user.target" ]; + # requires = [ "network-online.target" ]; + # after = [ "network-online.target" ]; + # serviceConfig.Type = "oneshot"; + # script = '' + # ./home/th3r00t/.local/usr/bin/pytui -w --port 3000 + # ''; + # }; networking.hostName = "xps13"; # Define your hostname. # networking.networkmanager.enable = true; networking.wireless = { diff --git a/modules/home-manager-common.nix b/modules/home-manager-common.nix index 84334b8..0311d46 100644 --- a/modules/home-manager-common.nix +++ b/modules/home-manager-common.nix @@ -70,6 +70,8 @@ gvfs inetutils sqlitebrowser + claude-code + marksman ]; programs.neovim.plugins = [ diff --git a/modules/hyprland.nix b/modules/hyprland.nix index bf165db..391cd8e 100644 --- a/modules/hyprland.nix +++ b/modules/hyprland.nix @@ -236,7 +236,7 @@ "/etc/nixos/home/Wallpapers/star-wars-movie-shadow-stormtrooper-wallpaper-3440x1440_15.jpg" ]; wallpaper = [ - ",/etc/nixos/home/Wallpapers/avatar_starship_bridge.png" + ",/etc/nixos/home/Wallpapers/starwars-minimal-battle-wallpaper.jpg" ]; }; }; diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..19e8510 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,241 @@ +{ + "name": "nixos", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "dependencies": { + "@anthropic-ai/claude-code": "^1.0.107" + } + }, + "node_modules/@anthropic-ai/claude-code": { + "version": "1.0.107", + "resolved": "https://registry.npmjs.org/@anthropic-ai/claude-code/-/claude-code-1.0.107.tgz", + "integrity": "sha512-YYbOLIZF6aIwUeLa9Yg2gsHggBC5IWJwsA3B0wpl1z412yIgjp2CjWJ2GGLMTxCrrL5WgUe4SDmNxiAYEPP0yQ==", + "license": "SEE LICENSE IN README.md", + "bin": { + "claude": "cli.js" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "^0.33.5", + "@img/sharp-darwin-x64": "^0.33.5", + "@img/sharp-linux-arm": "^0.33.5", + "@img/sharp-linux-arm64": "^0.33.5", + "@img/sharp-linux-x64": "^0.33.5", + "@img/sharp-win32-x64": "^0.33.5" + } + }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz", + "integrity": "sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.5.tgz", + "integrity": "sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.4.tgz", + "integrity": "sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.4.tgz", + "integrity": "sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.5.tgz", + "integrity": "sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==", + "cpu": [ + "arm" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.4.tgz", + "integrity": "sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.4.tgz", + "integrity": "sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.5.tgz", + "integrity": "sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==", + "cpu": [ + "arm" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.0.5" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.5.tgz", + "integrity": "sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.5.tgz", + "integrity": "sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-win32-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz", + "integrity": "sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..86aa499 --- /dev/null +++ b/package.json @@ -0,0 +1,5 @@ +{ + "dependencies": { + "@anthropic-ai/claude-code": "^1.0.107" + } +}