{ 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 ])) ]; 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"; }