aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNatasha Nightshade <31557030-TashaTheInnkeeper@users.noreply.gitlab.com>2026-02-02 13:35:51 +0100
committerNatasha Nightshade <31557030-TashaTheInnkeeper@users.noreply.gitlab.com>2026-02-02 13:35:51 +0100
commit0423ac08769fce26e4a75ea382874c06d97526f6 (patch)
tree9d8a1a934ecf582502f556cc61af0da687840d70
parent5c741252de752af281628dd7c8c780c746236088 (diff)
parent0ed5c638945192dc5e4a099fded4db164ba603a2 (diff)
Merge branch 'master' into 'main'
merge master into main See merge request natasha-linux/nixos/dots!1
-rw-r--r--README.md581
-rwxr-xr-xconfiguration.nix263
-rwxr-xr-xhardware-configuration.nix6
-rw-r--r--modules/home/hyprland/chernobyl/default.nix10
-rw-r--r--modules/home/hyprland/chernobyl/dunst.nix44
-rw-r--r--modules/home/hyprland/chernobyl/fastfetch.nix83
-rw-r--r--modules/home/hyprland/chernobyl/hyprland.nix7
-rw-r--r--modules/home/hyprland/chernobyl/kitty.nix7
-rw-r--r--modules/home/hyprland/default.nix10
-rw-r--r--modules/home/i3wm/default.nix17
-rw-r--r--modules/home/i3wm/dunst.nix45
-rw-r--r--modules/home/i3wm/i3.nix130
-rw-r--r--modules/home/i3wm/kitty.nix45
-rw-r--r--modules/home/i3wm/neovim.nix101
-rw-r--r--modules/home/i3wm/nnn.nix7
-rw-r--r--modules/home/i3wm/picom.nix24
-rw-r--r--modules/home/i3wm/polybar.nix181
-rw-r--r--modules/home/i3wm/rofi.nix13
-rw-r--r--modules/home/i3wm/scripts.nix31
-rw-r--r--modules/home/i3wm/xdg.nix16
-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
-rw-r--r--modules/nixos/hyprland.nix0
-rwxr-xr-xmun.nix557
31 files changed, 1664 insertions, 801 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 2271492..e3cb894 100755
--- a/configuration.nix
+++ b/configuration.nix
@@ -1,268 +1,15 @@
{ config, lib, pkgs, ... }:
-let
- get_spotify_status = pkgs.writeShellScript "get_spotify_status.sh" ''
- #!/bin/bash
- PARENT_BAR="example"
- PARENT_BAR_PID=$(pgrep -a "polybar" | grep "$PARENT_BAR" | cut -d" " -f1)
- PLAYER="playerctld"
- FORMAT="{{ title }} - {{ artist }}"
-
- update_hooks() {
- while IFS= read -r id; do
- polybar-msg -p "$id" hook spotify-play-pause $2 1>/dev/null 2>&1
- done < <(echo "$1")
- }
-
- PLAYERCTL_STATUS=$(playerctl --player=$PLAYER status 2>/dev/null)
- EXIT_CODE=$?
-
- if [ $EXIT_CODE -eq 0 ]; then
- STATUS=$PLAYERCTL_STATUS
- else
- STATUS="No player is running"
- fi
-
- if [ "$1" == "--status" ]; then
- echo "$STATUS"
- else
- if [ "$STATUS" = "Stopped" ]; then
- echo "Music Stopped"
- elif [ "$STATUS" = "Paused" ]; then
- update_hooks "$PARENT_BAR_PID" 2
- playerctl --player=$PLAYER metadata --format "$FORMAT"
- elif [ "$STATUS" = "No player is running" ]; then
- echo "Music Off"
- else
- update_hooks "$PARENT_BAR_PID" 1
- playerctl --player=$PLAYER metadata --format "$FORMAT"
- fi
- fi
- '';
-
- hidePolybarInFullscreen = pkgs.writeShellScript "hidePolybarInFullscreen.sh" ''
- #!/usr/bin/env bash
- sleep 1
- i3-msg -t subscribe -m '[ "window" ]' | while read -r event; do
- if echo "$event" | grep -q '"fullscreen_mode":[[:space:]]*1'; then
- polybar-msg cmd hide
- elif echo "$event" | grep -q '"fullscreen_mode":[[:space:]]*0'; then
- polybar-msg cmd show
- fi
- done
- '';
-in
{
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 = {
- # Hide the OS choice for bootloaders.
- # It's still possible to open the bootloader list by pressing any key
- # It will just not appear on screen unless a key is pressed
- timeout = 0;
-
- efi = {
- canTouchEfiVariables = true;
- efiSysMountPoint = "/boot";
- };
- grub = {
- enable = false;
- device = "nodev";
- useOSProber = true;
- efiSupport = true;
- };
- systemd-boot = {
- enable = true;
- consoleMode = "keep";
- configurationLimit = 5;
- };
- };
- plymouth = {
- enable = true;
- 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 8419d66..0dc8341 100755
--- a/hardware-configuration.nix
+++ b/hardware-configuration.nix
@@ -1,11 +1,11 @@
-# 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, ... }:
{
- imports =
- [ (modulesPath + "/installer/scan/not-detected.nix")
+ imports = [
+ (modulesPath + "/installer/scan/not-detected.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
new file mode 100644
index 0000000..68ffecc
--- /dev/null
+++ b/modules/home/hyprland/chernobyl/default.nix
@@ -0,0 +1,10 @@
+{ ... }:
+
+{
+ 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
new file mode 100644
index 0000000..b51a4a8
--- /dev/null
+++ b/modules/home/hyprland/chernobyl/dunst.nix
@@ -0,0 +1,44 @@
+{ pkgs, ... }:
+
+{
+ 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/fastfetch.nix b/modules/home/hyprland/chernobyl/fastfetch.nix
new file mode 100644
index 0000000..1e90196
--- /dev/null
+++ b/modules/home/hyprland/chernobyl/fastfetch.nix
@@ -0,0 +1,83 @@
+{ pkgs, ... }:
+
+{
+ programs.fastfetch = {
+ enable = true;
+ extraConfig = ''
+{
+ "$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json",
+ "logo": {
+ "padding": { "top": 2 },
+ "type": "small"
+ },
+ "display": {
+ "separator": " -> "
+ },
+ "modules": [
+ "break",
+ {
+ "type": "title",
+ "keyWidth": 10,
+ "format": " {6}{7}{8}"
+ },
+ {
+ "type": "custom",
+ "format": " ─────────────────────────── "
+ },
+ {
+ "type": "kernel",
+ "key": " ",
+ "keyColor": "yellow"
+ },
+ {
+ "type": "command",
+ "key": " ",
+ "keyColor": "blue",
+ "text": "echo Jakoolit: v$DOTS_VERSION"
+ },
+ {
+ "type": "wm",
+ "key": " ",
+ "keyColor": "magenta"
+ },
+ {
+ "type": "shell",
+ "key": " ",
+ "keyColor": "yellow"
+ },
+ {
+ "type": "terminal",
+ "key": " ",
+ "keyColor": "blue"
+ },
+ {
+ "type": "memory",
+ "key": "󰍛 ",
+ "keyColor": "magenta",
+ "format": "{1} / {2}"
+ },
+ {
+ "type": "uptime",
+ "key": "󰔛 ",
+ "keyColor": "green"
+ },
+ {
+ "type": "command",
+ "key": "󱦟 ",
+ "keyColor": "magenta",
+ "text": "echo $(( ($(date +%s) - $(stat -c %W /)) / 86400 )) days"
+ },
+ {
+ "type": "custom",
+ "format": " ─────────────────────────── "
+ },
+ {
+ "type": "custom",
+ "format": " \u001b[31m \u001b[32m \u001b[33m \u001b[34m \u001b[35m \u001b[36m \u001b[37m \u001b[90m "
+ },
+ "break"
+ ]
+}
+ '';
+ };
+}
diff --git a/modules/home/hyprland/chernobyl/hyprland.nix b/modules/home/hyprland/chernobyl/hyprland.nix
new file mode 100644
index 0000000..8712df9
--- /dev/null
+++ b/modules/home/hyprland/chernobyl/hyprland.nix
@@ -0,0 +1,7 @@
+{ pkgs, ... }:
+
+{
+ programs.hyprland = {
+ enable = true;
+ };
+} \ No newline at end of file
diff --git a/modules/home/hyprland/chernobyl/kitty.nix b/modules/home/hyprland/chernobyl/kitty.nix
new file mode 100644
index 0000000..11d4054
--- /dev/null
+++ b/modules/home/hyprland/chernobyl/kitty.nix
@@ -0,0 +1,7 @@
+{ pkgs, ... }:
+
+{
+ programs.kitty = {
+ enable = true;
+ };
+} \ 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
new file mode 100644
index 0000000..c861b04
--- /dev/null
+++ b/modules/home/i3wm/default.nix
@@ -0,0 +1,17 @@
+{ ... }:
+
+{
+ # i3wm home-manager configuration orchestrator
+ imports = [
+ ./dunst.nix
+ ./i3.nix
+ ./kitty.nix
+ ./neovim.nix
+ ./nnn.nix
+ ./picom.nix
+ ./polybar.nix
+ ./rofi.nix
+ ./scripts.nix
+ ./xdg.nix
+ ];
+} \ No newline at end of file
diff --git a/modules/home/i3wm/dunst.nix b/modules/home/i3wm/dunst.nix
new file mode 100644
index 0000000..6f217d9
--- /dev/null
+++ b/modules/home/i3wm/dunst.nix
@@ -0,0 +1,45 @@
+{ config, pkgs, lib, ... }:
+
+{
+ 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/i3wm/i3.nix b/modules/home/i3wm/i3.nix
new file mode 100644
index 0000000..35ce6de
--- /dev/null
+++ b/modules/home/i3wm/i3.nix
@@ -0,0 +1,130 @@
+{ config, pkgs, lib, ... }:
+
+{
+ xsession.windowManager.i3 = {
+ enable = true;
+ config.bars = [];
+
+ extraConfig = ''
+ # i3 config
+ set $mod Mod4
+ font pango:Fira Code 10
+
+ exec --no-startup-id dex-autostart --autostart --environment i3
+ exec --no-startup-id xss-lock --transfer-sleep-lock -- i3lock-fancy-rapid 5 3 --nofork
+ exec --no-startup-id nm-applet
+ exec --no-startup-id blueman-applet
+ exec_always --no-startup-id sh -c "sleep 1 && picom --config ~/.config/picom/picom.conf"
+ exec --no-startup-id -merge ~/.Xresources
+ exec_always --no-startup-id feh --bg-scale ~/Pictures/wallpapers/vox.jpg
+ exec_always --no-startup-id sh -c "killall -q polybar; sleep 1; polybar example --config=~/.config/polybar/config.ini &"
+ exec_always --no-startup-id polybar-hide-on-fullscreen
+ exec --no-startup-id flameshot
+
+ gaps top 60
+
+ bindsym XF86MonBrightnessDown exec brightnessctl set 10%-
+ bindsym XF86MonBrightnessUp exec brightnessctl set +10%
+ bindsym XF86AudioMute exec amixer set Master toggle
+ bindsym XF86AudioLowerVolume exec amixer set Master 5%-
+ bindsym XF86AudioRaiseVolume exec amixer set Master 5%+
+ bindsym XF86AudioMicMute exec amixer set Capture toggle
+
+ floating_modifier $mod
+
+ bindsym $mod+Shift+s exec flameshot gui
+ bindsym $mod+Return exec kitty
+ bindsym $mod+Control+l exec --no-startup-id i3lock-fancy-rapid 5 3
+ bindsym $mod+m exec rofi -show drun
+ bindsym $mod+Shift+m exec kitty nnn
+ bindsym $mod+n exec firefox
+ bindsym $mod+Shift+q kill
+
+ bindsym $mod+j focus left
+ bindsym $mod+k focus down
+ bindsym $mod+l focus up
+ bindsym $mod+uring focus right
+
+ bindsym $mod+Shift+j move left
+ bindsym $mod+Shift+k move down
+ bindsym $mod+Shift+l move up
+ bindsym $mod+Shift+uring move right
+
+ bindsym $mod+h split h
+ bindsym $mod+v split v
+ bindsym $mod+f fullscreen toggle
+ bindsym $mod+s layout stacking
+ bindsym $mod+w layout tabbed
+ bindsym $mod+e layout toggle split
+ bindsym $mod+Shift+space floating toggle
+ bindsym $mod+space focus mode_toggle
+ bindsym $mod+a focus parent
+
+ set $ws1 "1"
+ set $ws2 "2"
+ set $ws3 "3"
+ set $ws4 "4"
+ set $ws5 "5"
+ set $ws6 "6"
+ set $ws7 "7"
+ set $ws8 "8"
+ set $ws9 "9"
+ set $ws10 "10"
+
+ bindsym $mod+plus workspace number $ws1
+ bindsym $mod+ecaron workspace number $ws2
+ bindsym $mod+scaron workspace number $ws3
+ bindsym $mod+ccaron workspace number $ws4
+ bindsym $mod+rcaron workspace number $ws5
+ bindsym $mod+zcaron workspace number $ws6
+ bindsym $mod+yacute workspace number $ws7
+ bindsym $mod+aacute workspace number $ws8
+ bindsym $mod+iacute workspace number $ws9
+ bindsym $mod+eacute workspace number $ws10
+
+ bindsym $mod+Shift+plus move container to workspace number $ws1
+ bindsym $mod+Shift+ecaron move container to workspace number $ws2
+ bindsym $mod+Shift+scaron move container to workspace number $ws3
+ bindsym $mod+Shift+ccaron move container to workspace number $ws4
+ bindsym $mod+Shift+rcaron move container to workspace number $ws5
+ bindsym $mod+Shift+zcaron move container to workspace number $ws6
+ bindsym $mod+Shift+yacute move container to workspace number $ws7
+ bindsym $mod+Shift+aacute move container to workspace number $ws8
+ bindsym $mod+Shift+iacute move container to workspace number $ws9
+ bindsym $mod+Shift+eacute move container to workspace number $ws10
+
+ bindsym $mod+Shift+c reload
+ bindsym $mod+Shift+r restart
+ bindsym $mod+Shift+e exec "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -B 'Yes, exit i3' 'i3-msg exit'"
+
+ mode "resize" {
+ bindsym j resize shrink width 5 px or 5 ppt
+ bindsym k resize grow height 5 px or 5 ppt
+ bindsym l resize shrink height 5 px or 5 ppt
+ bindsym uring resize grow width 5 px or 5 ppt
+
+ bindsym Left resize shrink width 5 px or 5 ppt
+ bindsym Down resize grow height 5 px or 5 ppt
+ bindsym Up resize shrink height 5 px or 5 ppt
+ bindsym Right resize grow width 5 px or 5 ppt
+
+ bindsym Return mode "default"
+ bindsym Escape mode "default"
+ bindsym $mod+r mode "default"
+ }
+
+ bindsym $mod+r mode "resize"
+
+ client.focused #FFFFFF #FFFFFF #FFFFFF #FFFFFF #b12cbf
+ client.focused_inactive #8C8C8C #4C4C4C #FFFFFF #4C4C4C #FFFFFF
+ client.unfocused #4C4C4C #222222 #888888 #292D2E #500096
+ client.urgent #EC69A0 #DB3279 #FFFFFF #DB3279 #DB3279
+ client.placeholder #000000 #0C0C0C #FFFFFF #000000 #FFFFFF
+ client.background #FFFFFF
+
+ default_border pixel 3
+ default_floating_border pixel 3
+ hide_edge_borders smart
+ '';
+ };
+} \ No newline at end of file
diff --git a/modules/home/i3wm/kitty.nix b/modules/home/i3wm/kitty.nix
new file mode 100644
index 0000000..17b220d
--- /dev/null
+++ b/modules/home/i3wm/kitty.nix
@@ -0,0 +1,45 @@
+{ config, pkgs, lib, ... }:
+
+{
+ programs.kitty = {
+ enable = true;
+ extraConfig = ''
+ confirm_os_window_close 0
+ font_family Fira Code
+ bold_font Fira Code Bold
+ italic_font Fira Code Light
+ shell_integration no-cursor
+ cursor_shape beam
+ window_padding_width 7
+ window_padding_height 10
+ scrollback_lines 3000
+ font_size 11
+ map ctrl+shift+plus change_font_size all +1.0
+ map ctrl+shift+minus change_font_size all -1.0
+ background_opacity 0.7
+
+ cursor #AC82E9
+ selection_background #d8cab8
+ selection_foreground #141216
+ background #141216
+ foreground #d8cab8
+
+ color0 #2b2135
+ color8 #92fcfa
+ color1 #fc4649
+ color9 #fc4649
+ color2 #c4e881
+ color10 #c4e881
+ color3 #AC82E9
+ color11 #AC82E9
+ color4 #7b91fc
+ color12 #7b91fc
+ color5 #f3fc7b
+ color13 #f3fc7b
+ color6 #8F56E1
+ color14 #8F56E1
+ color7 #fc92fc
+ color15 #d8cab8
+ '';
+ };
+} \ No newline at end of file
diff --git a/modules/home/i3wm/neovim.nix b/modules/home/i3wm/neovim.nix
new file mode 100644
index 0000000..e59fd3d
--- /dev/null
+++ b/modules/home/i3wm/neovim.nix
@@ -0,0 +1,101 @@
+{ pkgs, ... }:
+
+{
+ programs.neovim = {
+ enable = true;
+ defaultEditor = true;
+ viAlias = true;
+ vimAlias = true;
+ withNodeJs = true;
+
+ # +ANT FIX
+ plugins = []; # disable HM plugin processing
+
+ extraLuaConfig = ''
+ -- LazyVim bootstrap
+ local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
+ if not vim.loop.fs_stat(lazypath) then
+ vim.fn.system({
+ "git", "clone", "--filter=blob:none",
+ "https://github.com/folke/lazy.nvim.git",
+ "--branch=stable", lazypath,
+ })
+ end
+ vim.opt.rtp:prepend(lazypath)
+
+ require("lazy").setup({
+ spec = {
+ { "LazyVim/LazyVim", import = "lazyvim.plugins" },
+ { import = "lazyvim.plugins.extras.lang.tex" },
+ { import = "lazyvim.plugins.extras.lang.markdown" },
+ { import = "lazyvim.plugins.extras.ui.mini-animate" },
+ { import = "lazyvim.plugins.extras.lang.typescript" },
+ { import = "lazyvim.plugins.extras.lang.python" },
+ { import = "lazyvim.plugins.extras.lang.rust" },
+ { import = "lazyvim.plugins.extras.lang.nix" },
+
+ {
+ "lervag/vimtex",
+ lazy = false,
+ init = function()
+ vim.g.vimtex_view_method = "zathura"
+ end
+ },
+
+ {
+ "MeanderingProgrammer/render-markdown.nvim",
+ opts = {
+ enabled = true,
+ file_types = { "markdown", "rmd" },
+ colorscheme = "default",
+ },
+ dependencies = {
+ "nvim-treesitter/nvim-treesitter",
+ "nvim-tree/nvim-web-devicons",
+ },
+ },
+
+ { "mracos/mermaid.vim", ft = { "mermaid" } },
+ },
+
+ defaults = { lazy = false, version = false },
+ checker = { enabled = true },
+
+ performance = {
+ rtp = {
+ disabled_plugins = {
+ "gzip", "tarPlugin", "tohtml",
+ "tutor", "zipPlugin",
+ },
+ },
+ },
+ })
+
+ -- LaTeX wrapping
+ vim.api.nvim_create_autocmd("FileType", {
+ pattern = "tex",
+ callback = function()
+ vim.opt_local.wrap = true
+ vim.opt_local.linebreak = true
+ vim.opt_local.breakindent = true
+ vim.opt_local.breakindentopt = "shift:2"
+ vim.opt_local.textwidth = 0
+ end,
+ })
+
+ -- Disable diagnostics in markdown
+ vim.api.nvim_create_autocmd("FileType", {
+ pattern = "markdown",
+ callback = function()
+ vim.diagnostic.disable(0)
+ end,
+ })
+
+ -- Nix LSP
+ local lspconfig = require("lspconfig")
+ lspconfig.nil_ls.setup({ cmd = { "nil" } })
+
+ vim.opt.clipboard = "unnamedplus"
+ '';
+ };
+} \ No newline at end of file
diff --git a/modules/home/i3wm/nnn.nix b/modules/home/i3wm/nnn.nix
new file mode 100644
index 0000000..74b7dcb
--- /dev/null
+++ b/modules/home/i3wm/nnn.nix
@@ -0,0 +1,7 @@
+{ pkgs, ... }:
+{
+ programs.nnn = {
+ enable = true;
+ package = pkgs.nnn.override { withNerdIcons = true; };
+ };
+} \ No newline at end of file
diff --git a/modules/home/i3wm/picom.nix b/modules/home/i3wm/picom.nix
new file mode 100644
index 0000000..d5f460f
--- /dev/null
+++ b/modules/home/i3wm/picom.nix
@@ -0,0 +1,24 @@
+{ config, pkgs, lib, ... }:
+
+{
+ services.picom = {
+ enable = true;
+ backend = "glx";
+ vSync = true;
+ inactiveOpacity = 0.9;
+ activeOpacity = 1.0;
+ fade = true;
+ fadeSteps = [ 0.09 0.09 ];
+ fadeDelta = 5;
+ shadow = true;
+ shadowOffsets = [ 12 12 ];
+ shadowOpacity = 0.5;
+ shadowExclude = [
+ "class_g = 'Polybar'"
+ "name = 'Polybar'"
+ ];
+ settings = {
+ corner-radius = 15;
+ };
+ };
+} \ No newline at end of file
diff --git a/modules/home/i3wm/polybar.nix b/modules/home/i3wm/polybar.nix
new file mode 100644
index 0000000..95130cf
--- /dev/null
+++ b/modules/home/i3wm/polybar.nix
@@ -0,0 +1,181 @@
+{ config, pkgs, lib, ... }:
+
+
+{
+ services.polybar = {
+ enable = true;
+
+ extraConfig = let
+ colors = {
+ background = "#1c182d";
+ background-alt = "#2b1b3d";
+ foreground = "#d0b6fd";
+ primary = "#cfb5fd";
+ secondary = "#8a78b0";
+ alert = "#7b91fc";
+ disabled = "#707880";
+ };
+ in ''
+ [bar/example]
+ width = 98%
+ height = 30pt
+ radius = 15
+ offset-x = 1%
+ offset-y = 1%
+ override-redirect = true
+ fixed-center = true
+ enable-ipc = true
+
+ background = ${colors.background}
+ foreground = ${colors.foreground}
+
+ line-size = 4pt
+ border-size = Opt
+ border-color = #00000000
+
+ padding-left = 1
+ padding-right = 1
+ module-margin = 1
+
+ separator = |
+ separator-foreground = ${colors.disabled}
+
+ font-0 = fira code;2
+
+ modules-left = xworkspaces spotify spotify-prev spotify-play-pause spotify-next
+ modules-center = date
+ modules-right = filesystem memory cpu pulseaudio-devices wlan xkeyboard battery
+
+ [module/systray]
+ type = internal/tray
+ format-margin = 8pt
+ tray-spacing = 16pt
+
+ [module/xworkspaces]
+ type = internal/xworkspaces
+ label-active = %name%
+ label-active-background = ${colors.background-alt}
+ label-active-underline = ${colors.primary}
+ label-active-padding = 1
+ label-occupied = %name%
+ label-occupied-padding = 1
+ label-urgent = %name%
+ label-urgent-background = ${colors.alert}
+ label-urgent-padding = 1
+ label-empty = %name%
+ label-empty-foreground = ${colors.disabled}
+ label-empty-padding = 1
+
+ [module/xwindow]
+ type = internal/xwindow
+ label = %title:0:60:...%
+
+ [module/filesystem]
+ type = internal/fs
+ interval = 25
+ mount-0 = /
+ label-mounted = %{F#F0C674}%mountpoint%%{F-} %percentage_used%%
+ label-unmounted = %mountpoint% not mounted
+ label-unmounted-foreground = ${colors.disabled}
+
+ [module/pulseaudio]
+ type = internal/pulseaudio
+ format-volume-prefix = "VOL "
+ format-volume-prefix-foreground = ${colors.primary}
+ format-volume = <label-volume>
+ label-volume = %percentage%%
+ label-muted = muted
+ label-muted-foreground = ${colors.disabled}
+
+ [module/xkeyboard]
+ type = internal/xkeyboard
+ blacklist-0 = num lock
+ label-layout = %layout%
+ label-layout-foreground = ${colors.primary}
+ label-indicator-padding = 2
+ label-indicator-margin = 1
+ label-indicator-foreground = ${colors.background}
+ label-indicator-background = ${colors.secondary}
+
+ [module/memory]
+ type = internal/memory
+ interval = 2
+ format-prefix = "RAM "
+ format-prefix-foreground = ${colors.primary}
+ label = %percentage_used:2%%
+
+ [module/cpu]
+ type = internal/cpu
+ interval = 2
+ format-prefix = "CPU "
+ format-prefix-foreground = ${colors.primary}
+ label = %percentage:2%%
+
+ [network-base]
+ type = internal/network
+ interval = 5
+ format-connected = <label-connected>
+ format-disconnected = <label-disconnected>
+ label-disconnected = %{F#F0C674}%ifname%%{F#707880} disconnected
+
+ [module/wlan]
+ inherit = network-base
+ interface-type = wireless
+ label-connected = %{F#F0C674}%ifname%%{F-} %essid%
+
+ [module/eth]
+ inherit = network-base
+ interface-type = wired
+ label-connected = %{F#F0C674}%ifname%%{F-}
+
+ [module/date]
+ type = internal/date
+ interval = 1
+ date = %H:%M
+ date-alt = %Y-%m-%d %H:%M:%S
+ label = %date%
+ label-foreground = ${colors.primary}
+
+ [settings]
+ screenchange-reload = true
+ pseudo-transparency = true
+
+ [module/battery]
+ type = internal/battery
+ full-at = 100
+ low-at = 15
+ battery = BAT0
+ adapter = ADP1
+ poll-interval = 5
+
+ [module/spotify]
+ type = custom/script
+ tail = true
+ interval = 1
+ format-prefix = "♫"
+ format = <label>
+ exec = get-spotify-status
+
+ [module/spotify-prev]
+ type = custom/script
+ exec = echo "◀◀"
+ format = <label>
+ click-left = playerctl previous -p spotify
+
+ [module/spotify-play-pause]
+ type = custom/ipc
+ hook-0 = echo "▶"
+ hook-1 = echo "▶"
+ initial = 1
+ click-left = playerctl play-pause -p spotify
+
+ [module/spotify-next]
+ type = custom/script
+ exec = echo "▶▶"
+ format = <label>
+ click-left = playerctl next -p spotify
+ '';
+
+ script = "polybar example --config=~/.config/polybar/config.ini &";
+ };
+} \ No newline at end of file
diff --git a/modules/home/i3wm/rofi.nix b/modules/home/i3wm/rofi.nix
new file mode 100644
index 0000000..9332efd
--- /dev/null
+++ b/modules/home/i3wm/rofi.nix
@@ -0,0 +1,13 @@
+{ pkgs, ... }:
+
+{
+ programs.rofi = {
+ enable = true;
+ location = "center";
+ cycle = true;
+ theme = "purple";
+ terminal = "${pkgs.kitty}/bin/kitty";
+ modes = [ "drun" "ssh" "emoji" "calc" ];
+ plugins = with pkgs; [ rofi-emoji rofi-calc ];
+ };
+} \ No newline at end of file
diff --git a/modules/home/i3wm/scripts.nix b/modules/home/i3wm/scripts.nix
new file mode 100644
index 0000000..4eb0b61
--- /dev/null
+++ b/modules/home/i3wm/scripts.nix
@@ -0,0 +1,31 @@
+{ pkgs, ... }:
+
+{
+ home.packages = [
+ (pkgs.writeShellScriptBin "get-spotify-status" ''
+ PARENT_BAR="example"
+ PLAYER="playerctld"
+ FORMAT="{{ title }} - {{ artist }}"
+
+ PLAYERCTL_STATUS=$(playerctl --player=$PLAYER status 2>/dev/null)
+
+ if [ "$PLAYERCTL_STATUS" = "Playing" ]; then
+ playerctl --player=$PLAYER metadata --format "$FORMAT"
+ elif [ "$PLAYERCTL_STATUS" = "Paused" ]; then
+ echo "Paused"
+ else
+ echo "No music"
+ fi
+ '')
+
+ (pkgs.writeShellScriptBin "polybar-hide-on-fullscreen" ''
+ i3-msg -t subscribe -m '[ "window" ]' | while read -r event; do
+ if echo "$event" | grep -q '"fullscreen_mode":[[:space:]]*1'; then
+ polybar-msg cmd hide
+ elif echo "$event" | grep -q '"fullscreen_mode":[[:space:]]*0'; then
+ polybar-msg cmd show
+ fi
+ done
+ '')
+ ];
+} \ No newline at end of file
diff --git a/modules/home/i3wm/xdg.nix b/modules/home/i3wm/xdg.nix
new file mode 100644
index 0000000..7590ea8
--- /dev/null
+++ b/modules/home/i3wm/xdg.nix
@@ -0,0 +1,16 @@
+{ pkgs, ... }:
+
+{
+ xdg = {
+ enable = true;
+
+ mimeApps = {
+ enable = true;
+ defaultApplications = {
+ "text/plain" = [ "nvim.desktop" ];
+ "text/markdown" = [ "nvim.desktop" ];
+ "text/x-markdown" = [ "nvim.desktop" ];
+ };
+ };
+ };
+} \ No newline at end of file
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/modules/nixos/hyprland.nix b/modules/nixos/hyprland.nix
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/modules/nixos/hyprland.nix
diff --git a/mun.nix b/mun.nix
index 6fe06b6..3a33387 100755
--- a/mun.nix
+++ b/mun.nix
@@ -1,8 +1,9 @@
{ config, lib, pkgs, ... }:
-
{
imports = [
+ #./modules/home/hyprland/default.nix
+ ./modules/home/i3wm/default.nix
];
home = {
username = "mun";
@@ -10,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
@@ -26,23 +39,8 @@
};
};
- gtk.cursorTheme = {
- package = pkgs.rose-pine-cursor;
- name = "RosePine";
- };
-
- xdg = {
- enable = true;
- mimeApps = {
- enable = true;
- defaultApplications = {
- "text/plain" = [ "nvim.desktop" ];
- "text/markdown" = [ "nvim.desktop" ];
- "text/x-markdown" = [ "nvim.desktop" ];
- };
- };
- };
+
programs = {
ssh = {
@@ -74,532 +72,11 @@
fastfetch
'';
};
-
- rofi = {
- enable = true;
- location = "center";
- cycle = true;
- theme = "purple";
- terminal = "${pkgs.kitty}/bin/kitty";
- modes = [ "drun" "ssh" "emoji" "calc" ];
- plugins = with pkgs; [ rofi-emoji rofi-calc ];
- };
-
- nnn = {
- enable = true;
- package = pkgs.nnn.override { withNerdIcons = true; };
- };
-
- neovim = {
- enable = true;
- defaultEditor = true;
- viAlias = true;
- vimAlias = true;
- withNodeJs = true;
-
- # +ANT FIX
- plugins = []; # disable HM plugin processing
-
- extraLuaConfig = ''
- -- LazyVim bootstrap
- local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
- if not vim.loop.fs_stat(lazypath) then
- vim.fn.system({
- "git", "clone", "--filter=blob:none",
- "https://github.com/folke/lazy.nvim.git",
- "--branch=stable", lazypath,
- })
- end
- vim.opt.rtp:prepend(lazypath)
-
- require("lazy").setup({
- spec = {
- { "LazyVim/LazyVim", import = "lazyvim.plugins" },
- { import = "lazyvim.plugins.extras.lang.tex" },
- { import = "lazyvim.plugins.extras.lang.markdown" },
- { import = "lazyvim.plugins.extras.ui.mini-animate" },
- { import = "lazyvim.plugins.extras.lang.typescript" },
- { import = "lazyvim.plugins.extras.lang.python" },
- { import = "lazyvim.plugins.extras.lang.rust" },
- { import = "lazyvim.plugins.extras.lang.nix" },
-
- {
- "lervag/vimtex",
- lazy = false,
- init = function()
- vim.g.vimtex_view_method = "zathura"
- end
- },
-
- {
- "MeanderingProgrammer/render-markdown.nvim",
- opts = {
- enabled = true,
- file_types = { "markdown", "rmd" },
- colorscheme = "default",
- },
- dependencies = {
- "nvim-treesitter/nvim-treesitter",
- "nvim-tree/nvim-web-devicons",
- },
- },
-
- { "mracos/mermaid.vim", ft = { "mermaid" } },
- },
-
- defaults = { lazy = false, version = false },
- checker = { enabled = true },
-
- performance = {
- rtp = {
- disabled_plugins = {
- "gzip", "tarPlugin", "tohtml",
- "tutor", "zipPlugin",
- },
- },
- },
- })
-
- -- LaTeX wrapping
- vim.api.nvim_create_autocmd("FileType", {
- pattern = "tex",
- callback = function()
- vim.opt_local.wrap = true
- vim.opt_local.linebreak = true
- vim.opt_local.breakindent = true
- vim.opt_local.breakindentopt = "shift:2"
- vim.opt_local.textwidth = 0
- end,
- })
-
- -- Disable diagnostics in markdown
- vim.api.nvim_create_autocmd("FileType", {
- pattern = "markdown",
- callback = function()
- vim.diagnostic.disable(0)
- end,
- })
-
- -- Nix LSP
- local lspconfig = require("lspconfig")
- lspconfig.nil_ls.setup({ cmd = { "nil" } })
-
- vim.opt.clipboard = "unnamedplus"
- '';
- };
-
- kitty = {
- enable = true;
- extraConfig = ''
- confirm_os_window_close 0
- font_family Fira Code
- bold_font Fira Code Bold
- italic_font Fira Code Light
- shell_integration no-cursor
- cursor_shape beam
- window_padding_width 7
- window_padding_height 10
- scrollback_lines 3000
- font_size 11
- map ctrl+shift+plus change_font_size all +1.0
- map ctrl+shift+minus change_font_size all -1.0
- background_opacity 0.7
-
- cursor #AC82E9
- selection_background #d8cab8
- selection_foreground #141216
- background #141216
- foreground #d8cab8
-
- color0 #2b2135
- color8 #92fcfa
- color1 #fc4649
- color9 #fc4649
- color2 #c4e881
- color10 #c4e881
- color3 #AC82E9
- color11 #AC82E9
- color4 #7b91fc
- color12 #7b91fc
- color5 #f3fc7b
- color13 #f3fc7b
- color6 #8F56E1
- color14 #8F56E1
- color7 #fc92fc
- color15 #d8cab8
- '';
- };
- };
-
- xsession.windowManager.i3 = {
- enable = true;
- config.bars = [];
-
- extraConfig = ''
- # i3 config
- set $mod Mod4
- font pango:Fira Code 10
-
- exec --no-startup-id dex-autostart --autostart --environment i3
- exec --no-startup-id xss-lock --transfer-sleep-lock -- i3lock-fancy-rapid 5 3 --nofork
- exec --no-startup-id nm-applet
- exec --no-startup-id blueman-applet
- exec_always --no-startup-id sh -c "sleep 1 && picom --config ~/.config/picom/picom.conf"
- exec --no-startup-id -merge ~/.Xresources
- exec_always --no-startup-id feh --bg-scale ~/Pictures/wallpapers/vox.jpg
- exec_always --no-startup-id sh -c "killall -q polybar; sleep 1; polybar example --config=~/.config/polybar/config.ini &"
- exec_always --no-startup-id ${hidePolybarInFullscreen}
- exec --no-startup-id flameshot
-
- gaps top 60
-
- bindsym XF86MonBrightnessDown exec brightnessctl set 10%-
- bindsym XF86MonBrightnessUp exec brightnessctl set +10%
- bindsym XF86AudioMute exec amixer set Master toggle
- bindsym XF86AudioLowerVolume exec amixer set Master 5%-
- bindsym XF86AudioRaiseVolume exec amixer set Master 5%+
- bindsym XF86AudioMicMute exec amixer set Capture toggle
-
- floating_modifier $mod
-
- bindsym $mod+Shift+s exec flameshot gui
- bindsym $mod+Return exec kitty
- bindsym $mod+Control+l exec --no-startup-id i3lock-fancy-rapid 5 3
- bindsym $mod+m exec rofi -show drun
- bindsym $mod+Shift+m exec kitty nnn
- bindsym $mod+n exec firefox
- bindsym $mod+Shift+q kill
-
- bindsym $mod+j focus left
- bindsym $mod+k focus down
- bindsym $mod+l focus up
- bindsym $mod+uring focus right
-
- bindsym $mod+Shift+j move left
- bindsym $mod+Shift+k move down
- bindsym $mod+Shift+l move up
- bindsym $mod+Shift+uring move right
-
- bindsym $mod+h split h
- bindsym $mod+v split v
- bindsym $mod+f fullscreen toggle
- bindsym $mod+s layout stacking
- bindsym $mod+w layout tabbed
- bindsym $mod+e layout toggle split
- bindsym $mod+Shift+space floating toggle
- bindsym $mod+space focus mode_toggle
- bindsym $mod+a focus parent
-
- set $ws1 "1"
- set $ws2 "2"
- set $ws3 "3"
- set $ws4 "4"
- set $ws5 "5"
- set $ws6 "6"
- set $ws7 "7"
- set $ws8 "8"
- set $ws9 "9"
- set $ws10 "10"
-
- bindsym $mod+plus workspace number $ws1
- bindsym $mod+ecaron workspace number $ws2
- bindsym $mod+scaron workspace number $ws3
- bindsym $mod+ccaron workspace number $ws4
- bindsym $mod+rcaron workspace number $ws5
- bindsym $mod+zcaron workspace number $ws6
- bindsym $mod+yacute workspace number $ws7
- bindsym $mod+aacute workspace number $ws8
- bindsym $mod+iacute workspace number $ws9
- bindsym $mod+eacute workspace number $ws10
-
- bindsym $mod+Shift+plus move container to workspace number $ws1
- bindsym $mod+Shift+ecaron move container to workspace number $ws2
- bindsym $mod+Shift+scaron move container to workspace number $ws3
- bindsym $mod+Shift+ccaron move container to workspace number $ws4
- bindsym $mod+Shift+rcaron move container to workspace number $ws5
- bindsym $mod+Shift+zcaron move container to workspace number $ws6
- bindsym $mod+Shift+yacute move container to workspace number $ws7
- bindsym $mod+Shift+aacute move container to workspace number $ws8
- bindsym $mod+Shift+iacute move container to workspace number $ws9
- bindsym $mod+Shift+eacute move container to workspace number $ws10
-
- bindsym $mod+Shift+c reload
- bindsym $mod+Shift+r restart
- bindsym $mod+Shift+e exec "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -B 'Yes, exit i3' 'i3-msg exit'"
-
- mode "resize" {
- bindsym j resize shrink width 5 px or 5 ppt
- bindsym k resize grow height 5 px or 5 ppt
- bindsym l resize shrink height 5 px or 5 ppt
- bindsym uring resize grow width 5 px or 5 ppt
-
- bindsym Left resize shrink width 5 px or 5 ppt
- bindsym Down resize grow height 5 px or 5 ppt
- bindsym Up resize shrink height 5 px or 5 ppt
- bindsym Right resize grow width 5 px or 5 ppt
-
- bindsym Return mode "default"
- bindsym Escape mode "default"
- bindsym $mod+r mode "default"
- }
-
- bindsym $mod+r mode "resize"
-
- client.focused #FFFFFF #FFFFFF #FFFFFF #FFFFFF #b12cbf
- client.focused_inactive #8C8C8C #4C4C4C #FFFFFF #4C4C4C #FFFFFF
- client.unfocused #4C4C4C #222222 #888888 #292D2E #500096
- client.urgent #EC69A0 #DB3279 #FFFFFF #DB3279 #DB3279
- client.placeholder #000000 #0C0C0C #FFFFFF #000000 #FFFFFF
- client.background #FFFFFF
-
- default_border pixel 3
- default_floating_border pixel 3
- hide_edge_borders smart
- '';
+
};
services = {
gnome-keyring.enable = true;
-
- 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;
- };
- };
- };
-
- polybar = {
- enable = true;
-
- extraConfig = let
- colors = {
- background = "#1c182d";
- background-alt = "#2b1b3d";
- foreground = "#d0b6fd";
- primary = "#cfb5fd";
- secondary = "#8a78b0";
- alert = "#7b91fc";
- disabled = "#707880";
- };
- in ''
- [bar/example]
- width = 98%
- height = 30pt
- radius = 15
- offset-x = 1%
- offset-y = 1%
- override-redirect = true
- fixed-center = true
- enable-ipc = true
-
- background = ${colors.background}
- foreground = ${colors.foreground}
-
- line-size = 4pt
- border-size = Opt
- border-color = #00000000
-
- padding-left = 1
- padding-right = 1
- module-margin = 1
-
- separator = |
- separator-foreground = ${colors.disabled}
-
- font-0 = fira code;2
-
- modules-left = xworkspaces spotify spotify-prev spotify-play-pause spotify-next
- modules-center = date
- modules-right = filesystem memory cpu pulseaudio-devices wlan xkeyboard battery
-
- [module/systray]
- type = internal/tray
- format-margin = 8pt
- tray-spacing = 16pt
-
- [module/xworkspaces]
- type = internal/xworkspaces
- label-active = %name%
- label-active-background = ${colors.background-alt}
- label-active-underline = ${colors.primary}
- label-active-padding = 1
- label-occupied = %name%
- label-occupied-padding = 1
- label-urgent = %name%
- label-urgent-background = ${colors.alert}
- label-urgent-padding = 1
- label-empty = %name%
- label-empty-foreground = ${colors.disabled}
- label-empty-padding = 1
-
- [module/xwindow]
- type = internal/xwindow
- label = %title:0:60:...%
-
- [module/filesystem]
- type = internal/fs
- interval = 25
- mount-0 = /
- label-mounted = %{F#F0C674}%mountpoint%%{F-} %percentage_used%%
- label-unmounted = %mountpoint% not mounted
- label-unmounted-foreground = ${colors.disabled}
-
- [module/pulseaudio]
- type = internal/pulseaudio
- format-volume-prefix = "VOL "
- format-volume-prefix-foreground = ${colors.primary}
- format-volume = <label-volume>
- label-volume = %percentage%%
- label-muted = muted
- label-muted-foreground = ${colors.disabled}
-
- [module/xkeyboard]
- type = internal/xkeyboard
- blacklist-0 = num lock
- label-layout = %layout%
- label-layout-foreground = ${colors.primary}
- label-indicator-padding = 2
- label-indicator-margin = 1
- label-indicator-foreground = ${colors.background}
- label-indicator-background = ${colors.secondary}
-
- [module/memory]
- type = internal/memory
- interval = 2
- format-prefix = "RAM "
- format-prefix-foreground = ${colors.primary}
- label = %percentage_used:2%%
-
- [module/cpu]
- type = internal/cpu
- interval = 2
- format-prefix = "CPU "
- format-prefix-foreground = ${colors.primary}
- label = %percentage:2%%
-
- [network-base]
- type = internal/network
- interval = 5
- format-connected = <label-connected>
- format-disconnected = <label-disconnected>
- label-disconnected = %{F#F0C674}%ifname%%{F#707880} disconnected
-
- [module/wlan]
- inherit = network-base
- interface-type = wireless
- label-connected = %{F#F0C674}%ifname%%{F-} %essid%
-
- [module/eth]
- inherit = network-base
- interface-type = wired
- label-connected = %{F#F0C674}%ifname%%{F-}
-
- [module/date]
- type = internal/date
- interval = 1
- date = %H:%M
- date-alt = %Y-%m-%d %H:%M:%S
- label = %date%
- label-foreground = ${colors.primary}
-
- [settings]
- screenchange-reload = true
- pseudo-transparency = true
-
- [module/battery]
- type = internal/battery
- full-at = 100
- low-at = 15
- battery = BAT0
- adapter = ADP1
- poll-interval = 5
-
- [module/spotify]
- type = custom/script
- tail = true
- interval = 1
- format-prefix = "♫"
- format = <label>
- exec = ${get_spotify_status}
-
- [module/spotify-prev]
- type = custom/script
- exec = echo "◀◀"
- format = <label>
- click-left = playerctl previous -p spotify
-
- [module/spotify-play-pause]
- type = custom/ipc
- hook-0 = echo "▶"
- hook-1 = echo "▶"
- initial = 1
- click-left = playerctl play-pause -p spotify
-
- [module/spotify-next]
- type = custom/script
- exec = echo "▶▶"
- format = <label>
- click-left = playerctl next -p spotify
- '';
-
- script = "polybar example --config=~/.config/polybar/config.ini &";
- };
-
- picom = {
- enable = true;
- backend = "glx";
- vSync = true;
- inactiveOpacity = 0.9;
- activeOpacity = 1.0;
- fade = true;
- fadeSteps = [ 0.09 0.09 ];
- fadeDelta = 5;
- shadow = true;
- shadowOffsets = [ 12 12 ];
- shadowOpacity = 0.5;
- shadowExclude = [
- "class_g = 'Polybar'"
- "name = 'Polybar'"
- ];
- settings = {
- corner-radius = 15;
- };
- };
- };
+ };
}