Compare commits

..

7 Commits

Author SHA1 Message Date
0xWheatyz 9d420e7bb9 docs: add comprehensive README documenting system configuration
Added detailed documentation covering NixOS configuration, installed software,
features, and usage instructions for both system and user-level management.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-12 22:17:02 -04:00
0xWheatyz c7a6827bdc feat(terminal): replace GNOME Console with Ghostty
Replace the default GNOME Console terminal with Ghostty by adding it to home packages, configuring it as the default terminal application via dconf settings, and excluding GNOME Console from installed packages.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-12 22:14:40 -04:00
0xWheatyz e1cd081e45 feat(terminal): replace zellij with tmux as terminal multiplexer
Switch from zellij to tmux for terminal multiplexing with mouse support, improved window numbering, and 256-color terminal configuration.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-12 22:09:18 -04:00
0xWheatyz c42fa715ae Merge pull request 'cursor_fix' (#1) from cursor_fix into master
Reviewed-on: #1
2026-03-11 02:35:25 +00:00
0xWheatyz 576cf0dc98 feat(nvim): applied kickstart nvim from github 2026-03-10 22:32:31 -04:00
0xWheatyz 22d0e34139 fix: docker rootless now works due to /etc/hosts permissions change 2026-03-07 15:46:09 -05:00
0xWheatyz 068eba7c26 feat: working neovim 2026-02-19 22:12:45 -05:00
7 changed files with 589 additions and 85 deletions
+251
View File
@@ -0,0 +1,251 @@
# NixOS Configuration
Personal NixOS system configuration using Flakes and Home Manager for declarative system management.
## System Overview
- **OS**: NixOS 25.11
- **Desktop Environment**: GNOME (Wayland/X11)
- **Terminal**: Ghostty + tmux
- **Shell**: Zsh with Oh-My-Zsh (agnoster theme)
- **Editor**: Neovim with [kickstart.nvim](https://github.com/0xWheatyz/kickstart.nvim)
- **Hostname**: nixos
## Features
### Core System
- **Bootloader**: GRUB with EFI support and OS Prober (dual-boot ready)
- **Timezone**: America/New_York
- **Locale**: en_US.UTF-8
- **Networking**: NetworkManager enabled
### Hardware Support
- **Bluetooth**: Enabled with Blueman
- **Fingerprint Sensor**: fprintd enabled
- **Audio**: PipeWire with ALSA and PulseAudio compatibility
- **Printing**: CUPS enabled
### Security & Authentication
- **YubiKey Support**: Configured for login and sudo authentication
- **Auto-lock on YubiKey removal**: Sessions lock when YubiKey is disconnected
- **Fingerprint Authentication**: Available for compatible hardware
### Development Environment
- **Docker**: Rootless mode enabled with proper namespace configuration
- **VMware Workstation**: Host support enabled
- **Nix Flakes**: Experimental features enabled
### Networking
- **Tailscale VPN**: Enabled with client routing features
- **Firewall**: Configured with Tailscale trusted interface
- **Editable /etc/hosts**: Permissions set to 0644 for easy modification
### Desktop Customization
- **GNOME Extensions**:
- Blur My Shell
- Just Perfection
- Arc Menu
- **Fonts**: 0xProto Nerd Font, Adwaita icons
- **Scaling**: Experimental fractional scaling and xwayland-native-scaling enabled
- **QT Integration**: QT apps use GNOME theme (Adwaita Dark)
### Alternative Window Manager
- **Hyprland**: Configured but not currently active (see `home.nix` for configuration)
## Installed Software
### System Packages
- Firefox
- VMware Workstation
- Lunar Client (Minecraft)
- JetBrains Rust Rover
- Cursor (VS Code fork)
- Obsidian
- Claude Code
### User Packages
- Kate (KDE text editor)
- Bitwarden (desktop + CLI)
- LunarVim
- KiCad
- Ghostty terminal
- Python 3
- nmap
- minicom
- freerdp
## Configuration Files
```
.
├── configuration.nix # System-level configuration
├── home.nix # User-level configuration (Home Manager)
├── hardware-configuration.nix # Auto-generated hardware config
└── flake.nix # Flake inputs and outputs
```
## Getting Started
### First Time Setup
1. Clone this repository:
```bash
git clone <your-repo-url> ~/Documents/nixos-configuration
cd ~/Documents/nixos-configuration
```
2. Review and customize configurations:
- Edit `configuration.nix` for system-wide changes
- Edit `home.nix` for user-specific settings
3. Apply the configuration:
```bash
sudo nixos-rebuild switch --flake .#nixos
```
### Making Changes
#### System-Level Changes
Edit `configuration.nix` and rebuild:
```bash
sudo nixos-rebuild switch --flake .#nixos
```
#### User-Level Changes
Edit `home.nix` and rebuild:
```bash
sudo nixos-rebuild switch --flake .#nixos
# or use home-manager directly:
home-manager switch
```
### Adding Packages
**System-wide** (available to all users):
Add to `environment.systemPackages` in `configuration.nix`:
```nix
environment.systemPackages = with pkgs; [
# your-package-here
];
```
**User-specific**:
Add to `home.packages` in `home.nix`:
```nix
home.packages = with pkgs; [
# your-package-here
];
```
### Updating the System
Update flake inputs and rebuild:
```bash
nix flake update
sudo nixos-rebuild switch --flake .#nixos
```
## Key Configurations
### Git Configuration
Managed declaratively in `home.nix`:
- **User**: 0xWheatyz
- **Email**: wyatt@leeworks.dev
- **Default Branch**: master
- **Auto push remote setup**: Enabled
- **Custom alias**: `git lg` for pretty log visualization
### SSH Configuration
Custom SSH hosts configured in `home.nix`:
- **vps**: Direct connection to 45.79.198.105
- **home**: Via jump host proxy
- **git**: Local git server at 10.0.1.10
- Connection multiplexing enabled for faster subsequent connections
### Tmux
- Mouse support enabled
- Window numbering starts at 1
- 256-color terminal support
- Auto-starts on terminal launch
### Zsh
- Oh-My-Zsh with agnoster theme
- Custom `nix develop` wrapper that launches in zsh
- Tmux auto-start on interactive terminals
- Project shell indicator in prompt
## Neovim Configuration
Using [kickstart.nvim](https://github.com/0xWheatyz/kickstart.nvim) as the base configuration, managed through Flakes.
Required dependencies are automatically installed:
- Neovim
- ripgrep
- fd
- gcc
- gnumake
- git
Configuration is synchronized from the GitHub repository and placed in `~/.config/nvim`.
## Docker Configuration
Docker is configured in rootless mode:
- Unprivileged user namespaces enabled
- Socket variable automatically set
- User `l-wyatt` is in the `docker` group
Usage:
```bash
docker ps # No sudo required
```
## Troubleshooting
### Slow Shutdown
The configuration includes optimizations for shutdown handling:
- User manager timeout reduced to 30s (from default 90s)
- Prevents hangs when user linger is enabled
### Building from Flake
If you encounter issues, try:
```bash
# Rebuild with verbose output
sudo nixos-rebuild switch --flake .#nixos --show-trace
# Check flake validity
nix flake check
# Update flake lock file
nix flake update
```
### YubiKey Issues
If YubiKey authentication isn't working:
```bash
# Check PAM configuration
cat /etc/pam.d/login
cat /etc/pam.d/sudo
# Verify udev rules
udevadm control --reload-rules
```
## Important Notes
- **stateVersion**: Set to 25.11 - do not change after initial installation
- **Home Manager stateVersion**: Also 25.11 - keep in sync with system version
- **Unfree packages**: Enabled system-wide via `nixpkgs.config.allowUnfree`
- **User groups**: l-wyatt is member of: networkmanager, wheel, docker, dialout
- **User linger**: Enabled for background services
## Additional Resources
- [NixOS Manual](https://nixos.org/manual/nixos/stable/)
- [Home Manager Manual](https://nix-community.github.io/home-manager/)
- [Nix Flakes](https://nixos.wiki/wiki/Flakes)
- [kickstart.nvim Documentation](https://github.com/nvim-lua/kickstart.nvim)
## License
This configuration is personal and provided as-is for reference.
+81 -17
View File
@@ -1,13 +1,27 @@
# Edit this configuration file to define what should be installed on
# your system. Help is available in the configuration.nix(5) man page
# and in the NixOS manual (accessible by running nixos-help).
# and in the NixOS manual (accessible by running 'nixos-help').
{ config, pkgs, ... }:
let
# Fetch home-manager
home-manager = builtins.fetchTarball {
url = "https://github.com/nix-community/home-manager/archive/release-25.11.tar.gz";
};
# Fetch kickstart-nvim
kickstart-nvim = builtins.fetchGit {
url = "https://github.com/0xWheatyz/kickstart.nvim";
ref = "master";
};
in
{
imports =
[ # Include the results of the hardware scan.
/etc/nixos/hardware-configuration.nix
./hardware-configuration.nix
# Import home-manager module
(import "${home-manager}/nixos")
];
## Commented out as defined at the end of the page
@@ -107,6 +121,7 @@
code-cursor
adwaita-icon-theme
obsidian
claude-code
];
# Some programs need SUID wrappers, can be configured further or are
@@ -135,7 +150,36 @@
# Before changing this value read the documentation for this option
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
system.stateVersion = "25.11"; # Did you read the comment?
# Home Manager Configuration
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.users.l-wyatt = import ./home.nix;
home-manager.sharedModules = [
# Kickstart-nvim module
({ config, lib, pkgs, ... }: {
options.programs.neovim-kickstart = {
enable = lib.mkEnableOption "kickstart.nvim configuration";
};
config = lib.mkIf config.programs.neovim-kickstart.enable {
home.file.".config/nvim" = {
source = kickstart-nvim;
recursive = true;
};
home.packages = with pkgs; [
neovim
ripgrep
fd
gcc
gnumake
git
];
};
})
];
### Start of self configuration
# Configure grub to provide ubuntu option
boot.loader.grub.enable = true;
@@ -153,7 +197,7 @@
services.blueman.enable = true;
# Allow /etc/hosts to be modified without system rebuild
environment.etc.hosts.mode = "0700";
environment.etc.hosts.mode = "0644";
# Enable flakes and extras
nix.settings.experimental-features = [ "nix-command" "flakes" ];
@@ -213,18 +257,9 @@
# security.pki.certificateFiles = [ /etc/nixos/certs/ipa-ca.crt ];
programs.hyprland = {
enable = true;
withUWSM = true; # Recommended for NixOS 24.11+
xwayland.enable = true;
};
# Enable necessary services
xdg.portal = {
enable = true;
extraPortals = with pkgs; [
xdg-desktop-portal-hyprland
];
};
security.pam.services = {
@@ -241,17 +276,36 @@
RUN+="${pkgs.systemd}/bin/loginctl lock-sessions"
'';
# Optimize shutdown handling to prevent user manager hangs
# Reduce timeout for user manager service during shutdown (default is 90s, reducing to 30s)
# This prevents the 2-minute hang when shutting down with linger enabled
systemd.services."user@".serviceConfig = {
TimeoutStopSec = "30s";
};
# Reduce default timeout for all user services
systemd.user.extraConfig = ''
DefaultTimeoutStopSec=30s
'';
# Gnome Configuration
fonts.packages = [
pkgs.adwaita-icon-theme
pkgs.nerd-fonts._0xproto
];
fonts.fontconfig.enable = true;
services.gnome.core-apps.enable = false;
services.gnome.core-developer-tools.enable = false;
services.gnome.games.enable = false;
services.gnome = {
core-apps.enable = true;
core-developer-tools.enable = true;
games.enable = false;
};
services.desktopManager.gnome.extraGSettingsOverrides = ''
[org.gnome.mutter]
experimental-features=['scale-monitor-framebuffer', 'xwayland-native-scaling']
'';
environment.gnome.excludePackages = with pkgs; [
gnome-tour gnome-user-docs
gnome-tour gnome-user-docs gnome-console
];
qt = {
@@ -260,5 +314,15 @@
style = "adwaita-dark";
};
security.wrappers = {
# Low-level unprivileged sandboxing tool, see <https://github.com/containers/bubblewrap>.
bwrap = {
owner = "root";
group = "root";
source = "${pkgs.bubblewrap}/bin/bwrap";
setuid = true;
};
};
}
+32
View File
@@ -0,0 +1,32 @@
building the system configuration...
error:
… while calling the 'head' builtin
at /nix/store/j4hbw1ws742nmsfhbd9r22k1qgivk7hc-nixos-25.11/nixos/lib/attrsets.nix:1696:13:
1695| if length values == 1 || pred here (elemAt values 1) (head values) then
1696| head values
| ^
1697| else
… while evaluating the attribute 'value'
at /nix/store/j4hbw1ws742nmsfhbd9r22k1qgivk7hc-nixos-25.11/nixos/lib/modules.nix:1118:7:
1117| // {
1118| value = addErrorContext "while evaluating the option `${showOption loc}':" value;
| ^
1119| inherit (res.defsFinal') highestPrio;
… while evaluating the option `system.build.toplevel':
… while evaluating definitions from `/nix/store/j4hbw1ws742nmsfhbd9r22k1qgivk7hc-nixos-25.11/nixos/nixos/modules/system/activation/top-level.nix':
… while evaluating the option `assertions':
… while evaluating definitions from `/nix/store/qlchl88ml287pcv5xqyrpcq7jjyl3qgm-home-manager-25.11.tar.gz/home-manager/nixos/common.nix':
(stack trace truncated; use '--show-trace' to show the full, detailed trace)
error: The option `home-manager.users.l-wyatt.programs.neovim-kickstart' does not exist. Definition values:
- In `/home/l-wyatt/Documents/nixos-configuration/configuration.nix':
{
enable = true;
}
Command 'nix-build '<nixpkgs/nixos>' --attr config.system.build.toplevel --no-out-link' returned non-zero exit status 1.
Generated
+118
View File
@@ -0,0 +1,118 @@
{
"nodes": {
"flake-utils": {
"inputs": {
"systems": "systems"
},
"locked": {
"lastModified": 1731533236,
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"home-manager": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1772633058,
"narHash": "sha256-SO7JapRy2HPhgmqiLbfnW1kMx5rakPMKZ9z3wtRLQjI=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "080657a04188aca25f8a6c70a0fb2ea7e37f1865",
"type": "github"
},
"original": {
"owner": "nix-community",
"ref": "release-25.11",
"repo": "home-manager",
"type": "github"
}
},
"kickstart-nvim": {
"inputs": {
"flake-utils": "flake-utils",
"nixpkgs": "nixpkgs"
},
"locked": {
"lastModified": 1771545825,
"narHash": "sha256-xGrTr8aXGzKBpF+RRwnLR8y8yDweojaoqttfA6RH1ws=",
"owner": "0xWheatyz",
"repo": "kickstart.nvim",
"rev": "cef178c27d1b3840d943f5a28b3a45f9eae049d7",
"type": "github"
},
"original": {
"owner": "0xWheatyz",
"repo": "kickstart.nvim",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1771369470,
"narHash": "sha256-0NBlEBKkN3lufyvFegY4TYv5mCNHbi5OmBDrzihbBMQ=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "0182a361324364ae3f436a63005877674cf45efb",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_2": {
"locked": {
"lastModified": 1772822230,
"narHash": "sha256-yf3iYLGbGVlIthlQIk5/4/EQDZNNEmuqKZkQssMljuw=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "71caefce12ba78d84fe618cf61644dce01cf3a96",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-25.11",
"repo": "nixpkgs",
"type": "github"
}
},
"root": {
"inputs": {
"home-manager": "home-manager",
"kickstart-nvim": "kickstart-nvim",
"nixpkgs": "nixpkgs_2"
}
},
"systems": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
}
},
"root": "root",
"version": 7
}
+13 -25
View File
@@ -1,34 +1,16 @@
{
description = "FrostPhoenix's nixos configuration";
description = "NixOS configuration with home-manager and kickstart.nvim";
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
nur.url = "github:nix-community/NUR";
nixpkgs.url = "github:nixos/nixpkgs/nixos-25.11";
home-manager = {
url = "github:nix-community/home-manager";
url = "github:nix-community/home-manager/release-25.11";
inputs.nixpkgs.follows = "nixpkgs";
};
nix-gaming.url = "github:fufexan/nix-gaming";
nix-flatpak.url = "github:gmodena/nix-flatpak";
nix-index-database = {
url = "github:nix-community/nix-index-database";
inputs.nixpkgs.follows = "nixpkgs";
};
maple-mono = {
url = "github:subframe7536/maple-font/variable";
flake = false;
};
superfile.url = "github:yorukot/superfile";
vicinae.url = "github:vicinaehq/vicinae";
zen-browser.url = "github:0xc000022070/zen-browser-flake/beta";
kickstart-nvim.url = "github:0xWheatyz/kickstart.nvim";
};
outputs = { self, nixpkgs, home-manager, ... }: {
outputs = { self, nixpkgs, home-manager, kickstart-nvim, ... }: {
nixosConfigurations = {
nixos = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
@@ -38,10 +20,16 @@
{
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.users.l-wyatt = import ./home.nix;
home-manager.users.l-wyatt = import /home/l-wyatt/.config/home-manager/home.nix;
home-manager.extraSpecialArgs = {
inherit kickstart-nvim;
};
home-manager.sharedModules = [
kickstart-nvim.homeManagerModules.default
];
}
];
};
};
};
}`
}
+39
View File
@@ -0,0 +1,39 @@
# 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 =
[ (modulesPath + "/installer/scan/not-detected.nix")
];
boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "thunderbolt" "usb_storage" "sd_mod" ];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-amd" ];
boot.extraModulePackages = [ ];
fileSystems."/" =
{ device = "/dev/disk/by-uuid/2e63927a-129d-400a-b532-5e98dd1f53d0";
fsType = "ext4";
};
fileSystems."/boot" =
{ device = "/dev/disk/by-uuid/6FAB-C1E3";
fsType = "vfat";
options = [ "fmask=0077" "dmask=0077" ];
};
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.enp193s0f3u2.useDHCP = lib.mkDefault true;
# networking.interfaces.wlp1s0.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
}
+55 -43
View File
@@ -15,12 +15,13 @@
python3
nmap
file
freerdp
freerdp
bitwarden-desktop
bitwarden-cli
lunarvim
minicom
kicad
ghostty
gnomeExtensions.blur-my-shell
gnomeExtensions.just-perfection
gnomeExtensions.arc-menu
@@ -88,6 +89,23 @@
'';
};
# Configure cursor theme
home.pointerCursor = {
gtk.enable = true;
x11.enable = true;
name = "Adwaita";
package = pkgs.adwaita-icon-theme;
size = 24;
};
# Set Ghostty as default terminal
dconf.settings = {
"org/gnome/desktop/default-applications/terminal" = {
exec = "ghostty";
exec-arg = "";
};
};
# Manage your git configuration declaratively
programs.git = {
enable = true;
@@ -106,53 +124,47 @@
programs.tmux = {
enable = true;
# Basic tmux configuration
terminal = "screen-256color";
historyLimit = 10000;
keyMode = "vi";
mouse = true;
# Optional: customize tmux settings
extraConfig = ''
# Set prefix to Ctrl-a instead of Ctrl-b
unbind C-b
set-option -g prefix C-a
bind-key C-a send-prefix
# Enable mouse support
set -g mouse on
# Split panes using | and -
bind | split-window -h
bind - split-window -v
unbind '"'
unbind %
# Start window numbering at 1
set -g base-index 1
# Reload config file
bind r source-file ~/.config/tmux/tmux.conf
# Set terminal colors
set -g default-terminal "screen-256color"
'';
};
# Neovim management
programs.neovim = {
enable = true;
defaultEditor = true;
# Neovim management - using kickstart.nvim via flake
# Basic fallback config (uncomment if not using the flake)
#programs.neovim = {
# enable = true;
# defaultEditor = true;
#
# # Load Lua config inline
# extraLuaConfig = ''
# vim.opt.number = true
# vim.opt.tabstop = 2
# vim.opt.shiftwidth = 2
# vim.opt.expandtab = true
# vim.opt.relativenumber = true
#
# require("telescope").setup {}
# require("nvim-treesitter.configs").setup { highlight = { enable = true } }
# '';
#
# plugins = with pkgs.vimPlugins; [
# telescope-nvim
# nvim-treesitter
# nvim-lspconfig
# gruvbox
# ];
#};
# Load Lua config inline
extraLuaConfig = ''
vim.opt.number = true
vim.opt.tabstop = 2
vim.opt.shiftwidth = 2
vim.opt.expandtab = true
vim.opt.relativenumber = true
require("telescope").setup {}
require("nvim-treesitter.configs").setup { highlight = { enable = true } }
'';
plugins = with pkgs.vimPlugins; [
telescope-nvim
nvim-treesitter
nvim-lspconfig
gruvbox
];
};
# Use kickstart.nvim configuration from flake
programs.neovim-kickstart.enable = true;
programs.ssh = {
enable = true;
@@ -183,8 +195,8 @@
proxyJump = "_JumpHost";
};
"git" = {
hostname = "10.0.0.9";
port = 122;
hostname = "10.0.1.10";
port = 22;
user = "git";
};
};