Initial NixOS config
This commit is contained in:
21
.gitignore
vendored
Normal file
21
.gitignore
vendored
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
# Hardware configuration is machine-specific
|
||||||
|
# Uncomment if you don't want to track it
|
||||||
|
# hardware-configuration.nix
|
||||||
|
|
||||||
|
# Flake lock file - comment out if you want reproducible builds
|
||||||
|
# flake.lock
|
||||||
|
|
||||||
|
# Result symlinks from nix build
|
||||||
|
result
|
||||||
|
result-*
|
||||||
|
|
||||||
|
# Editor files
|
||||||
|
.vscode/
|
||||||
|
.idea/
|
||||||
|
*.swp
|
||||||
|
*.swo
|
||||||
|
*~
|
||||||
|
.DS_Store
|
||||||
|
|
||||||
|
# Temporary files
|
||||||
|
*.tmp
|
||||||
151
KEYBINDINGS.md
Normal file
151
KEYBINDINGS.md
Normal file
@@ -0,0 +1,151 @@
|
|||||||
|
# Hyprland Keybindings Cheat Sheet
|
||||||
|
|
||||||
|
## Modifier Key
|
||||||
|
**SUPER** = Windows/Command Key
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🚀 Launch Applications
|
||||||
|
|
||||||
|
| Keybinding | Action |
|
||||||
|
|------------|--------|
|
||||||
|
| `SUPER + Return` | Open Terminal (Kitty) |
|
||||||
|
| `SUPER + D` | Application Launcher (Wofi) |
|
||||||
|
| `SUPER + E` | File Manager (Thunar) |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🪟 Window Management
|
||||||
|
|
||||||
|
| Keybinding | Action |
|
||||||
|
|------------|--------|
|
||||||
|
| `SUPER + Q` | Close Window |
|
||||||
|
| `SUPER + V` | Toggle Floating |
|
||||||
|
| `SUPER + F` | Toggle Fullscreen |
|
||||||
|
| `SUPER + P` | Toggle Pseudo-tiling |
|
||||||
|
| `SUPER + J` | Toggle Split Direction |
|
||||||
|
| `SUPER + M` | Exit Hyprland |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🧭 Navigation
|
||||||
|
|
||||||
|
| Keybinding | Action |
|
||||||
|
|------------|--------|
|
||||||
|
| `SUPER + ↑` | Focus Up |
|
||||||
|
| `SUPER + ↓` | Focus Down |
|
||||||
|
| `SUPER + ←` | Focus Left |
|
||||||
|
| `SUPER + →` | Focus Right |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔢 Workspaces
|
||||||
|
|
||||||
|
### Switch Workspace
|
||||||
|
| Keybinding | Action |
|
||||||
|
|------------|--------|
|
||||||
|
| `SUPER + 1` | Workspace 1 |
|
||||||
|
| `SUPER + 2` | Workspace 2 |
|
||||||
|
| `SUPER + 3` | Workspace 3 |
|
||||||
|
| `SUPER + 4` | Workspace 4 |
|
||||||
|
| `SUPER + 5` | Workspace 5 |
|
||||||
|
| `SUPER + 6` | Workspace 6 |
|
||||||
|
| `SUPER + 7` | Workspace 7 |
|
||||||
|
| `SUPER + 8` | Workspace 8 |
|
||||||
|
| `SUPER + 9` | Workspace 9 |
|
||||||
|
| `SUPER + 0` | Workspace 10 |
|
||||||
|
|
||||||
|
### Move Window to Workspace
|
||||||
|
| Keybinding | Action |
|
||||||
|
|------------|--------|
|
||||||
|
| `SUPER + SHIFT + 1` | Move to Workspace 1 |
|
||||||
|
| `SUPER + SHIFT + 2` | Move to Workspace 2 |
|
||||||
|
| ... | ... |
|
||||||
|
| `SUPER + SHIFT + 0` | Move to Workspace 10 |
|
||||||
|
|
||||||
|
### Scroll Workspaces
|
||||||
|
| Keybinding | Action |
|
||||||
|
|------------|--------|
|
||||||
|
| `SUPER + Mouse Wheel Up` | Next Workspace |
|
||||||
|
| `SUPER + Mouse Wheel Down` | Previous Workspace |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🖱️ Mouse Actions
|
||||||
|
|
||||||
|
| Keybinding | Action |
|
||||||
|
|------------|--------|
|
||||||
|
| `SUPER + Left Click + Drag` | Move Window |
|
||||||
|
| `SUPER + Right Click + Drag` | Resize Window |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📸 Screenshots
|
||||||
|
|
||||||
|
| Keybinding | Action |
|
||||||
|
|------------|--------|
|
||||||
|
| `SUPER + SHIFT + S` | Screenshot (to clipboard) |
|
||||||
|
| `Print` | Screenshot (save to ~/Pictures) |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔊 Media Controls
|
||||||
|
|
||||||
|
| Keybinding | Action |
|
||||||
|
|------------|--------|
|
||||||
|
| `Volume Up Key` | Increase Volume |
|
||||||
|
| `Volume Down Key` | Decrease Volume |
|
||||||
|
| `Mute Key` | Toggle Mute |
|
||||||
|
| `Mic Mute Key` | Toggle Microphone Mute |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔆 Brightness
|
||||||
|
|
||||||
|
| Keybinding | Action |
|
||||||
|
|------------|--------|
|
||||||
|
| `Brightness Up Key` | Increase Brightness |
|
||||||
|
| `Brightness Down Key` | Decrease Brightness |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 💡 Tips
|
||||||
|
|
||||||
|
1. **First Time?** Press `SUPER + Return` to open a terminal
|
||||||
|
2. **Find Apps?** Press `SUPER + D` to search for applications
|
||||||
|
3. **Need Help?** Most settings are in `~/.config/nixos/home/hyprland.nix`
|
||||||
|
4. **Customize?** Edit the config and run `update` in terminal
|
||||||
|
5. **Stuck?** Press `SUPER + M` to exit Hyprland
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🛠️ Useful Commands
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Reload Hyprland config (from terminal)
|
||||||
|
hyprctl reload
|
||||||
|
|
||||||
|
# Check Hyprland info
|
||||||
|
hyprctl version
|
||||||
|
|
||||||
|
# List all windows
|
||||||
|
hyprctl clients
|
||||||
|
|
||||||
|
# View logs
|
||||||
|
cat /tmp/hypr/$(ls -t /tmp/hypr/ | head -n 1)/hyprland.log
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🎨 Customization
|
||||||
|
|
||||||
|
To change keybindings, edit: `~/.config/nixos/home/hyprland.nix`
|
||||||
|
|
||||||
|
Then rebuild:
|
||||||
|
```bash
|
||||||
|
update # or: sudo nixos-rebuild switch --flake ~/.config/nixos#HOSTNAME
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Pro Tip:** Print this cheat sheet or keep it handy while you learn Hyprland! 📄
|
||||||
234
PROJECT_OVERVIEW.md
Normal file
234
PROJECT_OVERVIEW.md
Normal file
@@ -0,0 +1,234 @@
|
|||||||
|
# NixOS + Hyprland Configuration - Project Overview
|
||||||
|
|
||||||
|
## 🎯 What This Is
|
||||||
|
|
||||||
|
This is a complete, production-ready NixOS configuration featuring Hyprland as a Wayland compositor. Everything is declared in code, making your entire operating system reproducible from a fresh install with a single command.
|
||||||
|
|
||||||
|
## 📦 What You're Getting
|
||||||
|
|
||||||
|
### Core System
|
||||||
|
- **NixOS** with Flakes enabled for reproducible builds
|
||||||
|
- **Hyprland** - Modern Wayland compositor with beautiful animations
|
||||||
|
- **Home Manager** - Declarative user environment management
|
||||||
|
- **Full Wayland Support** with XWayland fallback
|
||||||
|
|
||||||
|
### Desktop Environment
|
||||||
|
- **Waybar** - Highly customizable status bar
|
||||||
|
- **Wofi** - Application launcher
|
||||||
|
- **Dunst** - Notification daemon
|
||||||
|
- **Hyprpaper** - Wallpaper manager
|
||||||
|
- **SWWW** - Alternative animated wallpaper daemon
|
||||||
|
|
||||||
|
### Tools & Applications
|
||||||
|
- **Kitty & Alacritty** - Modern GPU-accelerated terminals
|
||||||
|
- **ZSH** with Oh-My-Zsh - Enhanced shell experience
|
||||||
|
- **Firefox** - Web browser
|
||||||
|
- **VSCode** - Code editor
|
||||||
|
- **Thunar** - File manager
|
||||||
|
- **Modern CLI tools** - ripgrep, fd, bat, eza, fzf, etc.
|
||||||
|
|
||||||
|
### System Features
|
||||||
|
- PipeWire audio system
|
||||||
|
- NetworkManager for networking
|
||||||
|
- Bluetooth support
|
||||||
|
- Printing support (CUPS)
|
||||||
|
- SSH server
|
||||||
|
- Graphics drivers setup
|
||||||
|
|
||||||
|
## 📁 File Structure Explained
|
||||||
|
|
||||||
|
```
|
||||||
|
nixos-config/
|
||||||
|
├── flake.nix # Main entry point - defines all inputs and outputs
|
||||||
|
├── configuration.nix # System-wide settings (bootloader, networking, users)
|
||||||
|
├── hardware-configuration.nix # Auto-generated hardware-specific settings
|
||||||
|
│
|
||||||
|
├── modules/
|
||||||
|
│ ├── system.nix # System packages and essential services
|
||||||
|
│ └── hyprland.nix # Hyprland system-level configuration
|
||||||
|
│
|
||||||
|
├── home/
|
||||||
|
│ ├── home.nix # User packages and general home-manager config
|
||||||
|
│ ├── hyprland.nix # Hyprland user settings, keybindings, appearance
|
||||||
|
│ └── waybar.nix # Status bar configuration and styling
|
||||||
|
│
|
||||||
|
├── bootstrap.sh # Automated setup script for fresh installs
|
||||||
|
├── README.md # Comprehensive documentation
|
||||||
|
├── SETUP.md # Quick setup guide
|
||||||
|
└── KEYBINDINGS.md # Keyboard shortcuts reference
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🚀 Quick Start Workflow
|
||||||
|
|
||||||
|
### 1. Push to Your Git Server
|
||||||
|
```bash
|
||||||
|
cd nixos-config
|
||||||
|
git init
|
||||||
|
git add .
|
||||||
|
git commit -m "Initial NixOS configuration"
|
||||||
|
git remote add origin https://git.cribdev.com/YOUR-USERNAME/nixos-config.git
|
||||||
|
git push -u origin main
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. Fresh Install (On New Machine)
|
||||||
|
```bash
|
||||||
|
# One command to rule them all
|
||||||
|
nix-shell -p git --run "bash <(curl -s https://git.cribdev.com/raw/YOUR-USERNAME/nixos-config/main/bootstrap.sh)"
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. What the Bootstrap Does
|
||||||
|
1. Installs git temporarily
|
||||||
|
2. Clones your configuration
|
||||||
|
3. Copies hardware-configuration.nix
|
||||||
|
4. Prompts for hostname and username
|
||||||
|
5. Updates configuration files
|
||||||
|
6. Optionally builds the system immediately
|
||||||
|
|
||||||
|
### 4. Result
|
||||||
|
After reboot, you have a fully configured system with Hyprland!
|
||||||
|
|
||||||
|
## 🔧 Customization Points
|
||||||
|
|
||||||
|
### Before First Push
|
||||||
|
|
||||||
|
1. **Edit `flake.nix`:**
|
||||||
|
- Change hostname from "myhost"
|
||||||
|
- Change username from "yourusername"
|
||||||
|
|
||||||
|
2. **Edit `configuration.nix`:**
|
||||||
|
- Set your timezone (currently Europe/Oslo)
|
||||||
|
- Adjust locale settings
|
||||||
|
- Configure your user account
|
||||||
|
|
||||||
|
3. **Edit `home/home.nix`:**
|
||||||
|
- Set git username and email
|
||||||
|
- Add/remove packages you want
|
||||||
|
|
||||||
|
4. **Edit `home/hyprland.nix`:**
|
||||||
|
- Customize keybindings
|
||||||
|
- Adjust colors and appearance
|
||||||
|
- Configure monitor settings
|
||||||
|
|
||||||
|
5. **Edit `bootstrap.sh`:**
|
||||||
|
- Update the GIT_REPO variable with your actual git URL
|
||||||
|
|
||||||
|
### After Installation
|
||||||
|
|
||||||
|
You can always modify the configuration and rebuild:
|
||||||
|
```bash
|
||||||
|
cd ~/.config/nixos
|
||||||
|
# Make your changes
|
||||||
|
sudo nixos-rebuild switch --flake .#HOSTNAME
|
||||||
|
```
|
||||||
|
|
||||||
|
Or use the convenient alias after first build:
|
||||||
|
```bash
|
||||||
|
update
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🎨 Ricing Capabilities
|
||||||
|
|
||||||
|
This configuration includes extensive customization options:
|
||||||
|
|
||||||
|
### Visual Customization
|
||||||
|
- **Window Decorations**: Rounded corners, borders, shadows
|
||||||
|
- **Animations**: Smooth transitions and effects
|
||||||
|
- **Colors**: Fully customizable color schemes
|
||||||
|
- **Transparency**: Blur effects and opacity settings
|
||||||
|
- **Status Bar**: Custom Waybar themes
|
||||||
|
|
||||||
|
### Included Ricing Tools
|
||||||
|
- Hyprpaper (wallpapers)
|
||||||
|
- SWWW (animated wallpapers)
|
||||||
|
- Waybar (customizable bar)
|
||||||
|
- Dunst (notification styling)
|
||||||
|
- Wofi (launcher themes)
|
||||||
|
- GTK/Qt theme support
|
||||||
|
|
||||||
|
### Where to Customize
|
||||||
|
- **Colors**: `home/hyprland.nix` (general section)
|
||||||
|
- **Waybar Style**: `home/waybar.nix` (style section)
|
||||||
|
- **Animations**: `home/hyprland.nix` (animations section)
|
||||||
|
- **Terminal**: `home/home.nix` (kitty settings)
|
||||||
|
|
||||||
|
## 🔑 Key Features
|
||||||
|
|
||||||
|
### Declarative
|
||||||
|
Everything is code. No hidden state. Reproducible across machines.
|
||||||
|
|
||||||
|
### Atomic Updates
|
||||||
|
Changes are atomic - either they work completely or rollback automatically.
|
||||||
|
|
||||||
|
### Rollback Capability
|
||||||
|
Every build creates a generation. Easy to rollback if something breaks.
|
||||||
|
|
||||||
|
### Reproducible
|
||||||
|
Same configuration = same system, regardless of when/where you build.
|
||||||
|
|
||||||
|
### Version Controlled
|
||||||
|
Your entire OS is in git. Fork it, branch it, merge configurations.
|
||||||
|
|
||||||
|
## 📚 Next Steps
|
||||||
|
|
||||||
|
1. **Personalize** the configuration files
|
||||||
|
2. **Push** to your git server
|
||||||
|
3. **Install** NixOS on target machine
|
||||||
|
4. **Run** bootstrap script
|
||||||
|
5. **Enjoy** your custom system!
|
||||||
|
|
||||||
|
## 🐛 Troubleshooting
|
||||||
|
|
||||||
|
### Common Issues
|
||||||
|
|
||||||
|
**Hyprland won't start**
|
||||||
|
- Check logs: `journalctl -xe`
|
||||||
|
- Verify GPU drivers in `hardware-configuration.nix`
|
||||||
|
|
||||||
|
**Monitor configuration wrong**
|
||||||
|
- Edit `home/hyprland.nix` monitor settings
|
||||||
|
- Use `hyprctl monitors` to see detected monitors
|
||||||
|
|
||||||
|
**Packages not found**
|
||||||
|
- Update flake: `nix flake update`
|
||||||
|
- Rebuild: `sudo nixos-rebuild switch --flake .#HOSTNAME`
|
||||||
|
|
||||||
|
**Need different keyboard layout**
|
||||||
|
- Edit `home/hyprland.nix` input section
|
||||||
|
- Change `kb_layout` value
|
||||||
|
|
||||||
|
## 🎓 Learning Resources
|
||||||
|
|
||||||
|
- [NixOS Manual](https://nixos.org/manual/nixos/stable/)
|
||||||
|
- [Hyprland Wiki](https://wiki.hyprland.org/)
|
||||||
|
- [Home Manager Docs](https://nix-community.github.io/home-manager/)
|
||||||
|
- [NixOS Search](https://search.nixos.org/) - Find packages
|
||||||
|
|
||||||
|
## 🌟 Why This Approach?
|
||||||
|
|
||||||
|
**Traditional Linux Setup:**
|
||||||
|
- Install OS
|
||||||
|
- Install packages one by one
|
||||||
|
- Configure everything manually
|
||||||
|
- Hope you documented it
|
||||||
|
- Pray when setting up a new machine
|
||||||
|
|
||||||
|
**This NixOS Setup:**
|
||||||
|
- Install NixOS (minimal)
|
||||||
|
- Run one command
|
||||||
|
- Get coffee ☕
|
||||||
|
- Everything configured automatically
|
||||||
|
- Reproducible on any machine
|
||||||
|
|
||||||
|
## 💡 Pro Tips
|
||||||
|
|
||||||
|
1. **Always commit changes** before rebuilding
|
||||||
|
2. **Test on a VM first** for major changes
|
||||||
|
3. **Keep hardware-configuration.nix** separate per machine
|
||||||
|
4. **Use branches** for experimental configurations
|
||||||
|
5. **Document** your customizations in comments
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**You now have a fully declarative, reproducible, version-controlled operating system! 🎉**
|
||||||
|
|
||||||
|
Any questions or issues? Check the README.md for detailed information.
|
||||||
244
README.md
Normal file
244
README.md
Normal file
@@ -0,0 +1,244 @@
|
|||||||
|
# NixOS Configuration with Hyprland
|
||||||
|
|
||||||
|
A fully declarative NixOS configuration featuring Hyprland as the Wayland compositor with extensive ricing capabilities.
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
- **Hyprland**: Modern Wayland compositor with beautiful animations
|
||||||
|
- **Home Manager**: User-level package and dotfile management
|
||||||
|
- **Flakes**: Reproducible, declarative configuration
|
||||||
|
- **Full Wayland Support**: Native Wayland applications and XWayland compatibility
|
||||||
|
- **Ricing Tools**: Waybar, Hyprpaper, Dunst, and more for customization
|
||||||
|
- **Development Ready**: Includes essential development tools
|
||||||
|
|
||||||
|
## Quick Start (Fresh Install)
|
||||||
|
|
||||||
|
On a fresh NixOS installation, run:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
nix-shell -p git --run "bash <(curl -s https://git.cribdev.com/raw/your-username/nixos-config/main/bootstrap.sh)"
|
||||||
|
```
|
||||||
|
|
||||||
|
Or manually:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Install git
|
||||||
|
nix-shell -p git
|
||||||
|
|
||||||
|
# Clone this repository
|
||||||
|
git clone https://git.cribdev.com/your-username/nixos-config ~/.config/nixos
|
||||||
|
|
||||||
|
# Copy hardware configuration
|
||||||
|
sudo cp /etc/nixos/hardware-configuration.nix ~/.config/nixos/
|
||||||
|
|
||||||
|
# Edit configuration files (see below)
|
||||||
|
cd ~/.config/nixos
|
||||||
|
|
||||||
|
# Build and apply
|
||||||
|
sudo nixos-rebuild switch --flake .#myhost
|
||||||
|
```
|
||||||
|
|
||||||
|
## Configuration Structure
|
||||||
|
|
||||||
|
```
|
||||||
|
nixos-config/
|
||||||
|
├── flake.nix # Main flake configuration
|
||||||
|
├── configuration.nix # System-level configuration
|
||||||
|
├── hardware-configuration.nix # Auto-generated hardware config
|
||||||
|
├── bootstrap.sh # Bootstrap script for fresh installs
|
||||||
|
├── modules/
|
||||||
|
│ ├── system.nix # System packages and services
|
||||||
|
│ └── hyprland.nix # Hyprland-specific configuration
|
||||||
|
└── home/
|
||||||
|
├── home.nix # Home Manager user configuration
|
||||||
|
├── hyprland.nix # Hyprland user settings and keybindings
|
||||||
|
└── waybar.nix # Waybar status bar configuration
|
||||||
|
```
|
||||||
|
|
||||||
|
## Before First Build
|
||||||
|
|
||||||
|
Edit these files with your information:
|
||||||
|
|
||||||
|
### 1. `flake.nix`
|
||||||
|
- Replace `myhost` with your hostname
|
||||||
|
- Replace `yourusername` with your username
|
||||||
|
|
||||||
|
### 2. `configuration.nix`
|
||||||
|
- Set your `networking.hostName`
|
||||||
|
- Set your `time.timeZone`
|
||||||
|
- Adjust locale settings if needed
|
||||||
|
- Update username in `users.users.yourusername`
|
||||||
|
|
||||||
|
### 3. `home/home.nix`
|
||||||
|
- Update `home.username` and `home.homeDirectory`
|
||||||
|
- Configure Git with your name and email
|
||||||
|
- Adjust package list to your needs
|
||||||
|
|
||||||
|
### 4. `home/hyprland.nix`
|
||||||
|
- Configure monitor settings
|
||||||
|
- Customize keybindings
|
||||||
|
- Adjust animations and appearance
|
||||||
|
|
||||||
|
## Included Software
|
||||||
|
|
||||||
|
### System Tools
|
||||||
|
- NetworkManager for networking
|
||||||
|
- PipeWire for audio
|
||||||
|
- Bluetooth support
|
||||||
|
- SSH server
|
||||||
|
- CUPS for printing
|
||||||
|
|
||||||
|
### Desktop Environment
|
||||||
|
- Hyprland (Wayland compositor)
|
||||||
|
- Waybar (status bar)
|
||||||
|
- Wofi (application launcher)
|
||||||
|
- Dunst (notifications)
|
||||||
|
- Hyprpaper/SWWW (wallpapers)
|
||||||
|
|
||||||
|
### Terminal & Shell
|
||||||
|
- Kitty & Alacritty terminals
|
||||||
|
- Zsh with Oh-My-Zsh
|
||||||
|
- Modern CLI tools (eza, bat, ripgrep, fd, fzf)
|
||||||
|
|
||||||
|
### Applications
|
||||||
|
- Firefox browser
|
||||||
|
- VSCode editor
|
||||||
|
- Thunar file manager
|
||||||
|
- MPV media player
|
||||||
|
- And more...
|
||||||
|
|
||||||
|
## Hyprland Keybindings
|
||||||
|
|
||||||
|
Default modifier key: `SUPER` (Windows key)
|
||||||
|
|
||||||
|
### Basic
|
||||||
|
- `SUPER + Return` - Launch terminal (Kitty)
|
||||||
|
- `SUPER + D` - Launch application launcher (Wofi)
|
||||||
|
- `SUPER + Q` - Close active window
|
||||||
|
- `SUPER + M` - Exit Hyprland
|
||||||
|
- `SUPER + E` - Open file manager (Thunar)
|
||||||
|
- `SUPER + V` - Toggle floating mode
|
||||||
|
- `SUPER + F` - Toggle fullscreen
|
||||||
|
|
||||||
|
### Window Management
|
||||||
|
- `SUPER + Arrow Keys` - Move focus
|
||||||
|
- `SUPER + 1-9` - Switch to workspace
|
||||||
|
- `SUPER + SHIFT + 1-9` - Move window to workspace
|
||||||
|
- `SUPER + Mouse Left` - Move window
|
||||||
|
- `SUPER + Mouse Right` - Resize window
|
||||||
|
|
||||||
|
### Screenshots
|
||||||
|
- `SUPER + SHIFT + S` - Screenshot selection to clipboard
|
||||||
|
- `Print` - Screenshot selection to ~/Pictures
|
||||||
|
|
||||||
|
### Media Keys
|
||||||
|
- Volume up/down/mute
|
||||||
|
- Brightness up/down
|
||||||
|
- All media keys supported
|
||||||
|
|
||||||
|
## Customization
|
||||||
|
|
||||||
|
### Themes and Appearance
|
||||||
|
|
||||||
|
The configuration uses the Catppuccin color scheme by default. To customize:
|
||||||
|
|
||||||
|
1. **Waybar**: Edit `home/waybar.nix` - Change colors in the `style` section
|
||||||
|
2. **Hyprland**: Edit `home/hyprland.nix` - Modify colors in `general` and `decoration` sections
|
||||||
|
3. **Terminal**: Edit `home/home.nix` - Change Kitty theme and appearance
|
||||||
|
|
||||||
|
### Wallpapers
|
||||||
|
|
||||||
|
Place your wallpapers in `~/wallpapers/`. The default wallpaper should be `~/wallpapers/default.jpg`.
|
||||||
|
|
||||||
|
To change wallpapers on the fly:
|
||||||
|
```bash
|
||||||
|
hyprctl hyprpaper wallpaper "monitor,~/wallpapers/your-wallpaper.jpg"
|
||||||
|
```
|
||||||
|
|
||||||
|
### Additional Packages
|
||||||
|
|
||||||
|
To add more packages:
|
||||||
|
|
||||||
|
**System-wide**: Edit `modules/system.nix` and add to `environment.systemPackages`
|
||||||
|
**User-level**: Edit `home/home.nix` and add to `home.packages`
|
||||||
|
|
||||||
|
## Updating the System
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Update flake inputs
|
||||||
|
nix flake update
|
||||||
|
|
||||||
|
# Rebuild with new configuration
|
||||||
|
sudo nixos-rebuild switch --flake ~/.config/nixos#myhost
|
||||||
|
|
||||||
|
# Or use the alias (after first build)
|
||||||
|
update
|
||||||
|
```
|
||||||
|
|
||||||
|
## Maintenance
|
||||||
|
|
||||||
|
### Garbage Collection
|
||||||
|
```bash
|
||||||
|
# Remove old generations older than 7 days
|
||||||
|
sudo nix-collect-garbage --delete-older-than 7d
|
||||||
|
|
||||||
|
# Clean home-manager generations
|
||||||
|
home-manager expire-generations -7d
|
||||||
|
```
|
||||||
|
|
||||||
|
### Rollback
|
||||||
|
```bash
|
||||||
|
# List generations
|
||||||
|
sudo nix-env --list-generations --profile /nix/var/nix/profiles/system
|
||||||
|
|
||||||
|
# Rollback to previous generation
|
||||||
|
sudo nixos-rebuild switch --rollback
|
||||||
|
```
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
### Black screen after login
|
||||||
|
- Check if Hyprland is starting: `journalctl -xe`
|
||||||
|
- Verify graphics drivers are installed
|
||||||
|
- Check `hardware-configuration.nix` for GPU settings
|
||||||
|
|
||||||
|
### Waybar not appearing
|
||||||
|
- Restart Waybar: `killall waybar && waybar &`
|
||||||
|
- Check logs: `journalctl --user -u waybar`
|
||||||
|
|
||||||
|
### No audio
|
||||||
|
- Check PipeWire status: `systemctl --user status pipewire`
|
||||||
|
- Verify audio device: `wpctl status`
|
||||||
|
|
||||||
|
### Monitor configuration
|
||||||
|
Edit `home/hyprland.nix` and adjust the `monitor` setting:
|
||||||
|
```nix
|
||||||
|
monitor = "DP-1,1920x1080@144,0x0,1";
|
||||||
|
```
|
||||||
|
|
||||||
|
## Useful Commands
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Check Hyprland version
|
||||||
|
hyprctl version
|
||||||
|
|
||||||
|
# List all windows
|
||||||
|
hyprctl clients
|
||||||
|
|
||||||
|
# Reload Hyprland config
|
||||||
|
hyprctl reload
|
||||||
|
|
||||||
|
# View Hyprland logs
|
||||||
|
cat /tmp/hypr/$(ls -t /tmp/hypr/ | head -n 1)/hyprland.log
|
||||||
|
```
|
||||||
|
|
||||||
|
## Resources
|
||||||
|
|
||||||
|
- [NixOS Manual](https://nixos.org/manual/nixos/stable/)
|
||||||
|
- [Home Manager Manual](https://nix-community.github.io/home-manager/)
|
||||||
|
- [Hyprland Wiki](https://wiki.hyprland.org/)
|
||||||
|
- [NixOS Wiki](https://nixos.wiki/)
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
Feel free to use and modify this configuration for your own needs.
|
||||||
149
SETUP.md
Normal file
149
SETUP.md
Normal file
@@ -0,0 +1,149 @@
|
|||||||
|
# Quick Setup Guide
|
||||||
|
|
||||||
|
## Initial Setup on Fresh NixOS Installation
|
||||||
|
|
||||||
|
### Method 1: One-Line Bootstrap (Recommended)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
nix-shell -p git --run "bash <(curl -s https://git.cribdev.com/raw/YOUR-USERNAME/nixos-config/main/bootstrap.sh)"
|
||||||
|
```
|
||||||
|
|
||||||
|
Replace `YOUR-USERNAME` with your actual git username.
|
||||||
|
|
||||||
|
### Method 2: Manual Setup
|
||||||
|
|
||||||
|
1. **Install git temporarily:**
|
||||||
|
```bash
|
||||||
|
nix-shell -p git
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Clone your configuration:**
|
||||||
|
```bash
|
||||||
|
git clone https://git.cribdev.com/YOUR-USERNAME/nixos-config ~/.config/nixos
|
||||||
|
cd ~/.config/nixos
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **Copy hardware configuration:**
|
||||||
|
```bash
|
||||||
|
sudo cp /etc/nixos/hardware-configuration.nix ~/.config/nixos/
|
||||||
|
```
|
||||||
|
|
||||||
|
4. **Edit configuration files:**
|
||||||
|
- Open `flake.nix` and replace:
|
||||||
|
- `myhost` with your hostname
|
||||||
|
- `yourusername` with your username
|
||||||
|
|
||||||
|
- Open `configuration.nix` and set:
|
||||||
|
- `networking.hostName`
|
||||||
|
- `time.timeZone`
|
||||||
|
- User account details
|
||||||
|
|
||||||
|
- Open `home/home.nix` and set:
|
||||||
|
- Git username and email
|
||||||
|
- Any other personal preferences
|
||||||
|
|
||||||
|
5. **Build and apply:**
|
||||||
|
```bash
|
||||||
|
sudo nixos-rebuild switch --flake ~/.config/nixos#YOURHOSTNAME
|
||||||
|
```
|
||||||
|
|
||||||
|
6. **Reboot:**
|
||||||
|
```bash
|
||||||
|
reboot
|
||||||
|
```
|
||||||
|
|
||||||
|
## Post-Installation
|
||||||
|
|
||||||
|
### Add a Wallpaper
|
||||||
|
```bash
|
||||||
|
mkdir -p ~/wallpapers
|
||||||
|
# Copy your wallpaper to ~/wallpapers/default.jpg
|
||||||
|
```
|
||||||
|
|
||||||
|
### Test Hyprland
|
||||||
|
After reboot, you should be greeted with a login manager. Log in and Hyprland should start automatically.
|
||||||
|
|
||||||
|
### Useful First Commands
|
||||||
|
```bash
|
||||||
|
# Open terminal: SUPER + Return
|
||||||
|
# Open app launcher: SUPER + D
|
||||||
|
# Open file manager: SUPER + E
|
||||||
|
```
|
||||||
|
|
||||||
|
## Pushing to Your Git Server
|
||||||
|
|
||||||
|
### First Time Setup
|
||||||
|
|
||||||
|
1. **Initialize git (if not already done):**
|
||||||
|
```bash
|
||||||
|
cd ~/.config/nixos
|
||||||
|
git init
|
||||||
|
git add .
|
||||||
|
git commit -m "Initial NixOS configuration"
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Add your remote:**
|
||||||
|
```bash
|
||||||
|
git remote add origin https://git.cribdev.com/YOUR-USERNAME/nixos-config.git
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **Push to your server:**
|
||||||
|
```bash
|
||||||
|
git push -u origin main
|
||||||
|
```
|
||||||
|
|
||||||
|
### Updating Your Configuration
|
||||||
|
|
||||||
|
After making changes:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd ~/.config/nixos
|
||||||
|
git add .
|
||||||
|
git commit -m "Description of changes"
|
||||||
|
git push
|
||||||
|
```
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
### "Hardware configuration not found"
|
||||||
|
Generate it with:
|
||||||
|
```bash
|
||||||
|
sudo nixos-generate-config --show-hardware-config > ~/.config/nixos/hardware-configuration.nix
|
||||||
|
```
|
||||||
|
|
||||||
|
### "Flake inputs need to be updated"
|
||||||
|
```bash
|
||||||
|
cd ~/.config/nixos
|
||||||
|
nix flake update
|
||||||
|
sudo nixos-rebuild switch --flake .#YOURHOSTNAME
|
||||||
|
```
|
||||||
|
|
||||||
|
### Hyprland doesn't start
|
||||||
|
Check logs:
|
||||||
|
```bash
|
||||||
|
journalctl -xe
|
||||||
|
cat /tmp/hypr/*/hyprland.log
|
||||||
|
```
|
||||||
|
|
||||||
|
## What You Get
|
||||||
|
|
||||||
|
✅ Full Wayland desktop with Hyprland
|
||||||
|
✅ Beautiful animations and effects
|
||||||
|
✅ Waybar status bar
|
||||||
|
✅ Wofi application launcher
|
||||||
|
✅ Dunst notifications
|
||||||
|
✅ Screenshot tools (grim + slurp)
|
||||||
|
✅ Modern terminal (Kitty)
|
||||||
|
✅ Essential CLI tools
|
||||||
|
✅ Development environment ready
|
||||||
|
✅ Fully reproducible system
|
||||||
|
|
||||||
|
## Next Steps
|
||||||
|
|
||||||
|
- Customize Waybar appearance in `home/waybar.nix`
|
||||||
|
- Adjust Hyprland settings in `home/hyprland.nix`
|
||||||
|
- Add more packages in `home/home.nix` or `modules/system.nix`
|
||||||
|
- Set up your wallpapers
|
||||||
|
- Configure your applications
|
||||||
|
|
||||||
|
Enjoy your new NixOS + Hyprland setup! 🎉
|
||||||
99
bootstrap.sh
Normal file
99
bootstrap.sh
Normal file
@@ -0,0 +1,99 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
# Bootstrap script for NixOS with Hyprland configuration
|
||||||
|
# Run this on a fresh NixOS install to pull and apply your configuration
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
echo "================================================"
|
||||||
|
echo "NixOS Hyprland Configuration Bootstrap"
|
||||||
|
echo "================================================"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# Configuration variables
|
||||||
|
GIT_REPO="https://git.cribdev.com/crib/nixos-config.git"
|
||||||
|
CONFIG_DIR="$HOME/.config/nixos"
|
||||||
|
HOSTNAME=$(hostname)
|
||||||
|
|
||||||
|
# Colors
|
||||||
|
RED='\033[0;31m'
|
||||||
|
GREEN='\033[0;32m'
|
||||||
|
YELLOW='\033[1;33m'
|
||||||
|
NC='\033[0m' # No Color
|
||||||
|
|
||||||
|
echo -e "${YELLOW}Step 1: Installing Git (if not already installed)${NC}"
|
||||||
|
if ! command -v git &> /dev/null; then
|
||||||
|
nix-shell -p git --run "echo 'Git temporarily available'"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo -e "${YELLOW}Step 2: Cloning configuration from ${GIT_REPO}${NC}"
|
||||||
|
if [ -d "$CONFIG_DIR" ]; then
|
||||||
|
echo -e "${RED}Configuration directory already exists at $CONFIG_DIR${NC}"
|
||||||
|
read -p "Do you want to remove it and clone fresh? (y/N): " -n 1 -r
|
||||||
|
echo
|
||||||
|
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
||||||
|
rm -rf "$CONFIG_DIR"
|
||||||
|
else
|
||||||
|
echo "Aborting..."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
mkdir -p "$HOME/.config"
|
||||||
|
git clone "$GIT_REPO" "$CONFIG_DIR"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo -e "${YELLOW}Step 3: Copying hardware configuration${NC}"
|
||||||
|
if [ -f /etc/nixos/hardware-configuration.nix ]; then
|
||||||
|
cp /etc/nixos/hardware-configuration.nix "$CONFIG_DIR/hardware-configuration.nix"
|
||||||
|
echo -e "${GREEN}Hardware configuration copied${NC}"
|
||||||
|
else
|
||||||
|
echo -e "${RED}Warning: /etc/nixos/hardware-configuration.nix not found!${NC}"
|
||||||
|
echo "You'll need to generate it with: nixos-generate-config"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo -e "${YELLOW}Step 4: Updating hostname in configuration${NC}"
|
||||||
|
echo "Current hostname: $HOSTNAME"
|
||||||
|
read -p "Press enter to use this hostname, or type a new one: " NEW_HOSTNAME
|
||||||
|
if [ ! -z "$NEW_HOSTNAME" ]; then
|
||||||
|
HOSTNAME="$NEW_HOSTNAME"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Update hostname in flake.nix and configuration.nix
|
||||||
|
sed -i "s/myhost/$HOSTNAME/g" "$CONFIG_DIR/flake.nix"
|
||||||
|
sed -i "s/myhost/$HOSTNAME/g" "$CONFIG_DIR/configuration.nix"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo -e "${YELLOW}Step 5: Update username${NC}"
|
||||||
|
read -p "Enter your username: " USERNAME
|
||||||
|
sed -i "s/yourusername/$USERNAME/g" "$CONFIG_DIR/flake.nix"
|
||||||
|
sed -i "s/yourusername/$USERNAME/g" "$CONFIG_DIR/configuration.nix"
|
||||||
|
sed -i "s/yourusername/$USERNAME/g" "$CONFIG_DIR/home/home.nix"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo -e "${YELLOW}Step 6: Creating wallpapers directory${NC}"
|
||||||
|
mkdir -p "$HOME/wallpapers"
|
||||||
|
echo "Place your wallpaper at ~/wallpapers/default.jpg"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo -e "${GREEN}Configuration ready!${NC}"
|
||||||
|
echo ""
|
||||||
|
echo "Next steps:"
|
||||||
|
echo "1. Review the configuration files in $CONFIG_DIR"
|
||||||
|
echo "2. Edit configuration.nix to set your timezone and locale"
|
||||||
|
echo "3. Edit home/home.nix to configure your git name/email"
|
||||||
|
echo "4. Run: sudo nixos-rebuild switch --flake $CONFIG_DIR#$HOSTNAME"
|
||||||
|
echo ""
|
||||||
|
echo -e "${YELLOW}Would you like to build now? (y/N):${NC}"
|
||||||
|
read -p "" -n 1 -r
|
||||||
|
echo
|
||||||
|
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
||||||
|
echo "Building NixOS configuration..."
|
||||||
|
sudo nixos-rebuild switch --flake "$CONFIG_DIR#$HOSTNAME"
|
||||||
|
echo ""
|
||||||
|
echo -e "${GREEN}Build complete! Please reboot your system.${NC}"
|
||||||
|
else
|
||||||
|
echo "You can build later with:"
|
||||||
|
echo "sudo nixos-rebuild switch --flake $CONFIG_DIR#$HOSTNAME"
|
||||||
|
fi
|
||||||
51
configuration.nix
Normal file
51
configuration.nix
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
{ config, pkgs, inputs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
./hardware-configuration.nix
|
||||||
|
./modules/system.nix
|
||||||
|
./modules/hyprland.nix
|
||||||
|
];
|
||||||
|
|
||||||
|
# Bootloader
|
||||||
|
boot.loader.systemd-boot.enable = true;
|
||||||
|
boot.loader.efi.canTouchEfiVariables = true;
|
||||||
|
|
||||||
|
# Networking
|
||||||
|
networking.hostName = "myhost"; # Change this to your hostname
|
||||||
|
networking.networkmanager.enable = true;
|
||||||
|
|
||||||
|
# Time zone
|
||||||
|
time.timeZone = "Europe/Oslo"; # Adjust to your timezone
|
||||||
|
|
||||||
|
# Locale
|
||||||
|
i18n.defaultLocale = "en_US.UTF-8";
|
||||||
|
i18n.extraLocaleSettings = {
|
||||||
|
LC_ADDRESS = "nb_NO.UTF-8";
|
||||||
|
LC_IDENTIFICATION = "nb_NO.UTF-8";
|
||||||
|
LC_MEASUREMENT = "nb_NO.UTF-8";
|
||||||
|
LC_MONETARY = "nb_NO.UTF-8";
|
||||||
|
LC_NAME = "nb_NO.UTF-8";
|
||||||
|
LC_NUMERIC = "nb_NO.UTF-8";
|
||||||
|
LC_PAPER = "nb_NO.UTF-8";
|
||||||
|
LC_TELEPHONE = "nb_NO.UTF-8";
|
||||||
|
LC_TIME = "nb_NO.UTF-8";
|
||||||
|
};
|
||||||
|
|
||||||
|
# Enable flakes
|
||||||
|
nix.settings.experimental-features = [ "nix-command" "flakes" ];
|
||||||
|
|
||||||
|
# User account
|
||||||
|
users.users.crib = {
|
||||||
|
isNormalUser = true;
|
||||||
|
description = "Your Name";
|
||||||
|
extraGroups = [ "networkmanager" "wheel" "video" "audio" ];
|
||||||
|
shell = pkgs.zsh;
|
||||||
|
};
|
||||||
|
|
||||||
|
# Allow unfree packages
|
||||||
|
nixpkgs.config.allowUnfree = true;
|
||||||
|
|
||||||
|
# System version
|
||||||
|
system.stateVersion = "24.05"; # Don't change this
|
||||||
|
}
|
||||||
35
flake.nix
Normal file
35
flake.nix
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
{
|
||||||
|
description = "NixOS Configuration with Hyprland";
|
||||||
|
|
||||||
|
inputs = {
|
||||||
|
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
|
||||||
|
|
||||||
|
home-manager = {
|
||||||
|
url = "github:nix-community/home-manager";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
|
||||||
|
hyprland.url = "github:hyprwm/Hyprland";
|
||||||
|
};
|
||||||
|
|
||||||
|
outputs = { self, nixpkgs, home-manager, hyprland, ... }@inputs: {
|
||||||
|
nixosConfigurations = {
|
||||||
|
# Replace 'myhost' with your hostname
|
||||||
|
cribnix = nixpkgs.lib.nixosSystem {
|
||||||
|
system = "x86_64-linux";
|
||||||
|
specialArgs = { inherit inputs; };
|
||||||
|
modules = [
|
||||||
|
./configuration.nix
|
||||||
|
|
||||||
|
home-manager.nixosModules.home-manager
|
||||||
|
{
|
||||||
|
home-manager.useGlobalPkgs = true;
|
||||||
|
home-manager.useUserPackages = true;
|
||||||
|
home-manager.users.crib = import ./home/home.nix;
|
||||||
|
home-manager.extraSpecialArgs = { inherit inputs; };
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
41
hardware-configuration.nix
Normal file
41
hardware-configuration.nix
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
# This is a template hardware configuration file
|
||||||
|
# On a fresh install, this will be replaced by the actual hardware configuration
|
||||||
|
# generated by nixos-generate-config or copied from /etc/nixos/hardware-configuration.nix
|
||||||
|
|
||||||
|
{ config, lib, pkgs, modulesPath, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
(modulesPath + "/installer/scan/not-detected.nix")
|
||||||
|
];
|
||||||
|
|
||||||
|
# This is a placeholder - it will be replaced during bootstrap
|
||||||
|
# Your actual hardware configuration will be generated based on your system
|
||||||
|
|
||||||
|
boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "nvme" "usb_storage" "sd_mod" ];
|
||||||
|
boot.initrd.kernelModules = [ ];
|
||||||
|
boot.kernelModules = [ "kvm-intel" ];
|
||||||
|
boot.extraModulePackages = [ ];
|
||||||
|
|
||||||
|
fileSystems."/" = {
|
||||||
|
device = "/dev/disk/by-label/nixos";
|
||||||
|
fsType = "ext4";
|
||||||
|
};
|
||||||
|
|
||||||
|
fileSystems."/boot" = {
|
||||||
|
device = "/dev/disk/by-label/boot";
|
||||||
|
fsType = "vfat";
|
||||||
|
};
|
||||||
|
|
||||||
|
swapDevices = [ ];
|
||||||
|
|
||||||
|
# Enable GPU support (uncomment what matches your hardware)
|
||||||
|
# hardware.opengl.extraPackages = with pkgs; [
|
||||||
|
# intel-media-driver # For Intel GPUs
|
||||||
|
# vaapiIntel # For Intel GPUs
|
||||||
|
# vaapiVdpau # For AMD/NVIDIA
|
||||||
|
# ];
|
||||||
|
|
||||||
|
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
||||||
|
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
||||||
|
}
|
||||||
83
home/home.nix
Normal file
83
home/home.nix
Normal file
@@ -0,0 +1,83 @@
|
|||||||
|
{ config, pkgs, inputs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
# Home Manager needs a bit of information about you and the paths it should manage
|
||||||
|
home.username = "yourusername";
|
||||||
|
home.homeDirectory = "/home/yourusername";
|
||||||
|
|
||||||
|
# Packages to install for this user
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
# Browsers
|
||||||
|
firefox
|
||||||
|
|
||||||
|
# Communication
|
||||||
|
discord
|
||||||
|
|
||||||
|
# Media
|
||||||
|
mpv
|
||||||
|
|
||||||
|
# Text editors
|
||||||
|
vscode
|
||||||
|
|
||||||
|
# Terminal tools
|
||||||
|
neofetch
|
||||||
|
|
||||||
|
# Additional ricing tools
|
||||||
|
cava # Audio visualizer
|
||||||
|
cmatrix # Matrix effect
|
||||||
|
pipes # Animated pipes
|
||||||
|
];
|
||||||
|
|
||||||
|
# Import Hyprland home config
|
||||||
|
imports = [
|
||||||
|
./hyprland.nix
|
||||||
|
./waybar.nix
|
||||||
|
];
|
||||||
|
|
||||||
|
# Git configuration
|
||||||
|
programs.git = {
|
||||||
|
enable = true;
|
||||||
|
userName = "crib";
|
||||||
|
userEmail = "haugseth.martin@gmail.com";
|
||||||
|
};
|
||||||
|
|
||||||
|
# ZSH configuration
|
||||||
|
programs.zsh = {
|
||||||
|
enable = true;
|
||||||
|
enableCompletion = true;
|
||||||
|
autosuggestion.enable = true;
|
||||||
|
syntaxHighlighting.enable = true;
|
||||||
|
|
||||||
|
shellAliases = {
|
||||||
|
ll = "eza -la";
|
||||||
|
ls = "eza";
|
||||||
|
cat = "bat";
|
||||||
|
vim = "nvim";
|
||||||
|
update = "sudo nixos-rebuild switch --flake ~/.config/nixos#myhost";
|
||||||
|
};
|
||||||
|
|
||||||
|
oh-my-zsh = {
|
||||||
|
enable = true;
|
||||||
|
theme = "robbyrussell";
|
||||||
|
plugins = [ "git" "sudo" "docker" "kubectl" ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# Kitty terminal configuration
|
||||||
|
programs.kitty = {
|
||||||
|
enable = true;
|
||||||
|
theme = "Tokyo Night";
|
||||||
|
font.name = "JetBrainsMono Nerd Font";
|
||||||
|
font.size = 12;
|
||||||
|
settings = {
|
||||||
|
background_opacity = "0.9";
|
||||||
|
confirm_os_window_close = 0;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# This value determines the Home Manager release
|
||||||
|
home.stateVersion = "24.05";
|
||||||
|
|
||||||
|
# Let Home Manager install and manage itself
|
||||||
|
programs.home-manager.enable = true;
|
||||||
|
}
|
||||||
194
home/hyprland.nix
Normal file
194
home/hyprland.nix
Normal file
@@ -0,0 +1,194 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
wayland.windowManager.hyprland = {
|
||||||
|
enable = true;
|
||||||
|
xwayland.enable = true;
|
||||||
|
|
||||||
|
settings = {
|
||||||
|
# Monitor configuration
|
||||||
|
monitor = ",preferred,auto,1";
|
||||||
|
|
||||||
|
# Startup applications
|
||||||
|
exec-once = [
|
||||||
|
"waybar"
|
||||||
|
"dunst"
|
||||||
|
"hyprpaper"
|
||||||
|
"nm-applet --indicator"
|
||||||
|
"blueman-applet"
|
||||||
|
];
|
||||||
|
|
||||||
|
# Environment variables
|
||||||
|
env = [
|
||||||
|
"XCURSOR_SIZE,24"
|
||||||
|
"QT_QPA_PLATFORMTHEME,qt5ct"
|
||||||
|
];
|
||||||
|
|
||||||
|
# Input configuration
|
||||||
|
input = {
|
||||||
|
kb_layout = "us";
|
||||||
|
follow_mouse = 1;
|
||||||
|
|
||||||
|
touchpad = {
|
||||||
|
natural_scroll = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
sensitivity = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
# General settings
|
||||||
|
general = {
|
||||||
|
gaps_in = 5;
|
||||||
|
gaps_out = 10;
|
||||||
|
border_size = 2;
|
||||||
|
"col.active_border" = "rgba(33ccffee) rgba(00ff99ee) 45deg";
|
||||||
|
"col.inactive_border" = "rgba(595959aa)";
|
||||||
|
|
||||||
|
layout = "dwindle";
|
||||||
|
|
||||||
|
allow_tearing = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
# Decoration
|
||||||
|
decoration = {
|
||||||
|
rounding = 10;
|
||||||
|
|
||||||
|
blur = {
|
||||||
|
enabled = true;
|
||||||
|
size = 3;
|
||||||
|
passes = 1;
|
||||||
|
vibrancy = 0.1696;
|
||||||
|
};
|
||||||
|
|
||||||
|
drop_shadow = true;
|
||||||
|
shadow_range = 4;
|
||||||
|
shadow_render_power = 3;
|
||||||
|
"col.shadow" = "rgba(1a1a1aee)";
|
||||||
|
};
|
||||||
|
|
||||||
|
# Animations
|
||||||
|
animations = {
|
||||||
|
enabled = true;
|
||||||
|
|
||||||
|
bezier = "myBezier, 0.05, 0.9, 0.1, 1.05";
|
||||||
|
|
||||||
|
animation = [
|
||||||
|
"windows, 1, 7, myBezier"
|
||||||
|
"windowsOut, 1, 7, default, popin 80%"
|
||||||
|
"border, 1, 10, default"
|
||||||
|
"borderangle, 1, 8, default"
|
||||||
|
"fade, 1, 7, default"
|
||||||
|
"workspaces, 1, 6, default"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
# Layout
|
||||||
|
dwindle = {
|
||||||
|
pseudotile = true;
|
||||||
|
preserve_split = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
master = {
|
||||||
|
new_status = "master";
|
||||||
|
};
|
||||||
|
|
||||||
|
# Gestures
|
||||||
|
gestures = {
|
||||||
|
workspace_swipe = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
# Misc
|
||||||
|
misc = {
|
||||||
|
force_default_wallpaper = 0;
|
||||||
|
disable_hyprland_logo = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
# Window rules
|
||||||
|
windowrulev2 = [
|
||||||
|
"suppressevent maximize, class:.*"
|
||||||
|
"float, class:^(pavucontrol)$"
|
||||||
|
"float, class:^(blueman-manager)$"
|
||||||
|
];
|
||||||
|
|
||||||
|
# Keybindings
|
||||||
|
"$mainMod" = "SUPER";
|
||||||
|
|
||||||
|
bind = [
|
||||||
|
# Program launches
|
||||||
|
"$mainMod, Return, exec, kitty"
|
||||||
|
"$mainMod, Q, killactive,"
|
||||||
|
"$mainMod, M, exit,"
|
||||||
|
"$mainMod, E, exec, thunar"
|
||||||
|
"$mainMod, V, togglefloating,"
|
||||||
|
"$mainMod, D, exec, wofi --show drun"
|
||||||
|
"$mainMod, P, pseudo,"
|
||||||
|
"$mainMod, J, togglesplit,"
|
||||||
|
"$mainMod, F, fullscreen,"
|
||||||
|
|
||||||
|
# Screenshot
|
||||||
|
"$mainMod SHIFT, S, exec, grim -g \"$(slurp)\" - | wl-copy"
|
||||||
|
", Print, exec, grim -g \"$(slurp)\" ~/Pictures/screenshot_$(date +%Y%m%d_%H%M%S).png"
|
||||||
|
|
||||||
|
# Move focus
|
||||||
|
"$mainMod, left, movefocus, l"
|
||||||
|
"$mainMod, right, movefocus, r"
|
||||||
|
"$mainMod, up, movefocus, u"
|
||||||
|
"$mainMod, down, movefocus, d"
|
||||||
|
|
||||||
|
# Switch workspaces
|
||||||
|
"$mainMod, 1, workspace, 1"
|
||||||
|
"$mainMod, 2, workspace, 2"
|
||||||
|
"$mainMod, 3, workspace, 3"
|
||||||
|
"$mainMod, 4, workspace, 4"
|
||||||
|
"$mainMod, 5, workspace, 5"
|
||||||
|
"$mainMod, 6, workspace, 6"
|
||||||
|
"$mainMod, 7, workspace, 7"
|
||||||
|
"$mainMod, 8, workspace, 8"
|
||||||
|
"$mainMod, 9, workspace, 9"
|
||||||
|
"$mainMod, 0, workspace, 10"
|
||||||
|
|
||||||
|
# Move active window to workspace
|
||||||
|
"$mainMod SHIFT, 1, movetoworkspace, 1"
|
||||||
|
"$mainMod SHIFT, 2, movetoworkspace, 2"
|
||||||
|
"$mainMod SHIFT, 3, movetoworkspace, 3"
|
||||||
|
"$mainMod SHIFT, 4, movetoworkspace, 4"
|
||||||
|
"$mainMod SHIFT, 5, movetoworkspace, 5"
|
||||||
|
"$mainMod SHIFT, 6, movetoworkspace, 6"
|
||||||
|
"$mainMod SHIFT, 7, movetoworkspace, 7"
|
||||||
|
"$mainMod SHIFT, 8, movetoworkspace, 8"
|
||||||
|
"$mainMod SHIFT, 9, movetoworkspace, 9"
|
||||||
|
"$mainMod SHIFT, 0, movetoworkspace, 10"
|
||||||
|
|
||||||
|
# Scroll through workspaces
|
||||||
|
"$mainMod, mouse_down, workspace, e+1"
|
||||||
|
"$mainMod, mouse_up, workspace, e-1"
|
||||||
|
];
|
||||||
|
|
||||||
|
# Mouse bindings
|
||||||
|
bindm = [
|
||||||
|
"$mainMod, mouse:272, movewindow"
|
||||||
|
"$mainMod, mouse:273, resizewindow"
|
||||||
|
];
|
||||||
|
|
||||||
|
# Volume and brightness keys
|
||||||
|
bindel = [
|
||||||
|
", XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+"
|
||||||
|
", XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-"
|
||||||
|
", XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"
|
||||||
|
", XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"
|
||||||
|
", XF86MonBrightnessUp, exec, brightnessctl s 10%+"
|
||||||
|
", XF86MonBrightnessDown, exec, brightnessctl s 10%-"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# Hyprpaper configuration
|
||||||
|
services.hyprpaper = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
preload = [ "~/wallpapers/default.jpg" ];
|
||||||
|
wallpaper = [ ",~/wallpapers/default.jpg" ];
|
||||||
|
splash = false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
175
home/waybar.nix
Normal file
175
home/waybar.nix
Normal file
@@ -0,0 +1,175 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
programs.waybar = {
|
||||||
|
enable = true;
|
||||||
|
|
||||||
|
settings = {
|
||||||
|
mainBar = {
|
||||||
|
layer = "top";
|
||||||
|
position = "top";
|
||||||
|
height = 30;
|
||||||
|
|
||||||
|
modules-left = [ "hyprland/workspaces" "hyprland/window" ];
|
||||||
|
modules-center = [ "clock" ];
|
||||||
|
modules-right = [ "pulseaudio" "network" "cpu" "memory" "battery" "tray" ];
|
||||||
|
|
||||||
|
"hyprland/workspaces" = {
|
||||||
|
format = "{icon}";
|
||||||
|
on-click = "activate";
|
||||||
|
format-icons = {
|
||||||
|
"1" = "";
|
||||||
|
"2" = "";
|
||||||
|
"3" = "";
|
||||||
|
"4" = "";
|
||||||
|
"5" = "";
|
||||||
|
"6" = "";
|
||||||
|
"7" = "";
|
||||||
|
"8" = "";
|
||||||
|
"9" = "";
|
||||||
|
"10" = "";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
"hyprland/window" = {
|
||||||
|
format = "{}";
|
||||||
|
separate-outputs = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
clock = {
|
||||||
|
format = " {:%H:%M}";
|
||||||
|
format-alt = " {:%A, %B %d, %Y (%R)}";
|
||||||
|
tooltip-format = "<tt><small>{calendar}</small></tt>";
|
||||||
|
calendar = {
|
||||||
|
mode = "year";
|
||||||
|
mode-mon-col = 3;
|
||||||
|
weeks-pos = "right";
|
||||||
|
on-scroll = 1;
|
||||||
|
format = {
|
||||||
|
months = "<span color='#ffead3'><b>{}</b></span>";
|
||||||
|
days = "<span color='#ecc6d9'><b>{}</b></span>";
|
||||||
|
weeks = "<span color='#99ffdd'><b>W{}</b></span>";
|
||||||
|
weekdays = "<span color='#ffcc66'><b>{}</b></span>";
|
||||||
|
today = "<span color='#ff6699'><b><u>{}</u></b></span>";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
pulseaudio = {
|
||||||
|
format = "{icon} {volume}%";
|
||||||
|
format-muted = " Muted";
|
||||||
|
format-icons = {
|
||||||
|
headphone = "";
|
||||||
|
hands-free = "";
|
||||||
|
headset = "";
|
||||||
|
phone = "";
|
||||||
|
portable = "";
|
||||||
|
car = "";
|
||||||
|
default = [ "" "" "" ];
|
||||||
|
};
|
||||||
|
on-click = "pavucontrol";
|
||||||
|
};
|
||||||
|
|
||||||
|
network = {
|
||||||
|
format-wifi = " {essid}";
|
||||||
|
format-ethernet = " Wired";
|
||||||
|
format-disconnected = " Disconnected";
|
||||||
|
tooltip-format = "{ifname} via {gwaddr}";
|
||||||
|
tooltip-format-wifi = "{essid} ({signalStrength}%)";
|
||||||
|
on-click = "nm-connection-editor";
|
||||||
|
};
|
||||||
|
|
||||||
|
cpu = {
|
||||||
|
format = " {usage}%";
|
||||||
|
tooltip = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
memory = {
|
||||||
|
format = " {}%";
|
||||||
|
tooltip-format = "RAM: {used:0.1f}G / {total:0.1f}G";
|
||||||
|
};
|
||||||
|
|
||||||
|
battery = {
|
||||||
|
states = {
|
||||||
|
warning = 30;
|
||||||
|
critical = 15;
|
||||||
|
};
|
||||||
|
format = "{icon} {capacity}%";
|
||||||
|
format-charging = " {capacity}%";
|
||||||
|
format-plugged = " {capacity}%";
|
||||||
|
format-icons = [ "" "" "" "" "" "" "" "" "" "" "" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
tray = {
|
||||||
|
icon-size = 18;
|
||||||
|
spacing = 10;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
style = ''
|
||||||
|
* {
|
||||||
|
border: none;
|
||||||
|
border-radius: 0;
|
||||||
|
font-family: "JetBrainsMono Nerd Font";
|
||||||
|
font-size: 13px;
|
||||||
|
min-height: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
window#waybar {
|
||||||
|
background: rgba(30, 30, 46, 0.9);
|
||||||
|
color: #cdd6f4;
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces button {
|
||||||
|
padding: 0 10px;
|
||||||
|
color: #cdd6f4;
|
||||||
|
background: transparent;
|
||||||
|
border-bottom: 3px solid transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces button.active {
|
||||||
|
color: #89b4fa;
|
||||||
|
border-bottom: 3px solid #89b4fa;
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces button:hover {
|
||||||
|
background: rgba(137, 180, 250, 0.2);
|
||||||
|
}
|
||||||
|
|
||||||
|
#window {
|
||||||
|
margin: 0 10px;
|
||||||
|
color: #cdd6f4;
|
||||||
|
}
|
||||||
|
|
||||||
|
#clock,
|
||||||
|
#battery,
|
||||||
|
#cpu,
|
||||||
|
#memory,
|
||||||
|
#network,
|
||||||
|
#pulseaudio,
|
||||||
|
#tray {
|
||||||
|
padding: 0 10px;
|
||||||
|
margin: 0 2px;
|
||||||
|
background: rgba(49, 50, 68, 0.8);
|
||||||
|
border-radius: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#battery.charging {
|
||||||
|
color: #a6e3a1;
|
||||||
|
}
|
||||||
|
|
||||||
|
#battery.warning:not(.charging) {
|
||||||
|
color: #f9e2af;
|
||||||
|
}
|
||||||
|
|
||||||
|
#battery.critical:not(.charging) {
|
||||||
|
color: #f38ba8;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pulseaudio.muted {
|
||||||
|
color: #f38ba8;
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
}
|
||||||
79
modules/hyprland.nix
Normal file
79
modules/hyprland.nix
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
{ config, pkgs, inputs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
# Import Hyprland module
|
||||||
|
imports = [ inputs.hyprland.nixosModules.default ];
|
||||||
|
|
||||||
|
# Enable Hyprland
|
||||||
|
programs.hyprland = {
|
||||||
|
enable = true;
|
||||||
|
xwayland.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
# Hyprland-related packages
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
# Core Hyprland tools
|
||||||
|
hyprpaper # Wallpaper utility
|
||||||
|
hyprpicker # Color picker
|
||||||
|
hypridle # Idle daemon
|
||||||
|
hyprlock # Screen locker
|
||||||
|
|
||||||
|
# Wayland essentials
|
||||||
|
waybar # Status bar
|
||||||
|
wofi # Application launcher
|
||||||
|
dunst # Notification daemon
|
||||||
|
swww # Wallpaper daemon (alternative to hyprpaper)
|
||||||
|
|
||||||
|
# Screenshot and recording
|
||||||
|
grim # Screenshot tool
|
||||||
|
slurp # Region selector
|
||||||
|
wl-clipboard # Clipboard utilities
|
||||||
|
|
||||||
|
# File manager
|
||||||
|
thunar
|
||||||
|
|
||||||
|
# Image viewer
|
||||||
|
imv
|
||||||
|
|
||||||
|
# PDF viewer
|
||||||
|
zathura
|
||||||
|
|
||||||
|
# Audio control
|
||||||
|
pavucontrol
|
||||||
|
|
||||||
|
# Network management
|
||||||
|
networkmanagerapplet
|
||||||
|
|
||||||
|
# Brightness control
|
||||||
|
brightnessctl
|
||||||
|
|
||||||
|
# Additional tools for ricing
|
||||||
|
jq # JSON processor (for scripts)
|
||||||
|
socat # Socket tools
|
||||||
|
wlogout # Logout menu
|
||||||
|
nwg-look # GTK theme config
|
||||||
|
qt5ct # Qt5 config
|
||||||
|
qt6ct # Qt6 config
|
||||||
|
];
|
||||||
|
|
||||||
|
# Enable XDG Desktop Portal for Hyprland
|
||||||
|
xdg.portal = {
|
||||||
|
enable = true;
|
||||||
|
extraPortals = with pkgs; [
|
||||||
|
xdg-desktop-portal-hyprland
|
||||||
|
xdg-desktop-portal-gtk
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
# Security - for screen locking
|
||||||
|
security.pam.services.hyprlock = {};
|
||||||
|
|
||||||
|
# Fonts for better UI
|
||||||
|
fonts.packages = with pkgs; [
|
||||||
|
noto-fonts
|
||||||
|
noto-fonts-cjk
|
||||||
|
noto-fonts-emoji
|
||||||
|
font-awesome
|
||||||
|
(nerdfonts.override { fonts = [ "JetBrainsMono" "FiraCode" "DroidSansMono" ]; })
|
||||||
|
];
|
||||||
|
}
|
||||||
89
modules/system.nix
Normal file
89
modules/system.nix
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
# Essential system packages
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
# System utilities
|
||||||
|
wget
|
||||||
|
curl
|
||||||
|
git
|
||||||
|
vim
|
||||||
|
neovim
|
||||||
|
htop
|
||||||
|
btop
|
||||||
|
killall
|
||||||
|
unzip
|
||||||
|
zip
|
||||||
|
p7zip
|
||||||
|
|
||||||
|
# Network tools
|
||||||
|
networkmanagerapplet
|
||||||
|
|
||||||
|
# File managers
|
||||||
|
ranger
|
||||||
|
lf
|
||||||
|
|
||||||
|
# Terminal
|
||||||
|
kitty
|
||||||
|
alacritty
|
||||||
|
|
||||||
|
# Shell
|
||||||
|
zsh
|
||||||
|
oh-my-zsh
|
||||||
|
|
||||||
|
# Development
|
||||||
|
gcc
|
||||||
|
gnumake
|
||||||
|
cmake
|
||||||
|
|
||||||
|
# Misc utilities
|
||||||
|
ripgrep
|
||||||
|
fd
|
||||||
|
fzf
|
||||||
|
bat
|
||||||
|
eza
|
||||||
|
tldr
|
||||||
|
tree
|
||||||
|
];
|
||||||
|
|
||||||
|
# Enable sound
|
||||||
|
sound.enable = true;
|
||||||
|
hardware.pulseaudio.enable = false;
|
||||||
|
security.rtkit.enable = true;
|
||||||
|
services.pipewire = {
|
||||||
|
enable = true;
|
||||||
|
alsa.enable = true;
|
||||||
|
alsa.support32Bit = true;
|
||||||
|
pulse.enable = true;
|
||||||
|
jack.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
# Enable CUPS for printing
|
||||||
|
services.printing.enable = true;
|
||||||
|
|
||||||
|
# Enable OpenGL
|
||||||
|
hardware.opengl = {
|
||||||
|
enable = true;
|
||||||
|
driSupport = true;
|
||||||
|
driSupport32Bit = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
# Enable Bluetooth
|
||||||
|
hardware.bluetooth.enable = true;
|
||||||
|
services.blueman.enable = true;
|
||||||
|
|
||||||
|
# Enable SSH
|
||||||
|
services.openssh.enable = true;
|
||||||
|
|
||||||
|
# Enable ZSH
|
||||||
|
programs.zsh.enable = true;
|
||||||
|
|
||||||
|
# Enable dconf (required for some applications)
|
||||||
|
programs.dconf.enable = true;
|
||||||
|
|
||||||
|
# XDG portals for Wayland
|
||||||
|
xdg.portal = {
|
||||||
|
enable = true;
|
||||||
|
extraPortals = [ pkgs.xdg-desktop-portal-gtk ];
|
||||||
|
};
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user