summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNatasha Moongrave <natasha@256phi.eu>2026-01-28 21:29:47 +0100
committerNatasha Moongrave <natasha@256phi.eu>2026-01-28 21:29:47 +0100
commit67cf7eb1b5d0cf86faab9e67ed8bd060ed2267b6 (patch)
tree1218d481350e761b34596b9b5e4ca0f21af419a1
base
-rw-r--r--config.old.nix1082
-rw-r--r--configuration.nix166
-rw-r--r--flake.lock49
-rw-r--r--flake.nix29
-rw-r--r--mun.nix651
5 files changed, 1977 insertions, 0 deletions
diff --git a/config.old.nix b/config.old.nix
new file mode 100644
index 0000000..86bde2f
--- /dev/null
+++ b/config.old.nix
@@ -0,0 +1,1082 @@
+{ config, lib, pkgs, ... }:
+
+let
+get_spotify_status = pkgs.writeShellScript "get_spotify_status.sh" ''
+ #!/bin/bash
+
+# The name of polybar bar which houses the main spotify module and the control modules.
+PARENT_BAR="example"
+PARENT_BAR_PID=$(pgrep -a "polybar" | grep "$PARENT_BAR" | cut -d" " -f1)
+
+# Set the source audio player here.
+# Players supporting the MPRIS spec are supported.
+# Examples: spotify, vlc, chrome, mpv and others.
+# Use `playerctld` to always detect the latest player.
+# See more here: https://github.com/altdesktop/playerctl/#selecting-players-to-control
+PLAYER="playerctld"
+
+# Format of the information displayed
+# Eg. {{ artist }} - {{ album }} - {{ title }}
+# See more attributes here: https://github.com/altdesktop/playerctl/#printing-properties-and-metadata
+FORMAT="{{ title }} - {{ artist }}"
+
+# Sends $2 as message to all polybar PIDs that are part of $1
+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
+ '';
+in
+let
+ unstable = import <nixos-unstable> { config = { allowUnfree = true; }; };
+
+ hidePolybarInFullscreen = pkgs.writeShellScript "hidePolybarInFullscreen.sh" ''
+ #!/usr/bin/env bash
+
+ # Wait a bit to ensure i3 and polybar are ready
+ sleep 1
+
+ # Subscribe to i3 window events
+ i3-msg -t subscribe -m '[ "window" ]' | while read -r event; do
+ # Hide Polybar when a window enters fullscreen
+ if echo "$event" | grep -q '"fullscreen_mode":[[:space:]]*1'; then
+ polybar-msg cmd hide
+ # Show Polybar when fullscreen exits
+ elif echo "$event" | grep -q '"fullscreen_mode":[[:space:]]*0'; then
+ polybar-msg cmd show
+ fi
+ done
+ '';
+ in
+{
+ imports = [
+ ./hardware-configuration.nix
+ <nixos/home-manager>
+ ];
+
+ 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;
+ boot.loader.systemd-boot.enable = true;
+ boot.loader.efi.canTouchEfiVariables = true;
+ boot.loader.systemd-boot.configurationLimit = 5;
+ 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" ];
+ 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
+ ]))
+
+ ];
+
+ 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
+ ];
+ };
+
+
+ # === Home Manager User Config ===
+home-manager = {
+ backupFileExtension = "backup";
+
+ users.mun = { pkgs, ... }: {
+ home = {
+ stateVersion = "25.11";
+ packages = with pkgs; [
+ pay-respects zathura ripgrep fd git lazygit tree-sitter
+ ];
+
+ sessionVariables = {
+ EDITOR = "nvim";
+ VISUAL = "nvim";
+ };
+ };
+
+ 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 = {
+ enable = true;
+ forwardAgent = true;
+ addKeysToAgent = "yes";
+};
+
+ # --- ZSH ---
+ zsh = {
+ enable = true;
+ syntaxHighlighting.enable = true;
+ shellAliases = {
+ ll = "ls -l";
+ rebuild = "sudo nixos-rebuild switch";
+ edit = "sudo vi /etc/nixos/configuration.nix";
+ };
+
+ history.size = 10000;
+
+ oh-my-zsh = {
+ enable = true;
+ plugins = [ "git" ];
+ theme = "simple";
+ };
+
+ initContent = "
+ export SSH_AUTH_SOCK=$XDG_RUNTIME_DIR/ssh-agent.socket
+ 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 ---
+ neovim = {
+ enable = true;
+ defaultEditor = true;
+ viAlias = true;
+ vimAlias = true;
+
+ withNodeJs = true;
+
+ extraLuaConfig = ''
+ -- Bootstrap LazyVim
+ 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)
+
+ -- Install LazyVim and setup
+ 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 = {
+ -- optional settings:
+ enabled = true,
+ file_types = { "markdown", "rmd" },
+ colorscheme = "default"
+ },
+ dependencies = {
+ "nvim-treesitter/nvim-treesitter",
+ "nvim-tree/nvim-web-devicons", -- optional but recommended
+ },
+ },
+ -- Mermaid file syntax highlighting
+ { "mracos/mermaid.vim", ft = { "mermaid" } },
+ },
+
+ defaults = { lazy = false, version = false },
+
+
+
+
+ checker = { enabled = true },
+ performance = {
+ rtp = {
+ disabled_plugins = {
+ "gzip",
+ "tarPlugin",
+ "tohtml",
+ "tutor",
+ "zipPlugin",
+ },
+ },
+ },
+ })
+ -- LaTeX-specific soft wrapping
+ vim.api.nvim_create_autocmd("FileType", {
+ pattern = "tex",
+ callback = function()
+ vim.opt_local.wrap = true -- enable soft wrap
+ vim.opt_local.linebreak = true -- wrap at word boundaries
+ vim.opt_local.breakindent = true -- indent wrapped lines
+ vim.opt_local.breakindentopt = "shift:2"
+ vim.opt_local.textwidth = 0 -- don't hard wrap automatically
+ end,
+ })
+
+ vim.api.nvim_create_autocmd("FileType", {
+ pattern = "markdown",
+ callback = function()
+ vim.diagnostic.disable(0)
+ end,
+ })
+
+ -- Configure Nix LSP (nil_ls) to use system binary
+ local lspconfig = require("lspconfig")
+ lspconfig.nil_ls.setup({
+ cmd = { "nil" }, -- points to nix language server installed by Nix
+ })
+
+ -- Set system clipboard
+ vim.opt.clipboard = "unnamedplus"
+ '';
+ };
+
+ # --- Kitty Terminal ---
+ 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 = ''
+ # This file has been auto-generated by i3-config-wizard(1).
+# It will not be overwritten, so edit it as you like.
+#
+# Should you change your keyboard layout some time, delete
+# this file and re-run i3-config-wizard(1).
+#
+
+# i3 config file (v4)
+#
+# Please see https://i3wm.org/docs/userguide.html for a complete reference!
+
+set $mod Mod4
+
+# Font for window titles. Will also be used by the bar unless a different font
+# is used in the bar {} block below.
+font pango:Fira Code 10
+
+# This font is widely installed, provides lots of unicode glyphs, right-to-left
+# text rendering and scalability on retina/hidpi displays (thanks to pango).
+#font pango:DejaVu Sans Mono 8
+
+# Start XDG autostart .desktop files using dex. See also
+# https://wiki.archlinux.org/index.php/XDG_Autostart
+exec --no-startup-id dex-autostart --autostart --environment i3
+
+# The combination of xss-lock, nm-applet and pactl is a popular choice, so
+# they are included here as an example. Modify as you see fit.
+
+# xss-lock grabs a logind suspend inhibit lock and will use i3lock to lock the
+# screen before suspend. Use loginctl lock-session to lock your screen.
+exec --no-startup-id xss-lock --transfer-sleep-lock -- i3lock-fancy-rapid 5 3 --nofork
+
+# NetworkManager is the most popular way to manage wireless networks on Linux,
+# and nm-applet is a desktop environment-independent system tray GUI for it.
+exec --no-startup-id nm-applet
+
+# tartup bluetooth applet
+exec --no-startup-id blueman-applet
+
+# automatically startup picom
+exec_always --no-startup-id sh -c "sleep 1 && picom --config ~/.config/picom/picom.conf"
+
+# automatically merge .Xresources to avoid bugs
+exec --no-startup-id -merge ~/.Xresources
+
+# automatically call feh to set the background wallpaper
+exec_always --no-startup-id feh --bg-scale ~/Pictures/wallpapers/vox.jpg
+
+# automatically start xautolock to lock the screen after 3 minutes of inactivity
+#exec --no-startup-id xautolock -time 3 -locker "i3lock-fancy"
+
+# start polybar
+exec_always --no-startup-id sh -c "killall -q polybar; sleep 1; polybar example --config=~/.config/polybar/config.ini &"
+
+# Add a gap on the top via i3-gaps to accomodate for the bar
+gaps top 60
+
+# Make fullscreen windows render over everything including docks like polybar
+exec_always --no-startup-id ${hidePolybarInFullscreen}
+
+
+# automatically start flameshot
+exec --no-startup-id flameshot
+
+# Brightness
+bindsym XF86MonBrightnessDown exec brightnessctl set 10%-
+bindsym XF86MonBrightnessUp exec brightnessctl set +10%
+
+# Volume
+bindsym XF86AudioMute exec amixer set Master toggle
+bindsym XF86AudioLowerVolume exec amixer set Master 5%-
+bindsym XF86AudioRaiseVolume exec amixer set Master 5%+
+
+
+# Mic mute toggle
+bindsym XF86AudioMicMute exec amixer set Capture toggle
+
+
+
+# Use Mouse+$mod to drag floating windows to their wanted position
+floating_modifier $mod
+
+# open flameshot
+bindsym $mod+Shift+s exec flameshot gui
+
+
+# start a terminal
+bindsym $mod+Return exec kitty
+
+# lock the screen
+bindsym $mod+Control+l exec --no-startup-id i3lock-fancy-rapid 5 3
+
+# open rofi as app launcher
+bindsym $mod+m exec rofi -show drun
+
+# open nnn (n cubed) as the file browser
+bindsym $mod+Shift+m exec kitty nnn
+
+# open firefox
+bindsym $mod+n exec firefox
+
+# kill focused window
+bindsym $mod+Shift+q kill
+
+# change focus
+bindsym $mod+j focus left
+bindsym $mod+k focus down
+bindsym $mod+l focus up
+bindsym $mod+uring focus right
+
+# alternatively, you can use the cursor keys:
+bindsym $mod+Left focus left
+bindsym $mod+Down focus down
+bindsym $mod+Up focus up
+bindsym $mod+Right focus right
+
+# move focused window
+bindsym $mod+Shift+j move left
+bindsym $mod+Shift+k move down
+bindsym $mod+Shift+l move up
+bindsym $mod+Shift+uring move right
+
+# alternatively, you can use the cursor keys:
+bindsym $mod+Shift+Left move left
+bindsym $mod+Shift+Down move down
+bindsym $mod+Shift+Up move up
+bindsym $mod+Shift+Right move right
+
+# split in horizontal orientation
+bindsym $mod+h split h
+
+# split in vertical orientation
+bindsym $mod+v split v
+
+# enter fullscreen mode for the focused container
+bindsym $mod+f fullscreen toggle
+
+# change container layout (stacked, tabbed, toggle split)
+bindsym $mod+s layout stacking
+bindsym $mod+w layout tabbed
+bindsym $mod+e layout toggle split
+
+# toggle tiling / floating
+bindsym $mod+Shift+space floating toggle
+
+# change focus between tiling / floating windows
+bindsym $mod+space focus mode_toggle
+
+# focus the parent container
+bindsym $mod+a focus parent
+
+# focus the child container
+#bindsym $mod+d focus child
+
+# Define names for default workspaces for which we configure key bindings later on.
+# We use variables to avoid repeating the names in multiple places.
+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"
+
+# switch to workspace
+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
+
+# move focused container to workspace
+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
+
+# reload the configuration file
+bindsym $mod+Shift+c reload
+# restart i3 inplace (preserves your layout/session, can be used to upgrade i3)
+bindsym $mod+Shift+r restart
+# exit i3 (logs you out of your X session)
+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'"
+
+# resize window (you can also use the mouse for that)
+mode "resize" {
+ # These bindings trigger as soon as you enter the resize mode
+
+ # Pressing left will shrink the window’s width.
+ # Pressing right will grow the window’s width.
+ # Pressing up will shrink the window’s height.
+ # Pressing down will grow the window’s height.
+ 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
+
+ # same bindings, but for the arrow keys
+ 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
+
+ # back to normal: Enter or Escape or $mod+r
+ bindsym Return mode "default"
+ bindsym Escape mode "default"
+ bindsym $mod+r mode "default"
+}
+
+bindsym $mod+r mode "resize"
+
+# class border bground text indicator child_border
+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
+
+# Start i3bar to display a workspace bar (plus the system information i3status
+# finds out, if available)
+#bar {
+# colors {
+# background #000000
+# statusline #b12cbf
+# separator #500096
+#
+# focused_workspace #500096 #b12cbf #000000
+# active_workspace #500096 #b12cbf #000000
+# inactive_workspace #500096 #000000 #b12cbf
+# urgent_workspace #500096 #b12cbf #000000
+# binding_mode #500096 #b12cbf #000000
+# }
+# status_command i3blocks
+# position top
+#}
+
+
+# defualt border style for new windows
+default_border pixel 3
+default_floating_border pixel 3
+# 0default_border_color # 500096
+# hide container edges if theyre at the screen edge
+hide_edge_borders smart
+ '';
+ };
+ };
+ };
+
+ 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}";
+ foregroung = "${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
+''
+ ;==========================================================
+;
+;
+; ██████╗ ██████╗ ██╗ ██╗ ██╗██████╗ █████╗ ██████╗
+; ██╔══██╗██╔═══██╗██║ ╚██╗ ██╔╝██╔══██╗██╔══██╗██╔══██╗
+; ██████╔╝██║ ██║██║ ╚████╔╝ ██████╔╝███████║██████╔╝
+; ██╔═══╝ ██║ ██║██║ ╚██╔╝ ██╔══██╗██╔══██║██╔══██╗
+; ██║ ╚██████╔╝███████╗██║ ██████╔╝██║ ██║██║ ██║
+; ╚═╝ ╚═════╝ ╚══════╝╚═╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝
+;
+;
+; To learn more about how to configure Polybar
+; go to https://github.com/polybar/polybar
+;
+; The README contains a lot of information
+;
+;==========================================================
+
+;[colors]
+;background = #1c182d
+;background-alt = #2b1b3d
+;foreground = #d0b6fd
+;primary = #cfb5fd
+;secondary = #8a78b0
+;alert = #7b91fc
+;disabled = #707880
+
+[bar/example]
+width = 98%
+height = 30pt
+radius = 15
+offset-x = 1%
+offset-y = 1%
+
+override-redirect = true
+fixed-center = true
+
+enable-ipc = true
+
+; dpi = 96
+
+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
+
+cursor-click = pointer
+cursor-scroll = ns-resize
+
+; wm-restack = generic
+; wm-restack = bspwm
+; wm-restack = i3
+
+; override-redirect = true
+
+; This module is not active by default (to enable it, add it to one of the
+; modules-* list above).
+; Please note that only a single tray can exist at any time. If you launch
+; multiple bars with this module, only a single one will show it, the others
+; will produce a warning. Which bar gets the module is timing dependent and can
+; be quite random.
+; For more information, see the documentation page for this module:
+; https://polybar.readthedocs.io/en/stable/user/modules/tray.html
+[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
+
+; This is useful in case the battery never reports 100% charge
+; Default: 100
+full-at = 100
+
+; format-low once this charge percentage is reached
+; Default: 10
+; New in version 3.6.0
+low-at = 15
+
+; Use the following command to list batteries and adapters:
+; $ ls -1 /sys/class/power_supply/
+battery = BAT0
+adapter = ADP1
+
+; If an inotify event haven't been reported in this many
+; seconds, manually poll for new values.
+;
+; Needed as a fallback for systems that don't report events
+; on sysfs/procfs.
+;
+; Disable polling by setting the interval to 0.
+;
+; Default: 5
+poll-interval = 5
+; vim:ft=dosini
+
+[module/spotify]
+type = custom/script
+tail = true
+interval = 1
+; prefix symbol is shown before the text
+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 = .9;
+ activeOpacity = 1;
+ 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;
+ };
+ };
+ };
+
+ };
+};
+
+ services.openssh.enable = true;
+
+
+
+ system.copySystemConfiguration = true;
+ system.stateVersion = "25.11";
+
+}
+
+
diff --git a/configuration.nix b/configuration.nix
new file mode 100644
index 0000000..29b94aa
--- /dev/null
+++ b/configuration.nix
@@ -0,0 +1,166 @@
+{ config, lib, pkgs, ... }:
+
+
+{
+ imports = [
+ /etc/nixos/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;
+ boot.loader.systemd-boot.enable = true;
+ boot.loader.efi.canTouchEfiVariables = true;
+ boot.loader.systemd-boot.configurationLimit = 5;
+ 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" ];
+ 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
+ ]))
+
+ ];
+
+ 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.copySystemConfiguration = true;
+ system.stateVersion = "25.11";
+
+}
+
+
diff --git a/flake.lock b/flake.lock
new file mode 100644
index 0000000..8563833
--- /dev/null
+++ b/flake.lock
@@ -0,0 +1,49 @@
+{
+ "nodes": {
+ "home-manager": {
+ "inputs": {
+ "nixpkgs": [
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1769580047,
+ "narHash": "sha256-tNqCP/+2+peAXXQ2V8RwsBkenlfWMERb+Uy6xmevyhM=",
+ "owner": "nix-community",
+ "repo": "home-manager",
+ "rev": "366d78c2856de6ab3411c15c1cb4fb4c2bf5c826",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nix-community",
+ "ref": "release-25.11",
+ "repo": "home-manager",
+ "type": "github"
+ }
+ },
+ "nixpkgs": {
+ "locked": {
+ "lastModified": 1769318308,
+ "narHash": "sha256-Mjx6p96Pkefks3+aA+72lu1xVehb6mv2yTUUqmSet6Q=",
+ "owner": "nixos",
+ "repo": "nixpkgs",
+ "rev": "1cd347bf3355fce6c64ab37d3967b4a2cb4b878c",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nixos",
+ "ref": "nixos-25.11",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "root": {
+ "inputs": {
+ "home-manager": "home-manager",
+ "nixpkgs": "nixpkgs"
+ }
+ }
+ },
+ "root": "root",
+ "version": 7
+}
diff --git a/flake.nix b/flake.nix
new file mode 100644
index 0000000..5b6fa2c
--- /dev/null
+++ b/flake.nix
@@ -0,0 +1,29 @@
+{
+ description = "A very basic flake";
+
+ inputs = {
+ nixpkgs.url = "github:nixos/nixpkgs/nixos-25.11";
+ home-manager = {
+ url = "github:nix-community/home-manager/release-25.11";
+ inputs.nixpkgs.follows = "nixpkgs";
+ };
+ };
+
+ outputs = { self, nixpkgs, home-manager, ... }@inputs: {
+ nixosConfigurations = {
+ kronos = nixpkgs.lib.nixosSystem {
+ system = "x86_64-linux";
+ modules = [
+ ./configuration.nix
+ home-manager.nixosModules.home-manager
+ {
+ home-manager.useGlobalPkgs = true;
+ home-manager.useUserPackages = true;
+
+ home-manager.users.mun = import ./mun.nix;
+ }
+ ];
+ };
+ };
+ };
+}
diff --git a/mun.nix b/mun.nix
new file mode 100644
index 0000000..948f18e
--- /dev/null
+++ b/mun.nix
@@ -0,0 +1,651 @@
+{ 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
+{
+ home = {
+ username = "mun";
+ homeDirectory = "/home/mun";
+ stateVersion = "25.11";
+
+ packages = with pkgs; [
+ pay-respects
+ zathura
+ ripgrep
+ fd
+ git
+ lazygit
+ tree-sitter
+ ];
+
+ sessionVariables = {
+ EDITOR = "nvim";
+ VISUAL = "nvim";
+ };
+ };
+
+ 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 = {
+ enable = true;
+ forwardAgent = true;
+ addKeysToAgent = "yes";
+ };
+
+ zsh = {
+ enable = true;
+ syntaxHighlighting.enable = true;
+
+ shellAliases = {
+ ll = "ls -l";
+ rebuild = "sudo nixos-rebuild switch";
+ edit = "sudo vi /etc/nixos/configuration.nix";
+ };
+
+ history.size = 10000;
+
+ oh-my-zsh = {
+ enable = true;
+ plugins = [ "git" ];
+ theme = "simple";
+ };
+
+ initContent = ''
+ export SSH_AUTH_SOCK=$XDG_RUNTIME_DIR/ssh-agent.socket
+ 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;
+
+ # IMPORTANT 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 = {
+ 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;
+ };
+ };
+ };
+}
+ \ No newline at end of file