diff --git a/drvs/orca-slicer.nix b/drvs/orca-slicer.nix new file mode 100644 index 0000000..0c3bf62 --- /dev/null +++ b/drvs/orca-slicer.nix @@ -0,0 +1,15 @@ +# orca-slicer.nix +{pkgs}: +pkgs.symlinkJoin { + name = "orca-slicer-wayland"; + paths = [pkgs.orca-slicer]; + buildInputs = [pkgs.makeWrapper]; + postBuild = '' + wrapProgram $out/bin/orca-slicer \ + --prefix GST_PLUGIN_SYSTEM_PATH_1_0 : "${pkgs.gst_all_1.gst-plugins-base}/lib/gstreamer-1.0:${pkgs.gst_all_1.gst-plugins-good}/lib/gstreamer-1.0" \ + --prefix XDG_DATA_DIRS : "${pkgs.gsettings-desktop-schemas}/share/gsettings-schemas/${pkgs.gsettings-desktop-schemas.name}:${pkgs.gtk3}/share/gsettings-schemas/${pkgs.gtk3.name}" \ + --set GTK_USE_PORTAL 1 \ + --set GDK_BACKEND x11 \ + --set GBM_BACKEND dri + ''; # На данный момент не работает на wayland +} diff --git a/flake.lock b/flake.lock index 74861db..c7f2a82 100644 --- a/flake.lock +++ b/flake.lock @@ -1,5 +1,138 @@ { "nodes": { + "crane": { + "locked": { + "lastModified": 1781825982, + "narHash": "sha256-SlXKwIRIhrOSAcTjCB3ftPLzJWZStQIPS7J1FlZPnKk=", + "owner": "ipetkov", + "repo": "crane", + "rev": "469fd08d0bcf6926321fa973c6777fbc87785dd7", + "type": "github" + }, + "original": { + "owner": "ipetkov", + "repo": "crane", + "type": "github" + } + }, + "flake-compat": { + "flake": false, + "locked": { + "lastModified": 1767039857, + "narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns=", + "owner": "NixOS", + "repo": "flake-compat", + "rev": "5edf11c44bc78a0d334f6334cdaf7d60d732daab", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-utils": { + "inputs": { + "systems": "systems" + }, + "locked": { + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "gitignore": { + "inputs": { + "nixpkgs": [ + "lanzaboote", + "pre-commit", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1709087332, + "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", + "owner": "hercules-ci", + "repo": "gitignore.nix", + "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "gitignore.nix", + "type": "github" + } + }, + "lanzaboote": { + "inputs": { + "crane": "crane", + "nixpkgs": [ + "nixpkgs" + ], + "pre-commit": "pre-commit", + "rust-overlay": "rust-overlay" + }, + "locked": { + "lastModified": 1782141370, + "narHash": "sha256-hqijVSEETttmo8Okql9/LG0Ua34hdciKW1a5zzlj8mU=", + "owner": "nix-community", + "repo": "lanzaboote", + "rev": "7c9a54a7f87b4539ddbd8bda09a8a5f5f9361aa9", + "type": "github" + }, + "original": { + "owner": "nix-community", + "ref": "v1.1.0", + "repo": "lanzaboote", + "type": "github" + } + }, + "monaco": { + "flake": false, + "locked": { + "lastModified": 1777439408, + "narHash": "sha256-5pvFE59tvoap/ef+WSSvNRE+I/jqc8HTaicJRBSJRZE=", + "owner": "thep0y", + "repo": "monaco-nerd-font", + "rev": "80bde404d1a3114901e503487f1682279d3cfc13", + "type": "github" + }, + "original": { + "owner": "thep0y", + "repo": "monaco-nerd-font", + "type": "github" + } + }, + "monaco-nerd-font": { + "inputs": { + "flake-utils": "flake-utils", + "monaco": "monaco", + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1777439408, + "narHash": "sha256-5pvFE59tvoap/ef+WSSvNRE+I/jqc8HTaicJRBSJRZE=", + "owner": "thep0y", + "repo": "monaco-nerd-font", + "rev": "80bde404d1a3114901e503487f1682279d3cfc13", + "type": "github" + }, + "original": { + "owner": "thep0y", + "repo": "monaco-nerd-font", + "type": "github" + } + }, "nix-darwin": { "inputs": { "nixpkgs": "nixpkgs" @@ -64,17 +197,63 @@ "url": "https://channels.nixos.org/nixos-unstable/nixexprs.tar.xz" } }, + "pre-commit": { + "inputs": { + "flake-compat": "flake-compat", + "gitignore": "gitignore", + "nixpkgs": [ + "lanzaboote", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1781733627, + "narHash": "sha256-U3yTuGBnmXvXoQI3qkpfEDsn9RovQPAjN7ndRco+3u0=", + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "rev": "3bbec39bc90eadfa031e6f3b77272f3f60803e39", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "type": "github" + } + }, "root": { "inputs": { + "lanzaboote": "lanzaboote", + "monaco-nerd-font": "monaco-nerd-font", "nix-darwin": "nix-darwin", "nixpkgs": "nixpkgs_2", "spicetify-nix": "spicetify-nix" } }, + "rust-overlay": { + "inputs": { + "nixpkgs": [ + "lanzaboote", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1782012058, + "narHash": "sha256-9mWUnReOUXfKjZuJAL/bAFH3LUyECTRtXgSNVjRw3UY=", + "owner": "oxalica", + "repo": "rust-overlay", + "rev": "8534567325bd8a8d2928e6afd81e0a87d19efd3c", + "type": "github" + }, + "original": { + "owner": "oxalica", + "repo": "rust-overlay", + "type": "github" + } + }, "spicetify-nix": { "inputs": { "nixpkgs": "nixpkgs_3", - "systems": "systems" + "systems": "systems_2" }, "locked": { "lastModified": 1782898510, @@ -104,6 +283,21 @@ "repo": "default", "type": "github" } + }, + "systems_2": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } } }, "root": "root", diff --git a/flake.nix b/flake.nix index 961d4b6..472e39c 100644 --- a/flake.nix +++ b/flake.nix @@ -6,13 +6,21 @@ nix-darwin.url = "github:nix-darwin/nix-darwin/master"; # nix-darwin.inputs.nixpkgs.follows = "nixpkgs"; spicetify-nix.url = "github:Gerg-L/spicetify-nix"; + monaco-nerd-font = { + url = "github:thep0y/monaco-nerd-font"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + lanzaboote = { + url = "github:nix-community/lanzaboote/v1.1.0"; + inputs.nixpkgs.follows = "nixpkgs"; + }; }; outputs = inputs @ { self, nix-darwin, nixpkgs, - spicetify-nix, + ... }: let systems = ["x86_64-linux" "aarch64-darwin"]; forAllSystems = nixpkgs.lib.genAttrs systems; @@ -39,6 +47,17 @@ inputs.spicetify-nix.nixosModules.default ]; }; + "kachu-laptop" = nixpkgs.lib.nixosSystem { + system = "x86_64-linux"; + specialArgs = {inherit inputs self;}; + modules = [ + inputs.lanzaboote.nixosModules.lanzaboote + ./hosts/kachu-laptop/hardware-configuration.nix + ./hosts/kachu-laptop/configuration.nix + ./shared/programs/spicetify.nix + inputs.spicetify-nix.nixosModules.default + ]; + }; }; }; } diff --git a/hosts/kachu-laptop/configuration.nix b/hosts/kachu-laptop/configuration.nix new file mode 100644 index 0000000..791a923 --- /dev/null +++ b/hosts/kachu-laptop/configuration.nix @@ -0,0 +1,207 @@ +# Edit this configuration file to define what should be installed on +# your system. Help is available in the configuration.nix(5) man page, on +# https://search.nixos.org/options and in the NixOS manual (`nixos-help`). +{ + config, + lib, + pkgs, + inputs, + ... +}: { + nixpkgs.overlays = [ + (final: prev: { + wezterm = final.callPackage ../../drvs/wezterm-stable-bin.nix {}; + sddm-astronaut-theme = final.callPackage ../../drvs/sddm-astronaut-theme.nix {}; + }) + ]; + + imports = [ + ]; + + # Use the systemd-boot EFI boot loader. + boot.loader.systemd-boot.enable = lib.mkForce false; + + boot.lanzaboote = { + enable = true; + pkiBundle = "/var/lib/sbctl"; + }; + 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" + "amdgpu" + ]; + + # Use latest kernel. + boot.kernelPackages = pkgs.linuxPackages_latest; + + networking.hostName = "kachu-laptop"; # Define your hostname. + + # Configure network connections interactively with nmcli or nmtui. + networking.networkmanager.enable = true; + + services.desktopManager.plasma6.enable = true; + services.displayManager.sddm = { + enable = true; + wayland.enable = true; + extraPackages = with pkgs; [ + kdePackages.qtmultimedia # Required for video backgrounds/audio + ]; + }; + + services.pulseaudio.enable = false; + security.rtkit.enable = true; + services.pipewire = { + enable = true; + alsa.enable = true; + alsa.support32Bit = true; + pulse.enable = true; + }; + + security.polkit.enable = true; + security.sudo.wheelNeedsPassword = false; + nix = { + settings = { + experimental-features = [ + "nix-command" + "flakes" + ]; + }; + gc = { + automatic = true; # Включает автоматическую сборку мусора + dates = "weekly"; # Запуск раз в неделю + options = "--delete-older-than 7d"; # Удалять только то, что старше 7 дней + }; + optimise.automatic = true; + }; + + # Set your time zone. + time.timeZone = "Europe/Moscow"; + + 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"; + }; + + users.users.kachu = { + isNormalUser = true; + extraGroups = [ + "wheel" + "networkmanager" + ]; # Enable ‘sudo’ for the user. + packages = with pkgs; [ + tree + git + starship + zoxide + fzf + wezterm + eza + kdePackages.sddm-kcm + alejandra + v2rayn + telegram-desktop + ]; + shell = pkgs.zsh; + }; + + programs.firefox.enable = true; + + # List packages installed in system profile. + # You can use https://search.nixos.org/ to find more packages (and options). + nixpkgs.config.allowUnfree = true; + environment.systemPackages = with pkgs; [ + git + vscode + git-credential-manager + kdePackages.kio + kdePackages.kio-fuse + kdePackages.kio-extras + sbctl + sddm-astronaut-theme + ]; + + programs.fuse.enable = true; + programs.zsh.enable = true; + + programs.nix-ld.enable = true; + programs.nix-ld.libraries = with pkgs; [ + ]; + + fonts.packages = [ + inputs.monaco-nerd-font.packages.${pkgs.system}.monaco + ]; + # 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; + + # Copy the NixOS configuration file and link it from the resulting system + # (/run/current-system/configuration.nix). This is useful in case you + # accidentally delete configuration.nix. + # system.copySystemConfiguration = true; + + # This option defines the first version of NixOS you have installed on this particular machine, + # and is used to maintain compatibility with application data (e.g. databases) created on older NixOS versions. + # + # Most users should NEVER change this value after the initial install, for any reason, + # even if you've upgraded your system to a new NixOS release. + # + # This value does NOT affect the Nixpkgs version your packages and OS are pulled from, + # so changing it will NOT upgrade your system - see https://nixos.org/manual/nixos/stable/#sec-upgrading for how + # to actually do that. + # + # This value being lower than the current NixOS release does NOT mean your system is + # out of date, out of support, or vulnerable. + # + # Do NOT change this value unless you have manually inspected all the changes it would make to your configuration, + # and migrated your data accordingly. + # + # For more information, see `man configuration.nix` or https://nixos.org/manual/nixos/stable/options#opt-system.stateVersion . + system.stateVersion = "26.05"; # Did you read the comment? +} diff --git a/hosts/kachu-laptop/hardware-configuration.nix b/hosts/kachu-laptop/hardware-configuration.nix new file mode 100644 index 0000000..794b927 --- /dev/null +++ b/hosts/kachu-laptop/hardware-configuration.nix @@ -0,0 +1,96 @@ +# 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" "thunderbolt" "usbhid" "usb_storage" "sd_mod"]; + boot.initrd.kernelModules = []; + boot.initrd.systemd.enable = true; + boot.kernelModules = ["kvm-amd"]; + boot.extraModulePackages = []; + + fileSystems."/" = { + device = "/dev/mapper/crypted"; + fsType = "btrfs"; + options = [ + "subvol=@root" + "compress=zstd" + ]; + }; + + boot.initrd.luks.devices."crypted".device = "/dev/disk/by-uuid/86bd8c14-aa10-47bd-a609-11934a2dc8a0"; + + fileSystems."/swap" = { + device = "/dev/mapper/crypted"; + fsType = "btrfs"; + options = ["subvol=@swap"]; + }; + + fileSystems."/boot" = { + device = "/dev/disk/by-uuid/8EC7-9595"; + fsType = "vfat"; + options = ["fmask=0022" "dmask=0022"]; + }; + + fileSystems."/nix" = { + device = "/dev/mapper/crypted"; + fsType = "btrfs"; + options = [ + "subvol=@nix" + "compress=zstd" + "noatime" + ]; + }; + + fileSystems."/home" = { + device = "/dev/mapper/crypted"; + fsType = "btrfs"; + options = [ + "subvol=@home" + "compress=zstd" + ]; + }; + + swapDevices = [ + { + device = "/swap/swapfile"; + size = 36864; + } + ]; + + boot.resumeDevice = "/dev/mapper/crypted"; + boot.kernelParams = [ + "resume_offset=533760" + ]; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; + + services.xserver.videoDrivers = ["nvidia" "amdgpu"]; + hardware.nvidia = { + open = true; + nvidiaSettings = true; + package = config.boot.kernelPackages.nvidiaPackages.stable; + powerManagement.enable = true; + powerManagement.finegrained = true; + + prime = { + offload = { + enable = true; + enableOffloadCmd = true; + }; + + amdgpuBusId = "PCI:0:36:0"; + nvidiaBusId = "PCI:0:1:0"; + }; + }; +} diff --git a/hosts/kachu-pc/configuration.nix b/hosts/kachu-pc/configuration.nix index 52865d6..e04b130 100644 --- a/hosts/kachu-pc/configuration.nix +++ b/hosts/kachu-pc/configuration.nix @@ -4,6 +4,7 @@ { config, pkgs, + inputs, ... }: { nixpkgs.overlays = [ @@ -121,7 +122,6 @@ eza kdePackages.sddm-kcm alejandra - kdePackages.koi v2rayn telegram-desktop (prismlauncher.override { @@ -129,6 +129,7 @@ temurin-bin-21 ]; }) + (callPackage ../../drvs/orca-slicer.nix {}) ]; shell = pkgs.zsh; }; @@ -147,6 +148,7 @@ dates = "weekly"; # Запуск раз в неделю options = "--delete-older-than 7d"; # Удалять только то, что старше 7 дней }; + optimise.automatic = true; }; # Install firefox. programs.firefox.enable = true; @@ -162,13 +164,21 @@ sddm-astronaut-theme vscode git-credential-manager + kdePackages.kio kdePackages.kio-fuse + kdePackages.kio-extras ]; + programs.fuse.enable = true; + programs.nix-ld.enable = true; programs.nix-ld.libraries = with pkgs; [ ]; + fonts.packages = [ + inputs.monaco-nerd-font.packages.${pkgs.system}.monaco + ]; + # Some programs need SUID wrappers, can be configured further or are # started in user sessions. # programs.mtr.enable = true;