aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md581
-rwxr-xr-xconfiguration.nix206
-rwxr-xr-xhardware-configuration.nix3
-rw-r--r--modules/home/hyprland/chernobyl/default.nix3
-rw-r--r--modules/home/hyprland/chernobyl/dunst.nix39
-rw-r--r--modules/home/hyprland/chernobyl/hyprland.nix12
-rw-r--r--modules/home/hyprland/default.nix10
-rw-r--r--modules/home/i3wm/default.nix1
-rw-r--r--modules/nixos/base/boot.nix46
-rw-r--r--modules/nixos/base/default.nix16
-rw-r--r--modules/nixos/base/graphics.nix19
-rw-r--r--modules/nixos/base/networking.nix20
-rw-r--r--modules/nixos/base/nix.nix17
-rw-r--r--modules/nixos/base/packages.nix124
-rw-r--r--modules/nixos/base/programs.nix17
-rw-r--r--modules/nixos/base/services.nix16
-rw-r--r--modules/nixos/base/users.nix12
-rwxr-xr-xmun.nix12
18 files changed, 938 insertions, 216 deletions
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..d391a4c
--- /dev/null
+++ b/README.md
@@ -0,0 +1,581 @@
+# NixOS Configuration Guide
+
+This NixOS configuration repository uses a modular, hierarchical import structure to manage system and home-manager configurations across multiple environments and desktop setups.
+
+## Table of Contents
+
+1. [Architecture Overview](#architecture-overview)
+2. [Directory Structure](#directory-structure)
+3. [How Import Wranglers Work](#how-import-wranglers-work)
+4. [Switching Environments](#switching-environments)
+5. [Configuration Layers](#configuration-layers)
+6. [Modifying Configurations](#modifying-configurations)
+
+---
+
+## Architecture Overview
+
+The configuration follows a **layered orchestrator pattern**:
+
+```
+flake.nix (entry point)
+ ↓
+configuration.nix (system orchestrator)
+ ├─ hardware-configuration.nix (hardware specifics)
+ ├─ modules/nixos/base/ (system-wide config)
+ │ └─ default.nix (orchestrator)
+ │ ├─ nix.nix
+ │ ├─ boot.nix
+ │ ├─ networking.nix
+ │ ├─ users.nix
+ │ ├─ services.nix
+ │ ├─ programs.nix
+ │ ├─ graphics.nix
+ │ └─ packages.nix
+ └─ modules/nixos/{i3wm,hyprland}/ (environment-specific)
+
+mun.nix (home-manager orchestrator)
+ ├─ modules/home/i3wm/default.nix (orchestrator)
+ │ ├─ dunst.nix
+ │ ├─ i3.nix
+ │ ├─ kitty.nix
+ │ ├─ neovim.nix
+ │ ├─ nnn.nix
+ │ ├─ picom.nix
+ │ ├─ polybar.nix
+ │ ├─ rofi.nix
+ │ ├─ scripts.nix
+ │ └─ xdg.nix
+ └─ modules/home/hyprland/default.nix (orchestrator)
+ └─ chernobyl/default.nix (orchestrator)
+ ├─ dunst.nix
+ ├─ fastfetch.nix
+ ├─ hyprland.nix
+ └─ kitty.nix
+```
+
+---
+
+## Directory Structure
+
+```
+.
+├── flake.nix # Flake inputs/outputs definition
+├── flake.lock # Lock file for reproducibility
+├── configuration.nix # Main system config (thin orchestrator)
+├── hardware-configuration.nix # Hardware-specific config (generated)
+├── mun.nix # Home-manager user config (orchestrator)
+├── modules/
+│ ├── nixos/
+│ │ ├── base/ # Base system config (split modules)
+│ │ │ ├── default.nix # Orchestrator: imports all base modules
+│ │ │ ├── nix.nix # Nix settings, flakes, substituters
+│ │ │ ├── boot.nix # Boot loader, kernel, Plymouth
+│ │ │ ├── networking.nix # Hostname, NetworkManager, Bluetooth
+│ │ │ ├── users.nix # User definitions
+│ │ │ ├── services.nix # System services (SSH, Pipewire, Printing, Ly)
+│ │ │ ├── programs.nix # System programs (Firefox, Zsh, Java, Steam)
+│ │ │ ├── graphics.nix # GPU drivers, hardware acceleration
+│ │ │ └── packages.nix # System-wide packages
+│ │ ├── i3wm/
+│ │ │ └── default.nix # X11, i3 window manager config
+│ │ └── hyprland/
+│ │ └── default.nix # Wayland, Hyprland config
+│ └── home/
+│ ├── i3wm/
+│ │ ├── default.nix # Orchestrator: imports all i3wm home modules
+│ │ ├── dunst.nix # Notification daemon (i3 config)
+│ │ ├── i3.nix # i3 window manager config (keybinds, layout)
+│ │ ├── kitty.nix # Terminal emulator (i3 config)
+│ │ ├── neovim.nix # Text editor with LazyVim setup
+│ │ ├── nnn.nix # File browser
+│ │ ├── picom.nix # X11 compositor
+│ │ ├── polybar.nix # Status bar (i3 specific)
+│ │ ├── rofi.nix # Application launcher
+│ │ ├── scripts.nix # Custom shell scripts
+│ │ └── xdg.nix # XDG MIME type defaults
+│ └── hyprland/
+│ ├── default.nix # Orchestrator: imports Hyprland rices
+│ └── chernobyl/ # "Chernobyl" Hyprland rice
+│ ├── default.nix # Orchestrator for chernobyl rice
+│ ├── dunst.nix # Notification daemon (Hyprland config)
+│ ├── fastfetch.nix # System info display
+│ ├── hyprland.nix # Hyprland window manager config
+│ └── kitty.nix # Terminal emulator (Hyprland config)
+```
+
+---
+
+## How Import Wranglers Work
+
+An "import wrangler" is a `default.nix` file that acts as a **local aggregator**, collecting all related configurations into one place for easy management. This pattern appears at multiple levels:
+
+### Level 1: Base System Configuration
+
+**File:** `modules/nixos/base/default.nix`
+
+```nix
+{ ... }:
+
+{
+ imports = [
+ ./nix.nix
+ ./boot.nix
+ ./networking.nix
+ ./users.nix
+ ./services.nix
+ ./programs.nix
+ ./graphics.nix
+ ./packages.nix
+ ];
+
+ system.stateVersion = "25.11";
+}
+```
+
+**Purpose:** Groups all foundational system configurations (boot, networking, users, services, packages) into a single import point. When you need to add a base system feature, you either:
+- Add it to an existing module file
+- Create a new module (e.g., `firewall.nix`) and add it to this import list
+
+**Benefits:**
+- Single import in `configuration.nix`: `./modules/nixos/base`
+- All base modules are in one place; easy to see what's included
+- New base modules are simply added to the imports list
+
+### Level 2: Environment-Specific System Configuration
+
+**Files:** `modules/nixos/i3wm/default.nix`, `modules/nixos/hyprland/default.nix`
+
+These are currently thin wrappers but follow the same pattern. To extend them (e.g., add environment-specific services or packages), you would create sub-modules:
+
+```nix
+# Example expansion of modules/nixos/i3wm/default.nix
+{ ... }:
+
+{
+ imports = [
+ ./xserver.nix # X11-specific settings
+ ./i3.nix # i3 window manager
+ ./keyboard.nix # Czech keyboard layout
+ ];
+}
+```
+
+### Level 3: Home-Manager Orchestration
+
+**File:** `modules/home/i3wm/default.nix`
+
+```nix
+{ ... }:
+
+{
+ imports = [
+ ./dunst.nix
+ ./i3.nix
+ ./kitty.nix
+ ./neovim.nix
+ ./nnn.nix
+ ./picom.nix
+ ./polybar.nix
+ ./rofi.nix
+ ./scripts.nix
+ ./xdg.nix
+ ];
+}
+```
+
+**Purpose:** All i3wm-specific home-manager modules (dunst, i3 keybinds, polybar, etc.) are collected here. This is imported once in `mun.nix`, rather than importing 10 separate files.
+
+**Benefits:**
+- One line in `mun.nix`: `./modules/home/i3wm/default.nix`
+- All i3 home configs are clearly grouped
+- Easy to switch entire environments with a single comment/uncomment
+
+### Level 4: Multi-Rice Support (Hyprland)
+
+**File:** `modules/home/hyprland/default.nix`
+
+```nix
+{ ... }:
+
+{
+ imports = [
+ #./default.nix # main hyprland rice (future)
+ ./chernobyl/default.nix # chernobyl hyprland rice
+ ];
+}
+```
+
+**File:** `modules/home/hyprland/chernobyl/default.nix`
+
+```nix
+{ ... }:
+
+{
+ imports = [
+ ./dunst.nix
+ ./fastfetch.nix
+ ./hyprland.nix
+ ./kitty.nix
+ ];
+}
+```
+
+**Purpose:** Supports multiple visual rices/themes for the same window manager. The parent orchestrator selects which rice to use.
+
+**Benefits:**
+- Scale to many rices easily (add `./cyberpunk/default.nix`, `./nord/default.nix`, etc.)
+- Each rice has its own folder with consistent structure
+- Switch rices by commenting/uncommenting in the parent orchestrator
+
+---
+
+## Switching Environments
+
+### Switch from i3wm to Hyprland
+
+Edit **two files**:
+
+#### 1. System Configuration (`configuration.nix`)
+
+```nix
+{ config, lib, pkgs, ... }:
+
+{
+ imports = [
+ ./hardware-configuration.nix
+ ./modules/nixos/base
+
+ # === Environment Choice ===
+ # Uncomment one of the following to select your environment:
+ #./modules/nixos/i3wm # ← comment this
+ ./modules/nixos/hyprland # ← uncomment this
+ ];
+}
+```
+
+#### 2. Home-Manager Configuration (`mun.nix`)
+
+```nix
+{ config, lib, pkgs, ... }:
+
+{
+ imports = [
+ #./modules/home/i3wm/default.nix # ← comment this
+ ./modules/home/hyprland/default.nix # ← uncomment this
+ ];
+
+ # ... rest of mun.nix
+}
+```
+
+#### 3. Rebuild
+
+```bash
+sudo nixos-rebuild switch
+```
+
+---
+
+## Configuration Layers
+
+The configuration is organized in **four distinct layers**:
+
+### 1. **System-Wide Base (`modules/nixos/base/`)**
+
+Applied to **all environments**.
+
+**Includes:**
+- Nix settings (flakes, substituters)
+- Boot configuration (GRUB, EFI, kernel)
+- Networking (hostname, NetworkManager, Bluetooth)
+- Users (mun user definition)
+- System services (SSH, Pipewire, Printing, Ly display manager)
+- System programs (Firefox, Zsh, Java, Steam)
+- Graphics drivers (Intel VAAPI, hardware acceleration)
+- System packages (Neovim, Git, TeX Live, RetroArch, etc.)
+
+**Modify by:** Editing existing files in `base/` or creating new ones and adding them to `base/default.nix`.
+
+### 2. **Environment-Specific System (`modules/nixos/{i3wm,hyprland}/`)**
+
+Applied to **one environment at a time** (X11 vs Wayland).
+
+**i3wm includes:**
+- X11 enable
+- i3 window manager
+- Keyboard layout (Czech)
+- Display manager session
+
+**Hyprland includes:**
+- X11 disable
+- Hyprland enable
+- XDG portal for Wayland
+- Qt6 Wayland support
+- Keyboard layout (Czech)
+
+**Modify by:** Editing the respective `default.nix` or creating sub-modules.
+
+### 3. **Home-Manager User-Wide Config (`mun.nix`)**
+
+Configuration applied to user `mun` only.
+
+**Includes:**
+- SSH setup
+- Shell configuration (Zsh with oh-my-zsh)
+- Environment variables
+- Gnome-keyring service
+- User packages (Rust tools, Discord, utilities)
+- Environment-specific home-manager orchestrator import
+
+**Modify by:** Editing `mun.nix` directly or adding packages to the `packages` list.
+
+### 4. **Environment-Specific Home-Manager (`modules/home/{i3wm,hyprland}/`)**
+
+Applied to **one environment at a time**.
+
+**i3wm includes:**
+- i3 keybindings and layout
+- Polybar status bar
+- Dunst notifications
+- Picom compositor
+- Rofi launcher
+- NeoVim with LazyVim
+- Kitty terminal
+- Custom scripts
+- XDG MIME type defaults
+
+**Hyprland (chernobyl rice) includes:**
+- Hyprland config
+- Dunst notifications
+- Kitty terminal
+- Fastfetch system info
+
+**Modify by:** Editing the respective module files or adding new ones to the orchestrator `default.nix`.
+
+---
+
+## Modifying Configurations
+
+### Add a New System Package
+
+**File:** `modules/nixos/base/packages.nix`
+
+```nix
+environment.systemPackages = with pkgs; [
+ # ... existing packages ...
+ my-new-package # ← add here
+];
+```
+
+### Add a New Base System Service
+
+**File:** `modules/nixos/base/services.nix` or create `modules/nixos/base/firewall.nix`
+
+If adding firewall rules, create a new file:
+
+```nix
+# modules/nixos/base/firewall.nix
+{ config, lib, pkgs, ... }:
+
+{
+ networking.firewall.allowedTCPPorts = [ 80 443 ];
+}
+```
+
+Then add to orchestrator:
+
+```nix
+# modules/nixos/base/default.nix
+{ ... }:
+
+{
+ imports = [
+ ./nix.nix
+ ./boot.nix
+ ./networking.nix
+ ./users.nix
+ ./services.nix
+ ./programs.nix
+ ./graphics.nix
+ ./packages.nix
+ ./firewall.nix # ← add here
+ ];
+
+ system.stateVersion = "25.11";
+}
+```
+
+### Add an i3wm Home-Manager Module
+
+**File:** `modules/home/i3wm/my-new-config.nix`
+
+```nix
+{ config, pkgs, ... }:
+
+{
+ # Your home-manager config here
+}
+```
+
+Then add to orchestrator:
+
+```nix
+# modules/home/i3wm/default.nix
+{ ... }:
+
+{
+ imports = [
+ ./dunst.nix
+ ./i3.nix
+ # ... other modules ...
+ ./my-new-config.nix # ← add here
+ ];
+}
+```
+
+### Add a New Hyprland Rice
+
+Create a new directory:
+
+```bash
+mkdir modules/home/hyprland/cyberpunk
+```
+
+Add files:
+
+```nix
+# modules/home/hyprland/cyberpunk/default.nix
+{ ... }:
+
+{
+ imports = [
+ ./dunst.nix
+ ./hyprland.nix
+ ./kitty.nix
+ ];
+}
+```
+
+Update parent orchestrator:
+
+```nix
+# modules/home/hyprland/default.nix
+{ ... }:
+
+{
+ imports = [
+ #./default.nix
+ ./chernobyl/default.nix
+ #./cyberpunk/default.nix # ← uncomment to use
+ ];
+}
+```
+
+---
+
+## Rebuilding Your System
+
+After making changes:
+
+```bash
+# Switch to new system configuration
+sudo nixos-rebuild switch
+
+# Or, test first (doesn't activate)
+sudo nixos-rebuild test
+
+# Show what changed
+sudo nixos-rebuild dry-run
+```
+
+To edit and rebuild in one step:
+
+```bash
+# If you have the 'edit' alias from mun.nix
+edit
+sudo nixos-rebuild switch
+```
+
+---
+
+## Key Principles
+
+1. **One Import Per Layer:** Each `default.nix` orchestrator imports related modules, reducing clutter in parent files.
+
+2. **Separation of Concerns:** System config (nixos/) is separate from user config (home/); base is separate from environment-specific.
+
+3. **Easy Environment Switching:** Change environments by commenting one line in `configuration.nix` and `mun.nix`.
+
+4. **Scalability:** Adding new features (base services, home modules, rices) follows a consistent pattern of creating a file + adding it to the orchestrator.
+
+5. **Clarity:** Each file has a clear purpose; finding where to modify something is straightforward.
+
+---
+
+## Example Workflow
+
+### Goal: Add Firefox configuration to i3wm
+
+1. Create `modules/home/i3wm/firefox.nix`:
+ ```nix
+ { config, pkgs, ... }:
+
+ {
+ programs.firefox = {
+ enable = true;
+ profiles.mun = {
+ settings = {
+ "browser.startup.homepage" = "about:home";
+ };
+ };
+ };
+ }
+ ```
+
+2. Add to orchestrator in `modules/home/i3wm/default.nix`:
+ ```nix
+ imports = [
+ ./dunst.nix
+ ./firefox.nix # ← add here
+ ./i3.nix
+ # ... rest
+ ];
+ ```
+
+3. Rebuild:
+ ```bash
+ sudo nixos-rebuild switch
+ ```
+
+Done! Firefox is now configured for the i3wm environment.
+
+---
+
+## Troubleshooting
+
+### "Module not found" error
+
+Check that all imports in `default.nix` files reference correct file paths. Use absolute paths from the module directory:
+- `./nix.nix` ✓ (correct)
+- `../base/nix.nix` ✓ (correct, relative to parent)
+- `/absolute/path/nix.nix` ✗ (avoid; use relative)
+
+### Environment not loading after switch
+
+Ensure **both** `configuration.nix` and `mun.nix` have the same environment enabled (not one i3wm and one hyprland).
+
+### Syntax errors in .nix files
+
+Use `nix flake check` to validate:
+```bash
+nix flake check
+```
+
+---
+
+## References
+
+- [NixOS Manual - Configuration](https://nixos.org/manual/nixos/stable/)
+- [Home Manager Manual](https://nix-community.github.io/home-manager/)
+- [Nix Language](https://nixos.wiki/wiki/Nix_language)
diff --git a/configuration.nix b/configuration.nix
index ba91d63..e3cb894 100755
--- a/configuration.nix
+++ b/configuration.nix
@@ -3,209 +3,13 @@
{
imports = [
./hardware-configuration.nix
- ];
-
- nix.settings = {
- substituters = [
- "https://cache.nixos.org/"
- ];
-
- trusted-public-keys = [
- "cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY="
- ];
- experimental-features = [
- "nix-command"
- "flakes"
- ];
- };
-
-
- # === System Settings ===
- boot = {
- kernelPackages = pkgs.linuxPackages_latest;
- initrd = {
- kernelModules = [ "i915" ];
- systemd.enable = true;
- };
- loader = {
- efi = {
- canTouchEfiVariables = true;
- efiSysMountPoint = "/boot";
- };
- grub = {
- enable = true;
- device = "nodev";
- useOSProber = true;
- efiSupport = true;
- };
- systemd-boot = {
- enable = false;
- consoleMode = "keep";
- configurationLimit = 5;
- };
- };
- plymouth = {
- enable = false;
- theme = "deus_ex";
- themePackages = with pkgs; [
- # By default we would install all themes
- (adi1090x-plymouth-themes.override {
- selected_themes = [ "deus_ex" ];
- })
- ];
- logo = pkgs.fetchurl {
- url = "https://external-content.duckduckgo.com/iu/?u=https%3A%2F%2Fcdn.icon-icons.com%2Ficons2%2F2699%2FPNG%2F512%2Fnixos_logo_icon_170910.png&f=1&nofb=1&ipt=71345d68f1fc864748db54e81111d5853a24fba1d39bdee7cc6fda3e58181bc0";
- sha256 = "sha256-fr1ZnKdX9EeXl2eTIrxEd17DkVKZL8BV9RGmluSgFfk=";
- };
- extraConfig = ''
- DeviceScale=1
- '';
- };
-
- # Enable "Silent boot"
- #consoleLogLevel = 3;
- #initrd.verbose = false;
- #kernelParams = [
- # "quiet"
- # "splash"
- # "udev.log_level=3"
- # "systemd.show_status=auto"
- #];
- };
- networking.hostName = "kronos";
- networking.networkmanager.enable = true;
-
- fileSystems."/boot".options = [ "fmask=0077" "dmask=0077" ];
-
- hardware.bluetooth = {
- enable = true;
- powerOnBoot = true;
- settings = {
- General = {
- Experimental = true;
- Enable = "Source,Sink,Media,Socket";
- AutoConnect = true;
- FastConnectabke = true;
- };
- Policy.AutoEnable = true;
- };
- };
-
- security.pam.sshAgentAuth.enable = true;
-
-# In your configuration.nix
-environment.variables = {
- JAVA_HOME = "${pkgs.jdk17}/lib/openjdk"; # adjust path based on version
-};
-
- time.timeZone = "Europe/Prague";
-
- services.xserver = {
- wacom.enable = true;
- enable = true;
- windowManager.i3 = {
- enable = true;
- extraPackages = with pkgs; [ polybar i3lock-fancy-rapid ];
- };
-
- };
-
- services.displayManager.defaultSession = "none+i3";
- services.displayManager.ly = {
- enable = true;
- };
- services.xserver.xkb.layout = "cz";
- services.xserver.xkb.options = "eurosign:e,caps:escape";
-
- services.printing.enable = true;
- services.pipewire = { enable = true; pulse.enable = true; };
- services.libinput.enable = true;
-
- users.users = {
- mun = {
- isNormalUser = true;
- extraGroups = [ "wheel" "bluetooth" "networkmanager" "kvm" "nixos" ];
- packages = with pkgs; [ tree ];
- shell = pkgs.zsh;
- };
- };
-
- programs.firefox.enable = true;
- programs.zsh.enable = true;
- nixpkgs.config.allowUnfree = true;
-
- environment.systemPackages = with pkgs; [
- neovim wget stdenv tree-sitter discord kitty xfce.thunar thunderbird
- flameshot libreoffice spotify tor-browser alsa-utils helvum
- blueman bluez cava i3status i3lock-fancy-rapid xss-lock polybar
- rofi feh clipman tree git lazygit killall acpi wirelesstools
- brightnessctl fastfetch auto-cpufreq btop cargo gnome-boxes
- clippy xclip texstudio godotPackages_4_5.godot
- clang tree-sitter ripgrep fd unzip lua-language-server stylua
- rust-analyzer rustfmt cargo rustc zathura krita
- ruff vtsls pyright imagemagick ghostscript ruff python314 ly
- prismlauncher vlc lua53Packages.luarocks mermaid-cli lua nil obsidian
- wine bottles comic-mono playerctl zscroll espeak qbittorrent perl bzip2
- libresprite audacity libgcc celestia lutris vscodium peazip vscode
-
- (texlive.combine {
- inherit (texlive) scheme-full;
- notestex = texlivePackages.notestex;
- })
-
-
- (retroarch.withCores (cores: with cores; [
- # --- NES --- #
- fceumm
-
- # --- GBA --- #
- mgba
-
- # --- GB / GBC --- #
- gambatte
- sameboy
- ]))
+ ./modules/nixos/base
+ # === Environment Choice ===
+ # Uncomment one of the following to select your environment:
+ ./modules/nixos/i3wm
+ #./modules/nixos/hyprland
];
-
- fonts = {
- enableDefaultPackages = true;
- packages = with pkgs; [ fira-code noto-fonts noto-fonts-color-emoji blackout beon];
- };
-
- programs.steam = {
- enable = true;
- remotePlay.openFirewall = true; # Open ports in the firewall for Steam Remote Play
- dedicatedServer.openFirewall = true; # Open ports in the firewall for Source Dedicated Server
- localNetworkGameTransfers.openFirewall = true; # Open ports in the firewall for Steam Local Network Game Transfers
- };
-
- # enable Java support
- programs.java = {
- enable = true;
- package = pkgs.jdk17; # or pkgs.jdk11, pkgs.jdk8, whatever you need
- };
-
- services.xserver.videoDrivers = [ "intel" ];
-
- hardware.graphics = {
- enable = true;
- extraPackages = with pkgs; [
- intel-vaapi-driver # for video acceleration on Intel
- intel-media-driver
- intel-compute-runtime
- mesa
- ];
- };
-
-
-
- services.openssh.enable = true;
-
-
-
- system.stateVersion = "25.11";
-
}
diff --git a/hardware-configuration.nix b/hardware-configuration.nix
index f68e8fe..0dc8341 100755
--- a/hardware-configuration.nix
+++ b/hardware-configuration.nix
@@ -1,4 +1,4 @@
-# Do not modify this file! It was generated by ‘nixos-generate-config’
+# 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, ... }:
@@ -6,7 +6,6 @@
{
imports = [
(modulesPath + "/installer/scan/not-detected.nix")
- ./modules/home/hyprland/hyprland.nix
];
boot.initrd.availableKernelModules = [ "xhci_pci" "nvme" "usb_storage" "sd_mod" ];
diff --git a/modules/home/hyprland/chernobyl/default.nix b/modules/home/hyprland/chernobyl/default.nix
index 915c8c1..68ffecc 100644
--- a/modules/home/hyprland/chernobyl/default.nix
+++ b/modules/home/hyprland/chernobyl/default.nix
@@ -2,6 +2,9 @@
{
imports = [
+ ./dunst.nix
+ ./fastfetch.nix
+ ./hyprland.nix
./kitty.nix
];
} \ No newline at end of file
diff --git a/modules/home/hyprland/chernobyl/dunst.nix b/modules/home/hyprland/chernobyl/dunst.nix
index 98329dd..b51a4a8 100644
--- a/modules/home/hyprland/chernobyl/dunst.nix
+++ b/modules/home/hyprland/chernobyl/dunst.nix
@@ -3,5 +3,42 @@
{
services.dunst = {
enable = true;
- }
+ settings = let
+ colors = {
+ foreground = "#d0b6fd";
+ background = "#1c182d";
+ alert = "#7b91fc";
+ };
+ in {
+ global = {
+ width = "(200,300)";
+ height = "(0,150)";
+ offset = "(30,50)";
+ origin = "bottom-right";
+ transparency = 10;
+ frame_width = 0;
+ font = "Fira Code 10";
+ };
+
+ urgency_low = {
+ background = colors.background;
+ foreground = colors.foreground;
+ timeout = 8;
+ };
+
+ urgency_normal = {
+ background = colors.background;
+ foreground = colors.foreground;
+ frame-size = "0";
+ timeout = 10;
+ };
+
+ urgency_critical = {
+ background = colors.background;
+ foreground = colors.foreground;
+ frame-size = "5";
+ frame-color = colors.alert;
+ };
+ };
+ };
} \ No newline at end of file
diff --git a/modules/home/hyprland/chernobyl/hyprland.nix b/modules/home/hyprland/chernobyl/hyprland.nix
index 5347a3b..8712df9 100644
--- a/modules/home/hyprland/chernobyl/hyprland.nix
+++ b/modules/home/hyprland/chernobyl/hyprland.nix
@@ -4,16 +4,4 @@
programs.hyprland = {
enable = true;
};
-
- environment.systemPackages = with pkgs; [
- # QT Support
- qt6.qtwayland
- qt6.qttools
-
- # XDG Support
- xdg-desktop-portal-hyprland
-
- # Auth Demon
- hyprpolkitagent
-];
} \ No newline at end of file
diff --git a/modules/home/hyprland/default.nix b/modules/home/hyprland/default.nix
new file mode 100644
index 0000000..b54f464
--- /dev/null
+++ b/modules/home/hyprland/default.nix
@@ -0,0 +1,10 @@
+{ ... }:
+
+{
+ # Hyprland home-manager configuration orchestrator
+ # Uncomment one of the rices below:
+ imports = [
+ #./default.nix # main hyprland rice
+ ./chernobyl/default.nix # chernobyl hyprland rice
+ ];
+}
diff --git a/modules/home/i3wm/default.nix b/modules/home/i3wm/default.nix
index 6fef12b..c861b04 100644
--- a/modules/home/i3wm/default.nix
+++ b/modules/home/i3wm/default.nix
@@ -1,6 +1,7 @@
{ ... }:
{
+ # i3wm home-manager configuration orchestrator
imports = [
./dunst.nix
./i3.nix
diff --git a/modules/nixos/base/boot.nix b/modules/nixos/base/boot.nix
new file mode 100644
index 0000000..a9aaff1
--- /dev/null
+++ b/modules/nixos/base/boot.nix
@@ -0,0 +1,46 @@
+{ config, lib, pkgs, ... }:
+
+{
+ boot = {
+ kernelPackages = pkgs.linuxPackages_latest;
+ initrd = {
+ kernelModules = [ "i915" ];
+ systemd.enable = true;
+ };
+ loader = {
+ efi = {
+ canTouchEfiVariables = true;
+ efiSysMountPoint = "/boot";
+ };
+ grub = {
+ enable = true;
+ device = "nodev";
+ useOSProber = true;
+ efiSupport = true;
+ };
+ systemd-boot = {
+ enable = false;
+ consoleMode = "keep";
+ configurationLimit = 5;
+ };
+ };
+ plymouth = {
+ enable = false;
+ theme = "deus_ex";
+ themePackages = with pkgs; [
+ (adi1090x-plymouth-themes.override {
+ selected_themes = [ "deus_ex" ];
+ })
+ ];
+ logo = pkgs.fetchurl {
+ url = "https://external-content.duckduckgo.com/iu/?u=https%3A%2F%2Fcdn.icon-icons.com%2Ficons2%2F2699%2FPNG%2F512%2Fnixos_logo_icon_170910.png&f=1&nofb=1&ipt=71345d68f1fc864748db54e81111d5853a24fba1d39bdee7cc6fda3e58181bc0";
+ sha256 = "sha256-fr1ZnKdX9EeXl2eTIrxEd17DkVKZL8BV9RGmluSgFfk=";
+ };
+ extraConfig = ''
+ DeviceScale=1
+ '';
+ };
+ };
+
+ fileSystems."/boot".options = [ "fmask=0077" "dmask=0077" ];
+}
diff --git a/modules/nixos/base/default.nix b/modules/nixos/base/default.nix
new file mode 100644
index 0000000..2a70d3b
--- /dev/null
+++ b/modules/nixos/base/default.nix
@@ -0,0 +1,16 @@
+{ ... }:
+
+{
+ imports = [
+ ./nix.nix
+ ./boot.nix
+ ./networking.nix
+ ./users.nix
+ ./services.nix
+ ./programs.nix
+ ./graphics.nix
+ ./packages.nix
+ ];
+
+ system.stateVersion = "25.11";
+}
diff --git a/modules/nixos/base/graphics.nix b/modules/nixos/base/graphics.nix
new file mode 100644
index 0000000..e2913fe
--- /dev/null
+++ b/modules/nixos/base/graphics.nix
@@ -0,0 +1,19 @@
+{ config, lib, pkgs, ... }:
+
+{
+ services.xserver.videoDrivers = [ "intel" ];
+
+ hardware.graphics = {
+ enable = true;
+ extraPackages = with pkgs; [
+ intel-vaapi-driver
+ intel-media-driver
+ intel-compute-runtime
+ mesa
+ ];
+ };
+
+ environment.variables = {
+ JAVA_HOME = "${pkgs.jdk17}/lib/openjdk";
+ };
+}
diff --git a/modules/nixos/base/networking.nix b/modules/nixos/base/networking.nix
new file mode 100644
index 0000000..9d3a293
--- /dev/null
+++ b/modules/nixos/base/networking.nix
@@ -0,0 +1,20 @@
+{ config, lib, pkgs, ... }:
+
+{
+ networking.hostName = "kronos";
+ networking.networkmanager.enable = true;
+
+ hardware.bluetooth = {
+ enable = true;
+ powerOnBoot = true;
+ settings = {
+ General = {
+ Experimental = true;
+ Enable = "Source,Sink,Media,Socket";
+ AutoConnect = true;
+ FastConnectabke = true;
+ };
+ Policy.AutoEnable = true;
+ };
+ };
+}
diff --git a/modules/nixos/base/nix.nix b/modules/nixos/base/nix.nix
new file mode 100644
index 0000000..87e93f4
--- /dev/null
+++ b/modules/nixos/base/nix.nix
@@ -0,0 +1,17 @@
+{ config, lib, pkgs, ... }:
+
+{
+ nix.settings = {
+ substituters = [
+ "https://cache.nixos.org/"
+ ];
+
+ trusted-public-keys = [
+ "cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY="
+ ];
+ experimental-features = [
+ "nix-command"
+ "flakes"
+ ];
+ };
+}
diff --git a/modules/nixos/base/packages.nix b/modules/nixos/base/packages.nix
new file mode 100644
index 0000000..fedccd5
--- /dev/null
+++ b/modules/nixos/base/packages.nix
@@ -0,0 +1,124 @@
+{ config, lib, pkgs, ... }:
+
+{
+ nixpkgs.config.allowUnfree = true;
+
+ environment.systemPackages = with pkgs; [
+ # === Core Development Tools ===
+ neovim
+ wget
+ stdenv
+ tree-sitter
+ git
+ lazygit
+ killall
+ acpi
+
+ # === CLI Utilities ===
+ tree
+ ripgrep
+ fd
+ unzip
+ bzip2
+ perl
+
+ # === System Monitoring ===
+ btop
+ auto-cpufreq
+
+ # === Audio/Media ===
+ alsa-utils
+ helvum
+ playerctl
+ zscroll
+
+ # === Bluetooth & Wireless ===
+ blueman
+ bluez
+ wirelesstools
+
+ # === Display & Graphics ===
+ feh
+ flameshot
+ xss-lock
+ brightnessctl
+ imagemagick
+ ghostscript
+
+ # === Text/Document Tools ===
+ thunderbird
+ libreoffice
+ texstudio
+ zathura
+ krita
+ libresprite
+ audacity
+
+ # === Network & Utilities ===
+ tor-browser
+ clipman
+ xclip
+ qbittorrent
+
+ # === Development Languages & Compilers ===
+ clang
+ lua-language-server
+ stylua
+ nil
+ lua53Packages.luarocks
+ mermaid-cli
+ lua
+
+ # === Language Servers & Formatters ===
+ ruff
+ vtsls
+ pyright
+ python314
+
+ # === System Packages ===
+ ly
+
+ # === Gaming & Emulation ===
+ godotPackages_4_5.godot
+ prismlauncher
+ vlc
+
+ # === Creative & Editors ===
+ obsidian
+ vscodium
+ vscode
+ peazip
+ celestia
+
+ # === Wine/Compatibility ===
+ wine
+ bottles
+ comic-mono
+ libgcc
+ espeak
+ lutris
+
+ # === Miscellaneous ===
+ gnome-boxes
+ xfce.thunar
+
+ # === TeX Live ===
+ (texlive.combine {
+ inherit (texlive) scheme-full;
+ notestex = texlivePackages.notestex;
+ })
+
+ # === RetroArch with Cores ===
+ (retroarch.withCores (cores: with cores; [
+ fceumm
+ mgba
+ gambatte
+ sameboy
+ ]))
+ ];
+
+ fonts = {
+ enableDefaultPackages = true;
+ packages = with pkgs; [ fira-code noto-fonts noto-fonts-color-emoji blackout beon];
+ };
+}
diff --git a/modules/nixos/base/programs.nix b/modules/nixos/base/programs.nix
new file mode 100644
index 0000000..15853ee
--- /dev/null
+++ b/modules/nixos/base/programs.nix
@@ -0,0 +1,17 @@
+{ config, lib, pkgs, ... }:
+
+{
+ programs.firefox.enable = true;
+ programs.zsh.enable = true;
+ programs.java = {
+ enable = true;
+ package = pkgs.jdk17;
+ };
+
+ programs.steam = {
+ enable = true;
+ remotePlay.openFirewall = true;
+ dedicatedServer.openFirewall = true;
+ localNetworkGameTransfers.openFirewall = true;
+ };
+}
diff --git a/modules/nixos/base/services.nix b/modules/nixos/base/services.nix
new file mode 100644
index 0000000..b005d8c
--- /dev/null
+++ b/modules/nixos/base/services.nix
@@ -0,0 +1,16 @@
+{ config, lib, pkgs, ... }:
+
+{
+ security.pam.sshAgentAuth.enable = true;
+
+ time.timeZone = "Europe/Prague";
+
+ services.displayManager.ly = {
+ enable = true;
+ };
+
+ services.printing.enable = true;
+ services.pipewire = { enable = true; pulse.enable = true; };
+ services.libinput.enable = true;
+ services.openssh.enable = true;
+}
diff --git a/modules/nixos/base/users.nix b/modules/nixos/base/users.nix
new file mode 100644
index 0000000..c2db993
--- /dev/null
+++ b/modules/nixos/base/users.nix
@@ -0,0 +1,12 @@
+{ config, lib, pkgs, ... }:
+
+{
+ users.users = {
+ mun = {
+ isNormalUser = true;
+ extraGroups = [ "wheel" "bluetooth" "networkmanager" "kvm" "nixos" ];
+ packages = with pkgs; [ tree ];
+ shell = pkgs.zsh;
+ };
+ };
+}
diff --git a/mun.nix b/mun.nix
index bf07e16..3a33387 100755
--- a/mun.nix
+++ b/mun.nix
@@ -11,6 +11,18 @@
stateVersion = "25.11";
packages = with pkgs; [
+ # === Development Tools ===
+ cargo
+ rustc
+ rust-analyzer
+ rustfmt
+ clippy
+ ruff
+
+ # === Applications ===
+ discord
+
+ # === Utilities ===
pay-respects
zathura
ripgrep