From 6df8f27c0ed350766bef574a0458aca98b64956f Mon Sep 17 00:00:00 2001 From: Zeusina Date: Sun, 5 Jul 2026 11:46:54 +0300 Subject: [PATCH] feat: add initial config for kachu-pc --- drvs/sddm-astronaut-theme.nix | 10 ++ drvs/wezterm-stable-bin.nix | 73 ++++++++++++ flake.nix | 13 ++- hardware-configuration.nix | 57 ++++++++++ hosts/kachu-pc/configuration.nix | 183 +++++++++++++++++++++++++++++++ 5 files changed, 335 insertions(+), 1 deletion(-) create mode 100644 drvs/sddm-astronaut-theme.nix create mode 100644 drvs/wezterm-stable-bin.nix create mode 100644 hardware-configuration.nix create mode 100644 hosts/kachu-pc/configuration.nix diff --git a/drvs/sddm-astronaut-theme.nix b/drvs/sddm-astronaut-theme.nix new file mode 100644 index 0000000..65fa91e --- /dev/null +++ b/drvs/sddm-astronaut-theme.nix @@ -0,0 +1,10 @@ +{pkgs}: +(pkgs.sddm-astronaut.override { + embeddedTheme = "black_hole"; +}).overrideAttrs (oldAttrs: { + installPhase = + oldAttrs.installPhase + + '' + chmod u+w $out/share/sddm/themes/sddm-astronaut-theme/Backgrounds/ + ''; +}) diff --git a/drvs/wezterm-stable-bin.nix b/drvs/wezterm-stable-bin.nix new file mode 100644 index 0000000..b434260 --- /dev/null +++ b/drvs/wezterm-stable-bin.nix @@ -0,0 +1,73 @@ +{ + lib, + stdenv, + fetchurl, + autoPatchelfHook, + fontconfig, + libxkbcommon, + libGL, + libglvnd, + wayland, + libx11, + libxcb, + zlib, + dbus, + vulkan-loader, + openssl, + xcbutil, + xcbutilimage, +}: +stdenv.mkDerivation rec { + pname = "wezterm-bin"; + version = "20240203-110809-5046fc22"; + + src = fetchurl { + url = "https://github.com/wezterm/wezterm/releases/download/${version}/wezterm-${version}.Ubuntu22.04.tar.xz"; + hash = "sha256-FCy0beZIIAuFLMSx2TLmuPKp08VfbcWvRLbU7rk4X1w="; + }; + + nativeBuildInputs = [ + autoPatchelfHook + ]; + + buildInputs = [ + stdenv.cc.cc.lib + fontconfig + libxkbcommon + libGL + libglvnd + wayland + libx11 + libxcb + zlib + dbus + vulkan-loader + openssl + xcbutil + xcbutilimage + ]; + + runtimeDependencies = [ + libGL + libglvnd + ]; + + installPhase = '' + mkdir -p $out + + # Копируем готовую структуру из папки usr архива + cp -r usr/bin $out/ + cp -r usr/share $out/ + + # Исправляем пути в desktop-файле для интеграции с KDE + find $out/share/applications -name "*.desktop" -exec sed -i "s|Exec=wezterm-gui|Exec=$out/bin/wezterm-gui|g" {} + + ''; + + meta = with lib; { + description = "A GPU-accelerated cross-platform terminal emulator (Natively patched binary)"; + homepage = "https://wezfurlong.org/wezterm/"; + license = licenses.mit; + platforms = platforms.linux; + mainProgram = "wezterm"; + }; +} diff --git a/flake.nix b/flake.nix index d1e92c0..3256fe9 100644 --- a/flake.nix +++ b/flake.nix @@ -1,5 +1,5 @@ { - description = "Example nix-darwin system flake"; + description = "Zeusina system manage flake"; inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; @@ -107,5 +107,16 @@ inputs.spicetify-nix.darwinModules.default ]; }; + + nixosConfigurations = { + "kachu-pc" = nixpkgs.lib.nixosSystem { + system = "x86_64-linux"; + specialArgs = {inherit inputs;}; + modules = [ + ./hardware-configuration.nix + ./hosts/kachu-pc/configuration.nix + ]; + }; + }; }; } diff --git a/hardware-configuration.nix b/hardware-configuration.nix new file mode 100644 index 0000000..98500b5 --- /dev/null +++ b/hardware-configuration.nix @@ -0,0 +1,57 @@ +# Do not modify this file! It was generated by ‘nixos-generate-config’ +# and may be overwritten by future invocations. Please make changes +# to /etc/nixos/configuration.nix instead. +{ + config, + lib, + pkgs, + modulesPath, + ... +}: { + imports = [ + (modulesPath + "/installer/scan/not-detected.nix") + ]; + + boot.initrd.availableKernelModules = ["nvme" "xhci_pci" "ahci" "usb_storage" "usbhid" "sd_mod"]; + boot.initrd.kernelModules = []; + boot.kernelModules = ["kvm-amd"]; + boot.extraModulePackages = []; + + fileSystems."/" = { + device = "/dev/disk/by-uuid/16424ae5-12bf-4541-a663-371a401e2486"; + fsType = "btrfs"; + }; + + fileSystems."/home" = { + device = "/dev/disk/by-uuid/16424ae5-12bf-4541-a663-371a401e2486"; + fsType = "btrfs"; + options = ["subvol=home"]; + }; + + fileSystems."/nix" = { + device = "/dev/disk/by-uuid/16424ae5-12bf-4541-a663-371a401e2486"; + fsType = "btrfs"; + options = ["subvol=nix"]; + }; + + fileSystems."/boot" = { + device = "/dev/disk/by-uuid/B12C-6B1E"; + fsType = "vfat"; + options = ["fmask=0077" "dmask=0077"]; + }; + + swapDevices = [ + {device = "/dev/disk/by-uuid/d5ea4df4-2557-45ca-975b-1fd33e3bb772";} + ]; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; + + services.xserver.videoDrivers = ["nvidia"]; + + hardware.nvidia = { + open = true; + nvidiaSettings = true; + package = config.boot.kernelPackages.nvidiaPackages.stable; + }; +} diff --git a/hosts/kachu-pc/configuration.nix b/hosts/kachu-pc/configuration.nix new file mode 100644 index 0000000..abb9bfe --- /dev/null +++ b/hosts/kachu-pc/configuration.nix @@ -0,0 +1,183 @@ +# Edit this configuration file to define what should be installed on +# your system. Help is available in the configuration.nix(5) man page +# and in the NixOS manual (accessible by running ‘nixos-help’). +{ + config, + pkgs, + ... +}: { + nixpkgs.overlays = [ + (final: prev: { + wezterm = final.callPackage ../../drvs/wezterm-stable-bin.nix {}; + sddm-astronaut-theme = final.callPackage ../../drvs/sddm-astronaut-theme.nix {}; + }) + ]; + + # Bootloader. + boot.loader.systemd-boot.enable = true; + boot.loader.efi.canTouchEfiVariables = true; + boot.loader.timeout = 0; + boot.plymouth = { + enable = true; + theme = "bgrt"; + }; + + boot.kernelParams = [ + "quiet" + "splash" + "boot.shell_on_fail" + "loglevel=3" + "rd.systemd.show_status=false" + "rd.udev.log_level=3" + "udev.log_priority=3" + "nvidia-drm.fbdev=1" + ]; + + boot.consoleLogLevel = 0; + boot.initrd.verbose = false; + + boot.initrd.kernelModules = [ + "nvidia" + "nvidia_modeset" + "nvidia_uvm" + "nvidia_drm" + ]; + + # Use latest kernel. + boot.kernelPackages = pkgs.linuxPackages_latest; + + networking.hostName = "kachu-pc"; # Define your hostname. + + networking.networkmanager.enable = true; + + # Set your time zone. + time.timeZone = "Europe/Moscow"; + + # Select internationalisation properties. + i18n.defaultLocale = "en_US.UTF-8"; + + i18n.extraLocaleSettings = { + LC_ADDRESS = "ru_RU.UTF-8"; + LC_IDENTIFICATION = "ru_RU.UTF-8"; + LC_MEASUREMENT = "ru_RU.UTF-8"; + LC_MONETARY = "ru_RU.UTF-8"; + LC_NAME = "ru_RU.UTF-8"; + LC_NUMERIC = "ru_RU.UTF-8"; + LC_PAPER = "ru_RU.UTF-8"; + LC_TELEPHONE = "ru_RU.UTF-8"; + LC_TIME = "ru_RU.UTF-8"; + }; + + # Enable the KDE Plasma Desktop Environment. + services.desktopManager.plasma6.enable = true; + services.displayManager.sddm = { + enable = true; + extraPackages = with pkgs; [ + kdePackages.qtmultimedia # Required for video backgrounds/audio + ]; + }; + + # Configure keymap in X11 + services.xserver.xkb = { + layout = "us"; + variant = ""; + }; + + # Enable CUPS to print documents. + services.printing.enable = true; + + # Enable sound with pipewire. + services.pulseaudio.enable = false; + security.rtkit.enable = true; + services.pipewire = { + enable = true; + alsa.enable = true; + alsa.support32Bit = true; + pulse.enable = true; + # If you want to use JACK applications, uncomment this + #jack.enable = true; + + # use the example session manager (no others are packaged yet so this is enabled by default, + # no need to redefine it in your config for now) + #media-session.enable = true; + }; + security.polkit.enable = true; + + # Define a user account. Don't forget to set a password with ‘passwd’. + users.users."kachu" = { + isNormalUser = true; + description = "kachu"; + extraGroups = [ + "networkmanager" + "wheel" + ]; + packages = with pkgs; [ + kdePackages.kate + starship + zoxide + fzf + wezterm + opencode + eza + kdePackages.sddm-kcm + alejandra + ]; + shell = pkgs.zsh; + }; + + security.sudo.wheelNeedsPassword = false; + + nix = { + settings = { + experimental-features = [ + "nix-command" + "flakes" + ]; + }; + gc = { + automatic = true; # Включает автоматическую сборку мусора + dates = "weekly"; # Запуск раз в неделю + options = "--delete-older-than 7d"; # Удалять только то, что старше 7 дней + }; + }; + # Install firefox. + programs.firefox.enable = true; + programs.zsh.enable = true; + + # Allow unfree packages + nixpkgs.config.allowUnfree = true; + + # List packages installed in system profile. To search, run: + # $ nix search wget + environment.systemPackages = with pkgs; [ + git + sddm-astronaut-theme + vscode + ]; + # Some programs need SUID wrappers, can be configured further or are + # started in user sessions. + # programs.mtr.enable = true; + # programs.gnupg.agent = { + # enable = true; + # enableSSHSupport = true; + # }; + + # List services that you want to enable: + + # Enable the OpenSSH daemon. + # services.openssh.enable = true; + + # Open ports in the firewall. + # networking.firewall.allowedTCPPorts = [ ... ]; + # networking.firewall.allowedUDPPorts = [ ... ]; + # Or disable the firewall altogether. + # networking.firewall.enable = false; + + # This value determines the NixOS release from which the default + # settings for stateful data, like file locations and database versions + # on your system were taken. It‘s perfectly fine and recommended to leave + # this value at the release version of the first install of this system. + # Before changing this value read the documentation for this option + # (e.g. man configuration.nix or on https://nixos.org/nixos/options.html). + system.stateVersion = "26.05"; # Did you read the comment? +}