From 49423b9a43e26d437124faff73470d30e8830be6 Mon Sep 17 00:00:00 2001 From: Natasha Moongrave Date: Sun, 1 Feb 2026 00:01:00 +0100 Subject: initial commit 2: electric boogaloo --- hardware-configuration.nix | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100755 hardware-configuration.nix (limited to 'hardware-configuration.nix') diff --git a/hardware-configuration.nix b/hardware-configuration.nix new file mode 100755 index 0000000..8419d66 --- /dev/null +++ b/hardware-configuration.nix @@ -0,0 +1,31 @@ +# 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 = [ "xhci_pci" "nvme" "usb_storage" "sd_mod" ]; + boot.initrd.kernelModules = [ ]; + boot.kernelModules = [ "kvm-intel" ]; + boot.extraModulePackages = [ ]; + + fileSystems."/" = + { device = "/dev/disk/by-uuid/f62daee8-ba51-478c-97db-c8b96c12043e"; + fsType = "ext4"; + }; + + fileSystems."/boot" = + { device = "/dev/disk/by-uuid/22BE-C329"; + fsType = "vfat"; + options = [ "fmask=0077" "dmask=0077" ]; + }; + + swapDevices = [ ]; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; +} -- cgit v1.2.3 From 9a023a2c5805deda8c4b314c5aec7ff401e9b04f Mon Sep 17 00:00:00 2001 From: Natasha Moongrave Date: Mon, 2 Feb 2026 11:00:53 +0100 Subject: added required packages for hyprland --- hardware-configuration.nix | 5 +++-- modules/home/hyprland/default.nix | 2 +- modules/home/hyprland/dunst.nix | 7 +++++++ modules/home/hyprland/hyprland.nix | 5 +++++ modules/home/hyprland/kitty.nix | 2 +- mun.nix | 1 + 6 files changed, 18 insertions(+), 4 deletions(-) create mode 100644 modules/home/hyprland/dunst.nix (limited to 'hardware-configuration.nix') diff --git a/hardware-configuration.nix b/hardware-configuration.nix index 8419d66..f68e8fe 100755 --- a/hardware-configuration.nix +++ b/hardware-configuration.nix @@ -4,8 +4,9 @@ { config, lib, pkgs, modulesPath, ... }: { - imports = - [ (modulesPath + "/installer/scan/not-detected.nix") + 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/default.nix b/modules/home/hyprland/default.nix index 67ead8f..915c8c1 100644 --- a/modules/home/hyprland/default.nix +++ b/modules/home/hyprland/default.nix @@ -2,6 +2,6 @@ { imports = [ - ./hyprland.nix + ./kitty.nix ]; } \ No newline at end of file diff --git a/modules/home/hyprland/dunst.nix b/modules/home/hyprland/dunst.nix new file mode 100644 index 0000000..98329dd --- /dev/null +++ b/modules/home/hyprland/dunst.nix @@ -0,0 +1,7 @@ +{ pkgs, ... }: + +{ + services.dunst = { + enable = true; + } +} \ No newline at end of file diff --git a/modules/home/hyprland/hyprland.nix b/modules/home/hyprland/hyprland.nix index 8712df9..9a65a0b 100644 --- a/modules/home/hyprland/hyprland.nix +++ b/modules/home/hyprland/hyprland.nix @@ -4,4 +4,9 @@ programs.hyprland = { enable = true; }; + + environment.systemPackages = with pkgs; [ + qt6.qtwayland + qt6.qttools +]; } \ No newline at end of file diff --git a/modules/home/hyprland/kitty.nix b/modules/home/hyprland/kitty.nix index 30f35d5..11d4054 100644 --- a/modules/home/hyprland/kitty.nix +++ b/modules/home/hyprland/kitty.nix @@ -3,5 +3,5 @@ { programs.kitty = { enable = true; - } + }; } \ No newline at end of file diff --git a/mun.nix b/mun.nix index 3be52b4..6c6144a 100755 --- a/mun.nix +++ b/mun.nix @@ -3,6 +3,7 @@ { imports = [ ./modules/home/hyprland/default.nix + ./modules/home/i3wm/default.nix ]; home = { username = "mun"; -- cgit v1.2.3 From 154093573c13cdba63a6077710f4e09ccbe2ade3 Mon Sep 17 00:00:00 2001 From: Natasha Moongrave Date: Mon, 2 Feb 2026 13:29:35 +0100 Subject: refactored + added README --- README.md | 581 +++++++++++++++++++++++++++ configuration.nix | 206 +--------- hardware-configuration.nix | 3 +- modules/home/hyprland/chernobyl/default.nix | 3 + modules/home/hyprland/chernobyl/dunst.nix | 39 +- modules/home/hyprland/chernobyl/hyprland.nix | 12 - modules/home/hyprland/default.nix | 10 + modules/home/i3wm/default.nix | 1 + modules/nixos/base/boot.nix | 46 +++ modules/nixos/base/default.nix | 16 + modules/nixos/base/graphics.nix | 19 + modules/nixos/base/networking.nix | 20 + modules/nixos/base/nix.nix | 17 + modules/nixos/base/packages.nix | 124 ++++++ modules/nixos/base/programs.nix | 17 + modules/nixos/base/services.nix | 16 + modules/nixos/base/users.nix | 12 + mun.nix | 12 + 18 files changed, 938 insertions(+), 216 deletions(-) create mode 100644 README.md create mode 100644 modules/home/hyprland/default.nix create mode 100644 modules/nixos/base/boot.nix create mode 100644 modules/nixos/base/default.nix create mode 100644 modules/nixos/base/graphics.nix create mode 100644 modules/nixos/base/networking.nix create mode 100644 modules/nixos/base/nix.nix create mode 100644 modules/nixos/base/packages.nix create mode 100644 modules/nixos/base/programs.nix create mode 100644 modules/nixos/base/services.nix create mode 100644 modules/nixos/base/users.nix (limited to 'hardware-configuration.nix') 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 -- cgit v1.2.3