From 0bf10bdf85302dd5bcf6d5706abc3b6774e5c708 Mon Sep 17 00:00:00 2001 From: KeksNino <1+keksnino@noreply.localhost> Date: Thu, 25 Jun 2026 17:19:01 +0200 Subject: [PATCH 01/25] Initial commit --- .gitignore | 8 ++++++++ README.md | 3 +++ 2 files changed, 11 insertions(+) create mode 100644 .gitignore create mode 100644 README.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3cb44c3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +# ---> Nix +# Ignore build outputs from performing a nix-build or `nix build` command +result +result-* + +# Ignore automatically generated direnv output +.direnv + diff --git a/README.md b/README.md new file mode 100644 index 0000000..6b61a8e --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# nixos-conf + +my nixos config \ No newline at end of file From 637a3ca3a224223971717b0e6c4a3c1b64aadf36 Mon Sep 17 00:00:00 2001 From: KeksNino Date: Thu, 25 Jun 2026 17:24:09 +0200 Subject: [PATCH 02/25] add nix files --- configuration.nix | 188 +++++++++++++++++++++++++++++++++++++ flake.lock | 68 ++++++++++++++ flake.nix | 50 ++++++++++ flake.nix.o | 112 ++++++++++++++++++++++ hardware-configuration.nix | 39 ++++++++ home-manager/home.nix | 29 ++++++ 6 files changed, 486 insertions(+) create mode 100644 configuration.nix create mode 100644 flake.lock create mode 100644 flake.nix create mode 100644 flake.nix.o create mode 100644 hardware-configuration.nix create mode 100644 home-manager/home.nix diff --git a/configuration.nix b/configuration.nix new file mode 100644 index 0000000..586e7d8 --- /dev/null +++ b/configuration.nix @@ -0,0 +1,188 @@ +# 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, ... }: + + +{ + imports = + [ # Include the results of the hardware scan. + ./hardware-configuration.nix + ]; + + nix.settings.experimental-features = [ "nix-command" "flakes" ]; + + boot.kernelParams = [ "iomem=relaxed" "pcie_acs_override=downstream,multifunction,id:10de:1c03,id:10de:10f1" "rd.driver.pre=vfio-pci" "quiet" "pci-stub.ids=10de:1c03,10de:10f1" "iommu=pt" "amd_iommu=on" "kvm.ignore_msrs=1" "mitigations=off" ]; + + hardware.graphics.enable = true; + + # Bootloader. + #boot.loader.systemd-boot.enable = true; + boot.loader.grub.enable = true; + boot.loader.grub.device = "nodev"; + boot.loader.grub.efiSupport = true; + # boot.kernelPackages = pkgs.linuxPackages_zen; + + networking.hostName = "nixos"; # Define your hostname. + # networking.wireless.enable = true; # Enables wireless support via wpa_supplicant. + + # Configure network proxy if necessary + # networking.proxy.default = "http://user:password@proxy:port/"; + # networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain"; + + # Enable networking + networking.networkmanager.enable = true; + + # Set your time zone. + time.timeZone = "Europe/Berlin"; + + # Select internationalisation properties. + i18n.defaultLocale = "en_US.UTF-8"; + + i18n.extraLocaleSettings = { + LC_ADDRESS = "de_DE.UTF-8"; + LC_IDENTIFICATION = "de_DE.UTF-8"; + LC_MEASUREMENT = "de_DE.UTF-8"; + LC_MONETARY = "de_DE.UTF-8"; + LC_NAME = "de_DE.UTF-8"; + LC_NUMERIC = "de_DE.UTF-8"; + LC_PAPER = "de_DE.UTF-8"; + LC_TELEPHONE = "de_DE.UTF-8"; + LC_TIME = "de_DE.UTF-8"; + }; + + # Configure keymap in X11 + services.xserver.xkb = { + layout = "de"; + variant = ""; + }; + + # Configure console keymap + console.keyMap = "de"; + + programs.fish.enable = true; + + # Define a user account. Don't forget to set a password with ‘passwd’. + users.users.user = { + isNormalUser = true; + description = "user"; + extraGroups = [ "networkmanager" "wheel" ]; + shell = pkgs.fish; + packages = with pkgs; []; + }; + + # Enable automatic login for the user. + services.getty.autologinUser = "user"; + + # Allow unfree packages + nixpkgs.config.allowUnfree = true; + + programs.hyprland = { + enable = true; + xwayland.enable = true; + }; + + # NFS / MPD + fileSystems."/media/music" = { + device = "192.168.132.149:/media/music"; + fsType = "nfs"; + }; + boot.supportedFilesystems = [ "nfs" ]; + + services.mpd.settings.musicDirectory = { + # ~/Music + }; + + # List packages installed in system profile. To search, run: + # $ nix search wget + + qt = { + enable = true; + platformTheme = "qt5ct"; + style = "breeze"; + }; + + services.goxlr-utility.enable = true; + + environment.systemPackages = with pkgs; [ + wget + neovim + efibootmgr + gdu + kitty + nemo + legcord + awww + jamesdsp + rofi + waybar + udiskie + librewolf + udisks2 + grimblast + pywal16 + xdg-desktop-portal + xdg-desktop-portal-hyprland + btop + bitwarden-desktop + fzf + zinit + zoxide + nitch + fzf + tmuxifier + eza + tmux + lxappearance + cliphist + git + adwaita-icon-theme + gnumake + gcc + meson + playerctl + trash-cli + equibop + steam + yazi + rmpc + wl-clipboard + cinny-desktop + unzip + p7zip + ]; + +nixpkgs.config.permittedInsecurePackages = [ + "electron-39.8.10" +]; + + # 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 = "24.11"; # Did you read the comment? + system.autoUpgrade.enable = false; + system.autoUpgrade.allowReboot = true; +} diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..0f3dc07 --- /dev/null +++ b/flake.lock @@ -0,0 +1,68 @@ +{ + "nodes": { + "home-manager": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1782358560, + "narHash": "sha256-vCcLh9pw3XO/+Lxk8r6xv6QnoCrTfGqiACcI7O637Wg=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "3a70e333f2950c302e875c44cfcfaff3f80f36bc", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "home-manager", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1782328929, + "narHash": "sha256-EboKWnTWTpQMJ7MbgJs+KJGJuLDnBbA26h8M/jyvQrE=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "1ab79b94f1a4facdf7a8b414cb09fb5e3fab4e2d", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "home-manager": "home-manager", + "nixpkgs": "nixpkgs", + "zen-browser": "zen-browser" + } + }, + "zen-browser": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1781847955, + "narHash": "sha256-1OSYOGuJp/NoODmSHjsz+6TB/kSilJ+BsFihjY7TTnc=", + "owner": "youwen5", + "repo": "zen-browser-flake", + "rev": "4bca251cd556677f7b765ff324d1638ae215be13", + "type": "github" + }, + "original": { + "owner": "youwen5", + "repo": "zen-browser-flake", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..f0b57ea --- /dev/null +++ b/flake.nix @@ -0,0 +1,50 @@ +{ + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs"; + # hyprland.url = "github:hyprwm/Hyprland"; + zen-browser = { + url = "github:youwen5/zen-browser-flake"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + home-manager = { + url = "github:nix-community/home-manager"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + }; + + outputs = { self, zen-browser, ... } @inputs: let + system = "x86_64-linux"; + inherit (inputs.hyprland.inputs) nixpkgs; + eachSystem = nixpkgs.lib.genAttrs (import inputs.hyprland.inputs.systems); + pkgsFor = eachSystem (system: import nixpkgs {localSystem = system;}); + in { + nixosConfigurations.nixos = nixpkgs.lib.nixosSystem { + inherit system; + modules = [ + ./configuration.nix + ./hardware-configuration.nix + inputs.home-manager.nixosModules.home-manager + { + home-manager.useGlobalPkgs = true; + home-manager.useUserPackages = true; + + home-manager.extraSpecialArgs = { inherit self; }; + + home-manager.users.user = import ./home-manager/home.nix; + + home-manager.backupFileExtension = "backup"; + + # Optionally, use home-manager.extraSpecialArgs to pass arguments to home.nix + } + (let inputs = { zen = zen-browser; }; in + { config, pkgs, ... }: { + environment.systemPackages = [ + pkgs.git + inputs.zen.packages.${pkgs.stdenv.hostPlatform.system}.default + ]; + } + ) + ]; + }; + }; +} diff --git a/flake.nix.o b/flake.nix.o new file mode 100644 index 0000000..c226459 --- /dev/null +++ b/flake.nix.o @@ -0,0 +1,112 @@ +{ + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs"; + hyprland.url = "github:hyprwm/Hyprland"; + zen-browser = { + url = "github:youwen5/zen-browser-flake"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + home-manager = { + url = "github:nix-community/home-manager/release-25.11"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + }; + + outputs = { + self, + hyprland, + nixpkgs, + zen-browser, + home-manager, + ... + }: let + system = "x86_64-linux"; + inherit (hyprland.inputs) nixpkgs; + eachSystem = nixpkgs.lib.genAttrs (import hyprland.inputs.systems); + pkgsFor = eachSystem (system: import nixpkgs {localSystem = system;}); + rawCommitPins = (builtins.fromTOML (builtins.readFile ./hyprpm.toml)).repository.commit_pins; + commitPins = builtins.listToAttrs ( + map (p: { + name = builtins.head p; + value = builtins.elemAt p 1; + }) + rawCommitPins + ); + srcRev = "${commitPins.${hyprland.rev} or "git"}"; + srcRevShort = builtins.substring 0 7 srcRev; + in { + nixosConfigurations.nixos = nixpkgs.lib.nixosSystem { + inherit system; + modules = [ + ./configuration.nix + ./hardware-configuration.nix + home-manager.nixosModules.home-manager + { + home-manager.useGlobalPkgs = true; + home-manager.useUserPackages = true; + + home-manager.extraSpecialArgs = { inherit self; }; + + # home-manager.users.user = import ./home.nix; + + # Optionally, use home-manager.extraSpecialArgs to pass arguments to home.nix + } + (let inputs = { zen = zen-browser; }; in + { config, pkgs, ... }: { + environment.systemPackages = [ + pkgs.git + inputs.zen.packages.${pkgs.stdenv.hostPlatform.system}.default + ]; + } + ) + ]; + }; + packages = eachSystem (system: let + pkgs = pkgsFor.${system}; + in rec { + hyprsplit = pkgs.stdenv.mkDerivation { + pname = "hyprsplit"; + version = "flakeRev=${self.shortRev or "dirty"}_srcRev=${srcRevShort}"; + src = + if (commitPins ? ${hyprland.rev}) && (self ? rev) + then + (builtins.fetchGit { + url = "https://github.com/shezdy/hyprsplit"; + rev = srcRev; + }) + else ./.; + + nativeBuildInputs = with pkgs; [pkg-config meson ninja gcc14]; + buildInputs = with pkgs; + [ + hyprland.packages.${system}.hyprland.dev + pixman + libdrm + ] + ++ hyprland.packages.${system}.hyprland.buildInputs; + + meta = with pkgs.lib; { + homepage = "https://github.com/shezdy/hyprsplit"; + description = "Hyprland plugin for separate sets of workspaces on each monitor"; + license = licenses.bsd3; + platforms = platforms.linux; + }; + }; + + default = hyprsplit; + }); + + devShells = eachSystem (system: let + pkgs = pkgsFor.${system}; + in { + default = pkgs.mkShell.override {stdenv = pkgs.gcc14Stdenv;} { + shellHook = '' + meson setup build --reconfigure + cp ./build/compile_commands.json ./compile_commands.json + ''; + name = "hyprsplit"; + inputsFrom = [self.packages.${system}.hyprsplit]; + }; + }); + }; +} diff --git a/hardware-configuration.nix b/hardware-configuration.nix new file mode 100644 index 0000000..652dcfd --- /dev/null +++ b/hardware-configuration.nix @@ -0,0 +1,39 @@ +# 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 = [ "xhci_pci" "ahci" "usbhid" "usb_storage" "uas" "sd_mod" ]; + boot.initrd.kernelModules = [ ]; + boot.kernelModules = [ "kvm-amd" ]; + boot.extraModulePackages = [ ]; + + fileSystems."/" = + { device = "/dev/disk/by-uuid/3bf12238-0a1b-4d18-9cf0-a06209368e76"; + fsType = "ext4"; + }; + + fileSystems."/boot" = + { device = "/dev/disk/by-uuid/16F5-2D1A"; + fsType = "vfat"; + options = [ "fmask=0077" "dmask=0077" ]; + }; + + swapDevices = [ ]; + + # Enables DHCP on each ethernet and wireless interface. In case of scripted networking + # (the default) this is the recommended approach. When using systemd-networkd it's + # still possible to use this option, but it's recommended to use it in conjunction + # with explicit per-interface declarations with `networking.interfaces..useDHCP`. + networking.useDHCP = lib.mkDefault true; + # networking.interfaces.enp34s0.useDHCP = lib.mkDefault true; + # networking.interfaces.enp3s0f0u2.useDHCP = lib.mkDefault true; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; +} diff --git a/home-manager/home.nix b/home-manager/home.nix new file mode 100644 index 0000000..03efb9e --- /dev/null +++ b/home-manager/home.nix @@ -0,0 +1,29 @@ +{ pkgs, ... }: +let +in +{ + home.username = "user"; + home.homeDirectory = "/home/user"; + + home.packages = with pkgs; [ + hyprland + fzf + eza + nnn + ]; + + wayland.windowManager.hyprland = { + enable = true; + }; + + gtk = { + enable = true; + theme = { + name = "Adwaita-dark"; + package = pkgs.gnome-themes-extra; + }; + }; + + + home.stateVersion = "26.05"; +} From 64c156021a586110f37c9bd2bcdf865e2350a36e Mon Sep 17 00:00:00 2001 From: KeksNino Date: Thu, 25 Jun 2026 17:25:04 +0200 Subject: [PATCH 03/25] remove hyprland from nix flake --- flake.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/flake.nix b/flake.nix index f0b57ea..5e706d7 100644 --- a/flake.nix +++ b/flake.nix @@ -14,8 +14,8 @@ outputs = { self, zen-browser, ... } @inputs: let system = "x86_64-linux"; - inherit (inputs.hyprland.inputs) nixpkgs; - eachSystem = nixpkgs.lib.genAttrs (import inputs.hyprland.inputs.systems); + inherit (inputs) nixpkgs; + eachSystem = nixpkgs.lib.genAttrs (import inputs.systems); pkgsFor = eachSystem (system: import nixpkgs {localSystem = system;}); in { nixosConfigurations.nixos = nixpkgs.lib.nixosSystem { From bed947d4d960786f44a554b362374c11bf5470e7 Mon Sep 17 00:00:00 2001 From: KeksNino Date: Thu, 25 Jun 2026 21:24:18 +0200 Subject: [PATCH 04/25] remove hyprland from home manager + enable a bunch of programs and uninstall a few programs + fix mpd --- configuration.nix | 21 +++++++++++---------- home-manager/home.nix | 7 +++---- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/configuration.nix b/configuration.nix index 586e7d8..3bd7ddc 100644 --- a/configuration.nix +++ b/configuration.nix @@ -90,9 +90,8 @@ }; boot.supportedFilesystems = [ "nfs" ]; - services.mpd.settings.musicDirectory = { - # ~/Music - }; + services.mpd.enable = true; + services.mpd.settings.musicDirectory = "~/Music"; # List packages installed in system profile. To search, run: # $ nix search wget @@ -104,21 +103,25 @@ }; services.goxlr-utility.enable = true; + programs.dms-shell.enable = true; + programs.steam.enable = true; + programs.yazi.enable = true; + programs.neovim.enable = true; + + security.rtkit.enable = true; + systemd.services."rtkit-daemon".enable = true; environment.systemPackages = with pkgs; [ wget - neovim efibootmgr gdu kitty nemo - legcord awww jamesdsp rofi - waybar + # waybar udiskie - librewolf udisks2 grimblast pywal16 @@ -131,7 +134,6 @@ zoxide nitch fzf - tmuxifier eza tmux lxappearance @@ -144,13 +146,12 @@ playerctl trash-cli equibop - steam - yazi rmpc wl-clipboard cinny-desktop unzip p7zip + tree-sitter ]; nixpkgs.config.permittedInsecurePackages = [ diff --git a/home-manager/home.nix b/home-manager/home.nix index 03efb9e..7fc84e9 100644 --- a/home-manager/home.nix +++ b/home-manager/home.nix @@ -6,15 +6,14 @@ in home.homeDirectory = "/home/user"; home.packages = with pkgs; [ - hyprland fzf eza nnn ]; - wayland.windowManager.hyprland = { - enable = true; - }; + # wayland.windowManager.hyprland = { + # enable = true; + # }; gtk = { enable = true; From edaa68912dc24f69e831a800cfcae47336452c79 Mon Sep 17 00:00:00 2001 From: KeksNino Date: Fri, 26 Jun 2026 17:50:41 +0200 Subject: [PATCH 05/25] update lots --- configuration.nix | 126 ++++++++-------------- flake.nix | 28 +++-- flake.nix.o | 112 -------------------- hardware-configuration.nix | 27 +++-- home-manager/home.nix | 10 +- home-manager/mpd.nix | 209 +++++++++++++++++++++++++++++++++++++ packages.nix | 50 +++++++++ 7 files changed, 347 insertions(+), 215 deletions(-) delete mode 100644 flake.nix.o create mode 100644 home-manager/mpd.nix create mode 100644 packages.nix diff --git a/configuration.nix b/configuration.nix index 3bd7ddc..d1eb991 100644 --- a/configuration.nix +++ b/configuration.nix @@ -4,34 +4,50 @@ { config, pkgs, ... }: - { - imports = - [ # Include the results of the hardware scan. - ./hardware-configuration.nix + imports = [ + ./hardware-configuration.nix + ./packages.nix + ]; + + # DISKS + fileSystems."/media/gamedisk4" = { + device = "/dev/disk/by-uuid/D290EB87C8A1E82A"; + fsType = "ntfs3"; + options = [ + "uid=1000" + "gid=100" + "umask=022" ]; + }; - nix.settings.experimental-features = [ "nix-command" "flakes" ]; + nix.settings.experimental-features = [ + "nix-command" + "flakes" + ]; - boot.kernelParams = [ "iomem=relaxed" "pcie_acs_override=downstream,multifunction,id:10de:1c03,id:10de:10f1" "rd.driver.pre=vfio-pci" "quiet" "pci-stub.ids=10de:1c03,10de:10f1" "iommu=pt" "amd_iommu=on" "kvm.ignore_msrs=1" "mitigations=off" ]; + boot.kernelParams = [ + "iomem=relaxed" + "pcie_acs_override=downstream,multifunction,id:10de:1c03,id:10de:10f1" + "rd.driver.pre=vfio-pci" + "quiet" + "pci-stub.ids=10de:1c03,10de:10f1" + "iommu=pt" + "amd_iommu=on" + "kvm.ignore_msrs=1" + "mitigations=off" + ]; hardware.graphics.enable = true; # Bootloader. - #boot.loader.systemd-boot.enable = true; boot.loader.grub.enable = true; boot.loader.grub.device = "nodev"; boot.loader.grub.efiSupport = true; - # boot.kernelPackages = pkgs.linuxPackages_zen; networking.hostName = "nixos"; # Define your hostname. # networking.wireless.enable = true; # Enables wireless support via wpa_supplicant. - # Configure network proxy if necessary - # networking.proxy.default = "http://user:password@proxy:port/"; - # networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain"; - - # Enable networking networking.networkmanager.enable = true; # Set your time zone. @@ -52,26 +68,23 @@ LC_TIME = "de_DE.UTF-8"; }; - # Configure keymap in X11 - services.xserver.xkb = { - layout = "de"; - variant = ""; - }; - # Configure console keymap console.keyMap = "de"; - programs.fish.enable = true; - # Define a user account. Don't forget to set a password with ‘passwd’. users.users.user = { isNormalUser = true; description = "user"; - extraGroups = [ "networkmanager" "wheel" ]; + extraGroups = [ + "networkmanager" + "wheel" + ]; shell = pkgs.fish; - packages = with pkgs; []; + packages = with pkgs; [ ]; }; + programs.fish.enable = true; + # Enable automatic login for the user. services.getty.autologinUser = "user"; @@ -86,15 +99,9 @@ # NFS / MPD fileSystems."/media/music" = { device = "192.168.132.149:/media/music"; - fsType = "nfs"; + fsType = "nfs4"; }; - boot.supportedFilesystems = [ "nfs" ]; - - services.mpd.enable = true; - services.mpd.settings.musicDirectory = "~/Music"; - - # List packages installed in system profile. To search, run: - # $ nix search wget + boot.supportedFilesystems = [ "nfs4" ]; qt = { enable = true; @@ -103,60 +110,19 @@ }; services.goxlr-utility.enable = true; + services.udisks2.enable = true; programs.dms-shell.enable = true; programs.steam.enable = true; - programs.yazi.enable = true; programs.neovim.enable = true; security.rtkit.enable = true; systemd.services."rtkit-daemon".enable = true; - environment.systemPackages = with pkgs; [ - wget - efibootmgr - gdu - kitty - nemo - awww - jamesdsp - rofi - # waybar - udiskie - udisks2 - grimblast - pywal16 - xdg-desktop-portal - xdg-desktop-portal-hyprland - btop - bitwarden-desktop - fzf - zinit - zoxide - nitch - fzf - eza - tmux - lxappearance - cliphist - git - adwaita-icon-theme - gnumake - gcc - meson - playerctl - trash-cli - equibop - rmpc - wl-clipboard - cinny-desktop - unzip - p7zip - tree-sitter - ]; + environment.systemPackages = with pkgs; [ ]; -nixpkgs.config.permittedInsecurePackages = [ - "electron-39.8.10" -]; + nixpkgs.config.permittedInsecurePackages = [ + "electron-39.8.10" + ]; # Some programs need SUID wrappers, can be configured further or are # started in user sessions. @@ -171,12 +137,6 @@ nixpkgs.config.permittedInsecurePackages = [ # 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 diff --git a/flake.nix b/flake.nix index 5e706d7..fd5a471 100644 --- a/flake.nix +++ b/flake.nix @@ -12,15 +12,18 @@ }; }; - outputs = { self, zen-browser, ... } @inputs: let - system = "x86_64-linux"; - inherit (inputs) nixpkgs; - eachSystem = nixpkgs.lib.genAttrs (import inputs.systems); - pkgsFor = eachSystem (system: import nixpkgs {localSystem = system;}); - in { + outputs = + { self, zen-browser, ... }@inputs: + let + system = "x86_64-linux"; + inherit (inputs) nixpkgs; + eachSystem = nixpkgs.lib.genAttrs (import inputs.systems); + pkgsFor = eachSystem (system: import nixpkgs { localSystem = system; }); + in + { nixosConfigurations.nixos = nixpkgs.lib.nixosSystem { - inherit system; - modules = [ + inherit system; + modules = [ ./configuration.nix ./hardware-configuration.nix inputs.home-manager.nixosModules.home-manager @@ -36,7 +39,12 @@ # Optionally, use home-manager.extraSpecialArgs to pass arguments to home.nix } - (let inputs = { zen = zen-browser; }; in + ( + let + inputs = { + zen = zen-browser; + }; + in { config, pkgs, ... }: { environment.systemPackages = [ pkgs.git @@ -46,5 +54,5 @@ ) ]; }; - }; + }; } diff --git a/flake.nix.o b/flake.nix.o deleted file mode 100644 index c226459..0000000 --- a/flake.nix.o +++ /dev/null @@ -1,112 +0,0 @@ -{ - inputs = { - nixpkgs.url = "github:NixOS/nixpkgs"; - hyprland.url = "github:hyprwm/Hyprland"; - zen-browser = { - url = "github:youwen5/zen-browser-flake"; - inputs.nixpkgs.follows = "nixpkgs"; - }; - home-manager = { - url = "github:nix-community/home-manager/release-25.11"; - inputs.nixpkgs.follows = "nixpkgs"; - }; - }; - - outputs = { - self, - hyprland, - nixpkgs, - zen-browser, - home-manager, - ... - }: let - system = "x86_64-linux"; - inherit (hyprland.inputs) nixpkgs; - eachSystem = nixpkgs.lib.genAttrs (import hyprland.inputs.systems); - pkgsFor = eachSystem (system: import nixpkgs {localSystem = system;}); - rawCommitPins = (builtins.fromTOML (builtins.readFile ./hyprpm.toml)).repository.commit_pins; - commitPins = builtins.listToAttrs ( - map (p: { - name = builtins.head p; - value = builtins.elemAt p 1; - }) - rawCommitPins - ); - srcRev = "${commitPins.${hyprland.rev} or "git"}"; - srcRevShort = builtins.substring 0 7 srcRev; - in { - nixosConfigurations.nixos = nixpkgs.lib.nixosSystem { - inherit system; - modules = [ - ./configuration.nix - ./hardware-configuration.nix - home-manager.nixosModules.home-manager - { - home-manager.useGlobalPkgs = true; - home-manager.useUserPackages = true; - - home-manager.extraSpecialArgs = { inherit self; }; - - # home-manager.users.user = import ./home.nix; - - # Optionally, use home-manager.extraSpecialArgs to pass arguments to home.nix - } - (let inputs = { zen = zen-browser; }; in - { config, pkgs, ... }: { - environment.systemPackages = [ - pkgs.git - inputs.zen.packages.${pkgs.stdenv.hostPlatform.system}.default - ]; - } - ) - ]; - }; - packages = eachSystem (system: let - pkgs = pkgsFor.${system}; - in rec { - hyprsplit = pkgs.stdenv.mkDerivation { - pname = "hyprsplit"; - version = "flakeRev=${self.shortRev or "dirty"}_srcRev=${srcRevShort}"; - src = - if (commitPins ? ${hyprland.rev}) && (self ? rev) - then - (builtins.fetchGit { - url = "https://github.com/shezdy/hyprsplit"; - rev = srcRev; - }) - else ./.; - - nativeBuildInputs = with pkgs; [pkg-config meson ninja gcc14]; - buildInputs = with pkgs; - [ - hyprland.packages.${system}.hyprland.dev - pixman - libdrm - ] - ++ hyprland.packages.${system}.hyprland.buildInputs; - - meta = with pkgs.lib; { - homepage = "https://github.com/shezdy/hyprsplit"; - description = "Hyprland plugin for separate sets of workspaces on each monitor"; - license = licenses.bsd3; - platforms = platforms.linux; - }; - }; - - default = hyprsplit; - }); - - devShells = eachSystem (system: let - pkgs = pkgsFor.${system}; - in { - default = pkgs.mkShell.override {stdenv = pkgs.gcc14Stdenv;} { - shellHook = '' - meson setup build --reconfigure - cp ./build/compile_commands.json ./compile_commands.json - ''; - name = "hyprsplit"; - inputsFrom = [self.packages.${system}.hyprsplit]; - }; - }); - }; -} diff --git a/hardware-configuration.nix b/hardware-configuration.nix index 652dcfd..1291e42 100644 --- a/hardware-configuration.nix +++ b/hardware-configuration.nix @@ -8,7 +8,7 @@ [ (modulesPath + "/installer/scan/not-detected.nix") ]; - boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "usbhid" "usb_storage" "uas" "sd_mod" ]; + boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "usb_storage" "usbhid" "sd_mod" ]; boot.initrd.kernelModules = [ ]; boot.kernelModules = [ "kvm-amd" ]; boot.extraModulePackages = [ ]; @@ -24,15 +24,24 @@ options = [ "fmask=0077" "dmask=0077" ]; }; - swapDevices = [ ]; + fileSystems."/media/music" = + { device = "192.168.132.149:/media/music"; + fsType = "nfs4"; + }; - # Enables DHCP on each ethernet and wireless interface. In case of scripted networking - # (the default) this is the recommended approach. When using systemd-networkd it's - # still possible to use this option, but it's recommended to use it in conjunction - # with explicit per-interface declarations with `networking.interfaces..useDHCP`. - networking.useDHCP = lib.mkDefault true; - # networking.interfaces.enp34s0.useDHCP = lib.mkDefault true; - # networking.interfaces.enp3s0f0u2.useDHCP = lib.mkDefault true; + fileSystems."/mnt" = + { device = "/dev/disk/by-uuid/8873d98f-c461-4d34-8867-f4ebd5c205d2"; + fsType = "ext4"; + }; + + fileSystems."/media/gamedisk4" = + { device = "/dev/disk/by-uuid/D290EB87C8A1E82A"; + fsType = "ntfs3"; + }; + + swapDevices = + [ { device = "/dev/disk/by-uuid/5949c73f-30eb-4956-9e93-70301c88fad8"; } + ]; nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; diff --git a/home-manager/home.nix b/home-manager/home.nix index 7fc84e9..66791ad 100644 --- a/home-manager/home.nix +++ b/home-manager/home.nix @@ -2,6 +2,10 @@ let in { + imports = [ + ./mpd.nix + ]; + home.username = "user"; home.homeDirectory = "/home/user"; @@ -11,6 +15,11 @@ in nnn ]; + programs.yazi.enable = true; + programs.yazi.enableFishIntegration = true; + + programs.fish.enable = true; + # wayland.windowManager.hyprland = { # enable = true; # }; @@ -23,6 +32,5 @@ in }; }; - home.stateVersion = "26.05"; } diff --git a/home-manager/mpd.nix b/home-manager/mpd.nix new file mode 100644 index 0000000..86f7639 --- /dev/null +++ b/home-manager/mpd.nix @@ -0,0 +1,209 @@ +{ + services.mpd = { + enable = true; + musicDirectory = "/home/user/Music"; + playlistDirectory = "/home/user/Music/Playlists"; + dbFile = "/home/user/.config/mpd/database"; + # log_file = "~/.config/mpd/log"; + extraConfig = '' + save_absolute_paths_in_playlists "yes" + metadata_to_use "+comment" + audio_output { + type "pipewire" + name "Pipewire Sound Server" + } + auto_update "yes" + ''; + network.listenAddress = "/home/user/.config/mpd/socket"; + }; + + programs.rmpc.enable = true; + programs.rmpc.config = '' + #![enable(implicit_some)] + #![enable(unwrap_newtypes)] + #![enable(unwrap_variant_newtypes)] + ( + address: "/home/user/.config/mpd/socket", + password: None, + theme: Some("default"), + cache_dir: Some("/home/user/Music/rmpc"), + on_song_change: None, + volume_step: 5, + max_fps: 60, + scrolloff: 0, + wrap_navigation: false, + enable_mouse: true, + enable_config_hot_reload: true, + status_update_interval_ms: 1000, + rewind_to_start_sec: None, + reflect_changes_to_playlist: false, + select_current_song_on_change: false, + browser_song_sort: [Track, Disc, Artist, Title], + directories_sort: SortFormat(group_by_type: true, reverse: false), + album_art: ( + method: Kitty, + max_size_px: (width: 1200, height: 1200), + disabled_protocols: ["http://", "https://"], + vertical_align: Center, + horizontal_align: Center, + ), + keybinds: ( + global: { + ":": CommandMode, + ",": VolumeDown, + "s": Stop, + ".": VolumeUp, + "": NextTab, + "": PreviousTab, + "1": SwitchToTab("Queue"), + "2": SwitchToTab("Files"), + "3": SwitchToTab("Playlists"), + "4": SwitchToTab("Artists"), + "5": SwitchToTab("Albums"), + "6": SwitchToTab("Search"), + //"7": SwitchToTab("Album Artists"), + "q": Quit, + ">": NextTrack, + "p": TogglePause, + "<": PreviousTrack, + "f": SeekForward, + "z": ToggleRepeat, + "x": ToggleRandom, + "c": ToggleConsume, + "v": ToggleSingle, + "b": SeekBack, + "~": ShowHelp, + "u": Update, + "U": Rescan, + "I": ShowCurrentSongInfo, + "O": ShowOutputs, + "P": ShowDecoders, + "R": AddRandom, + "": ExternalCommand(command: ["/home/user/.scripts/check-playlist.sh"], description: "Check if selected song is already in a playlist"), + }, + navigation: { + "k": Up, + "j": Down, + "h": Left, + "l": Right, + "": Up, + "": Down, + "": Left, + "": Right, + "": PaneUp, + "": PaneDown, + "": PaneLeft, + "": PaneRight, + "": UpHalf, + "N": PreviousResult, + "a": Add, + "A": AddAll, + "r": Rename, + "n": NextResult, + "g": Top, + "": Select, + "": InvertSelection, + "G": Bottom, + "": Confirm, + "i": FocusInput, + "J": MoveDown, + "": DownHalf, + "/": EnterSearch, + "": Close, + "": Close, + "K": MoveUp, + "D": Delete, + "B": ShowInfo, + }, + queue: { + "D": DeleteAll, + "": Play, + "": Save, + "a": AddToPlaylist, + "d": Delete, + "C": JumpToCurrent, + "X": Shuffle, + }, + ), + search: ( + case_sensitive: false, + mode: Contains, + tags: [ + (value: "any", label: "Any Tag"), + (value: "artist", label: "Artist"), + (value: "album", label: "Album"), + (value: "albumartist", label: "Album Artist"), + (value: "title", label: "Title"), + (value: "filename", label: "Filename"), + (value: "genre", label: "Genre"), + ], + ), + artists: ( + album_display_mode: SplitByDate, + album_sort_by: Date, + ), + cava: ( + framerate: 60, + autosens: true, + sensitivity: 110, // default 100 + lower_cutoff_freq: 50, // not passed to cava if not provided + higher_cutoff_freq: 10000, // not passed to cava if not provided + input: ( + method: Fifo, + source: "/tmp/mpd.fifo", + sample_rate: 44100, + channels: 2, + sample_bits: 16, + ), + smoothing: ( + noise_reduction: 77, + monstercat: true, + waves: false, + ), + eq: [] + ), + tabs: [ + ( + name: "Queue", + pane: Split( + direction: Horizontal, + panes: [ + (size: "40%", pane: Pane(AlbumArt)), + (size: "60%", pane: Split( + direction: Vertical, + panes: [ + (size: "95%", pane: Pane(Queue)), + (size: "30%", pane: Pane(Cava)), + ], + )), + ], + ), + ), + ( + name: "Files", + pane: Pane(Directories), + ), + ( + name: "Playlists", + pane: Pane(Playlists), + ), + ( + name: "Artists", + pane: Pane(Artists), + ), + ( + name: "Albums", + pane: Pane(Albums), + ), + ( + name: "Search", + pane: Pane(Search), + ), + //( + // name: "Album Artists", + // pane: Pane(AlbumArtists), + //), + ], + ) + ''; +} diff --git a/packages.nix b/packages.nix new file mode 100644 index 0000000..f336079 --- /dev/null +++ b/packages.nix @@ -0,0 +1,50 @@ +{ pkgs, ... }: { + + environment.systemPackages = with pkgs; [ + wget + efibootmgr + gdu + kitty + nemo + awww + jamesdsp + rofi + # waybar + udiskie + grimblast + pywal16 + btop + bitwarden-desktop + fzf + zinit + zoxide + nitch + fzf + eza + tmux + cliphist + git + adwaita-icon-theme + gnumake + gcc + meson + playerctl + trash-cli + equibop + wl-clipboard + cinny-desktop + unzip + p7zip + tree-sitter + nodejs + nixfmt + decibels + nwg-look + mpc + python3 + basedpyright + waypaper + nerd-fonts.caskaydia-mono + lazygit + ]; +} From 2bb2ab4afcb5592ce10b5ad60a911df933049c72 Mon Sep 17 00:00:00 2001 From: KeksNino Date: Sat, 27 Jun 2026 21:36:14 +0200 Subject: [PATCH 06/25] update too much --- configuration.nix | 39 +-------- discord-music-presence/.envrc | 6 ++ discord-music-presence/.gitignore | 15 ++++ discord-music-presence/flake.lock | 27 +++++++ discord-music-presence/flake.nix | 30 +++++++ .../pkgs/discord-music-presence.nix | 79 +++++++++++++++++++ discord-music-presence/shell.nix | 12 +++ flake.lock | 33 +++++++- flake.nix | 7 +- hardware-configuration.nix | 14 ++-- home-manager/home.nix | 65 +++++++++++++-- packages.nix | 30 ++----- 12 files changed, 284 insertions(+), 73 deletions(-) create mode 100644 discord-music-presence/.envrc create mode 100644 discord-music-presence/.gitignore create mode 100644 discord-music-presence/flake.lock create mode 100644 discord-music-presence/flake.nix create mode 100644 discord-music-presence/pkgs/discord-music-presence.nix create mode 100644 discord-music-presence/shell.nix diff --git a/configuration.nix b/configuration.nix index d1eb991..59b258e 100644 --- a/configuration.nix +++ b/configuration.nix @@ -1,7 +1,3 @@ -# 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, ... }: { @@ -28,10 +24,7 @@ boot.kernelParams = [ "iomem=relaxed" - "pcie_acs_override=downstream,multifunction,id:10de:1c03,id:10de:10f1" - "rd.driver.pre=vfio-pci" "quiet" - "pci-stub.ids=10de:1c03,10de:10f1" "iommu=pt" "amd_iommu=on" "kvm.ignore_msrs=1" @@ -71,7 +64,7 @@ # Configure console keymap console.keyMap = "de"; - # Define a user account. Don't forget to set a password with ‘passwd’. + programs.fish.enable = true; users.users.user = { isNormalUser = true; description = "user"; @@ -83,12 +76,6 @@ packages = with pkgs; [ ]; }; - programs.fish.enable = true; - - # Enable automatic login for the user. - services.getty.autologinUser = "user"; - - # Allow unfree packages nixpkgs.config.allowUnfree = true; programs.hyprland = { @@ -110,10 +97,11 @@ }; services.goxlr-utility.enable = true; - services.udisks2.enable = true; programs.dms-shell.enable = true; programs.steam.enable = true; programs.neovim.enable = true; + programs.git.enable = true; + programs.tmux.enable = true; security.rtkit.enable = true; systemd.services."rtkit-daemon".enable = true; @@ -124,26 +112,7 @@ "electron-39.8.10" ]; - # 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; - - # 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 = "24.11"; # Did you read the comment? + system.stateVersion = "24.11"; system.autoUpgrade.enable = false; system.autoUpgrade.allowReboot = true; } diff --git a/discord-music-presence/.envrc b/discord-music-presence/.envrc new file mode 100644 index 0000000..0327fb6 --- /dev/null +++ b/discord-music-presence/.envrc @@ -0,0 +1,6 @@ +if has nix_direnv_version; then + watch_file modules/flake/shell.nix + + # now we want to load the flake environment + use flake +fi \ No newline at end of file diff --git a/discord-music-presence/.gitignore b/discord-music-presence/.gitignore new file mode 100644 index 0000000..33a9b94 --- /dev/null +++ b/discord-music-presence/.gitignore @@ -0,0 +1,15 @@ +### Nix template + +# Ignore build outputs from performing a nix-build or `nix build` command +result +result-* + +# Ignore the configuration folder for Jetbrains IDEs +.idea/ + +# Development environment +.direnv/ + +# Disable vm outputs that are called when starting a vm in this directory +*.qcow +*.qcow2 \ No newline at end of file diff --git a/discord-music-presence/flake.lock b/discord-music-presence/flake.lock new file mode 100644 index 0000000..8c95fc0 --- /dev/null +++ b/discord-music-presence/flake.lock @@ -0,0 +1,27 @@ +{ + "nodes": { + "nixpkgs": { + "locked": { + "lastModified": 1778869304, + "narHash": "sha256-30sZNZoA1cqF5JNO9fVX+wgiQYjB7HJqqJ4ztCDeBZE=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "d233902339c02a9c334e7e593de68855ad26c4cb", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "nixpkgs": "nixpkgs" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/discord-music-presence/flake.nix b/discord-music-presence/flake.nix new file mode 100644 index 0000000..bdac145 --- /dev/null +++ b/discord-music-presence/flake.nix @@ -0,0 +1,30 @@ +{ + description = "Xaiya's packaged packages"; + + inputs.nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable"; + + outputs = + { self, nixpkgs }: + let + systems = nixpkgs.lib.systems.flakeExposed; + + forAllSystems = + function: + nixpkgs.lib.genAttrs systems ( + system: function ( + import nixpkgs { + inherit system; + config.allowUnfree = true; + } + ) + ); + in { + packages = forAllSystems (pkgs: { + discord-music-presence = pkgs.callPackage ./pkgs/discord-music-presence.nix { }; + }); + + devShells = forAllSystems (pkgs: { + default = pkgs.callPackage ./shell.nix { }; + }); + }; +} diff --git a/discord-music-presence/pkgs/discord-music-presence.nix b/discord-music-presence/pkgs/discord-music-presence.nix new file mode 100644 index 0000000..ab6744f --- /dev/null +++ b/discord-music-presence/pkgs/discord-music-presence.nix @@ -0,0 +1,79 @@ +{ + lib, + fetchurl, + stdenv, + + xkeyboard_config, + + wayland, + libGL, + + openssl, + cacert, + + fontconfig, + freetype, + libgpg-error, + e2fsprogs, + + autoPatchelfHook, + makeWrapper, +}: + +stdenv.mkDerivation rec { + pname = "musicpresence"; + version = "2.3.5"; + + src = fetchurl { + url = "https://github.com/ungive/discord-music-presence/releases/download/v${version}/${pname}-${version}-linux-x86_64.tar.gz"; + hash = "sha256-BDgM1SfyEXC0oW+J33mYKwqRrvZX3cy/X9k7Yuk4kS8="; + }; + + nativeBuildInputs = [ + autoPatchelfHook + makeWrapper + ]; + + buildInputs = [ + stdenv.cc.cc + xkeyboard_config # ARGG + + wayland + libGL + + openssl + cacert + + fontconfig + freetype + libgpg-error + e2fsprogs + ]; + + installPhase = '' + runHook preInstall + + mkdir -p $out/bin $out/share + cp -r usr/* $out + + substituteInPlace $out/share/applications/${pname}.desktop \ + --replace-fail Exec=${pname} Exec=$out/bin/${pname} + + runHook postInstall + ''; + + postFixup = '' + wrapProgram $out/bin/${pname} \ + --set XKB_CONFIG_ROOT ${xkeyboard_config}/share/X11/xkb \ + --set SSL_CERT_FILE ${cacert}/etc/ssl/certs/ca-bundle.crt \ + --set OPENSSL_CONF ${openssl.out}/etc/ssl/openssl.cnf \ + ''; + + meta = { + description = "The Discord music status that works with any media player"; + homepage = "https://github.com/ungive/discord-music-presence"; + license = lib.licenses.unfreeRedistributable; + maintainers = with lib.maintainers; [ ]; + mainProgram = "musicpresence"; + }; +} \ No newline at end of file diff --git a/discord-music-presence/shell.nix b/discord-music-presence/shell.nix new file mode 100644 index 0000000..ec7b15a --- /dev/null +++ b/discord-music-presence/shell.nix @@ -0,0 +1,12 @@ +{ + mkShell, + callPackage, +}: +let + defaultPackage = callPackage ./pkgs/discord-music-presence.nix { }; +in +mkShell { + inputsFrom = [ defaultPackage ]; + + packages = [ ]; +} diff --git a/flake.lock b/flake.lock index 0f3dc07..3fad4bc 100644 --- a/flake.lock +++ b/flake.lock @@ -1,5 +1,19 @@ { "nodes": { + "discord-music-presence": { + "inputs": { + "nixpkgs": "nixpkgs" + }, + "locked": { + "path": "./discord-music-presence", + "type": "path" + }, + "original": { + "path": "./discord-music-presence", + "type": "path" + }, + "parent": [] + }, "home-manager": { "inputs": { "nixpkgs": [ @@ -21,6 +35,22 @@ } }, "nixpkgs": { + "locked": { + "lastModified": 1778869304, + "narHash": "sha256-30sZNZoA1cqF5JNO9fVX+wgiQYjB7HJqqJ4ztCDeBZE=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "d233902339c02a9c334e7e593de68855ad26c4cb", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_2": { "locked": { "lastModified": 1782328929, "narHash": "sha256-EboKWnTWTpQMJ7MbgJs+KJGJuLDnBbA26h8M/jyvQrE=", @@ -37,8 +67,9 @@ }, "root": { "inputs": { + "discord-music-presence": "discord-music-presence", "home-manager": "home-manager", - "nixpkgs": "nixpkgs", + "nixpkgs": "nixpkgs_2", "zen-browser": "zen-browser" } }, diff --git a/flake.nix b/flake.nix index fd5a471..5b1ab02 100644 --- a/flake.nix +++ b/flake.nix @@ -10,10 +10,13 @@ url = "github:nix-community/home-manager"; inputs.nixpkgs.follows = "nixpkgs"; }; + discord-music-presence = { + url = "path:./discord-music-presence"; + }; }; outputs = - { self, zen-browser, ... }@inputs: + { self, zen-browser, discord-music-presence, ... }@inputs: let system = "x86_64-linux"; inherit (inputs) nixpkgs; @@ -43,11 +46,13 @@ let inputs = { zen = zen-browser; + music-presence = discord-music-presence; }; in { config, pkgs, ... }: { environment.systemPackages = [ pkgs.git + inputs.music-presence.packages.${pkgs.stdenv.hostPlatform.system}.discord-music-presence inputs.zen.packages.${pkgs.stdenv.hostPlatform.system}.default ]; } diff --git a/hardware-configuration.nix b/hardware-configuration.nix index 1291e42..4dc4871 100644 --- a/hardware-configuration.nix +++ b/hardware-configuration.nix @@ -8,7 +8,7 @@ [ (modulesPath + "/installer/scan/not-detected.nix") ]; - boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "usb_storage" "usbhid" "sd_mod" ]; + boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "usbhid" "usb_storage" "sd_mod" ]; boot.initrd.kernelModules = [ ]; boot.kernelModules = [ "kvm-amd" ]; boot.extraModulePackages = [ ]; @@ -24,21 +24,21 @@ options = [ "fmask=0077" "dmask=0077" ]; }; + fileSystems."/media/gamedisk4" = + { device = "/dev/disk/by-uuid/D290EB87C8A1E82A"; + fsType = "ntfs3"; + }; + fileSystems."/media/music" = { device = "192.168.132.149:/media/music"; fsType = "nfs4"; }; - fileSystems."/mnt" = + fileSystems."/media/arch" = { device = "/dev/disk/by-uuid/8873d98f-c461-4d34-8867-f4ebd5c205d2"; fsType = "ext4"; }; - fileSystems."/media/gamedisk4" = - { device = "/dev/disk/by-uuid/D290EB87C8A1E82A"; - fsType = "ntfs3"; - }; - swapDevices = [ { device = "/dev/disk/by-uuid/5949c73f-30eb-4956-9e93-70301c88fad8"; } ]; diff --git a/home-manager/home.nix b/home-manager/home.nix index 66791ad..750ee7e 100644 --- a/home-manager/home.nix +++ b/home-manager/home.nix @@ -10,15 +10,70 @@ in home.homeDirectory = "/home/user"; home.packages = with pkgs; [ - fzf - eza - nnn ]; programs.yazi.enable = true; programs.yazi.enableFishIntegration = true; - programs.fish.enable = true; + programs.fzf.enable = true; + programs.fzf.enableFishIntegration = true; + + programs.eza.enable = true; + programs.eza.enableFishIntegration = true; + + services.cliphist.enable = true; + + programs.pywal.enable = true; + programs.pywal.package = pkgs.pywal16; + + programs.btop.enable = true; + + services.udiskie.enable = true; + + programs.lazygit.enable = true; + programs.lazygit.enableFishIntegration = true; + + programs.cava.enable = true; + + programs.equibop.enable = true; + + services.awww.enable = true; + + programs.rofi.enable = true; + + services.mpdris2.enable = true; + + programs.fastfetch.enable = true; + + programs.rbw.enable = true; + + programs.fish = { + enable = true; + interactiveShellInit = '' + nitch + + ''; + }; + + programs.fish.shellAliases = { + cat = "bat"; + cd = "z"; + cp = "cp -v"; + ff = "fastfetch"; + grep = "grep -i"; + hyprland = "start-hyprland"; + ls = "ls --color=tty"; + mv = "mv -v"; + n = "nvim"; + py = "uv run"; + r = "rsync -avh --info=progress2"; + rm = "trash"; + ssh = "kitty +kitten ssh"; + }; + + + programs.zoxide.enable = true; + programs.zoxide.enableFishIntegration = true; # wayland.windowManager.hyprland = { # enable = true; @@ -27,7 +82,7 @@ in gtk = { enable = true; theme = { - name = "Adwaita-dark"; + name = "Materia-dark-compact"; package = pkgs.gnome-themes-extra; }; }; diff --git a/packages.nix b/packages.nix index f336079..c8e5c4d 100644 --- a/packages.nix +++ b/packages.nix @@ -2,37 +2,15 @@ environment.systemPackages = with pkgs; [ wget - efibootmgr - gdu kitty - nemo - awww + gdu jamesdsp - rofi - # waybar - udiskie grimblast - pywal16 - btop bitwarden-desktop - fzf - zinit - zoxide nitch - fzf - eza - tmux - cliphist - git adwaita-icon-theme - gnumake - gcc - meson - playerctl trash-cli - equibop wl-clipboard - cinny-desktop unzip p7zip tree-sitter @@ -45,6 +23,10 @@ basedpyright waypaper nerd-fonts.caskaydia-mono - lazygit + nix-search + rofi-calc + renoise + materia-theme-transparent + pavucontrol ]; } From 5dd59ed360fa6ff60a6be0983233ef324db9e180 Mon Sep 17 00:00:00 2001 From: KeksNino Date: Thu, 2 Jul 2026 20:50:43 +0200 Subject: [PATCH 07/25] update --- configuration.nix | 9 ++++++--- flake.lock | 38 ++++++++++++++++++++++++++++++++++++++ flake.nix | 6 +++++- home-manager/home.nix | 34 ++++++++++++++++++++++++++++------ packages.nix | 4 ++-- 5 files changed, 79 insertions(+), 12 deletions(-) diff --git a/configuration.nix b/configuration.nix index 59b258e..66099b8 100644 --- a/configuration.nix +++ b/configuration.nix @@ -11,9 +11,12 @@ device = "/dev/disk/by-uuid/D290EB87C8A1E82A"; fsType = "ntfs3"; options = [ - "uid=1000" + "uid=1001" "gid=100" - "umask=022" + "rw" + "user" + "exec" + "umask=000" ]; }; @@ -97,11 +100,11 @@ }; services.goxlr-utility.enable = true; - programs.dms-shell.enable = true; programs.steam.enable = true; programs.neovim.enable = true; programs.git.enable = true; programs.tmux.enable = true; + programs.bat.enable = true; security.rtkit.enable = true; systemd.services."rtkit-daemon".enable = true; diff --git a/flake.lock b/flake.lock index 3fad4bc..2fb96a5 100644 --- a/flake.lock +++ b/flake.lock @@ -14,6 +14,43 @@ }, "parent": [] }, + "dms": { + "inputs": { + "flake-compat": "flake-compat", + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1782531264, + "narHash": "sha256-qaDc0S2qQx7jz2OGJrJ99uD2EhG1ehzr2x8L6mSoTEc=", + "owner": "AvengeMedia", + "repo": "DankMaterialShell", + "rev": "48f6a0c632d755f29a743a2c730e28f79c299214", + "type": "github" + }, + "original": { + "owner": "AvengeMedia", + "repo": "DankMaterialShell", + "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" + } + }, "home-manager": { "inputs": { "nixpkgs": [ @@ -68,6 +105,7 @@ "root": { "inputs": { "discord-music-presence": "discord-music-presence", + "dms": "dms", "home-manager": "home-manager", "nixpkgs": "nixpkgs_2", "zen-browser": "zen-browser" diff --git a/flake.nix b/flake.nix index 5b1ab02..f655fc9 100644 --- a/flake.nix +++ b/flake.nix @@ -13,6 +13,10 @@ discord-music-presence = { url = "path:./discord-music-presence"; }; + dms = { + url = "github:AvengeMedia/DankMaterialShell"; + inputs.nixpkgs.follows = "nixpkgs"; + }; }; outputs = @@ -34,7 +38,7 @@ home-manager.useGlobalPkgs = true; home-manager.useUserPackages = true; - home-manager.extraSpecialArgs = { inherit self; }; + home-manager.extraSpecialArgs = { inherit self; inherit inputs; }; home-manager.users.user = import ./home-manager/home.nix; diff --git a/home-manager/home.nix b/home-manager/home.nix index 750ee7e..c366b39 100644 --- a/home-manager/home.nix +++ b/home-manager/home.nix @@ -1,9 +1,10 @@ -{ pkgs, ... }: +{ pkgs, inputs, ... }: let in { imports = [ ./mpd.nix + inputs.dms.homeModules.dank-material-shell ]; home.username = "user"; @@ -18,8 +19,20 @@ in programs.fzf.enable = true; programs.fzf.enableFishIntegration = true; - programs.eza.enable = true; - programs.eza.enableFishIntegration = true; + programs.eza = { + enable = true; + enableFishIntegration = true; + git = true; + extraOptions = [ + "-a" + "--long" + "--no-time" + "--no-user" + "--no-permissions" + "--no-filesize" + "--icons=always" + ]; + }; services.cliphist.enable = true; @@ -46,12 +59,22 @@ in programs.fastfetch.enable = true; programs.rbw.enable = true; + programs.rbw.settings = { + pinentry = pkgs.pinentry-curses; + email = "KeksNino@proton.me"; + base_url = "https://vw.pizzasucht.net"; + }; + + programs.prismlauncher.enable = true; + + programs.dank-material-shell.enable = true; programs.fish = { enable = true; interactiveShellInit = '' nitch - + set -gx EDITOR nvim + set -g fish_key_bindings fish_hybrid_key_bindings ''; }; @@ -62,7 +85,6 @@ in ff = "fastfetch"; grep = "grep -i"; hyprland = "start-hyprland"; - ls = "ls --color=tty"; mv = "mv -v"; n = "nvim"; py = "uv run"; @@ -83,7 +105,7 @@ in enable = true; theme = { name = "Materia-dark-compact"; - package = pkgs.gnome-themes-extra; + package = pkgs.materia-theme-transparent; }; }; diff --git a/packages.nix b/packages.nix index c8e5c4d..3b020c8 100644 --- a/packages.nix +++ b/packages.nix @@ -6,7 +6,6 @@ gdu jamesdsp grimblast - bitwarden-desktop nitch adwaita-icon-theme trash-cli @@ -26,7 +25,8 @@ nix-search rofi-calc renoise - materia-theme-transparent pavucontrol + lsof + gcc ]; } From 1c47ae519c563ee45b9e544d8316cf51604021d3 Mon Sep 17 00:00:00 2001 From: KeksNino Date: Sat, 4 Jul 2026 10:54:26 +0200 Subject: [PATCH 08/25] update --- configuration.nix | 9 +++++++-- flake.nix | 1 - home-manager/home.nix | 2 ++ packages.nix | 3 ++- 4 files changed, 11 insertions(+), 4 deletions(-) diff --git a/configuration.nix b/configuration.nix index 66099b8..5cc57a0 100644 --- a/configuration.nix +++ b/configuration.nix @@ -11,7 +11,7 @@ device = "/dev/disk/by-uuid/D290EB87C8A1E82A"; fsType = "ntfs3"; options = [ - "uid=1001" + "uid=1000" "gid=100" "rw" "user" @@ -71,6 +71,7 @@ users.users.user = { isNormalUser = true; description = "user"; + uid = 1000; extraGroups = [ "networkmanager" "wheel" @@ -93,10 +94,14 @@ }; boot.supportedFilesystems = [ "nfs4" ]; + environment.variables.QT_QPA_PLATFORMTHEME = "qt5ct"; qt = { enable = true; platformTheme = "qt5ct"; - style = "breeze"; + # style = { + # package = pkgs.klassy; + # name = "Klassy"; + # }; }; services.goxlr-utility.enable = true; diff --git a/flake.nix b/flake.nix index f655fc9..974c660 100644 --- a/flake.nix +++ b/flake.nix @@ -55,7 +55,6 @@ in { config, pkgs, ... }: { environment.systemPackages = [ - pkgs.git inputs.music-presence.packages.${pkgs.stdenv.hostPlatform.system}.discord-music-presence inputs.zen.packages.${pkgs.stdenv.hostPlatform.system}.default ]; diff --git a/home-manager/home.nix b/home-manager/home.nix index c366b39..8da436e 100644 --- a/home-manager/home.nix +++ b/home-manager/home.nix @@ -69,6 +69,8 @@ in programs.dank-material-shell.enable = true; + programs.fd.enable = true; + programs.fish = { enable = true; interactiveShellInit = '' diff --git a/packages.nix b/packages.nix index 3b020c8..090db68 100644 --- a/packages.nix +++ b/packages.nix @@ -25,8 +25,9 @@ nix-search rofi-calc renoise - pavucontrol + pwvucontrol lsof gcc + picard ]; } From 680fed13f76ee778bf8647038226268ebeddd73a Mon Sep 17 00:00:00 2001 From: KeksNino Date: Sat, 4 Jul 2026 20:53:06 +0200 Subject: [PATCH 09/25] disable fish_greeting, install klassy and add xremap --- configuration.nix | 9 ---- flake.lock | 103 +++++++++++++++++++++++++++++++++++++ flake.nix | 26 ++++++++-- hardware-configuration.nix | 7 ++- home-manager/home.nix | 1 + packages.nix | 1 + 6 files changed, 134 insertions(+), 13 deletions(-) diff --git a/configuration.nix b/configuration.nix index 5cc57a0..8ef5aaa 100644 --- a/configuration.nix +++ b/configuration.nix @@ -27,7 +27,6 @@ boot.kernelParams = [ "iomem=relaxed" - "quiet" "iommu=pt" "amd_iommu=on" "kvm.ignore_msrs=1" @@ -64,7 +63,6 @@ LC_TIME = "de_DE.UTF-8"; }; - # Configure console keymap console.keyMap = "de"; programs.fish.enable = true; @@ -94,14 +92,9 @@ }; boot.supportedFilesystems = [ "nfs4" ]; - environment.variables.QT_QPA_PLATFORMTHEME = "qt5ct"; qt = { enable = true; platformTheme = "qt5ct"; - # style = { - # package = pkgs.klassy; - # name = "Klassy"; - # }; }; services.goxlr-utility.enable = true; @@ -114,8 +107,6 @@ security.rtkit.enable = true; systemd.services."rtkit-daemon".enable = true; - environment.systemPackages = with pkgs; [ ]; - nixpkgs.config.permittedInsecurePackages = [ "electron-39.8.10" ]; diff --git a/flake.lock b/flake.lock index 2fb96a5..ca02af5 100644 --- a/flake.lock +++ b/flake.lock @@ -1,5 +1,20 @@ { "nodes": { + "crane": { + "locked": { + "lastModified": 1766774972, + "narHash": "sha256-8qxEFpj4dVmIuPn9j9z6NTbU+hrcGjBOvaxTzre5HmM=", + "owner": "ipetkov", + "repo": "crane", + "rev": "01bc1d404a51a0a07e9d8759cd50a7903e218c82", + "type": "github" + }, + "original": { + "owner": "ipetkov", + "repo": "crane", + "type": "github" + } + }, "discord-music-presence": { "inputs": { "nixpkgs": "nixpkgs" @@ -51,6 +66,24 @@ "type": "github" } }, + "flake-parts": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib" + }, + "locked": { + "lastModified": 1765835352, + "narHash": "sha256-XswHlK/Qtjasvhd1nOa1e8MgZ8GS//jBoTqWtrS1Giw=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "a34fae9c08a15ad73f295041fec82323541400a9", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, "home-manager": { "inputs": { "nixpkgs": [ @@ -87,6 +120,21 @@ "type": "github" } }, + "nixpkgs-lib": { + "locked": { + "lastModified": 1765674936, + "narHash": "sha256-k00uTP4JNfmejrCLJOwdObYC9jHRrr/5M/a/8L2EIdo=", + "owner": "nix-community", + "repo": "nixpkgs.lib", + "rev": "2075416fcb47225d9b68ac469a5c4801a9c4dd85", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixpkgs.lib", + "type": "github" + } + }, "nixpkgs_2": { "locked": { "lastModified": 1782328929, @@ -102,15 +150,70 @@ "type": "github" } }, + "nixpkgs_3": { + "locked": { + "lastModified": 1767026758, + "narHash": "sha256-7fsac/f7nh/VaKJ/qm3I338+wAJa/3J57cOGpXi0Sbg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "346dd96ad74dc4457a9db9de4f4f57dab2e5731d", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, "root": { "inputs": { "discord-music-presence": "discord-music-presence", "dms": "dms", "home-manager": "home-manager", "nixpkgs": "nixpkgs_2", + "xremap-flake": "xremap-flake", "zen-browser": "zen-browser" } }, + "xremap": { + "flake": false, + "locked": { + "lastModified": 1782465938, + "narHash": "sha256-BgRp0y5bkmMwRCdIKHrXIbv6Kl7Hn9IphburN7i7sE8=", + "owner": "k0kubun", + "repo": "xremap", + "rev": "6d1d06436ecd54002257029bc26a22ef058d4b63", + "type": "github" + }, + "original": { + "owner": "k0kubun", + "ref": "v0.15.9", + "repo": "xremap", + "type": "github" + } + }, + "xremap-flake": { + "inputs": { + "crane": "crane", + "flake-parts": "flake-parts", + "nixpkgs": "nixpkgs_3", + "xremap": "xremap" + }, + "locked": { + "lastModified": 1782757039, + "narHash": "sha256-4CuFwWsQxoNY4Cxz4+GVEmRrMTR5dUOTKN2eNk1KiEI=", + "owner": "xremap", + "repo": "nix-flake", + "rev": "7f161bede2961279dfde194add6aa53d80a9d26d", + "type": "github" + }, + "original": { + "owner": "xremap", + "repo": "nix-flake", + "type": "github" + } + }, "zen-browser": { "inputs": { "nixpkgs": [ diff --git a/flake.nix b/flake.nix index 974c660..249c4dc 100644 --- a/flake.nix +++ b/flake.nix @@ -1,7 +1,6 @@ { inputs = { nixpkgs.url = "github:NixOS/nixpkgs"; - # hyprland.url = "github:hyprwm/Hyprland"; zen-browser = { url = "github:youwen5/zen-browser-flake"; inputs.nixpkgs.follows = "nixpkgs"; @@ -17,10 +16,11 @@ url = "github:AvengeMedia/DankMaterialShell"; inputs.nixpkgs.follows = "nixpkgs"; }; + xremap-flake.url = "github:xremap/nix-flake"; }; outputs = - { self, zen-browser, discord-music-presence, ... }@inputs: + { self, zen-browser, discord-music-presence, xremap-flake, ... }@inputs: let system = "x86_64-linux"; inherit (inputs) nixpkgs; @@ -34,6 +34,7 @@ ./configuration.nix ./hardware-configuration.nix inputs.home-manager.nixosModules.home-manager + inputs.xremap-flake.nixosModules.default { home-manager.useGlobalPkgs = true; home-manager.useUserPackages = true; @@ -44,7 +45,26 @@ home-manager.backupFileExtension = "backup"; - # Optionally, use home-manager.extraSpecialArgs to pass arguments to home.nix + # xremap + services.xremap.enable = true; + services.xremap.withHypr = true; + + services.xremap.config.modmap = [ + { + name = "Global"; + remap = { "CapsLock" = "Esc"; }; + } + ]; + + services.xremap.config.keymap = [ + { + name = "curly braces"; + remap = { "KEY_SEMICOLON" = "RIGHTALT-KEY_7"; }; # ä -> } + remap = { "KEY_APOSTROPHE" = "RIGHTALT-KEY_0"; }; # ö -> { + remap = { "RIGHTALT-KEY_A" = "KEY_APOSTROPHE"; }; # altgr + a -> ä + remap = { "RIGHTALT-KEY_W" = "KEY_SEMICOLON"; }; # altgr + w -> ö + } + ]; } ( let diff --git a/hardware-configuration.nix b/hardware-configuration.nix index 4dc4871..4740a4e 100644 --- a/hardware-configuration.nix +++ b/hardware-configuration.nix @@ -14,7 +14,7 @@ boot.extraModulePackages = [ ]; fileSystems."/" = - { device = "/dev/disk/by-uuid/3bf12238-0a1b-4d18-9cf0-a06209368e76"; + { device = "/dev/disk/by-uuid/ddabcce9-86a5-4dd8-84f1-3afa99a83752"; fsType = "ext4"; }; @@ -39,6 +39,11 @@ fsType = "ext4"; }; + fileSystems."/media/gamedisk" = + { device = "/dev/disk/by-uuid/5C7C14707C1446E4"; + fsType = "ntfs3"; + }; + swapDevices = [ { device = "/dev/disk/by-uuid/5949c73f-30eb-4956-9e93-70301c88fad8"; } ]; diff --git a/home-manager/home.nix b/home-manager/home.nix index 8da436e..9902e02 100644 --- a/home-manager/home.nix +++ b/home-manager/home.nix @@ -77,6 +77,7 @@ in nitch set -gx EDITOR nvim set -g fish_key_bindings fish_hybrid_key_bindings + set fish_greeting ''; }; diff --git a/packages.nix b/packages.nix index 090db68..e9d443e 100644 --- a/packages.nix +++ b/packages.nix @@ -29,5 +29,6 @@ lsof gcc picard + klassy ]; } From f5573954b262feaae47c4ae84484da0fcc884646 Mon Sep 17 00:00:00 2001 From: KeksNino Date: Sat, 4 Jul 2026 22:41:57 +0200 Subject: [PATCH 10/25] add git config, mount /media/gamedisk, fix rmpc cava --- configuration.nix | 29 ++++++++++++++++++++++++++++- home-manager/mpd.nix | 6 ++++++ packages.nix | 7 ++++++- 3 files changed, 40 insertions(+), 2 deletions(-) diff --git a/configuration.nix b/configuration.nix index 8ef5aaa..84472e2 100644 --- a/configuration.nix +++ b/configuration.nix @@ -20,6 +20,19 @@ ]; }; + fileSystems."/media/gamedisk" = { + device = "/dev/disk/by-uuid/5C7C14707C1446E4"; + fsType = "ntfs3"; + options = [ + "uid=1000" + "gid=100" + "rw" + "user" + "exec" + "umask=000" + ]; + }; + nix.settings.experimental-features = [ "nix-command" "flakes" @@ -100,9 +113,23 @@ services.goxlr-utility.enable = true; programs.steam.enable = true; programs.neovim.enable = true; - programs.git.enable = true; programs.tmux.enable = true; programs.bat.enable = true; + programs.git = { + enable = true; + config = { + user = { + name = "KeksNino"; + email = "KeksNino@proton.me"; + }; + init = { + defaultBranch = "main"; + }; + push = { + autoSetupRemote = true; + }; + }; + }; security.rtkit.enable = true; systemd.services."rtkit-daemon".enable = true; diff --git a/home-manager/mpd.nix b/home-manager/mpd.nix index 86f7639..bb1a659 100644 --- a/home-manager/mpd.nix +++ b/home-manager/mpd.nix @@ -12,6 +12,12 @@ type "pipewire" name "Pipewire Sound Server" } + audio_output { + type "fifo" + name "my_fifo" + path "/tmp/mpd.fifo" + format "44100:16:2" + } auto_update "yes" ''; network.listenAddress = "/home/user/.config/mpd/socket"; diff --git a/packages.nix b/packages.nix index e9d443e..03cef8e 100644 --- a/packages.nix +++ b/packages.nix @@ -8,7 +8,7 @@ grimblast nitch adwaita-icon-theme - trash-cli + gtrash wl-clipboard unzip p7zip @@ -30,5 +30,10 @@ gcc picard klassy + exiftool + tlrc + libnotify + trash-cli + obsidian ]; } From e963ce199420e55ccea236a4718c22f901dacea8 Mon Sep 17 00:00:00 2001 From: KeksNino Date: Sat, 4 Jul 2026 23:38:04 +0200 Subject: [PATCH 11/25] install packages --- configuration.nix | 1 + packages.nix | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/configuration.nix b/configuration.nix index 84472e2..6b728d1 100644 --- a/configuration.nix +++ b/configuration.nix @@ -108,6 +108,7 @@ qt = { enable = true; platformTheme = "qt5ct"; + style = "breeze"; }; services.goxlr-utility.enable = true; diff --git a/packages.nix b/packages.nix index 03cef8e..f31343d 100644 --- a/packages.nix +++ b/packages.nix @@ -35,5 +35,9 @@ libnotify trash-cli obsidian + nicotine-plus + kdePackages.breeze + nemo + uv ]; } From 287f4a6e729ae369131c7581f9cfe504a56e9385 Mon Sep 17 00:00:00 2001 From: KeksNino Date: Mon, 6 Jul 2026 20:00:51 +0200 Subject: [PATCH 12/25] add SLSsteam, switch zen browser flake and run nixfmt --- configuration.nix | 20 ++++++++- flake.lock | 73 +++++++++++++++++++++++++++---- flake.nix | 46 +++++++++++++++----- hardware-configuration.nix | 89 ++++++++++++++++++++++---------------- 4 files changed, 170 insertions(+), 58 deletions(-) diff --git a/configuration.nix b/configuration.nix index 6b728d1..72e3805 100644 --- a/configuration.nix +++ b/configuration.nix @@ -1,4 +1,9 @@ -{ config, pkgs, ... }: +{ + config, + pkgs, + inputs, + ... +}: { imports = [ @@ -112,7 +117,6 @@ }; services.goxlr-utility.enable = true; - programs.steam.enable = true; programs.neovim.enable = true; programs.tmux.enable = true; programs.bat.enable = true; @@ -131,6 +135,18 @@ }; }; }; + programs.steam = { + enable = true; + package = pkgs.steam.override { + extraEnv = { + LD_AUDIT = "${ + inputs.sls-steam.packages.${pkgs.stdenv.hostPlatform.system}.sls-steam + }/library-inject.so:${ + inputs.sls-steam.packages.${pkgs.stdenv.hostPlatform.system}.sls-steam + }/SLSsteam.so"; + }; + }; + }; security.rtkit.enable = true; systemd.services."rtkit-daemon".enable = true; diff --git a/flake.lock b/flake.lock index ca02af5..4b13b06 100644 --- a/flake.lock +++ b/flake.lock @@ -104,6 +104,27 @@ "type": "github" } }, + "home-manager_2": { + "inputs": { + "nixpkgs": [ + "zen-browser", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1782839684, + "narHash": "sha256-vzs4SBgPsK4aNzlJR2PpFwtARazXMOxZonQnDz0YHxk=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "2a37d71bbe69e1522ddabf03a4cea0374958bdbe", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "home-manager", + "type": "github" + } + }, "nixpkgs": { "locked": { "lastModified": 1778869304, @@ -166,16 +187,53 @@ "type": "github" } }, + "nixpkgs_4": { + "locked": { + "lastModified": 1782723713, + "narHash": "sha256-oPXCU/SSUokcGaJREHibG1CBX3+s/W7orDWQOZDsEeQ=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "b5aa0fbd538984f6e3d201be0005b4463d8b09f8", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, "root": { "inputs": { "discord-music-presence": "discord-music-presence", "dms": "dms", "home-manager": "home-manager", "nixpkgs": "nixpkgs_2", + "sls-steam": "sls-steam", "xremap-flake": "xremap-flake", "zen-browser": "zen-browser" } }, + "sls-steam": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1783322884, + "narHash": "sha256-BmYEQewp9fCTP6KFGnYh2dh6EjMj62FfJQTrksSSN3c=", + "owner": "AceSLS", + "repo": "SLSsteam", + "rev": "8ef40a2bdc662331f215775e525e1b010a2ffba3", + "type": "github" + }, + "original": { + "owner": "AceSLS", + "repo": "SLSsteam", + "type": "github" + } + }, "xremap": { "flake": false, "locked": { @@ -216,20 +274,19 @@ }, "zen-browser": { "inputs": { - "nixpkgs": [ - "nixpkgs" - ] + "home-manager": "home-manager_2", + "nixpkgs": "nixpkgs_4" }, "locked": { - "lastModified": 1781847955, - "narHash": "sha256-1OSYOGuJp/NoODmSHjsz+6TB/kSilJ+BsFihjY7TTnc=", - "owner": "youwen5", + "lastModified": 1783190846, + "narHash": "sha256-UcdKHKcDxLxBon0HsOjDRRA7l1vVT28R83LkCIAlYYc=", + "owner": "0xc000022070", "repo": "zen-browser-flake", - "rev": "4bca251cd556677f7b765ff324d1638ae215be13", + "rev": "0758bc86f7a55bbe002f0cede9e1a49e5a6e34d9", "type": "github" }, "original": { - "owner": "youwen5", + "owner": "0xc000022070", "repo": "zen-browser-flake", "type": "github" } diff --git a/flake.nix b/flake.nix index 249c4dc..0d1cafb 100644 --- a/flake.nix +++ b/flake.nix @@ -1,10 +1,7 @@ { inputs = { nixpkgs.url = "github:NixOS/nixpkgs"; - zen-browser = { - url = "github:youwen5/zen-browser-flake"; - inputs.nixpkgs.follows = "nixpkgs"; - }; + zen-browser.url = "github:0xc000022070/zen-browser-flake"; home-manager = { url = "github:nix-community/home-manager"; inputs.nixpkgs.follows = "nixpkgs"; @@ -17,10 +14,21 @@ inputs.nixpkgs.follows = "nixpkgs"; }; xremap-flake.url = "github:xremap/nix-flake"; + sls-steam = { + url = "github:AceSLS/SLSsteam"; + inputs.nixpkgs.follows = "nixpkgs"; + }; }; outputs = - { self, zen-browser, discord-music-presence, xremap-flake, ... }@inputs: + { + self, + zen-browser, + discord-music-presence, + xremap-flake, + sls-steam, + ... + }@inputs: let system = "x86_64-linux"; inherit (inputs) nixpkgs; @@ -30,6 +38,9 @@ { nixosConfigurations.nixos = nixpkgs.lib.nixosSystem { inherit system; + specialArgs = { + inherit inputs; + }; modules = [ ./configuration.nix ./hardware-configuration.nix @@ -39,7 +50,10 @@ home-manager.useGlobalPkgs = true; home-manager.useUserPackages = true; - home-manager.extraSpecialArgs = { inherit self; inherit inputs; }; + home-manager.extraSpecialArgs = { + inherit self; + inherit inputs; + }; home-manager.users.user = import ./home-manager/home.nix; @@ -52,17 +66,27 @@ services.xremap.config.modmap = [ { name = "Global"; - remap = { "CapsLock" = "Esc"; }; + remap = { + "CapsLock" = "Esc"; + }; } ]; services.xremap.config.keymap = [ { name = "curly braces"; - remap = { "KEY_SEMICOLON" = "RIGHTALT-KEY_7"; }; # ä -> } - remap = { "KEY_APOSTROPHE" = "RIGHTALT-KEY_0"; }; # ö -> { - remap = { "RIGHTALT-KEY_A" = "KEY_APOSTROPHE"; }; # altgr + a -> ä - remap = { "RIGHTALT-KEY_W" = "KEY_SEMICOLON"; }; # altgr + w -> ö + remap = { + "KEY_SEMICOLON" = "RIGHTALT-KEY_7"; + }; # ä -> } + remap = { + "KEY_APOSTROPHE" = "RIGHTALT-KEY_0"; + }; # ö -> { + remap = { + "RIGHTALT-KEY_A" = "KEY_APOSTROPHE"; + }; # altgr + a -> ä + remap = { + "RIGHTALT-KEY_W" = "KEY_SEMICOLON"; + }; # altgr + w -> ö } ]; } diff --git a/hardware-configuration.nix b/hardware-configuration.nix index 4740a4e..44aec8b 100644 --- a/hardware-configuration.nix +++ b/hardware-configuration.nix @@ -1,52 +1,67 @@ # 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, ... }: +{ + config, + lib, + pkgs, + modulesPath, + ... +}: { - imports = - [ (modulesPath + "/installer/scan/not-detected.nix") - ]; + imports = [ + (modulesPath + "/installer/scan/not-detected.nix") + ]; - boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "usbhid" "usb_storage" "sd_mod" ]; + boot.initrd.availableKernelModules = [ + "xhci_pci" + "ahci" + "usbhid" + "usb_storage" + "sd_mod" + ]; boot.initrd.kernelModules = [ ]; boot.kernelModules = [ "kvm-amd" ]; boot.extraModulePackages = [ ]; - fileSystems."/" = - { device = "/dev/disk/by-uuid/ddabcce9-86a5-4dd8-84f1-3afa99a83752"; - fsType = "ext4"; - }; + fileSystems."/" = { + device = "/dev/disk/by-uuid/ddabcce9-86a5-4dd8-84f1-3afa99a83752"; + fsType = "ext4"; + }; - fileSystems."/boot" = - { device = "/dev/disk/by-uuid/16F5-2D1A"; - fsType = "vfat"; - options = [ "fmask=0077" "dmask=0077" ]; - }; - - fileSystems."/media/gamedisk4" = - { device = "/dev/disk/by-uuid/D290EB87C8A1E82A"; - fsType = "ntfs3"; - }; - - fileSystems."/media/music" = - { device = "192.168.132.149:/media/music"; - fsType = "nfs4"; - }; - - fileSystems."/media/arch" = - { device = "/dev/disk/by-uuid/8873d98f-c461-4d34-8867-f4ebd5c205d2"; - fsType = "ext4"; - }; - - fileSystems."/media/gamedisk" = - { device = "/dev/disk/by-uuid/5C7C14707C1446E4"; - fsType = "ntfs3"; - }; - - swapDevices = - [ { device = "/dev/disk/by-uuid/5949c73f-30eb-4956-9e93-70301c88fad8"; } + fileSystems."/boot" = { + device = "/dev/disk/by-uuid/16F5-2D1A"; + fsType = "vfat"; + options = [ + "fmask=0077" + "dmask=0077" ]; + }; + + fileSystems."/media/gamedisk4" = { + device = "/dev/disk/by-uuid/D290EB87C8A1E82A"; + fsType = "ntfs3"; + }; + + fileSystems."/media/music" = { + device = "192.168.132.149:/media/music"; + fsType = "nfs4"; + }; + + fileSystems."/media/arch" = { + device = "/dev/disk/by-uuid/8873d98f-c461-4d34-8867-f4ebd5c205d2"; + fsType = "ext4"; + }; + + fileSystems."/media/gamedisk" = { + device = "/dev/disk/by-uuid/5C7C14707C1446E4"; + fsType = "ntfs3"; + }; + + swapDevices = [ + { device = "/dev/disk/by-uuid/5949c73f-30eb-4956-9e93-70301c88fad8"; } + ]; nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; From 5451d847fede98c5e8aa3550f1cc7de6fce6070a Mon Sep 17 00:00:00 2001 From: KeksNino Date: Mon, 6 Jul 2026 20:41:57 +0200 Subject: [PATCH 13/25] add nix-ld, add pipewire, add mpdscribble, add fonts --- configuration.nix | 7 +++++++ home-manager/home.nix | 7 +++---- home-manager/mpd.nix | 10 ++++++++++ packages.nix | 8 ++++++-- 4 files changed, 26 insertions(+), 6 deletions(-) diff --git a/configuration.nix b/configuration.nix index 72e3805..cd2ddca 100644 --- a/configuration.nix +++ b/configuration.nix @@ -147,6 +147,13 @@ }; }; }; + programs.nix-ld.enable = true; + + services.pipewire = { + enable = true; + alsa.enable = true; + pulse.enable = true; + }; security.rtkit.enable = true; systemd.services."rtkit-daemon".enable = true; diff --git a/home-manager/home.nix b/home-manager/home.nix index 9902e02..c53b5d3 100644 --- a/home-manager/home.nix +++ b/home-manager/home.nix @@ -71,11 +71,14 @@ in programs.fd.enable = true; + programs.uv.enable = true; + programs.fish = { enable = true; interactiveShellInit = '' nitch set -gx EDITOR nvim + set -gx PATH $PATH /home/user/.local/bin set -g fish_key_bindings fish_hybrid_key_bindings set fish_greeting ''; @@ -100,10 +103,6 @@ in programs.zoxide.enable = true; programs.zoxide.enableFishIntegration = true; - # wayland.windowManager.hyprland = { - # enable = true; - # }; - gtk = { enable = true; theme = { diff --git a/home-manager/mpd.nix b/home-manager/mpd.nix index bb1a659..fd404f4 100644 --- a/home-manager/mpd.nix +++ b/home-manager/mpd.nix @@ -23,6 +23,16 @@ network.listenAddress = "/home/user/.config/mpd/socket"; }; + services.mpdscribble = { + enable = true; + endpoints = { + "last.fm" = { + passwordFile = "/home/user/lastfm_password"; + username = "KeksNino"; + }; + }; + }; + programs.rmpc.enable = true; programs.rmpc.config = '' #![enable(implicit_some)] diff --git a/packages.nix b/packages.nix index f31343d..a67fe33 100644 --- a/packages.nix +++ b/packages.nix @@ -21,7 +21,6 @@ python3 basedpyright waypaper - nerd-fonts.caskaydia-mono nix-search rofi-calc renoise @@ -38,6 +37,11 @@ nicotine-plus kdePackages.breeze nemo - uv + ]; + + fonts.packages = with pkgs; [ + nerd-fonts.caskaydia-mono + nerd-fonts.symbols-only + nerd-fonts.jetbrains-mono ]; } From 43dbca326f232c09016a17180a546e1e1404eebb Mon Sep 17 00:00:00 2001 From: KeksNino Date: Mon, 6 Jul 2026 22:12:43 +0200 Subject: [PATCH 14/25] fix dark theme, create xdg_screenshots_dir, use adwaita as default cursor --- configuration.nix | 1 + home-manager/home.nix | 18 +++++++++++++++++- packages.nix | 1 - 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/configuration.nix b/configuration.nix index cd2ddca..c65aa21 100644 --- a/configuration.nix +++ b/configuration.nix @@ -110,6 +110,7 @@ }; boot.supportedFilesystems = [ "nfs4" ]; + environment.variables.QT_QPA_PLATFORMTHEME = "qt5ct"; qt = { enable = true; platformTheme = "qt5ct"; diff --git a/home-manager/home.nix b/home-manager/home.nix index c53b5d3..dfd5f9e 100644 --- a/home-manager/home.nix +++ b/home-manager/home.nix @@ -1,4 +1,4 @@ -{ pkgs, inputs, ... }: +{ pkgs, inputs, config, ... }: let in { @@ -9,6 +9,19 @@ in home.username = "user"; home.homeDirectory = "/home/user"; + xdg.userDirs = { + enable = true; + createDirectories = false; + extraConfig = { + SCREENSHOTS = "${config.home.homeDirectory}/Pictures/Screenshots"; + }; + }; + home.pointerCursor = { + gtk.enable = true; + package = pkgs.adwaita-icon-theme; + name = "Adwaita"; + size = 20; + }; home.packages = with pkgs; [ ]; @@ -72,6 +85,8 @@ in programs.fd.enable = true; programs.uv.enable = true; + + programs.satty.enable = true; programs.fish = { enable = true; @@ -109,6 +124,7 @@ in name = "Materia-dark-compact"; package = pkgs.materia-theme-transparent; }; + colorScheme = "dark"; }; home.stateVersion = "26.05"; diff --git a/packages.nix b/packages.nix index a67fe33..6073824 100644 --- a/packages.nix +++ b/packages.nix @@ -35,7 +35,6 @@ trash-cli obsidian nicotine-plus - kdePackages.breeze nemo ]; From b56f58f830e5235b99242d805118fcd605df7f96 Mon Sep 17 00:00:00 2001 From: KeksNino Date: Tue, 7 Jul 2026 18:56:35 +0200 Subject: [PATCH 15/25] update --- configuration.nix | 11 ++++++++++ flake.lock | 24 +++++++++++----------- home-manager/home.nix | 48 ++++++++++++++++++------------------------- packages.nix | 7 +++++-- 4 files changed, 48 insertions(+), 42 deletions(-) diff --git a/configuration.nix b/configuration.nix index c65aa21..fc6b434 100644 --- a/configuration.nix +++ b/configuration.nix @@ -49,8 +49,17 @@ "amd_iommu=on" "kvm.ignore_msrs=1" "mitigations=off" + "amdgpu.ppfeaturemask=0xffffffff" ]; + xdg = { + mime.defaultApplications = { + "inode/directory" = [ "nemo.desktop" ]; + "application/x-gnome-saved-search" = [ "nemo.desktop" ]; + }; + }; + services.gvfs.enable = true; + hardware.graphics.enable = true; # Bootloader. @@ -118,6 +127,7 @@ }; services.goxlr-utility.enable = true; + services.lact.enable = true; programs.neovim.enable = true; programs.tmux.enable = true; programs.bat.enable = true; @@ -148,6 +158,7 @@ }; }; }; + programs.nix-ld.enable = true; services.pipewire = { diff --git a/flake.lock b/flake.lock index 4b13b06..c36cd53 100644 --- a/flake.lock +++ b/flake.lock @@ -37,11 +37,11 @@ ] }, "locked": { - "lastModified": 1782531264, - "narHash": "sha256-qaDc0S2qQx7jz2OGJrJ99uD2EhG1ehzr2x8L6mSoTEc=", + "lastModified": 1783376149, + "narHash": "sha256-8OtuiFN++vFAgzsSuqI+5zsriTbkwZS9575p/ulxuP0=", "owner": "AvengeMedia", "repo": "DankMaterialShell", - "rev": "48f6a0c632d755f29a743a2c730e28f79c299214", + "rev": "8a1acb63c9b06a4eac276c96e7ac2a1f7de6bf7e", "type": "github" }, "original": { @@ -91,11 +91,11 @@ ] }, "locked": { - "lastModified": 1782358560, - "narHash": "sha256-vCcLh9pw3XO/+Lxk8r6xv6QnoCrTfGqiACcI7O637Wg=", + "lastModified": 1783358420, + "narHash": "sha256-UEyBpf+XmQe8laXfDzIlo11Er7E0rKrLS8jeMnMj0Ds=", "owner": "nix-community", "repo": "home-manager", - "rev": "3a70e333f2950c302e875c44cfcfaff3f80f36bc", + "rev": "0d33882bd46c1f9ef62276700f5e5f2bd6ff6604", "type": "github" }, "original": { @@ -158,11 +158,11 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 1782328929, - "narHash": "sha256-EboKWnTWTpQMJ7MbgJs+KJGJuLDnBbA26h8M/jyvQrE=", + "lastModified": 1783386518, + "narHash": "sha256-a8mRODbGSR7QY0tW9DuaavGRrCcfyIjH1H1m2WOsZlk=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "1ab79b94f1a4facdf7a8b414cb09fb5e3fab4e2d", + "rev": "18221029c0b078f57210bbabc8ddd0b63c6715c0", "type": "github" }, "original": { @@ -278,11 +278,11 @@ "nixpkgs": "nixpkgs_4" }, "locked": { - "lastModified": 1783190846, - "narHash": "sha256-UcdKHKcDxLxBon0HsOjDRRA7l1vVT28R83LkCIAlYYc=", + "lastModified": 1783371882, + "narHash": "sha256-Z0ESbxSeHR5p3CD1LLVKttX2vaPPnjNfZbqCJlQgcF8=", "owner": "0xc000022070", "repo": "zen-browser-flake", - "rev": "0758bc86f7a55bbe002f0cede9e1a49e5a6e34d9", + "rev": "9357f05e60643b057038ff3f89c87d4a1d08cae1", "type": "github" }, "original": { diff --git a/home-manager/home.nix b/home-manager/home.nix index dfd5f9e..5d42c74 100644 --- a/home-manager/home.nix +++ b/home-manager/home.nix @@ -23,9 +23,6 @@ in size = 20; }; - home.packages = with pkgs; [ - ]; - programs.yazi.enable = true; programs.yazi.enableFishIntegration = true; @@ -48,29 +45,13 @@ in }; services.cliphist.enable = true; - + programs.pywal.enable = true; programs.pywal.package = pkgs.pywal16; - programs.btop.enable = true; - - services.udiskie.enable = true; - programs.lazygit.enable = true; programs.lazygit.enableFishIntegration = true; - programs.cava.enable = true; - - programs.equibop.enable = true; - - services.awww.enable = true; - - programs.rofi.enable = true; - - services.mpdris2.enable = true; - - programs.fastfetch.enable = true; - programs.rbw.enable = true; programs.rbw.settings = { pinentry = pkgs.pinentry-curses; @@ -78,15 +59,26 @@ in base_url = "https://vw.pizzasucht.net"; }; + + programs.distrobox.enable = true; + services.podman.enable = true; + + programs.btop.enable = true; + services.udiskie.enable = true; + programs.cava.enable = true; + programs.equibop.enable = true; + services.awww.enable = true; + programs.rofi.enable = true; + services.mpdris2.enable = true; + programs.fastfetch.enable = true; programs.prismlauncher.enable = true; - programs.dank-material-shell.enable = true; - programs.fd.enable = true; - programs.uv.enable = true; - programs.satty.enable = true; + programs.mpvpaper.enable = true; + programs.obsidian.enable = true; + programs.gcc.enable = true; programs.fish = { enable = true; @@ -120,10 +112,10 @@ in gtk = { enable = true; - theme = { - name = "Materia-dark-compact"; - package = pkgs.materia-theme-transparent; - }; + # theme = { + # name = "Materia-dark-compact"; + # package = pkgs.materia-theme-transparent; + # }; colorScheme = "dark"; }; diff --git a/packages.nix b/packages.nix index 6073824..4ef163b 100644 --- a/packages.nix +++ b/packages.nix @@ -26,15 +26,18 @@ renoise pwvucontrol lsof - gcc picard klassy exiftool tlrc libnotify trash-cli - obsidian nicotine-plus + spek + ffmpeg + vlc + wine + ripgrep nemo ]; From ede23061a3a7560e65b658bf63528acec1dc5e18 Mon Sep 17 00:00:00 2001 From: KeksNino Date: Wed, 8 Jul 2026 23:29:02 +0200 Subject: [PATCH 16/25] update --- configuration.nix | 33 ++-- discord-music-presence/.envrc | 6 - discord-music-presence/.gitignore | 15 -- discord-music-presence/flake.lock | 27 --- discord-music-presence/flake.nix | 30 --- .../pkgs/discord-music-presence.nix | 79 -------- discord-music-presence/shell.nix | 12 -- flake.lock | 178 ++++++++++++++++-- flake.nix | 60 +++--- home-manager/home.nix | 41 ++-- packages.nix | 9 +- 11 files changed, 248 insertions(+), 242 deletions(-) delete mode 100644 discord-music-presence/.envrc delete mode 100644 discord-music-presence/.gitignore delete mode 100644 discord-music-presence/flake.lock delete mode 100644 discord-music-presence/flake.nix delete mode 100644 discord-music-presence/pkgs/discord-music-presence.nix delete mode 100644 discord-music-presence/shell.nix diff --git a/configuration.nix b/configuration.nix index fc6b434..9669234 100644 --- a/configuration.nix +++ b/configuration.nix @@ -1,7 +1,7 @@ { config, pkgs, - inputs, + sls-steam, ... }: @@ -22,6 +22,7 @@ "user" "exec" "umask=000" + "nofail" ]; }; @@ -35,6 +36,21 @@ "user" "exec" "umask=000" + "nofail" + ]; + }; + + fileSystems."/media/gamedisk2" = { + device = "/dev/disk/by-uuid/945A7421DAD8A3CE"; + fsType = "ntfs3"; + options = [ + "uid=1000" + "gid=100" + "rw" + "user" + "exec" + "umask=000" + "nofail" ]; }; @@ -58,7 +74,6 @@ "application/x-gnome-saved-search" = [ "nemo.desktop" ]; }; }; - services.gvfs.enable = true; hardware.graphics.enable = true; @@ -68,7 +83,7 @@ boot.loader.grub.efiSupport = true; networking.hostName = "nixos"; # Define your hostname. - # networking.wireless.enable = true; # Enables wireless support via wpa_supplicant. + networking.firewall.enable = false; networking.networkmanager.enable = true; @@ -102,7 +117,6 @@ "wheel" ]; shell = pkgs.fish; - packages = with pkgs; [ ]; }; nixpkgs.config.allowUnfree = true; @@ -131,6 +145,7 @@ programs.neovim.enable = true; programs.tmux.enable = true; programs.bat.enable = true; + programs.nh.enable = true; programs.git = { enable = true; config = { @@ -148,12 +163,12 @@ }; programs.steam = { enable = true; - package = pkgs.steam.override { + package = pkgs.millennium-steam.override { extraEnv = { LD_AUDIT = "${ - inputs.sls-steam.packages.${pkgs.stdenv.hostPlatform.system}.sls-steam + sls-steam.packages.${pkgs.stdenv.hostPlatform.system}.sls-steam }/library-inject.so:${ - inputs.sls-steam.packages.${pkgs.stdenv.hostPlatform.system}.sls-steam + sls-steam.packages.${pkgs.stdenv.hostPlatform.system}.sls-steam }/SLSsteam.so"; }; }; @@ -170,10 +185,6 @@ security.rtkit.enable = true; systemd.services."rtkit-daemon".enable = true; - nixpkgs.config.permittedInsecurePackages = [ - "electron-39.8.10" - ]; - system.stateVersion = "24.11"; system.autoUpgrade.enable = false; system.autoUpgrade.allowReboot = true; diff --git a/discord-music-presence/.envrc b/discord-music-presence/.envrc deleted file mode 100644 index 0327fb6..0000000 --- a/discord-music-presence/.envrc +++ /dev/null @@ -1,6 +0,0 @@ -if has nix_direnv_version; then - watch_file modules/flake/shell.nix - - # now we want to load the flake environment - use flake -fi \ No newline at end of file diff --git a/discord-music-presence/.gitignore b/discord-music-presence/.gitignore deleted file mode 100644 index 33a9b94..0000000 --- a/discord-music-presence/.gitignore +++ /dev/null @@ -1,15 +0,0 @@ -### Nix template - -# Ignore build outputs from performing a nix-build or `nix build` command -result -result-* - -# Ignore the configuration folder for Jetbrains IDEs -.idea/ - -# Development environment -.direnv/ - -# Disable vm outputs that are called when starting a vm in this directory -*.qcow -*.qcow2 \ No newline at end of file diff --git a/discord-music-presence/flake.lock b/discord-music-presence/flake.lock deleted file mode 100644 index 8c95fc0..0000000 --- a/discord-music-presence/flake.lock +++ /dev/null @@ -1,27 +0,0 @@ -{ - "nodes": { - "nixpkgs": { - "locked": { - "lastModified": 1778869304, - "narHash": "sha256-30sZNZoA1cqF5JNO9fVX+wgiQYjB7HJqqJ4ztCDeBZE=", - "owner": "nixos", - "repo": "nixpkgs", - "rev": "d233902339c02a9c334e7e593de68855ad26c4cb", - "type": "github" - }, - "original": { - "owner": "nixos", - "ref": "nixpkgs-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "root": { - "inputs": { - "nixpkgs": "nixpkgs" - } - } - }, - "root": "root", - "version": 7 -} diff --git a/discord-music-presence/flake.nix b/discord-music-presence/flake.nix deleted file mode 100644 index bdac145..0000000 --- a/discord-music-presence/flake.nix +++ /dev/null @@ -1,30 +0,0 @@ -{ - description = "Xaiya's packaged packages"; - - inputs.nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable"; - - outputs = - { self, nixpkgs }: - let - systems = nixpkgs.lib.systems.flakeExposed; - - forAllSystems = - function: - nixpkgs.lib.genAttrs systems ( - system: function ( - import nixpkgs { - inherit system; - config.allowUnfree = true; - } - ) - ); - in { - packages = forAllSystems (pkgs: { - discord-music-presence = pkgs.callPackage ./pkgs/discord-music-presence.nix { }; - }); - - devShells = forAllSystems (pkgs: { - default = pkgs.callPackage ./shell.nix { }; - }); - }; -} diff --git a/discord-music-presence/pkgs/discord-music-presence.nix b/discord-music-presence/pkgs/discord-music-presence.nix deleted file mode 100644 index ab6744f..0000000 --- a/discord-music-presence/pkgs/discord-music-presence.nix +++ /dev/null @@ -1,79 +0,0 @@ -{ - lib, - fetchurl, - stdenv, - - xkeyboard_config, - - wayland, - libGL, - - openssl, - cacert, - - fontconfig, - freetype, - libgpg-error, - e2fsprogs, - - autoPatchelfHook, - makeWrapper, -}: - -stdenv.mkDerivation rec { - pname = "musicpresence"; - version = "2.3.5"; - - src = fetchurl { - url = "https://github.com/ungive/discord-music-presence/releases/download/v${version}/${pname}-${version}-linux-x86_64.tar.gz"; - hash = "sha256-BDgM1SfyEXC0oW+J33mYKwqRrvZX3cy/X9k7Yuk4kS8="; - }; - - nativeBuildInputs = [ - autoPatchelfHook - makeWrapper - ]; - - buildInputs = [ - stdenv.cc.cc - xkeyboard_config # ARGG - - wayland - libGL - - openssl - cacert - - fontconfig - freetype - libgpg-error - e2fsprogs - ]; - - installPhase = '' - runHook preInstall - - mkdir -p $out/bin $out/share - cp -r usr/* $out - - substituteInPlace $out/share/applications/${pname}.desktop \ - --replace-fail Exec=${pname} Exec=$out/bin/${pname} - - runHook postInstall - ''; - - postFixup = '' - wrapProgram $out/bin/${pname} \ - --set XKB_CONFIG_ROOT ${xkeyboard_config}/share/X11/xkb \ - --set SSL_CERT_FILE ${cacert}/etc/ssl/certs/ca-bundle.crt \ - --set OPENSSL_CONF ${openssl.out}/etc/ssl/openssl.cnf \ - ''; - - meta = { - description = "The Discord music status that works with any media player"; - homepage = "https://github.com/ungive/discord-music-presence"; - license = lib.licenses.unfreeRedistributable; - maintainers = with lib.maintainers; [ ]; - mainProgram = "musicpresence"; - }; -} \ No newline at end of file diff --git a/discord-music-presence/shell.nix b/discord-music-presence/shell.nix deleted file mode 100644 index ec7b15a..0000000 --- a/discord-music-presence/shell.nix +++ /dev/null @@ -1,12 +0,0 @@ -{ - mkShell, - callPackage, -}: -let - defaultPackage = callPackage ./pkgs/discord-music-presence.nix { }; -in -mkShell { - inputsFrom = [ defaultPackage ]; - - packages = [ ]; -} diff --git a/flake.lock b/flake.lock index c36cd53..1bf0ea6 100644 --- a/flake.lock +++ b/flake.lock @@ -20,14 +20,18 @@ "nixpkgs": "nixpkgs" }, "locked": { - "path": "./discord-music-presence", - "type": "path" + "lastModified": 1779460892, + "narHash": "sha256-/BjfCD3ws1xroJ/vUJ6GYtvoVythAjbUHpUHP9mcmPY=", + "ref": "refs/heads/master", + "rev": "537d0dd2844f85598994f493825f1f9d967af4e2", + "revCount": 10, + "type": "git", + "url": "https://tangled.org/xaiya.dev/nix-pkgs" }, "original": { - "path": "./discord-music-presence", - "type": "path" - }, - "parent": [] + "type": "git", + "url": "https://tangled.org/xaiya.dev/nix-pkgs" + } }, "dms": { "inputs": { @@ -84,6 +88,24 @@ "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" + } + }, "home-manager": { "inputs": { "nixpkgs": [ @@ -125,6 +147,44 @@ "type": "github" } }, + "millennium": { + "inputs": { + "millennium-src": "millennium-src", + "nixpkgs": "nixpkgs_2" + }, + "locked": { + "dir": "packages/nix", + "lastModified": 1783532163, + "narHash": "sha256-n+YQKnVt0H1B2z6N1PmaadeVorRHi956q48/g2y8Hnc=", + "owner": "SteamClientHomebrew", + "repo": "Millennium", + "rev": "3623ed0ed9f6065ce666cb0276ff0b903fee2355", + "type": "github" + }, + "original": { + "dir": "packages/nix", + "owner": "SteamClientHomebrew", + "repo": "Millennium", + "type": "github" + } + }, + "millennium-src": { + "flake": false, + "locked": { + "lastModified": 1783268941, + "narHash": "sha256-MJLJ0I48HXgfOpISTAbDMYMUdWj9A6M+jGQz4uAvwyw=", + "owner": "SteamClientHomebrew", + "repo": "Millennium", + "rev": "f37f05bdbd4727d873a1ad83ce72d062ef9a0c48", + "type": "github" + }, + "original": { + "owner": "SteamClientHomebrew", + "repo": "Millennium", + "rev": "f37f05bdbd4727d873a1ad83ce72d062ef9a0c48", + "type": "github" + } + }, "nixpkgs": { "locked": { "lastModified": 1778869304, @@ -157,6 +217,22 @@ } }, "nixpkgs_2": { + "locked": { + "lastModified": 1781577229, + "narHash": "sha256-lrp67w8AulE9Ks53n27I45ADSzbOCn4H+CNW1Ck8B+8=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "567a49d1913ce81ac6e9582e3553dd90a955875f", + "type": "github" + }, + "original": { + "owner": "nixos", + "repo": "nixpkgs", + "rev": "567a49d1913ce81ac6e9582e3553dd90a955875f", + "type": "github" + } + }, + "nixpkgs_3": { "locked": { "lastModified": 1783386518, "narHash": "sha256-a8mRODbGSR7QY0tW9DuaavGRrCcfyIjH1H1m2WOsZlk=", @@ -171,7 +247,7 @@ "type": "github" } }, - "nixpkgs_3": { + "nixpkgs_4": { "locked": { "lastModified": 1767026758, "narHash": "sha256-7fsac/f7nh/VaKJ/qm3I338+wAJa/3J57cOGpXi0Sbg=", @@ -187,7 +263,23 @@ "type": "github" } }, - "nixpkgs_4": { + "nixpkgs_5": { + "locked": { + "lastModified": 1783279667, + "narHash": "sha256-/NAkDSsve+GNM0Bt6tleJdCGfsTlK89nPjkVOzZMo0s=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "f205b5574fd0cb7da5b702a2da51507b7f4fdd1b", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_6": { "locked": { "lastModified": 1782723713, "narHash": "sha256-oPXCU/SSUokcGaJREHibG1CBX3+s/W7orDWQOZDsEeQ=", @@ -208,12 +300,35 @@ "discord-music-presence": "discord-music-presence", "dms": "dms", "home-manager": "home-manager", - "nixpkgs": "nixpkgs_2", + "millennium": "millennium", + "nixpkgs": "nixpkgs_3", "sls-steam": "sls-steam", "xremap-flake": "xremap-flake", + "yazi": "yazi", "zen-browser": "zen-browser" } }, + "rust-overlay": { + "inputs": { + "nixpkgs": [ + "yazi", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1783320166, + "narHash": "sha256-l7C/OsjcnWDOk2K3ssj+SBduwL67LashjBqis9+t468=", + "owner": "oxalica", + "repo": "rust-overlay", + "rev": "20ee15370c9256669d66968b89ee20a4b0a4e673", + "type": "github" + }, + "original": { + "owner": "oxalica", + "repo": "rust-overlay", + "type": "github" + } + }, "sls-steam": { "inputs": { "nixpkgs": [ @@ -234,6 +349,21 @@ "type": "github" } }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, "xremap": { "flake": false, "locked": { @@ -255,7 +385,7 @@ "inputs": { "crane": "crane", "flake-parts": "flake-parts", - "nixpkgs": "nixpkgs_3", + "nixpkgs": "nixpkgs_4", "xremap": "xremap" }, "locked": { @@ -272,17 +402,37 @@ "type": "github" } }, + "yazi": { + "inputs": { + "flake-utils": "flake-utils", + "nixpkgs": "nixpkgs_5", + "rust-overlay": "rust-overlay" + }, + "locked": { + "lastModified": 1783501452, + "narHash": "sha256-gSdIueInGLAAZwD3aZk/hFhhzZCBrtys/Im3FelePhw=", + "owner": "sxyazi", + "repo": "yazi", + "rev": "dbb0cc0d556d73935ebdc1e3d61a2a8aa27059d2", + "type": "github" + }, + "original": { + "owner": "sxyazi", + "repo": "yazi", + "type": "github" + } + }, "zen-browser": { "inputs": { "home-manager": "home-manager_2", - "nixpkgs": "nixpkgs_4" + "nixpkgs": "nixpkgs_6" }, "locked": { - "lastModified": 1783371882, - "narHash": "sha256-Z0ESbxSeHR5p3CD1LLVKttX2vaPPnjNfZbqCJlQgcF8=", + "lastModified": 1783489920, + "narHash": "sha256-sZediA0pfMCXm6nA6fvO1vEsWvybEvP5GCnaAPDcTq0=", "owner": "0xc000022070", "repo": "zen-browser-flake", - "rev": "9357f05e60643b057038ff3f89c87d4a1d08cae1", + "rev": "3671c6eceee35fd06fd1f60b71eed968cc9d7449", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 0d1cafb..fd64726 100644 --- a/flake.nix +++ b/flake.nix @@ -1,62 +1,68 @@ { inputs = { nixpkgs.url = "github:NixOS/nixpkgs"; - zen-browser.url = "github:0xc000022070/zen-browser-flake"; home-manager = { url = "github:nix-community/home-manager"; inputs.nixpkgs.follows = "nixpkgs"; }; - discord-music-presence = { - url = "path:./discord-music-presence"; - }; dms = { url = "github:AvengeMedia/DankMaterialShell"; inputs.nixpkgs.follows = "nixpkgs"; }; - xremap-flake.url = "github:xremap/nix-flake"; sls-steam = { url = "github:AceSLS/SLSsteam"; inputs.nixpkgs.follows = "nixpkgs"; }; + zen-browser.url = "github:0xc000022070/zen-browser-flake"; + xremap-flake.url = "github:xremap/nix-flake"; + discord-music-presence.url = "git+https://tangled.org/xaiya.dev/nix-pkgs"; + yazi.url = "github:sxyazi/yazi"; + millennium.url = "github:SteamClientHomebrew/Millennium?dir=packages/nix"; }; outputs = { self, + nixpkgs, + home-manager, zen-browser, discord-music-presence, xremap-flake, sls-steam, + yazi, + millennium, + dms, ... - }@inputs: + }: let system = "x86_64-linux"; - inherit (inputs) nixpkgs; - eachSystem = nixpkgs.lib.genAttrs (import inputs.systems); - pkgsFor = eachSystem (system: import nixpkgs { localSystem = system; }); in { nixosConfigurations.nixos = nixpkgs.lib.nixosSystem { inherit system; specialArgs = { - inherit inputs; + inherit sls-steam; }; modules = [ ./configuration.nix ./hardware-configuration.nix - inputs.home-manager.nixosModules.home-manager - inputs.xremap-flake.nixosModules.default + home-manager.nixosModules.home-manager + xremap-flake.nixosModules.default { + nixpkgs.overlays = [ + yazi.overlays.default + millennium.overlays.default + ]; + home-manager.useGlobalPkgs = true; home-manager.useUserPackages = true; - home-manager.extraSpecialArgs = { - inherit self; - inherit inputs; - }; - home-manager.users.user = import ./home-manager/home.nix; + home-manager.extraSpecialArgs = { + dms = dms; + }; + home-manager.backupFileExtension = "backup"; # xremap @@ -90,20 +96,12 @@ } ]; } - ( - let - inputs = { - zen = zen-browser; - music-presence = discord-music-presence; - }; - in - { config, pkgs, ... }: { - environment.systemPackages = [ - inputs.music-presence.packages.${pkgs.stdenv.hostPlatform.system}.discord-music-presence - inputs.zen.packages.${pkgs.stdenv.hostPlatform.system}.default - ]; - } - ) + ({ + environment.systemPackages = [ + discord-music-presence.packages.${system}.discord-music-presence + zen-browser.packages.${system}.default + ]; + }) ]; }; }; diff --git a/home-manager/home.nix b/home-manager/home.nix index 5d42c74..da0e778 100644 --- a/home-manager/home.nix +++ b/home-manager/home.nix @@ -1,10 +1,13 @@ -{ pkgs, inputs, config, ... }: -let -in +{ + pkgs, + dms, + config, + ... +}: { imports = [ ./mpd.nix - inputs.dms.homeModules.dank-material-shell + dms.homeModules.dank-material-shell ]; home.username = "user"; @@ -44,25 +47,25 @@ in ]; }; - services.cliphist.enable = true; - - programs.pywal.enable = true; - programs.pywal.package = pkgs.pywal16; + programs.pywal = { + enable = true; + package = pkgs.pywal16; + }; programs.lazygit.enable = true; programs.lazygit.enableFishIntegration = true; - programs.rbw.enable = true; programs.rbw.settings = { + enable = true; pinentry = pkgs.pinentry-curses; email = "KeksNino@proton.me"; base_url = "https://vw.pizzasucht.net"; }; - programs.distrobox.enable = true; services.podman.enable = true; + services.cliphist.enable = true; programs.btop.enable = true; services.udiskie.enable = true; programs.cava.enable = true; @@ -80,14 +83,20 @@ in programs.obsidian.enable = true; programs.gcc.enable = true; + home.sessionPath = [ + "${config.home.homeDirectory}/.local/bin" + ]; + + home.sessionVariables = { + EDITOR = "nvim"; + }; + programs.fish = { enable = true; interactiveShellInit = '' - nitch - set -gx EDITOR nvim - set -gx PATH $PATH /home/user/.local/bin - set -g fish_key_bindings fish_hybrid_key_bindings - set fish_greeting + nitch + set -g fish_key_bindings fish_hybrid_key_bindings + set fish_greeting ''; }; @@ -104,9 +113,9 @@ in r = "rsync -avh --info=progress2"; rm = "trash"; ssh = "kitty +kitten ssh"; + nd = "nix develop"; }; - programs.zoxide.enable = true; programs.zoxide.enableFishIntegration = true; diff --git a/packages.nix b/packages.nix index 4ef163b..a416401 100644 --- a/packages.nix +++ b/packages.nix @@ -21,7 +21,6 @@ python3 basedpyright waypaper - nix-search rofi-calc renoise pwvucontrol @@ -39,6 +38,14 @@ wine ripgrep nemo + unrar + papirus-icon-theme + rust-analyzer + scdl + motrix-next + onefetch + aria2 + smartmontools ]; fonts.packages = with pkgs; [ From 6bac43002581f0b788eed8ba88db98ff560e2aaf Mon Sep 17 00:00:00 2001 From: KeksNino Date: Tue, 21 Jul 2026 21:17:28 +0200 Subject: [PATCH 17/25] update --- configuration.nix | 30 +++++++- flake.lock | 161 +++++++++++++++++++++++++++++++++--------- flake.nix | 32 ++++++--- home-manager/home.nix | 52 ++++++++++---- packages.nix | 14 +++- 5 files changed, 229 insertions(+), 60 deletions(-) diff --git a/configuration.nix b/configuration.nix index 9669234..b02001b 100644 --- a/configuration.nix +++ b/configuration.nix @@ -76,6 +76,8 @@ }; hardware.graphics.enable = true; + hardware.graphics.enable32Bit = true; + services.hardware.openrgb.enable = true; # Bootloader. boot.loader.grub.enable = true; @@ -115,17 +117,25 @@ extraGroups = [ "networkmanager" "wheel" + "docker" ]; shell = pkgs.fish; }; nixpkgs.config.allowUnfree = true; + programs.niri.enable = true; programs.hyprland = { enable = true; xwayland.enable = true; }; + # environment.loginShellInit = '' + # if [ "$(tty)" = "/dev/tty1" ] && [ -z "$WAYLAND_DISPLAY" ]; then + # exec start-hyprland + # fi + # ''; + # NFS / MPD fileSystems."/media/music" = { device = "192.168.132.149:/media/music"; @@ -133,15 +143,16 @@ }; boot.supportedFilesystems = [ "nfs4" ]; - environment.variables.QT_QPA_PLATFORMTHEME = "qt5ct"; qt = { enable = true; platformTheme = "qt5ct"; style = "breeze"; }; + virtualisation.docker.enable = true; services.goxlr-utility.enable = true; services.lact.enable = true; + programs.kdeconnect.enable = true; programs.neovim.enable = true; programs.tmux.enable = true; programs.bat.enable = true; @@ -180,10 +191,25 @@ enable = true; alsa.enable = true; pulse.enable = true; + jack.enable = true; }; + security.pam.loginLimits = [ + { + domain = "@users"; + item = "rtprio"; + type = "-"; + value = "95"; + } + { + domain = "@users"; + item = "memlock"; + type = "-"; + value = "unlimited"; + } + ]; + security.rtkit.enable = true; - systemd.services."rtkit-daemon".enable = true; system.stateVersion = "24.11"; system.autoUpgrade.enable = false; diff --git a/flake.lock b/flake.lock index 1bf0ea6..56eadb8 100644 --- a/flake.lock +++ b/flake.lock @@ -15,37 +15,54 @@ "type": "github" } }, + "dank-qml-common": { + "flake": false, + "locked": { + "lastModified": 1784647395, + "narHash": "sha256-kcLSJC8XBzmWoSBc90Zn81qrNsqWMkwQ1m/zZixOw30=", + "owner": "AvengeMedia", + "repo": "dank-qml-common", + "rev": "1919595f0dde4f5bf5ac0baa1902ff6d070971d5", + "type": "github" + }, + "original": { + "owner": "AvengeMedia", + "repo": "dank-qml-common", + "type": "github" + } + }, "discord-music-presence": { "inputs": { "nixpkgs": "nixpkgs" }, "locked": { - "lastModified": 1779460892, - "narHash": "sha256-/BjfCD3ws1xroJ/vUJ6GYtvoVythAjbUHpUHP9mcmPY=", + "lastModified": 1783642963, + "narHash": "sha256-emlpqPMFcNI+amdIwg2a1sn5HBVlsDc18QeczCaJyI8=", "ref": "refs/heads/master", - "rev": "537d0dd2844f85598994f493825f1f9d967af4e2", - "revCount": 10, + "rev": "ac9ddf20a3094ee9870989c3bc6016ecff2ee6c7", + "revCount": 12, "type": "git", - "url": "https://tangled.org/xaiya.dev/nix-pkgs" + "url": "https://git.pizzasucht.net/KeksNino/discord-music-presence-flake.git" }, "original": { "type": "git", - "url": "https://tangled.org/xaiya.dev/nix-pkgs" + "url": "https://git.pizzasucht.net/KeksNino/discord-music-presence-flake.git" } }, "dms": { "inputs": { + "dank-qml-common": "dank-qml-common", "flake-compat": "flake-compat", "nixpkgs": [ "nixpkgs" ] }, "locked": { - "lastModified": 1783376149, - "narHash": "sha256-8OtuiFN++vFAgzsSuqI+5zsriTbkwZS9575p/ulxuP0=", + "lastModified": 1784652660, + "narHash": "sha256-NHPqw6YE8T5qviGoSQNa6iofNKeVbclOk8a+ZxcUwQI=", "owner": "AvengeMedia", "repo": "DankMaterialShell", - "rev": "8a1acb63c9b06a4eac276c96e7ac2a1f7de6bf7e", + "rev": "53c729f6857d14144ddda8d80eb62fdefc939ee8", "type": "github" }, "original": { @@ -106,6 +123,45 @@ "type": "github" } }, + "flake-utils_2": { + "inputs": { + "systems": "systems_2" + }, + "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" + } + }, + "gsr-ui": { + "inputs": { + "flake-utils": "flake-utils", + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1784064149, + "narHash": "sha256-yJ+YH7ZjNTnU33wnNRs21dGILG+5Ewt2s+B4OAi8SOU=", + "owner": "rPlakama", + "repo": "gsr-ui-nix", + "rev": "42838d89e48b5c32bcf0e6a670e5daaa084229dc", + "type": "github" + }, + "original": { + "owner": "rPlakama", + "repo": "gsr-ui-nix", + "type": "github" + } + }, "home-manager": { "inputs": { "nixpkgs": [ @@ -113,11 +169,11 @@ ] }, "locked": { - "lastModified": 1783358420, - "narHash": "sha256-UEyBpf+XmQe8laXfDzIlo11Er7E0rKrLS8jeMnMj0Ds=", + "lastModified": 1784588016, + "narHash": "sha256-ouZe80aWEhMLVMkqICFDN+JUw+0FJtCr/bh+hHtRtMg=", "owner": "nix-community", "repo": "home-manager", - "rev": "0d33882bd46c1f9ef62276700f5e5f2bd6ff6604", + "rev": "deeb6b7eb7e0c44ae1819c051ce175bd92a85100", "type": "github" }, "original": { @@ -134,11 +190,11 @@ ] }, "locked": { - "lastModified": 1782839684, - "narHash": "sha256-vzs4SBgPsK4aNzlJR2PpFwtARazXMOxZonQnDz0YHxk=", + "lastModified": 1783963347, + "narHash": "sha256-r376E2XpakiXwModDHIxlvB6qLq4iFVEq730vxOO4JY=", "owner": "nix-community", "repo": "home-manager", - "rev": "2a37d71bbe69e1522ddabf03a4cea0374958bdbe", + "rev": "a45a7c451455a51ae740ec3bce4024b312809c29", "type": "github" }, "original": { @@ -154,11 +210,11 @@ }, "locked": { "dir": "packages/nix", - "lastModified": 1783532163, - "narHash": "sha256-n+YQKnVt0H1B2z6N1PmaadeVorRHi956q48/g2y8Hnc=", + "lastModified": 1784048235, + "narHash": "sha256-ar1xg5HFbz6XJ/BAOo37ewfnMcsLHj0/088soIvXKIo=", "owner": "SteamClientHomebrew", "repo": "Millennium", - "rev": "3623ed0ed9f6065ce666cb0276ff0b903fee2355", + "rev": "df5a3572fd2366b4aa689abd655ee48296ba1afd", "type": "github" }, "original": { @@ -234,11 +290,11 @@ }, "nixpkgs_3": { "locked": { - "lastModified": 1783386518, - "narHash": "sha256-a8mRODbGSR7QY0tW9DuaavGRrCcfyIjH1H1m2WOsZlk=", + "lastModified": 1784657939, + "narHash": "sha256-TXrHguIvOnL98UhZd7M7W6ipN6TxmEUE66pfTR+2z3k=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "18221029c0b078f57210bbabc8ddd0b63c6715c0", + "rev": "234f793425454078331c82c42294a667fa35992e", "type": "github" }, "original": { @@ -281,11 +337,11 @@ }, "nixpkgs_6": { "locked": { - "lastModified": 1782723713, - "narHash": "sha256-oPXCU/SSUokcGaJREHibG1CBX3+s/W7orDWQOZDsEeQ=", + "lastModified": 1784007870, + "narHash": "sha256-djcLt/JJphyNt4eDY9XTly+/WbCK5lqWq9lSgCmJkkQ=", "owner": "nixos", "repo": "nixpkgs", - "rev": "b5aa0fbd538984f6e3d201be0005b4463d8b09f8", + "rev": "18b9261cb3294b6d2a06d03f96872827b8fe2698", "type": "github" }, "original": { @@ -295,13 +351,35 @@ "type": "github" } }, + "noctalia": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1784655846, + "narHash": "sha256-SQ8aNWSpkCrsuC211YLncxNr6mHPoPQRDt+5PjcjKF8=", + "owner": "noctalia-dev", + "repo": "noctalia", + "rev": "2eaa524cfdb25c8cc468e781b467e2e9ed075e9a", + "type": "github" + }, + "original": { + "owner": "noctalia-dev", + "repo": "noctalia", + "type": "github" + } + }, "root": { "inputs": { "discord-music-presence": "discord-music-presence", "dms": "dms", + "gsr-ui": "gsr-ui", "home-manager": "home-manager", "millennium": "millennium", "nixpkgs": "nixpkgs_3", + "noctalia": "noctalia", "sls-steam": "sls-steam", "xremap-flake": "xremap-flake", "yazi": "yazi", @@ -336,11 +414,11 @@ ] }, "locked": { - "lastModified": 1783322884, - "narHash": "sha256-BmYEQewp9fCTP6KFGnYh2dh6EjMj62FfJQTrksSSN3c=", + "lastModified": 1784138783, + "narHash": "sha256-sQDwDAIZDUILLle+mcD8pux/kgiv2Ozeh7Y9F6GTkrQ=", "owner": "AceSLS", "repo": "SLSsteam", - "rev": "8ef40a2bdc662331f215775e525e1b010a2ffba3", + "rev": "9cc2ff2e57ae71620614c580d54195bb1d4b6d43", "type": "github" }, "original": { @@ -364,6 +442,21 @@ "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" + } + }, "xremap": { "flake": false, "locked": { @@ -404,16 +497,16 @@ }, "yazi": { "inputs": { - "flake-utils": "flake-utils", + "flake-utils": "flake-utils_2", "nixpkgs": "nixpkgs_5", "rust-overlay": "rust-overlay" }, "locked": { - "lastModified": 1783501452, - "narHash": "sha256-gSdIueInGLAAZwD3aZk/hFhhzZCBrtys/Im3FelePhw=", + "lastModified": 1784595560, + "narHash": "sha256-fIfothdeD9EF+0+N2//4HedPMRCMnXDs5evz2qYgUYY=", "owner": "sxyazi", "repo": "yazi", - "rev": "dbb0cc0d556d73935ebdc1e3d61a2a8aa27059d2", + "rev": "6aa75594dbea287001c823853235e6a4f9d45997", "type": "github" }, "original": { @@ -428,11 +521,11 @@ "nixpkgs": "nixpkgs_6" }, "locked": { - "lastModified": 1783489920, - "narHash": "sha256-sZediA0pfMCXm6nA6fvO1vEsWvybEvP5GCnaAPDcTq0=", + "lastModified": 1784586513, + "narHash": "sha256-ewIv3xH9bQK7uMkU3xK6NWFEW5oIuAtIny8ifJwcY/E=", "owner": "0xc000022070", "repo": "zen-browser-flake", - "rev": "3671c6eceee35fd06fd1f60b71eed968cc9d7449", + "rev": "0ea161e9ac257510acabfb6e9dbf13630298760d", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index fd64726..5788329 100644 --- a/flake.nix +++ b/flake.nix @@ -13,11 +13,19 @@ url = "github:AceSLS/SLSsteam"; inputs.nixpkgs.follows = "nixpkgs"; }; + noctalia = { + url = "github:noctalia-dev/noctalia"; + inputs.nixpkgs.follows = "nixpkgs"; + }; zen-browser.url = "github:0xc000022070/zen-browser-flake"; xremap-flake.url = "github:xremap/nix-flake"; - discord-music-presence.url = "git+https://tangled.org/xaiya.dev/nix-pkgs"; + discord-music-presence.url = "git+https://git.pizzasucht.net/KeksNino/discord-music-presence-flake.git"; yazi.url = "github:sxyazi/yazi"; millennium.url = "github:SteamClientHomebrew/Millennium?dir=packages/nix"; + gsr-ui = { + url = "github:rPlakama/gsr-ui-nix"; + inputs.nixpkgs.follows = "nixpkgs"; + }; }; outputs = @@ -32,6 +40,8 @@ yazi, millennium, dms, + noctalia, + gsr-ui, ... }: let @@ -48,23 +58,35 @@ ./hardware-configuration.nix home-manager.nixosModules.home-manager xremap-flake.nixosModules.default + gsr-ui.nixosModules.default { nixpkgs.overlays = [ yazi.overlays.default millennium.overlays.default ]; + environment.systemPackages = [ + discord-music-presence.packages.${system}.discord-music-presence + zen-browser.packages.${system}.default + ]; + home-manager.useGlobalPkgs = true; home-manager.useUserPackages = true; home-manager.users.user = import ./home-manager/home.nix; home-manager.extraSpecialArgs = { - dms = dms; + inherit dms noctalia; }; home-manager.backupFileExtension = "backup"; + programs.gpu-screen-recorder = { + package = gsr-ui.packages.${system}.gpu-screen-recorder; + enable = true; + ui.enable = true; + }; + # xremap services.xremap.enable = true; services.xremap.withHypr = true; @@ -96,12 +118,6 @@ } ]; } - ({ - environment.systemPackages = [ - discord-music-presence.packages.${system}.discord-music-presence - zen-browser.packages.${system}.default - ]; - }) ]; }; }; diff --git a/home-manager/home.nix b/home-manager/home.nix index da0e778..30b350d 100644 --- a/home-manager/home.nix +++ b/home-manager/home.nix @@ -1,15 +1,19 @@ { pkgs, - dms, config, + dms, + noctalia, ... }: { imports = [ ./mpd.nix dms.homeModules.dank-material-shell + noctalia.homeModules.default ]; + # programs.noctalia.enable = true; + home.username = "user"; home.homeDirectory = "/home/user"; xdg.userDirs = { @@ -20,6 +24,7 @@ }; }; home.pointerCursor = { + enable = true; gtk.enable = true; package = pkgs.adwaita-icon-theme; name = "Adwaita"; @@ -36,14 +41,9 @@ enable = true; enableFishIntegration = true; git = true; + icons = "always"; extraOptions = [ - "-a" - "--long" - "--no-time" - "--no-user" - "--no-permissions" - "--no-filesize" - "--icons=always" + "-1" ]; }; @@ -55,11 +55,13 @@ programs.lazygit.enable = true; programs.lazygit.enableFishIntegration = true; - programs.rbw.settings = { + programs.rbw = { enable = true; - pinentry = pkgs.pinentry-curses; - email = "KeksNino@proton.me"; - base_url = "https://vw.pizzasucht.net"; + settings = { + pinentry = pkgs.pinentry-curses; + email = "KeksNino@proton.me"; + base_url = "https://vw.pizzasucht.net"; + }; }; programs.distrobox.enable = true; @@ -82,6 +84,28 @@ programs.mpvpaper.enable = true; programs.obsidian.enable = true; programs.gcc.enable = true; + programs.mpv.enable = true; + programs.qutebrowser = { + enable = true; + settings = { + colors.webpage.preferred_color_scheme = "dark"; + auto_save.session = true; + scrolling.smooth = true; + content.autoplay = false; + url.default_page = "https://priv.au"; + }; + extraConfig = '' + c.qt.args = ["disable-features=AcceleratedVideoDecodeLinuxGL"] + ''; + keyBindings = { + normal = { + "M" = "hint links spawn mpv {hint-url}"; + }; + }; + searchEngines = { + DEFAULT = "https://priv.au/search?q={}"; + }; + }; home.sessionPath = [ "${config.home.homeDirectory}/.local/bin" @@ -101,6 +125,8 @@ }; programs.fish.shellAliases = { + ls = "eza -al --no-time --no-user --no-permissions --no-filesize"; + ll = "eza -la"; cat = "bat"; cd = "z"; cp = "cp -v"; @@ -111,7 +137,7 @@ n = "nvim"; py = "uv run"; r = "rsync -avh --info=progress2"; - rm = "trash"; + rm = "gomi"; ssh = "kitty +kitten ssh"; nd = "nix develop"; }; diff --git a/packages.nix b/packages.nix index a416401..0f1c8af 100644 --- a/packages.nix +++ b/packages.nix @@ -7,11 +7,9 @@ jamesdsp grimblast nitch - adwaita-icon-theme - gtrash wl-clipboard unzip - p7zip + _7zz tree-sitter nodejs nixfmt @@ -46,6 +44,16 @@ onefetch aria2 smartmontools + qpwgraph + pipewire.jack + sysz + gomi + noctalia-shell + discordchatexporter-desktop + act + ayugram-desktop + playerctl + musicpresence ]; fonts.packages = with pkgs; [ From 4babfc0f1e9e9d8459a317c87aa727015759a794 Mon Sep 17 00:00:00 2001 From: KeksNino Date: Tue, 21 Jul 2026 21:17:57 +0200 Subject: [PATCH 18/25] remove music-presence flake --- flake.nix | 3 --- 1 file changed, 3 deletions(-) diff --git a/flake.nix b/flake.nix index 5788329..87ff6ec 100644 --- a/flake.nix +++ b/flake.nix @@ -19,7 +19,6 @@ }; zen-browser.url = "github:0xc000022070/zen-browser-flake"; xremap-flake.url = "github:xremap/nix-flake"; - discord-music-presence.url = "git+https://git.pizzasucht.net/KeksNino/discord-music-presence-flake.git"; yazi.url = "github:sxyazi/yazi"; millennium.url = "github:SteamClientHomebrew/Millennium?dir=packages/nix"; gsr-ui = { @@ -34,7 +33,6 @@ nixpkgs, home-manager, zen-browser, - discord-music-presence, xremap-flake, sls-steam, yazi, @@ -66,7 +64,6 @@ ]; environment.systemPackages = [ - discord-music-presence.packages.${system}.discord-music-presence zen-browser.packages.${system}.default ]; From c79d2fef9adee31d2c712ef3b405bc1a2ee49409 Mon Sep 17 00:00:00 2001 From: KeksNino Date: Thu, 23 Jul 2026 20:28:54 +0200 Subject: [PATCH 19/25] update --- configuration.nix | 19 ++++++++- flake.lock | 97 ++++++++++++++----------------------------- flake.nix | 1 - home-manager/home.nix | 40 ++++++++++-------- packages.nix | 3 +- 5 files changed, 72 insertions(+), 88 deletions(-) diff --git a/configuration.nix b/configuration.nix index b02001b..849f020 100644 --- a/configuration.nix +++ b/configuration.nix @@ -1,7 +1,7 @@ { - config, pkgs, sls-steam, + options, ... }: @@ -152,6 +152,7 @@ virtualisation.docker.enable = true; services.goxlr-utility.enable = true; services.lact.enable = true; + services.rsync.enable = true; programs.kdeconnect.enable = true; programs.neovim.enable = true; programs.tmux.enable = true; @@ -185,7 +186,21 @@ }; }; - programs.nix-ld.enable = true; + programs.nix-ld = { + enable = true; + libraries = options.programs.nix-ld.libraries.default ++ ( + with pkgs; [ + dbus # libdbus-1.so.3 + fontconfig # libfontconfig.so.1 + freetype # libfreetype.so.6 + glib # libglib-2.0.so.0 + libGL # libGL.so.1 + libxkbcommon # libxkbcommon.so.0 + libx11 # libX11.so.6 + wayland + ] + ); + }; services.pipewire = { enable = true; diff --git a/flake.lock b/flake.lock index 56eadb8..1a4477d 100644 --- a/flake.lock +++ b/flake.lock @@ -31,24 +31,6 @@ "type": "github" } }, - "discord-music-presence": { - "inputs": { - "nixpkgs": "nixpkgs" - }, - "locked": { - "lastModified": 1783642963, - "narHash": "sha256-emlpqPMFcNI+amdIwg2a1sn5HBVlsDc18QeczCaJyI8=", - "ref": "refs/heads/master", - "rev": "ac9ddf20a3094ee9870989c3bc6016ecff2ee6c7", - "revCount": 12, - "type": "git", - "url": "https://git.pizzasucht.net/KeksNino/discord-music-presence-flake.git" - }, - "original": { - "type": "git", - "url": "https://git.pizzasucht.net/KeksNino/discord-music-presence-flake.git" - } - }, "dms": { "inputs": { "dank-qml-common": "dank-qml-common", @@ -58,11 +40,11 @@ ] }, "locked": { - "lastModified": 1784652660, - "narHash": "sha256-NHPqw6YE8T5qviGoSQNa6iofNKeVbclOk8a+ZxcUwQI=", + "lastModified": 1784816066, + "narHash": "sha256-j2jJmxgkcZemmusvQysK+bN/dDhvqYD//IPmcVsfhR0=", "owner": "AvengeMedia", "repo": "DankMaterialShell", - "rev": "53c729f6857d14144ddda8d80eb62fdefc939ee8", + "rev": "d818067bee842e432fc8ffd94bf3d0801d190c7f", "type": "github" }, "original": { @@ -169,11 +151,11 @@ ] }, "locked": { - "lastModified": 1784588016, - "narHash": "sha256-ouZe80aWEhMLVMkqICFDN+JUw+0FJtCr/bh+hHtRtMg=", + "lastModified": 1784789275, + "narHash": "sha256-cgRTWuG+u1tBPhm01JrId2k0Bni09phVJ1Q0BZlRd7M=", "owner": "nix-community", "repo": "home-manager", - "rev": "deeb6b7eb7e0c44ae1819c051ce175bd92a85100", + "rev": "3b0e6bbd65869af1beadf5963a99befc179d209f", "type": "github" }, "original": { @@ -206,7 +188,7 @@ "millennium": { "inputs": { "millennium-src": "millennium-src", - "nixpkgs": "nixpkgs_2" + "nixpkgs": "nixpkgs" }, "locked": { "dir": "packages/nix", @@ -243,17 +225,17 @@ }, "nixpkgs": { "locked": { - "lastModified": 1778869304, - "narHash": "sha256-30sZNZoA1cqF5JNO9fVX+wgiQYjB7HJqqJ4ztCDeBZE=", + "lastModified": 1781577229, + "narHash": "sha256-lrp67w8AulE9Ks53n27I45ADSzbOCn4H+CNW1Ck8B+8=", "owner": "nixos", "repo": "nixpkgs", - "rev": "d233902339c02a9c334e7e593de68855ad26c4cb", + "rev": "567a49d1913ce81ac6e9582e3553dd90a955875f", "type": "github" }, "original": { "owner": "nixos", - "ref": "nixpkgs-unstable", "repo": "nixpkgs", + "rev": "567a49d1913ce81ac6e9582e3553dd90a955875f", "type": "github" } }, @@ -274,36 +256,20 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 1781577229, - "narHash": "sha256-lrp67w8AulE9Ks53n27I45ADSzbOCn4H+CNW1Ck8B+8=", - "owner": "nixos", + "lastModified": 1784819053, + "narHash": "sha256-LjxwsNf8fZonvODqPaR6vzAN43ShWji4GaOVUMBv94w=", + "owner": "NixOS", "repo": "nixpkgs", - "rev": "567a49d1913ce81ac6e9582e3553dd90a955875f", + "rev": "d0f7f5759c3c0ef348c999a0b96eb03071a53f48", "type": "github" }, "original": { - "owner": "nixos", + "owner": "NixOS", "repo": "nixpkgs", - "rev": "567a49d1913ce81ac6e9582e3553dd90a955875f", "type": "github" } }, "nixpkgs_3": { - "locked": { - "lastModified": 1784657939, - "narHash": "sha256-TXrHguIvOnL98UhZd7M7W6ipN6TxmEUE66pfTR+2z3k=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "234f793425454078331c82c42294a667fa35992e", - "type": "github" - }, - "original": { - "owner": "NixOS", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_4": { "locked": { "lastModified": 1767026758, "narHash": "sha256-7fsac/f7nh/VaKJ/qm3I338+wAJa/3J57cOGpXi0Sbg=", @@ -319,7 +285,7 @@ "type": "github" } }, - "nixpkgs_5": { + "nixpkgs_4": { "locked": { "lastModified": 1783279667, "narHash": "sha256-/NAkDSsve+GNM0Bt6tleJdCGfsTlK89nPjkVOzZMo0s=", @@ -335,7 +301,7 @@ "type": "github" } }, - "nixpkgs_6": { + "nixpkgs_5": { "locked": { "lastModified": 1784007870, "narHash": "sha256-djcLt/JJphyNt4eDY9XTly+/WbCK5lqWq9lSgCmJkkQ=", @@ -358,11 +324,11 @@ ] }, "locked": { - "lastModified": 1784655846, - "narHash": "sha256-SQ8aNWSpkCrsuC211YLncxNr6mHPoPQRDt+5PjcjKF8=", + "lastModified": 1784819646, + "narHash": "sha256-q7etFrDCAZkGwHQDazozduWrxHc9AazJcBNVTBAM94g=", "owner": "noctalia-dev", "repo": "noctalia", - "rev": "2eaa524cfdb25c8cc468e781b467e2e9ed075e9a", + "rev": "6008a66739beb43f8d1509bda459ab5c6e59073f", "type": "github" }, "original": { @@ -373,12 +339,11 @@ }, "root": { "inputs": { - "discord-music-presence": "discord-music-presence", "dms": "dms", "gsr-ui": "gsr-ui", "home-manager": "home-manager", "millennium": "millennium", - "nixpkgs": "nixpkgs_3", + "nixpkgs": "nixpkgs_2", "noctalia": "noctalia", "sls-steam": "sls-steam", "xremap-flake": "xremap-flake", @@ -414,11 +379,11 @@ ] }, "locked": { - "lastModified": 1784138783, - "narHash": "sha256-sQDwDAIZDUILLle+mcD8pux/kgiv2Ozeh7Y9F6GTkrQ=", + "lastModified": 1784795486, + "narHash": "sha256-0tdz12pbTWs+V7eIMpv6foT/qN4B1tuxs5LLc8b3A5M=", "owner": "AceSLS", "repo": "SLSsteam", - "rev": "9cc2ff2e57ae71620614c580d54195bb1d4b6d43", + "rev": "6725ff148090976a32cb4b717c1acfe48f95b48f", "type": "github" }, "original": { @@ -478,7 +443,7 @@ "inputs": { "crane": "crane", "flake-parts": "flake-parts", - "nixpkgs": "nixpkgs_4", + "nixpkgs": "nixpkgs_3", "xremap": "xremap" }, "locked": { @@ -498,15 +463,15 @@ "yazi": { "inputs": { "flake-utils": "flake-utils_2", - "nixpkgs": "nixpkgs_5", + "nixpkgs": "nixpkgs_4", "rust-overlay": "rust-overlay" }, "locked": { - "lastModified": 1784595560, - "narHash": "sha256-fIfothdeD9EF+0+N2//4HedPMRCMnXDs5evz2qYgUYY=", + "lastModified": 1784743179, + "narHash": "sha256-zEFky4d+WKVfbWVzcGkECsQgwW0XZWilGA5VQpgtFek=", "owner": "sxyazi", "repo": "yazi", - "rev": "6aa75594dbea287001c823853235e6a4f9d45997", + "rev": "58f1013348c969538352e3105f58e8d8e870a092", "type": "github" }, "original": { @@ -518,7 +483,7 @@ "zen-browser": { "inputs": { "home-manager": "home-manager_2", - "nixpkgs": "nixpkgs_6" + "nixpkgs": "nixpkgs_5" }, "locked": { "lastModified": 1784586513, diff --git a/flake.nix b/flake.nix index 87ff6ec..5f37228 100644 --- a/flake.nix +++ b/flake.nix @@ -29,7 +29,6 @@ outputs = { - self, nixpkgs, home-manager, zen-browser, diff --git a/home-manager/home.nix b/home-manager/home.nix index 30b350d..97b2adc 100644 --- a/home-manager/home.nix +++ b/home-manager/home.nix @@ -122,29 +122,33 @@ set -g fish_key_bindings fish_hybrid_key_bindings set fish_greeting ''; - }; - - programs.fish.shellAliases = { - ls = "eza -al --no-time --no-user --no-permissions --no-filesize"; - ll = "eza -la"; - cat = "bat"; - cd = "z"; - cp = "cp -v"; - ff = "fastfetch"; - grep = "grep -i"; - hyprland = "start-hyprland"; - mv = "mv -v"; - n = "nvim"; - py = "uv run"; - r = "rsync -avh --info=progress2"; - rm = "gomi"; - ssh = "kitty +kitten ssh"; - nd = "nix develop"; + shellAliases = { + ls = "eza -al --no-time --no-user --no-permissions --no-filesize"; + ll = "eza -la"; + cat = "bat"; + cd = "z"; + cp = "cp -v"; + ff = "fastfetch"; + grep = "grep -i"; + hyprland = "start-hyprland"; + mv = "mv -v"; + n = "nvim"; + py = "uv run"; + r = "rsync -avh --info=progress2"; + rm = "gomi"; + ssh = "kitty +kitten ssh"; + nd = "nix develop"; + }; }; programs.zoxide.enable = true; programs.zoxide.enableFishIntegration = true; + home.file.".local/share/Steam/steam.cfg".text = '' + BootStrapperInhibitAll=enable + BootStrapperForceSelfUpdate=disable + ''; + gtk = { enable = true; # theme = { diff --git a/packages.nix b/packages.nix index 0f1c8af..f979a79 100644 --- a/packages.nix +++ b/packages.nix @@ -33,7 +33,7 @@ spek ffmpeg vlc - wine + # wine ripgrep nemo unrar @@ -54,6 +54,7 @@ ayugram-desktop playerctl musicpresence + nixd ]; fonts.packages = with pkgs; [ From c8d3a770bceaa588be801617645a63f5bc0a6de5 Mon Sep 17 00:00:00 2001 From: KeksNino Date: Sat, 25 Jul 2026 17:39:39 +0200 Subject: [PATCH 20/25] update --- configuration.nix | 19 + flake.lock | 54 +- home-manager/home.nix | 18 + packages.nix | 12 +- pkgs/cpuid-fault-emulation/default.nix | 28 + pkgs/cpuid-fault-emulation/source/Makefile | 23 + pkgs/cpuid-fault-emulation/source/dkms.conf | 7 + .../source/inc/host_state.h | 101 +++ .../source/inc/vmcb_layout.h | 574 +++++++++++++++ .../source/src/capture_context.S | 40 ++ .../source/src/cpuid_fault_emulation.c | 663 ++++++++++++++++++ .../cpuid-fault-emulation/source/src/run_vm.S | 121 ++++ 12 files changed, 1630 insertions(+), 30 deletions(-) create mode 100644 pkgs/cpuid-fault-emulation/default.nix create mode 100644 pkgs/cpuid-fault-emulation/source/Makefile create mode 100644 pkgs/cpuid-fault-emulation/source/dkms.conf create mode 100644 pkgs/cpuid-fault-emulation/source/inc/host_state.h create mode 100644 pkgs/cpuid-fault-emulation/source/inc/vmcb_layout.h create mode 100644 pkgs/cpuid-fault-emulation/source/src/capture_context.S create mode 100644 pkgs/cpuid-fault-emulation/source/src/cpuid_fault_emulation.c create mode 100644 pkgs/cpuid-fault-emulation/source/src/run_vm.S diff --git a/configuration.nix b/configuration.nix index 849f020..8f11b9f 100644 --- a/configuration.nix +++ b/configuration.nix @@ -2,8 +2,14 @@ pkgs, sls-steam, options, + config, ... }: +let + cpuid-fault-emulation = pkgs.callPackage ./pkgs/cpuid-fault-emulation { + kernel = config.boot.kernelPackages.kernel; + }; +in { imports = [ @@ -66,6 +72,7 @@ "kvm.ignore_msrs=1" "mitigations=off" "amdgpu.ppfeaturemask=0xffffffff" + "clearcpuid=umip" ]; xdg = { @@ -83,6 +90,18 @@ boot.loader.grub.enable = true; boot.loader.grub.device = "nodev"; boot.loader.grub.efiSupport = true; + boot.extraModulePackages = [ cpuid-fault-emulation ]; + + environment.systemPackages = [ + (pkgs.writeShellScriptBin "enable-hypervisor" '' + sudo modprobe -r kvm_amd kvm + sudo modprobe cpuid_fault_emulation + '') + (pkgs.writeShellScriptBin "disable-hypervisor" '' + sudo modprobe -r cpuid_fault_emulation + sudo modprobe kvm_amd kvm + '') + ]; networking.hostName = "nixos"; # Define your hostname. networking.firewall.enable = false; diff --git a/flake.lock b/flake.lock index 1a4477d..4a2f464 100644 --- a/flake.lock +++ b/flake.lock @@ -18,11 +18,11 @@ "dank-qml-common": { "flake": false, "locked": { - "lastModified": 1784647395, - "narHash": "sha256-kcLSJC8XBzmWoSBc90Zn81qrNsqWMkwQ1m/zZixOw30=", + "lastModified": 1784935106, + "narHash": "sha256-aVgOBRynme6XNKYCZlf/oCjPDZFwddyUQPRRkEupC3c=", "owner": "AvengeMedia", "repo": "dank-qml-common", - "rev": "1919595f0dde4f5bf5ac0baa1902ff6d070971d5", + "rev": "a172b39841d8f42bac46ac133b76cade1fae91b4", "type": "github" }, "original": { @@ -40,11 +40,11 @@ ] }, "locked": { - "lastModified": 1784816066, - "narHash": "sha256-j2jJmxgkcZemmusvQysK+bN/dDhvqYD//IPmcVsfhR0=", + "lastModified": 1784936204, + "narHash": "sha256-XNbDvIaPzqqIpgJynqSADAj7Yf8KlGJTo5S/fQJUBxs=", "owner": "AvengeMedia", "repo": "DankMaterialShell", - "rev": "d818067bee842e432fc8ffd94bf3d0801d190c7f", + "rev": "8bb7396362357650a80dcc8d81407095c91c7dcf", "type": "github" }, "original": { @@ -131,11 +131,11 @@ ] }, "locked": { - "lastModified": 1784064149, - "narHash": "sha256-yJ+YH7ZjNTnU33wnNRs21dGILG+5Ewt2s+B4OAi8SOU=", + "lastModified": 1784926331, + "narHash": "sha256-EiyJny6oq41fes/x+vWmmzlbjZxwy+8TtbaQqKXyRgY=", "owner": "rPlakama", "repo": "gsr-ui-nix", - "rev": "42838d89e48b5c32bcf0e6a670e5daaa084229dc", + "rev": "e463d47ca8724de7a83c394d9e323c6d9c449508", "type": "github" }, "original": { @@ -151,11 +151,11 @@ ] }, "locked": { - "lastModified": 1784789275, - "narHash": "sha256-cgRTWuG+u1tBPhm01JrId2k0Bni09phVJ1Q0BZlRd7M=", + "lastModified": 1784913159, + "narHash": "sha256-JWq0BfjO4ktpH5USfQNQzdvHpIDT8fSKD5K7LvdMRFs=", "owner": "nix-community", "repo": "home-manager", - "rev": "3b0e6bbd65869af1beadf5963a99befc179d209f", + "rev": "079a3b5d1aa6a719920a51316253b7d6dd22738d", "type": "github" }, "original": { @@ -192,11 +192,11 @@ }, "locked": { "dir": "packages/nix", - "lastModified": 1784048235, - "narHash": "sha256-ar1xg5HFbz6XJ/BAOo37ewfnMcsLHj0/088soIvXKIo=", + "lastModified": 1784860807, + "narHash": "sha256-nznQFS9H8er9bTwxKG4LSa2D0lGsxIPUqDuWa1rbJkA=", "owner": "SteamClientHomebrew", "repo": "Millennium", - "rev": "df5a3572fd2366b4aa689abd655ee48296ba1afd", + "rev": "266e41ea8924c41e51145ae986a9bdf68f9415d9", "type": "github" }, "original": { @@ -256,11 +256,11 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 1784819053, - "narHash": "sha256-LjxwsNf8fZonvODqPaR6vzAN43ShWji4GaOVUMBv94w=", + "lastModified": 1784992771, + "narHash": "sha256-xEE5I69+WNqcs7Z0v5D9xwcHYRbvC8k/fKBmlUBdCp4=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "d0f7f5759c3c0ef348c999a0b96eb03071a53f48", + "rev": "37bfb33419c6e367e8bb6f44041eaecf953b5236", "type": "github" }, "original": { @@ -324,11 +324,11 @@ ] }, "locked": { - "lastModified": 1784819646, - "narHash": "sha256-q7etFrDCAZkGwHQDazozduWrxHc9AazJcBNVTBAM94g=", + "lastModified": 1784993591, + "narHash": "sha256-4/evHMKmkO482OWfvaPk4uwyvUJxrJWcxXhNHqMQbDU=", "owner": "noctalia-dev", "repo": "noctalia", - "rev": "6008a66739beb43f8d1509bda459ab5c6e59073f", + "rev": "62975eea9ea64171c35382d904c7564cd3d4077b", "type": "github" }, "original": { @@ -467,11 +467,11 @@ "rust-overlay": "rust-overlay" }, "locked": { - "lastModified": 1784743179, - "narHash": "sha256-zEFky4d+WKVfbWVzcGkECsQgwW0XZWilGA5VQpgtFek=", + "lastModified": 1784975066, + "narHash": "sha256-EoSjKF8AMBbtupTmen2n+CEJnWVW2ynSYIMNHYTTT2s=", "owner": "sxyazi", "repo": "yazi", - "rev": "58f1013348c969538352e3105f58e8d8e870a092", + "rev": "533d1aa3fbb9b388745c72d34d377ff8e8326d84", "type": "github" }, "original": { @@ -486,11 +486,11 @@ "nixpkgs": "nixpkgs_5" }, "locked": { - "lastModified": 1784586513, - "narHash": "sha256-ewIv3xH9bQK7uMkU3xK6NWFEW5oIuAtIny8ifJwcY/E=", + "lastModified": 1784985989, + "narHash": "sha256-Mz4G81HXJlUtHoJtA31D+Ob7uma2BX7E/y7F9QazuFc=", "owner": "0xc000022070", "repo": "zen-browser-flake", - "rev": "0ea161e9ac257510acabfb6e9dbf13630298760d", + "rev": "a8f9b6d014c9cfe0615dccb2bc7808713f6e62c2", "type": "github" }, "original": { diff --git a/home-manager/home.nix b/home-manager/home.nix index 97b2adc..d1cf8d4 100644 --- a/home-manager/home.nix +++ b/home-manager/home.nix @@ -16,6 +16,7 @@ home.username = "user"; home.homeDirectory = "/home/user"; + xdg.userDirs = { enable = true; createDirectories = false; @@ -23,6 +24,23 @@ SCREENSHOTS = "${config.home.homeDirectory}/Pictures/Screenshots"; }; }; + + xdg.mimeApps = { + enable = true; + defaultApplications = { + "inode/directory" = [ "nemo.desktop" ]; + }; + }; + + dconf = { + settings = { + "org/cinnamon/desktop/applications/terminal" = { + exec = "kitty"; + # exec-arg = ""; # argument + }; + }; + }; + home.pointerCursor = { enable = true; gtk.enable = true; diff --git a/packages.nix b/packages.nix index f979a79..4140870 100644 --- a/packages.nix +++ b/packages.nix @@ -24,18 +24,16 @@ pwvucontrol lsof picard - klassy exiftool tlrc libnotify trash-cli - nicotine-plus spek ffmpeg vlc # wine ripgrep - nemo + nemo-with-extensions unrar papirus-icon-theme rust-analyzer @@ -55,6 +53,14 @@ playerctl musicpresence nixd + libsForQt5.qt5ct + qt6Packages.qt6ct + kdePackages.breeze + kdePackages.breeze.qt5 + hexchat + gnumake + samrewritten + gale ]; fonts.packages = with pkgs; [ diff --git a/pkgs/cpuid-fault-emulation/default.nix b/pkgs/cpuid-fault-emulation/default.nix new file mode 100644 index 0000000..b0e46d1 --- /dev/null +++ b/pkgs/cpuid-fault-emulation/default.nix @@ -0,0 +1,28 @@ +{ stdenv, kernel }: + +stdenv.mkDerivation { + pname = "cpuid_fault_emulation"; + version = "0.1"; + + src = ./source; + + nativeBuildInputs = kernel.moduleBuildDependencies; + hardeningDisable = [ + "pic" + "format" + ]; + + # Patch the hardcoded host paths to point into the Nix store + postPatch = '' + substituteInPlace Makefile \ + --replace '/lib/modules/$(KERNEL)/build' '${kernel.dev}/lib/modules/${kernel.modDirVersion}/build' \ + --replace '$(shell uname -r)' '${kernel.modDirVersion}' + ''; + + installPhase = '' + install -D cpuid_fault_emulation.ko \ + $out/lib/modules/${kernel.modDirVersion}/extra/cpuid_fault_emulation.ko + ''; + + meta.platforms = [ "x86_64-linux" ]; +} diff --git a/pkgs/cpuid-fault-emulation/source/Makefile b/pkgs/cpuid-fault-emulation/source/Makefile new file mode 100644 index 0000000..c63d31a --- /dev/null +++ b/pkgs/cpuid-fault-emulation/source/Makefile @@ -0,0 +1,23 @@ +obj-m += cpuid_fault_emulation.o +cpuid_fault_emulation-y := src/cpuid_fault_emulation.o src/capture_context.o src/run_vm.o + +PWD := $(CURDIR) +ccflags-y += -I$(src)/inc +asflags-y += -I$(src)/inc + + +NOCLANG := CONFIG_CLANG_VERSION=0 + +KERNEL := $(if $(KERNEL),$(KERNEL),$(shell uname -r)) + +ifneq ($(shell grep "CONFIG_CLANG_VERSION" /lib/modules/$(KERNEL)/build/.config), $(NOCLANG)) + LLVM := LLVM=1 +endif + + +all: + echo $(MAKE) $(LLVM) -C /lib/modules/$(KERNEL)/build M=$(PWD) modules + $(MAKE) $(LLVM) -C /lib/modules/$(KERNEL)/build M=$(PWD) modules + +clean: + $(MAKE) -C /lib/modules/$(KERNEL)/build M=$(PWD) clean diff --git a/pkgs/cpuid-fault-emulation/source/dkms.conf b/pkgs/cpuid-fault-emulation/source/dkms.conf new file mode 100644 index 0000000..3e7b733 --- /dev/null +++ b/pkgs/cpuid-fault-emulation/source/dkms.conf @@ -0,0 +1,7 @@ +PACKAGE_NAME="cpuid_fault_emulation" +PACKAGE_VERSION="0.1" + +BUILT_MODULE_NAME="cpuid_fault_emulation" +BUILT_MODULE_NAME="cpuid_fault_emulation" +DEST_MODULE_LOCATION="/updates" +AUTOINSTALL="yes" diff --git a/pkgs/cpuid-fault-emulation/source/inc/host_state.h b/pkgs/cpuid-fault-emulation/source/inc/host_state.h new file mode 100644 index 0000000..40fb9db --- /dev/null +++ b/pkgs/cpuid-fault-emulation/source/inc/host_state.h @@ -0,0 +1,101 @@ +#ifndef HOST_STATE_H +#define HOST_STATE_H + + +#define GUEST_RAX_OFFSET 0x00 +#define GUEST_RBX_OFFSET 0x08 +#define GUEST_RCX_OFFSET 0x10 +#define GUEST_RDX_OFFSET 0x18 +#define GUEST_RSI_OFFSET 0x20 +#define GUEST_RDI_OFFSET 0x28 +#define GUEST_RSP_OFFSET 0x30 +#define GUEST_RBP_OFFSET 0x38 +#define GUEST_R8_OFFSET 0x40 +#define GUEST_R9_OFFSET 0x48 +#define GUEST_R10_OFFSET 0x50 +#define GUEST_R11_OFFSET 0x58 +#define GUEST_R12_OFFSET 0x60 +#define GUEST_R13_OFFSET 0x68 +#define GUEST_R14_OFFSET 0x70 +#define GUEST_R15_OFFSET 0x78 +#define GUEST_RIP_OFFSET 0x80 +#define GUEST_RFLAGS_OFFSET 0x88 + +#define HOST_STACK_OFFSET 0x000 +#define HOST_STACK_SIZE 0x1000 +#define HOST_VMCB_OFFSET 0x1000 +#define HOST_HOST_VMCB_OFFSET 0x2000 +#define HOST_HOST_SAVE_OFFSET 0x3000 +#define HOST_VMCB_PA_OFFSET 0x4000 +#define HOST_HOST_VMCB_PA_OFFSET 0x4008 +#define HOST_REGISTER_OFFSET 0x4010 + +#ifndef __ASSEMBLER__ +#include "vmcb_layout.h" + +struct GuestRegisters { + u64 rax; + u64 rbx; + u64 rcx; + u64 rdx; + u64 rsi; + u64 rdi; + u64 rsp; + u64 rbp; + u64 r8; + u64 r9; + u64 r10; + u64 r11; + u64 r12; + u64 r13; + u64 r14; + u64 r15; +} __attribute__((packed)); + +static_assert(GUEST_RAX_OFFSET == offsetof(struct GuestRegisters, rax)); +static_assert(GUEST_RBX_OFFSET == offsetof(struct GuestRegisters, rbx)); +static_assert(GUEST_RCX_OFFSET == offsetof(struct GuestRegisters, rcx)); +static_assert(GUEST_RDX_OFFSET == offsetof(struct GuestRegisters, rdx)); +static_assert(GUEST_RSI_OFFSET == offsetof(struct GuestRegisters, rsi)); +static_assert(GUEST_RDI_OFFSET == offsetof(struct GuestRegisters, rdi)); +static_assert(GUEST_RSP_OFFSET == offsetof(struct GuestRegisters, rsp)); +static_assert(GUEST_RBP_OFFSET == offsetof(struct GuestRegisters, rbp)); +static_assert(GUEST_R8_OFFSET == offsetof(struct GuestRegisters, r8)); +static_assert(GUEST_R9_OFFSET == offsetof(struct GuestRegisters, r9)); +static_assert(GUEST_R10_OFFSET == offsetof(struct GuestRegisters, r10)); +static_assert(GUEST_R11_OFFSET == offsetof(struct GuestRegisters, r11)); +static_assert(GUEST_R12_OFFSET == offsetof(struct GuestRegisters, r12)); +static_assert(GUEST_R13_OFFSET == offsetof(struct GuestRegisters, r13)); +static_assert(GUEST_R14_OFFSET == offsetof(struct GuestRegisters, r14)); +static_assert(GUEST_R15_OFFSET == offsetof(struct GuestRegisters, r15)); + +struct InitialContext { + struct GuestRegisters regs; + u64 rip; + u64 rflags; +} __attribute__((packed)); +static_assert(GUEST_RIP_OFFSET == offsetof(struct InitialContext, rip)); +static_assert(GUEST_RFLAGS_OFFSET == offsetof(struct InitialContext, rflags)); + +struct ProcessorStatus { + u8 host_stack[HOST_STACK_SIZE]; + struct VMCB vmcb; + struct VMCB host_vmcb; + u8 host_save[0x1000]; + u64 vmcb_pa; + u64 host_vmcb_pa; + struct GuestRegisters guest_registers; + void* page_ptr; + u64 prev_hsave_pa; + bool cpuid_fault; +} __attribute__((packed)); +static_assert(offsetof(struct ProcessorStatus, host_stack) == HOST_STACK_OFFSET); +static_assert(offsetof(struct ProcessorStatus, vmcb) == HOST_VMCB_OFFSET); +static_assert(offsetof(struct ProcessorStatus, host_vmcb) == HOST_HOST_VMCB_OFFSET); +static_assert(offsetof(struct ProcessorStatus, host_save) == HOST_HOST_SAVE_OFFSET); +static_assert(offsetof(struct ProcessorStatus, vmcb_pa) == HOST_VMCB_PA_OFFSET); +static_assert(offsetof(struct ProcessorStatus, host_vmcb_pa) == HOST_HOST_VMCB_PA_OFFSET); +static_assert(offsetof(struct ProcessorStatus, guest_registers) == HOST_REGISTER_OFFSET); +#endif +#endif + diff --git a/pkgs/cpuid-fault-emulation/source/inc/vmcb_layout.h b/pkgs/cpuid-fault-emulation/source/inc/vmcb_layout.h new file mode 100644 index 0000000..f171f77 --- /dev/null +++ b/pkgs/cpuid-fault-emulation/source/inc/vmcb_layout.h @@ -0,0 +1,574 @@ +#ifndef VMCB_LAYOUT_H +#define VMCB_LAYOUT_H +#include + +struct InterceptVector0 { + u32 read_cr0 : 1; + u32 read_cr1 : 1; + u32 read_cr2 : 1; + u32 read_cr3 : 1; + u32 read_cr4 : 1; + u32 read_cr5 : 1; + u32 read_cr6 : 1; + u32 read_cr7 : 1; + u32 read_cr8 : 1; + u32 read_cr9 : 1; + u32 read_cr10 : 1; + u32 read_cr11 : 1; + u32 read_cr12 : 1; + u32 read_cr13 : 1; + u32 read_cr14 : 1; + u32 read_cr15 : 1; + u32 write_cr0 : 1; + u32 write_cr1 : 1; + u32 write_cr2 : 1; + u32 write_cr3 : 1; + u32 write_cr4 : 1; + u32 write_cr5 : 1; + u32 write_cr6 : 1; + u32 write_cr7 : 1; + u32 write_cr8 : 1; + u32 write_cr9 : 1; + u32 write_cr10 : 1; + u32 write_cr11 : 1; + u32 write_cr12 : 1; + u32 write_cr13 : 1; + u32 write_cr14 : 1; + u32 write_cr15 : 1; +} __attribute__((packed)); +static_assert(sizeof(struct InterceptVector0) == 4); + +struct InterceptVector1 { + u32 read_dr0 : 1; + u32 read_dr1 : 1; + u32 read_dr2 : 1; + u32 read_dr3 : 1; + u32 read_dr4 : 1; + u32 read_dr5 : 1; + u32 read_dr6 : 1; + u32 read_dr7 : 1; + u32 read_dr8 : 1; + u32 read_dr9 : 1; + u32 read_dr10 : 1; + u32 read_dr11 : 1; + u32 read_dr12 : 1; + u32 read_dr13 : 1; + u32 read_dr14 : 1; + u32 read_dr15 : 1; + u32 write_dr0 : 1; + u32 write_dr1 : 1; + u32 write_dr2 : 1; + u32 write_dr3 : 1; + u32 write_dr4 : 1; + u32 write_dr5 : 1; + u32 write_dr6 : 1; + u32 write_dr7 : 1; + u32 write_dr8 : 1; + u32 write_dr9 : 1; + u32 write_dr10 : 1; + u32 write_dr11 : 1; + u32 write_dr12 : 1; + u32 write_dr13 : 1; + u32 write_dr14 : 1; + u32 write_dr15 : 1; +} __attribute__((packed)); +static_assert(sizeof(struct InterceptVector1) == 4); + +struct InterceptVector2 { + u32 exception_vector0 : 1; + u32 exception_vector1 : 1; + u32 exception_vector2 : 1; + u32 exception_vector3 : 1; + u32 exception_vector4 : 1; + u32 exception_vector5 : 1; + u32 exception_vector6 : 1; + u32 exception_vector7 : 1; + u32 exception_vector8 : 1; + u32 exception_vector9 : 1; + u32 exception_vector10 : 1; + u32 exception_vector11 : 1; + u32 exception_vector12 : 1; + u32 exception_vector13 : 1; + u32 exception_vector14 : 1; + u32 exception_vector15 : 1; + u32 exception_vector16 : 1; + u32 exception_vector17 : 1; + u32 exception_vector18 : 1; + u32 exception_vector19 : 1; + u32 exception_vector20 : 1; + u32 exception_vector21 : 1; + u32 exception_vector22 : 1; + u32 exception_vector23 : 1; + u32 exception_vector24 : 1; + u32 exception_vector25 : 1; + u32 exception_vector26 : 1; + u32 exception_vector27 : 1; + u32 exception_vector28 : 1; + u32 exception_vector29 : 1; + u32 exception_vector30 : 1; + u32 exception_vector31 : 1; +} __attribute__((packed)); +static_assert(sizeof(struct InterceptVector2) == 4); + +struct InterceptVector3 { + u32 intr : 1; + u32 nmi : 1; + u32 smi : 1; + u32 init : 1; + u32 vintr : 1; + u32 cr0_writes : 1; + u32 idtr_read : 1; + u32 gdtr_read : 1; + u32 ldtr_read : 1; + u32 tr_read : 1; + u32 idtr_write : 1; + u32 gdtr_write : 1; + u32 ldtr_write : 1; + u32 tr_write : 1; + u32 rdtsc_inst : 1; + u32 rdpmc_inst : 1; + u32 pushf_inst : 1; + u32 popf_inst : 1; + u32 cpuid_inst : 1; + u32 rsm_inst : 1; + u32 iret_inst : 1; + u32 intn_inst : 1; + u32 invd_inst : 1; + u32 pause_inst : 1; + u32 hlt_inst : 1; + u32 invlpg_inst : 1; + u32 invlpga_inst : 1; + u32 ioio_prot : 1; + u32 msr_prot : 1; + u32 task_switches : 1; + u32 ferr_freeze : 1; + u32 shutdown : 1; +} __attribute__((packed)); +static_assert(sizeof(struct InterceptVector3) == 4); + +struct InterceptVector4 { + u32 vmrun_inst : 1; + u32 vmcall_inst : 1; + u32 vmload_inst : 1; + u32 vmsave_inst : 1; + u32 stgi_inst : 1; + u32 clgi_inst : 1; + u32 skinit_inst : 1; + u32 rdtscp_inst : 1; + u32 icebp_inst : 1; + u32 wbinvd_inst : 1; + u32 monitor_inst : 1; + u32 mwait_inst_uncond : 1; + u32 mwait_inst_armed : 1; + u32 xsetbv_inst : 1; + u32 rdpru_inst : 1; + u32 efer_write : 1; + u32 write_cr0_after : 1; + u32 write_cr1_after : 1; + u32 write_cr2_after : 1; + u32 write_cr3_after : 1; + u32 write_cr4_after : 1; + u32 write_cr5_after : 1; + u32 write_cr6_after : 1; + u32 write_cr7_after : 1; + u32 write_cr8_after : 1; + u32 write_cr9_after : 1; + u32 write_cr10_after : 1; + u32 write_cr11_after : 1; + u32 write_cr12_after : 1; + u32 write_cr13_after : 1; + u32 write_cr14_after : 1; + u32 write_cr15_after : 1; +} __attribute__((packed)); +static_assert(sizeof(struct InterceptVector4) == 4); + +struct InterceptVector5 { + u32 invlpgb_inst_all : 1; + u32 invlpgb_inst_ill : 1; + u32 invpcid_inst : 1; + u32 mcommit_inst : 1; + u32 tlbsync_inst : 1; + u32 bus_lock_op : 1; + u32 hlt_inst_npen : 1; + u32 reserved : 25; +} __attribute__((packed)); +static_assert(sizeof(struct InterceptVector5) == 4); + +struct TLBControl { + u32 tlb_control : 8; + u32 allow_larger_rap : 1; + u32 clear_rap : 1; + u32 reserved : 22; +} __attribute__((packed)); +static_assert(sizeof(struct TLBControl) == 4); + +struct VirtualInterruptControl { + u64 v_tpr : 4; + u64 v_tpr_mbz : 4; + u64 v_irq : 1; + u64 v_gif : 1; + u64 reserved_0 : 1; + u64 v_nmi : 1; + u64 v_nmi_mask : 1; + u64 reserved_1 : 3; + u64 v_intr_prio : 4; + u64 v_ign_tpr : 1; + u64 reserved_2 : 3; + u64 v_intr_masking : 1; + u64 v_gif_enable : 1; + u64 v_nmi_enable : 1; + u64 reserved_3 : 3; + u64 x2avic_enable : 1; + u64 avic_enable : 1; + u64 v_intr_vector : 8; + u64 reserved_4 : 24; +} __attribute__((packed)); +static_assert(sizeof(struct VirtualInterruptControl) == 8); + +struct InterruptShadow { + u64 interrupt_shadow : 1; + u64 guest_interrupt_mask : 1; + u64 reserved : 62; +} __attribute__((packed)); +static_assert(sizeof(struct InterruptShadow) == 8); + +struct VirtualizationControl0 { + u64 np_enable : 1; + u64 sev_enable : 1; + u64 sev_es : 1; + u64 guest_mode_execute_trap : 1; + u64 ssscheck_en : 1; + u64 virtual_transparent_encryption : 1; + u64 read_only_guest_page_tables : 1; + u64 invlpg_tlbsync_enable : 1; + u64 reserved : 56; +} __attribute__((packed)); +static_assert(sizeof(struct VirtualizationControl0) == 8); + +struct AVICAPICBar { + u64 avic_apic_bar : 52; + u64 reserved : 12; +} __attribute__((packed)); +static_assert(sizeof(struct AVICAPICBar) == 8); + +struct VirtualizationControl1 { + u64 lbr_virtualization_enable : 1; + u64 vmsave_vmload_virtualization_enable : 1; + u64 ibs_virtualization_enable : 1; + u64 pmc_virtualization_enable : 1; + u64 ignored : 60; +} __attribute__((packed)); +static_assert(sizeof(struct VirtualizationControl1) == 8); + +struct GuestInstruction { + u8 bytes_fetched; + u8 guest_instruction[0xF]; +} __attribute__((packed)); +static_assert(sizeof(struct GuestInstruction) == 0x10); + +struct AVICAPICBackingPage { + u64 avic_apic_backing_page_pointer : 52; + u64 reserved : 12; +} __attribute__((packed)); +static_assert(sizeof(struct AVICAPICBackingPage) == 8); + +struct AVICLogicalTablePointer { + u64 reserved_0 : 12; + u64 avic_logical_table_pointer : 40; + u64 reserved_1 : 12; +} __attribute__((packed)); +static_assert(sizeof(struct AVICLogicalTablePointer) == 8); + +struct AVICPhysicalTablePointer { + u64 avic_physical_max_index : 12; + u64 avic_physical_table_pointer : 40; + u64 reserved_0 : 12; +} __attribute__((packed)); +static_assert(sizeof(struct AVICPhysicalTablePointer) == 8); + +struct VMSAPointer { + u64 reserved_0 : 12; + u64 vmsa_pointer : 40; + u64 reserved_1 : 12; +} __attribute__((packed)); +static_assert(sizeof(struct VMSAPointer) == 8); + +struct AllowedSEVFeatures { + u64 allowed_sev_features_mask : 62; + u64 reserved_0 : 1; + u64 allowed_sev_features_en : 1; +} __attribute__((packed)); +static_assert(sizeof(struct AllowedSEVFeatures) == 8); + +struct RequestedIRR { + u64 irr[4]; +} __attribute__((packed)); +static_assert(sizeof(struct RequestedIRR) == 0x20); + +struct VMCBControlArea { + struct InterceptVector0 intercept_vector0; + struct InterceptVector1 intercept_vector1; + struct InterceptVector2 intercept_vector2; + struct InterceptVector3 intercept_vector3; + struct InterceptVector4 intercept_vector4; + struct InterceptVector5 intercept_vector5; + u8 reserved_0[0x24]; + u16 pause_filter_threshold; + u16 pause_filter_count; + u64 iopm_base_pa; + u64 msrpm_base_pa; + u64 tsc_offset; + u32 guest_asid; + struct TLBControl tlb_control; + struct VirtualInterruptControl v_intr; + struct InterruptShadow interrupt_shadow; + u64 exitcode; + u64 exitinfo1; + u64 exitinfo2; + u64 exitintinfo; + struct VirtualizationControl0 virtualization_control0; + struct AVICAPICBar avic_apic_bar; + u64 guest_ghcb_pa; + u64 eventinj; + u64 h_cr3; + struct VirtualizationControl1 virtualization_control1; + u32 vmcb_clean_bits; + u8 reserved_1[0x4]; + u64 nrip; + struct GuestInstruction guest_instruction; + struct AVICAPICBackingPage avicapic_backing_page; + u8 reserved_2[0x8]; + struct AVICLogicalTablePointer avic_logical_table; + struct AVICPhysicalTablePointer avic_physical_table; + u8 reserved_3[0x08]; + struct VMSAPointer vmsa_pointer; + u64 vmgexit_rax; + u8 vmgexit_cpl; + u8 reserved_4[0x07]; + u16 bus_lock_threshold_counter; + u8 reserved_5[0x12]; + u32 update_irr; + struct AllowedSEVFeatures allowed_sev_features; + u64 guest_sev_features; + u8 reserved_6[0x8]; + struct RequestedIRR requested_irr; + u8 reserved_7[0x270]; + u8 host_reserved[0x20]; +} __attribute__((packed)); + +static_assert(offsetof(struct VMCBControlArea, intercept_vector0) == 0x000); +static_assert(offsetof(struct VMCBControlArea, intercept_vector1) == 0x004); +static_assert(offsetof(struct VMCBControlArea, intercept_vector2) == 0x008); +static_assert(offsetof(struct VMCBControlArea, intercept_vector3) == 0x00C); +static_assert(offsetof(struct VMCBControlArea, intercept_vector4) == 0x010); +static_assert(offsetof(struct VMCBControlArea, intercept_vector5) == 0x014); +static_assert(offsetof(struct VMCBControlArea, pause_filter_threshold) == 0x03C); +static_assert(offsetof(struct VMCBControlArea, pause_filter_count) == 0x03E); +static_assert(offsetof(struct VMCBControlArea, intercept_vector5) == 0x014); +static_assert(offsetof(struct VMCBControlArea, iopm_base_pa) == 0x040); +static_assert(offsetof(struct VMCBControlArea, msrpm_base_pa) == 0x048); +static_assert(offsetof(struct VMCBControlArea, tsc_offset) == 0x050); +static_assert(offsetof(struct VMCBControlArea, guest_asid) == 0x058); +static_assert(offsetof(struct VMCBControlArea, tlb_control) == 0x05C); +static_assert(offsetof(struct VMCBControlArea, v_intr) == 0x060); +static_assert(offsetof(struct VMCBControlArea, interrupt_shadow) == 0x068); +static_assert(offsetof(struct VMCBControlArea, exitcode) == 0x070); +static_assert(offsetof(struct VMCBControlArea, exitinfo1) == 0x078); +static_assert(offsetof(struct VMCBControlArea, exitinfo2) == 0x080); +static_assert(offsetof(struct VMCBControlArea, exitintinfo) == 0x088); +static_assert(offsetof(struct VMCBControlArea, virtualization_control0) == 0x090); +static_assert(offsetof(struct VMCBControlArea, avic_apic_bar) == 0x098); +static_assert(offsetof(struct VMCBControlArea, guest_ghcb_pa) == 0x0A0); +static_assert(offsetof(struct VMCBControlArea, eventinj) == 0x0A8); +static_assert(offsetof(struct VMCBControlArea, h_cr3) == 0x0B0); +static_assert(offsetof(struct VMCBControlArea, virtualization_control1) == 0x0B8); +static_assert(offsetof(struct VMCBControlArea, vmcb_clean_bits) == 0x0C0); +static_assert(offsetof(struct VMCBControlArea, nrip) == 0x0C8); +static_assert(offsetof(struct VMCBControlArea, guest_instruction) == 0x0D0); +static_assert(offsetof(struct VMCBControlArea, avicapic_backing_page) == 0x0E0); +static_assert(offsetof(struct VMCBControlArea, avic_logical_table) == 0x0F0); +static_assert(offsetof(struct VMCBControlArea, avic_physical_table) == 0x0F8); +static_assert(offsetof(struct VMCBControlArea, vmsa_pointer) == 0x108); +static_assert(offsetof(struct VMCBControlArea, vmgexit_rax) == 0x110); +static_assert(offsetof(struct VMCBControlArea, vmgexit_cpl) == 0x118); +static_assert(offsetof(struct VMCBControlArea, bus_lock_threshold_counter) == 0x120); +static_assert(offsetof(struct VMCBControlArea, update_irr) == 0x134); +static_assert(offsetof(struct VMCBControlArea, allowed_sev_features) == 0x138); +static_assert(offsetof(struct VMCBControlArea, guest_sev_features) == 0x140); +static_assert(offsetof(struct VMCBControlArea, requested_irr) == 0x150); +static_assert(offsetof(struct VMCBControlArea, host_reserved) == 0x3E0); +static_assert(sizeof(struct VMCBControlArea) == 0x400); + +struct SegmentDescriptor { + u16 selector; + u16 attrib; + u32 limit; + u64 base; +} __attribute__((packed)); + +static_assert(offsetof(struct SegmentDescriptor, selector) == 0); +static_assert(offsetof(struct SegmentDescriptor, attrib) == 2); +static_assert(offsetof(struct SegmentDescriptor, limit) == 4); +static_assert(offsetof(struct SegmentDescriptor, base) == 8); +static_assert(sizeof(struct SegmentDescriptor) == 0x10); + +struct LBRSTACK { + u8 lbr_stack_from_to[256]; +} __attribute__((packed)); +static_assert(sizeof(struct LBRSTACK) == 0x100); + +struct VMCBStateSaveArea { + struct SegmentDescriptor es; + struct SegmentDescriptor cs; + struct SegmentDescriptor ss; + struct SegmentDescriptor ds; + struct SegmentDescriptor fs; + struct SegmentDescriptor gs; + struct SegmentDescriptor gdtr; + struct SegmentDescriptor ldtr; + struct SegmentDescriptor idtr; + struct SegmentDescriptor tr; + u8 reserved_0[0x2B]; + u8 cpl; + u8 reserved_1[0x4]; + u64 efer; + u8 reserved_2[0x8]; + u64 perf_ctl0; + u64 perf_ctr0; + u64 perf_ctl1; + u64 perf_ctr1; + u64 perf_ctl2; + u64 perf_ctr2; + u64 perf_ctl3; + u64 perf_ctr3; + u64 perf_ctl4; + u64 perf_ctr4; + u64 perf_ctl5; + u64 perf_ctr5; + u8 reserved_3[0x8]; + u64 cr4; + u64 cr3; + u64 cr0; + u64 dr7; + u64 dr6; + u64 rflags; + u64 rip; + u8 reserved_4[0x40]; + u64 instr_retired_ctr; + u64 perf_ctr_global_sts; + u64 perf_ctr_global_ctl; + u64 rsp; + u64 s_cet; + u64 ssp; + u64 isst_addr; + u64 rax; + u64 star; + u64 lstar; + u64 cstar; + u64 sfmask; + u64 kernel_gs_base; + u64 sysenter_cs; + u64 sysenter_esp; + u64 sysenter_eip; + u64 cr2; + u8 reserved_5[0x20]; + u64 g_pat; + u64 dbgctl; + u64 br_from; + u64 br_to; + u64 lastexcpfrom; + u64 lastexcpto; + u64 dbgextnctl; + u8 reserved_6[0x40]; + u64 spec_ctrl; + u8 reserved_7[0x388]; + struct LBRSTACK lbr_stack_from_to; + u64 lbr_select; + u64 ibs_fetch_ctl; + u64 ibs_fetch_linaddr; + u64 ibs_op_ctl; + u64 ibs_op_rip; + u64 ibs_op_data; + u64 ibs_op_data2; + u64 ibs_op_data3; + u64 ibs_dc_linaddr; + u64 bp_ibstgt_rip; + u64 ic_ibs_extd_ctl; + u8 reserved_9[0x38]; +} __attribute__((packed)); +static_assert(offsetof(struct VMCBStateSaveArea, es) == 0x000); +static_assert(offsetof(struct VMCBStateSaveArea, cs) == 0x010); +static_assert(offsetof(struct VMCBStateSaveArea, ss) == 0x020); +static_assert(offsetof(struct VMCBStateSaveArea, ds) == 0x030); +static_assert(offsetof(struct VMCBStateSaveArea, fs) == 0x040); +static_assert(offsetof(struct VMCBStateSaveArea, gs) == 0x050); +static_assert(offsetof(struct VMCBStateSaveArea, gdtr) == 0x060); +static_assert(offsetof(struct VMCBStateSaveArea, ldtr) == 0x070); +static_assert(offsetof(struct VMCBStateSaveArea, idtr) == 0x080); +static_assert(offsetof(struct VMCBStateSaveArea, tr) == 0x090); +static_assert(offsetof(struct VMCBStateSaveArea, cpl) == 0x0CB); +static_assert(offsetof(struct VMCBStateSaveArea, efer) == 0x0D0); +static_assert(offsetof(struct VMCBStateSaveArea, perf_ctl0) == 0x0E0); +static_assert(offsetof(struct VMCBStateSaveArea, perf_ctr0) == 0x0E8); +static_assert(offsetof(struct VMCBStateSaveArea, perf_ctl1) == 0x0F0); +static_assert(offsetof(struct VMCBStateSaveArea, perf_ctr1) == 0x0F8); +static_assert(offsetof(struct VMCBStateSaveArea, perf_ctl2) == 0x100); +static_assert(offsetof(struct VMCBStateSaveArea, perf_ctr2) == 0x108); +static_assert(offsetof(struct VMCBStateSaveArea, perf_ctl3) == 0x110); +static_assert(offsetof(struct VMCBStateSaveArea, perf_ctr3) == 0x118); +static_assert(offsetof(struct VMCBStateSaveArea, perf_ctl4) == 0x120); +static_assert(offsetof(struct VMCBStateSaveArea, perf_ctr4) == 0x128); +static_assert(offsetof(struct VMCBStateSaveArea, perf_ctl5) == 0x130); +static_assert(offsetof(struct VMCBStateSaveArea, perf_ctr5) == 0x138); +static_assert(offsetof(struct VMCBStateSaveArea, cr4) == 0x148); +static_assert(offsetof(struct VMCBStateSaveArea, cr3) == 0x150); +static_assert(offsetof(struct VMCBStateSaveArea, cr0) == 0x158); +static_assert(offsetof(struct VMCBStateSaveArea, dr7) == 0x160); +static_assert(offsetof(struct VMCBStateSaveArea, dr6) == 0x168); +static_assert(offsetof(struct VMCBStateSaveArea, rflags) == 0x170); +static_assert(offsetof(struct VMCBStateSaveArea, rip) == 0x178); +static_assert(offsetof(struct VMCBStateSaveArea, instr_retired_ctr) == 0x1C0); +static_assert(offsetof(struct VMCBStateSaveArea, perf_ctr_global_sts) == 0x1C8); +static_assert(offsetof(struct VMCBStateSaveArea, perf_ctr_global_ctl) == 0x1D0); +static_assert(offsetof(struct VMCBStateSaveArea, rsp) == 0x1D8); +static_assert(offsetof(struct VMCBStateSaveArea, rax) == 0x1F8); +static_assert(offsetof(struct VMCBStateSaveArea, star) == 0x200); +static_assert(offsetof(struct VMCBStateSaveArea, lstar) == 0x208); +static_assert(offsetof(struct VMCBStateSaveArea, cstar) == 0x210); +static_assert(offsetof(struct VMCBStateSaveArea, sfmask) == 0x218); +static_assert(offsetof(struct VMCBStateSaveArea, kernel_gs_base) == 0x220); +static_assert(offsetof(struct VMCBStateSaveArea, sysenter_cs) == 0x228); +static_assert(offsetof(struct VMCBStateSaveArea, sysenter_esp) == 0x230); +static_assert(offsetof(struct VMCBStateSaveArea, sysenter_eip) == 0x238); +static_assert(offsetof(struct VMCBStateSaveArea, cr2) == 0x240); +static_assert(offsetof(struct VMCBStateSaveArea, g_pat) == 0x268); +static_assert(offsetof(struct VMCBStateSaveArea, dbgctl) == 0x270); +static_assert(offsetof(struct VMCBStateSaveArea, br_from) == 0x278); +static_assert(offsetof(struct VMCBStateSaveArea, br_to) == 0x280); +static_assert(offsetof(struct VMCBStateSaveArea, lastexcpfrom) == 0x288); +static_assert(offsetof(struct VMCBStateSaveArea, lastexcpto) == 0x290); +static_assert(offsetof(struct VMCBStateSaveArea, dbgextnctl) == 0x298); +static_assert(offsetof(struct VMCBStateSaveArea, spec_ctrl) == 0x2E0); +static_assert(offsetof(struct VMCBStateSaveArea, lbr_stack_from_to) == 0x670); +static_assert(offsetof(struct VMCBStateSaveArea, lbr_select) == 0x770); +static_assert(offsetof(struct VMCBStateSaveArea, ibs_fetch_ctl) == 0x778); +static_assert(offsetof(struct VMCBStateSaveArea, ibs_fetch_linaddr) == 0x780); +static_assert(offsetof(struct VMCBStateSaveArea, ibs_op_ctl) == 0x788); +static_assert(offsetof(struct VMCBStateSaveArea, ibs_op_rip) == 0x790); +static_assert(offsetof(struct VMCBStateSaveArea, ibs_op_data) == 0x798); +static_assert(offsetof(struct VMCBStateSaveArea, ibs_op_data2) == 0x7A0); +static_assert(offsetof(struct VMCBStateSaveArea, ibs_op_data3) == 0x7A8); +static_assert(offsetof(struct VMCBStateSaveArea, ibs_dc_linaddr) == 0x7B0); +static_assert(offsetof(struct VMCBStateSaveArea, bp_ibstgt_rip) == 0x7B8); +static_assert(offsetof(struct VMCBStateSaveArea, ic_ibs_extd_ctl) == 0x7C0); +static_assert(sizeof(struct VMCBStateSaveArea) == 0x800); + +struct VMCB { + struct VMCBControlArea control_area; + struct VMCBStateSaveArea state_area; + u8 reserved_0 [0x400]; +} __attribute__((packed)); +static_assert(offsetof(struct VMCB, control_area) == 0x000); +static_assert(offsetof(struct VMCB, state_area) == 0x400); +static_assert(sizeof(struct VMCB) == 0x1000); +#endif diff --git a/pkgs/cpuid-fault-emulation/source/src/capture_context.S b/pkgs/cpuid-fault-emulation/source/src/capture_context.S new file mode 100644 index 0000000..84061d6 --- /dev/null +++ b/pkgs/cpuid-fault-emulation/source/src/capture_context.S @@ -0,0 +1,40 @@ +#include +#include +#include + +#define save_to_offset(val, REG) movq val , GUEST_ ## REG ## _OFFSET (% _ASM_ARG1 ) +SYM_FUNC_START(capture_context) +#ifdef ENDBR + ENDBR +#endif + save_to_offset($0, RAX) /* save 0 for guest rax */ + save_to_offset(%rbx, RBX) + save_to_offset(%rcx, RCX) + save_to_offset(%rdx, RDX) + save_to_offset(%rsi, RSI) + save_to_offset(%rdi, RDI) + save_to_offset(%rbp, RBP) + + leaq 8(%rsp),%rax /* rsp after ret */ + save_to_offset(%rax, RSP) + + save_to_offset(%r8, R8) + save_to_offset(%r9, R9) + save_to_offset(%r10, R10) + save_to_offset(%r11, R11) + save_to_offset(%r12, R12) + save_to_offset(%r13, R13) + save_to_offset(%r14, R14) + save_to_offset(%r15, R15) + + movq (%rsp), %rax /* return addr*/ + save_to_offset(%rax, RIP) + + pushfq + popq %rax /* rflags */ + save_to_offset(%rax, RFLAGS) + + mov $1, %rax; + RET + +SYM_FUNC_END(capture_context) diff --git a/pkgs/cpuid-fault-emulation/source/src/cpuid_fault_emulation.c b/pkgs/cpuid-fault-emulation/source/src/cpuid_fault_emulation.c new file mode 100644 index 0000000..e7f3655 --- /dev/null +++ b/pkgs/cpuid-fault-emulation/source/src/cpuid_fault_emulation.c @@ -0,0 +1,663 @@ +#include /* Needed for the macros */ +#include /* Needed by all modules */ +#include /* Needed for pr_info() */ +#include /* for memset() and memcpy() */ +#include +#include +#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 11, 0) + #include +#else + #include +#endif +#include + +#include +#include +#include +#include + +#include +#include + +#define MSR_PM_BASE1 0x00000000 +#define MSR_PM_BASE2 0xc0000000 +#define MSR_PM_BASE3 0xc0010000 +#define SVM_MSR_VM_HSAVE_PA 0xc0010117 + +#define UNLOAD_HV_MAGIC 0x40067420 + +#define SVM_SUPPORT_LEAF 0x80000001 +#define SVM_SUPPORT_BIT 2 + +#define SVM_MSR_VM_CR 0xc0010114 +#define VM_CR_SVMDIS_BIT 4 + +#define VMEXIT_CPUID 0x72 +#define VMEXIT_MSRPROT 0x7C + +/* VECTOR 8 bits = 0x0D (GP) */ +/* TYPE 3 bits = 0x3 (Fault) */ +/* EV 1 bit = 0x1 (Error Code Valid) */ +/* reserved 19 bits */ +/* V 1 bit = 0x1 (Valid) */ +/* ERRORCODE 32 bits = 0x0 */ +#define GP0_EVENTINJ (0x0D | (0x3 << 8) | (0x1 << 11) | (0x1 << 31)) + + +#ifndef page_to_phys +#define page_to_phys(page) PFN_PHYS(page_to_pfn(page)) +#endif + +/* The hypervisor doesn't handle nested virtualization, so attempting to + * virtualize a kernel currently using virtualization features will probably + * result in an immediate crash. If you know better you can tell the module + * to attempt the virtualization anyway */ +static int ignore_svm_enabled = 0; +module_param(ignore_svm_enabled, int, 0); + +static struct { + struct page* msrpm_page; + u64 msrpm_pa; + bool prev_cpuid_fault_cap; + bool prev_svm_enabled; +} shared_data; + + +inline static void vmsave(u64 vmcb_pa) { + asm volatile ("vmsave" : : "a" (vmcb_pa) : "memory"); +} + +inline static void vmload(u64 vmcb_pa) { + asm volatile ("vmload" : : "a" (vmcb_pa) : "memory"); +} + +inline static void do_cpuid(u32* eax, u32* ebx, u32* ecx, u32* edx) { + asm volatile ("cpuid" + : "+a"(*eax), "=b"(*ebx), "+c"(*ecx), "=d"(*edx) + : + : "memory"); +} + +inline static void do_cpuid_leaf(u32 leaf, u32* eax, u32* ebx, + u32* ecx, u32* edx) { + asm volatile ("cpuid" + : "=a"(*eax), "=b"(*ebx), "=c"(*ecx), "=d"(*edx) + : "a"(leaf) + : "memory"); +} + +inline static void do_wrmsr(u32 msr, u64 val) { + asm volatile ("wrmsr" : : "c"(msr), "a"((u32)val), "d" ((u32)(val >> 32)) : "memory"); +} + +inline static u64 do_rdmsr(u32 msr) { + u32 low, high; + asm volatile ("rdmsr" : "=a"(low), "=d" (high) : "c"(msr)); + return low | ((u64)high) << 32; +} + +/* Raw writes and reads for cr registers. The kernel has it's own safer + * versions, however, all the writes we do should use values provided by the + * kernel, so these consistent raw versions are cleaner to use. */ +#define define_cr_ops(cr) \ +inline static u64 do_read_ ## cr (void) {\ + u64 val; \ + asm volatile ("movq %%" #cr ", %0" : "=r" (val) : :); \ + return val; \ +} \ +inline static void do_write_ ## cr (u64 val) {\ + asm volatile ("movq %0, %%" #cr : :"r" (val) :); \ +} +define_cr_ops(cr0); +define_cr_ops(cr2); +define_cr_ops(cr3); +define_cr_ops(cr4); + +/* Checks the relevant CPUID bits and MSR registers to determine SVM support + * since the hypervisor doesn't use features like NPT or decode assists, + * very few checks are needed */ +static bool check_svm_support(void) { + u32 eax, ebx, ecx, edx; + + /* check for "AuthenticAMD" on leaf 0 */ + do_cpuid_leaf(0, &eax, &ebx, &ecx, &edx); + if (!(ebx == 'htuA' && edx == 'itne' && ecx == 'DMAc')) + return false; + + /* check for SVM support */ + do_cpuid_leaf(SVM_SUPPORT_LEAF, &eax, &ebx, &ecx, &edx); + if (!(ecx & (1U << SVM_SUPPORT_BIT))) + return false; + + /* check if SVM is disabled by the BIOS */ + if (do_rdmsr(SVM_MSR_VM_CR) & BIT_ULL(VM_CR_SVMDIS_BIT)) + return false; + + return true; +} + +/* capture_context saves all GPR's, as well as RIP and RFLAGS as they are at + * it's return, except for RAX, which is saved as 0, but returned as 1 */ +noinline_for_stack u64 capture_context(struct InitialContext* registers); + +/* run_vm repeatedly runs the VMRUN instruction, effectively continuing to + * run the guest (the OS), when an intercepted event happens, it calls the + * handle_vm_exit function with the current state of the guest. If the call + * returns a non-zero value it begins the process of devirtualizing the + * processor */ +__attribute__((noreturn)) void run_vm(struct ProcessorStatus* status); + +/* called when the guest would execute a CPUID instruction*/ +static u64 handle_cpuid(struct ProcessorStatus* status) { + u32 eax = status->guest_registers.rax; + u32 ebx; + u32 ecx = status->guest_registers.rcx; + u32 edx; + if(status->vmcb.state_area.cpl == 0) { + switch (eax) { + case UNLOAD_HV_MAGIC: + status->vmcb.state_area.rip += 2; + return 1; /* tell the hypervisor to devirtualize the processor */ + } + } else { + if(status->cpuid_fault) { /* if CPUID should fault */ + status->vmcb.control_area.eventinj = GP0_EVENTINJ; /* inject GP */ + return 0; + } + } + /* otherwise, run CPUID and increase RIP */ + do_cpuid(&eax, &ebx, &ecx, &edx); + status->guest_registers.rax = eax; + status->guest_registers.rbx = ebx; + status->guest_registers.rcx = ecx; + status->guest_registers.rdx = edx; + status->vmcb.state_area.rip += 2; + return 0; +} + +/* called when the guest would execute a read or write to a protected MSR */ +static u64 handle_msr(struct ProcessorStatus* status) { + /* the msr the guest is trying to access */ + u32 msr = status->guest_registers.rcx; + + bool write_access = (status->vmcb.control_area.exitinfo1 != 0); + /* to emulate cpuid_fault, writes and reads to the corresponding MSR are + * intercepted */ + if (write_access) { + u64 value = (status->guest_registers.rdx << 32) | + (u32)status->guest_registers.rax; +#ifdef MSR_K7_HWCR_CPUID_USER_DIS_BIT + /* If the MSR to enable / disable cpuid_fault is being written to */ + if(msr == MSR_K7_HWCR) { + /* update whether the hypervisor should inject a fault on CPUID */ + status->cpuid_fault = value & BIT_ULL(MSR_K7_HWCR_CPUID_USER_DIS_BIT); + /* write the value to the register, with the cpuid_fault bit clear */ + do_wrmsr(msr, value & ~BIT_ULL(MSR_K7_HWCR_CPUID_USER_DIS_BIT)); + } +#else + /* Older kernels will attempt to enable cpuid_fault using the intel + * MSR */ + if(msr == MSR_MISC_FEATURES_ENABLES) { + status->cpuid_fault = value & MSR_MISC_FEATURES_ENABLES_CPUID_FAULT; + } +#endif + else { + /* If we don't care about the MSR, do the write directly */ + do_wrmsr(msr, value); + } + } else { + u64 value; +#ifdef MSR_K7_HWCR_CPUID_USER_DIS_BIT + /* If the MSR to enable / disable cpuid_fault is being read */ + if(msr == MSR_K7_HWCR) { + value = do_rdmsr(msr); + /* reflect the current cpuid_fault status to the guest */ + if(status->cpuid_fault) + value |= BIT_ULL(MSR_K7_HWCR_CPUID_USER_DIS_BIT); + } +#else + /* Older kernels will attempt to enable cpuid_faulting using the intel + * MSR */ + if(msr == MSR_MISC_FEATURES_ENABLES) { + value = 0; + if(status->cpuid_fault) + value |= MSR_MISC_FEATURES_ENABLES_CPUID_FAULT; + } +#endif + else { + /* If we don't care about the MSR, do the read directly */ + value = do_rdmsr(msr); + } + status->guest_registers.rax = (u32)value; + status->guest_registers.rdx = (u32)(value >> 32); + } + status->vmcb.state_area.rip += 2; + return 0; +} + +/* consistent functions to write segment selectors */ +#define define_sel_ops(sel) \ +inline static u64 read_ ## sel ## _sel(void) {\ + u16 sel; \ + asm volatile ("movw %%" #sel ", %0" : "=r" (sel) : :); \ + return sel; \ +} \ +inline static void write_ ## sel ## _sel(u16 sel) {\ + asm volatile ("movw %0, %%" #sel : :"r" (sel) :); \ +} +define_sel_ops(ds); +define_sel_ops(es); +define_sel_ops(ss); +inline static u64 read_cs_sel(void) { + u16 cs; + asm volatile("movw %%cs, %0" : "=r"(cs) : :); + return cs; +} +/* a direct move into cs is not a valid instruction, so the value is written + * via a far jump */ +inline static void write_cs_sel(u16 cs) { + asm volatile("movzwq %0,%%rax\n\t" + "pushq %%rax\n\t" + "leaq curr_ip(%%rip),%%rax\n\t" + "pushq %%rax\n\t" + "lretq\n\t" + "curr_ip:": : "r"(cs) : "rax"); +}; + +/* To end the virtualization the host needs to put itself the guest was just + * in, this effectively does the opposite to setup_guest_state */ +static void restore_host_state(struct ProcessorStatus* status) { + struct VMCB* guest_vmcb = &status->vmcb; + struct desc_ptr gdt_ptr; + struct desc_ptr idt_ptr; + /* Load other state that might have changed */ + vmload(status->vmcb_pa); + + /* Restore the hsave address before the processor was virtualized */ + do_wrmsr(SVM_MSR_VM_HSAVE_PA, status->prev_hsave_pa); + + do_wrmsr(MSR_EFER, guest_vmcb->state_area.efer); + + idt_ptr.address = guest_vmcb->state_area.idtr.base; + idt_ptr.size = guest_vmcb->state_area.idtr.limit; + gdt_ptr.address = guest_vmcb->state_area.gdtr.base; + gdt_ptr.size = guest_vmcb->state_area.gdtr.limit; + + /* Restore gdt and idt. Done for correctness */ + native_load_gdt(&gdt_ptr); + native_load_idt(&idt_ptr); + + /* Load segment selectors from the guest. Also for correctness */ + write_es_sel(guest_vmcb->state_area.es.selector); + write_ss_sel(guest_vmcb->state_area.ss.selector); + write_ds_sel(guest_vmcb->state_area.ds.selector); + write_cs_sel(guest_vmcb->state_area.cs.selector); + + /* run_vm will resume running the OS by setting this rip and rsp */ + status->guest_registers.rax = guest_vmcb->state_area.rip; + status->guest_registers.rsp = guest_vmcb->state_area.rsp; + + /* will be used by the OS to cleanup the per processor data */ + status->guest_registers.rbx = (u64)status; +} + +/* Everytime an intercepted instruction is excecuted (currently only + * wrmsr/rdmsr to the cpuid_fault register, cpuid and runvm (required by + * the processor)), the guest's state is saved and the hypervisor calls + * this function */ +u64 handle_vm_exit(struct ProcessorStatus* status) { + status->guest_registers.rsp = status->vmcb.state_area.rsp; + status->guest_registers.rax = status->vmcb.state_area.rax; + + u64 exitcode = status->vmcb.control_area.exitcode; + u64 result = 0; + switch(exitcode) { + case VMEXIT_CPUID: + result = handle_cpuid(status); + break; + case VMEXIT_MSRPROT: + result = handle_msr(status); + break; + } + if(result) { /* begin the devirtualization process */ + restore_host_state(status); + } + status->vmcb.state_area.rsp = status->guest_registers.rsp; + status->vmcb.state_area.rax = status->guest_registers.rax; + return result; /* tell run_vm if it should keep running the guest */ +} + +/* Used to initialize the segment registers (cs, ds, es, ss) in the VMCB */ +static void set_descriptor_from_gdt(struct desc_ptr* gdtr, u16 selector, + struct SegmentDescriptor* desc) { + desc->selector = selector; + + u64 idx = selector & ~0b111; /* Mask out the TI and RPL bits */ + + if(!idx) { + desc->attrib = 0; + desc->limit = 0; + desc->base = 0; + return; + } + + /* Read the 8 bytes of the descriptor from the gdt, there's also 16-byte + * descriptors (e.g. TSS, LDT), but the function is not used for them, so + * they're not handled */ + u64 raw = *(u64*) (gdtr->address + idx); + + /* Concatenate the attribute bits */ + desc->attrib = ((raw & (0xFFL << 40)) >> 40) | + ((raw & (0xFL << 52)) >> 44); + /* Concatenate the limit bits */ + desc->limit = (raw & 0xFFFF) | ((raw & (0xFL << 48)) >> 32); + /* If the granularity is 4kb, store the effective limit */ + if(raw & (0x1L << 55)) desc->limit = (desc->limit << 12) | 0xFFFL; + /* Concatenate the base address bits */ + desc->base = ((raw & (0xFFFFL << 16)) >> 16) | + ((raw & (0xFFL << 32)) >> 16) | + ((raw & (0xFFL << 56)) >> 32); +} + +/* This setups all of the state needed to run a vm with the current status + * of the processor */ +static void setup_guest_state(struct page* host_status_page, + struct InitialContext* initial_context) { + u64 host_status_pa = page_to_phys(host_status_page); + u64 guest_vmcb_pa = host_status_pa + HOST_VMCB_OFFSET; + u64 host_vmcb_pa = host_status_pa + HOST_HOST_VMCB_OFFSET; + u64 host_save_pa = host_status_pa + HOST_HOST_SAVE_OFFSET; + + struct ProcessorStatus* host_status = page_address(host_status_page); + host_status->vmcb_pa = guest_vmcb_pa; + host_status->host_vmcb_pa = host_vmcb_pa; + + /* used to cleanup after the processor is devirtualized */ + host_status->page_ptr = host_status_page; + + host_status->guest_registers = initial_context->regs; + struct VMCB* guest_vmcb = &host_status->vmcb; + + struct desc_ptr gdt_ptr; + struct desc_ptr idt_ptr; + + native_store_gdt(&gdt_ptr); + store_idt(&idt_ptr); + + /* intercept MSRs defined by MSR prot */ + guest_vmcb->control_area.intercept_vector3.msr_prot = 1; + guest_vmcb->control_area.msrpm_base_pa = shared_data.msrpm_pa; + + /* intercept the CPUID instruction */ + guest_vmcb->control_area.intercept_vector3.cpuid_inst = 1; + + /* intercept the VMRUN instruction (required to run VMRUN) */ + guest_vmcb->control_area.intercept_vector4.vmrun_inst = 1; + + /* the guest uses it's own address space, 1 is the safest value to use */ + guest_vmcb->control_area.guest_asid = 1; + + u32 eax, ebx, ecx, edx; + do_cpuid_leaf(0x80000008, &eax, &ebx, &ecx, &edx); + if(ebx & (1 << 3)) { + do_cpuid_leaf(0x8000000a, &eax, &ebx, &ecx, &edx); + if(edx & (1 << 24)) { + guest_vmcb->control_area.virtualization_control0.invlpg_tlbsync_enable = 1; + } + } + + guest_vmcb->state_area.gdtr.base = gdt_ptr.address; + guest_vmcb->state_area.gdtr.limit = gdt_ptr.size; + guest_vmcb->state_area.idtr.base = idt_ptr.address; + guest_vmcb->state_area.idtr.limit = idt_ptr.size; + + u16 cs_selector = read_cs_sel(); + set_descriptor_from_gdt(&gdt_ptr, cs_selector, + &guest_vmcb->state_area.cs); + u16 ds_selector = read_ds_sel(); + set_descriptor_from_gdt(&gdt_ptr, ds_selector, + &guest_vmcb->state_area.ds); + u16 es_selector = read_es_sel(); + set_descriptor_from_gdt(&gdt_ptr, es_selector, + &guest_vmcb->state_area.es); + u16 ss_selector = read_ss_sel(); + set_descriptor_from_gdt(&gdt_ptr, ss_selector, + &guest_vmcb->state_area.ss); + + guest_vmcb->state_area.efer = do_rdmsr(MSR_EFER); + guest_vmcb->state_area.cr0 = do_read_cr0(); + guest_vmcb->state_area.cr2 = do_read_cr2(); + guest_vmcb->state_area.cr3 = do_read_cr3(); + guest_vmcb->state_area.cr4 = do_read_cr4(); + + guest_vmcb->state_area.rflags = initial_context->rflags; + guest_vmcb->state_area.rsp = initial_context->regs.rsp; + guest_vmcb->state_area.rip = initial_context->rip; + guest_vmcb->state_area.rax = initial_context->regs.rax; + + vmsave(guest_vmcb_pa); + + /* Save the hsave address before the hypervisor is loaded */ + /* (If the kvm_amd kernel module is loaded, this value will already be + * setup and changing it and trying to run a kvm vm will crash the OS) */ + host_status->prev_hsave_pa = do_rdmsr(SVM_MSR_VM_HSAVE_PA); + do_wrmsr(SVM_MSR_VM_HSAVE_PA, host_save_pa); + + /* save another copy of the host state, used to provide a more consistent + * host state at vmexit */ + vmsave(host_vmcb_pa); +} + +static int virtualize_processor(void* processor_number) { + struct page* host_status_page; + int order = get_order(sizeof(struct ProcessorStatus)); + host_status_page = alloc_pages(GFP_KERNEL, order); + if (!host_status_page) + goto host_status_page_failed; + + unsigned long flags; + get_cpu(); + local_irq_save(flags); + + memset(page_address(host_status_page), 0, PAGE_SIZE * (1 << order)); + + struct InitialContext context; + + + /* Capture the context to be used to initialize the guest, since it + * returns 1 but the stored state has 0 as it's return, when the guest + * starts execution at the stored state it will not enter into the if. + * */ + if(capture_context(&context)) { + + do_wrmsr(MSR_EFER, do_rdmsr(MSR_EFER) | EFER_SVME); /* Enable SVME */ + + setup_guest_state(host_status_page, &context); + struct ProcessorStatus* host_status = page_address(host_status_page); + + /* Kinda ugly, effectively sets a CR3 for the host that will + * always be safe to access the hypervisor's code from + * */ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 9, 0) + leave_mm(); +#else + leave_mm(smp_processor_id()); +#endif + run_vm(host_status); + BUG(); + } + + /* Only the guest should run this code */ + put_cpu(); + + pr_info("Processor %d virtualized\n", (u32)(u64)processor_number); + return 0; +host_status_page_failed: + local_irq_restore(flags); + put_cpu(); + + return -ENOMEM; +} + +static int check_svm_on_cpu(void*) { + return do_rdmsr(MSR_EFER) & EFER_SVME; +} + +static bool check_svm_status(void) { + u32 svm_enabled = 0; + cpus_read_lock(); + u32 cpu; + for_each_online_cpu(cpu) { + svm_enabled |= smp_call_on_cpu(cpu, check_svm_on_cpu, NULL, true); + } + cpus_read_unlock(); + return svm_enabled; +} + + +static int devirtualize_processor(void* processor_number) { + int order = get_order(sizeof(struct ProcessorStatus)); + unsigned long flags; + get_cpu(); + local_irq_save(flags); + + u64 rax = UNLOAD_HV_MAGIC; + u64 rbx, rcx, rdx; + asm volatile("cpuid":"+a"(rax),"=b"(rbx),"=c"(rcx),"=d"(rdx)::"memory"); + struct ProcessorStatus* status = NULL; + + if(rax != UNLOAD_HV_MAGIC) { + status = (struct ProcessorStatus*)rbx; + struct VMCB* guest_vmcb = &status->vmcb; + + do_write_cr3(guest_vmcb->state_area.cr3); + do_write_cr4(guest_vmcb->state_area.cr4); + do_write_cr2(guest_vmcb->state_area.cr2); + do_write_cr0(guest_vmcb->state_area.cr0); + } + + if(!shared_data.prev_svm_enabled) + do_wrmsr(MSR_EFER, do_rdmsr(MSR_EFER) & ~EFER_SVME); + + local_irq_restore(flags); + put_cpu(); + if(status)__free_pages(status->page_ptr, order); + + + pr_info("Processor %d devirtualized\n", (u32)(u64)processor_number); + return 0; +} + +/* called when a Power Management (e.g. suspend) event is about to happen */ +static int handle_pm_notification(struct notifier_block* nb, unsigned long action, void *data) { + + if(action == PM_HIBERNATION_PREPARE || action == PM_SUSPEND_PREPARE) { + /* on suspend or hibernation svm is disabled, so + * all processors need to be devirtualized */ + cpus_read_lock(); + u32 cpu; + for_each_online_cpu(cpu) { + smp_call_on_cpu(cpu, devirtualize_processor, (void*)(u64)cpu, true); + } + cpus_read_unlock(); + /* return the cpuid_fault bit capability to it's previous value */ + if(!shared_data.prev_cpuid_fault_cap) + clear_bit(X86_FEATURE_CPUID_FAULT, + (unsigned long *)(boot_cpu_data.x86_capability)); + } + if(action == PM_POST_HIBERNATION || action == PM_POST_SUSPEND) { + /* revirtualize all processors after suspend or hibernation */ + cpus_read_lock(); + u32 cpu; + for_each_online_cpu(cpu) { + smp_call_on_cpu(cpu, virtualize_processor, (void*)(u64)cpu, true); + } + cpus_read_unlock(); + shared_data.prev_cpuid_fault_cap = test_bit(X86_FEATURE_CPUID_FAULT, + (unsigned long *)(boot_cpu_data.x86_capability)); + set_bit(X86_FEATURE_CPUID_FAULT, + (unsigned long *)(boot_cpu_data.x86_capability)); + } + return 0; +} + +static struct notifier_block pm_notifier = { + .notifier_call = handle_pm_notification +}; + +static int __init init_emulation(void) { + if (!check_svm_support()) { + pr_info("Processor not supported\n"); + return -ENODEV; + } + shared_data.prev_svm_enabled = check_svm_status(); + + if(shared_data.prev_svm_enabled && !ignore_svm_enabled) { + pr_info("SVM already enabled\n"); + return -ENODEV; + } + + shared_data.msrpm_page = alloc_pages(GFP_KERNEL, 1); + if (!shared_data.msrpm_page) + goto msrpm_failed; + shared_data.msrpm_pa = page_to_phys(shared_data.msrpm_page); + + memset(page_address(shared_data.msrpm_page), 0, 0x2000); + unsigned char* section_1_start = (unsigned char*) + page_address(shared_data.msrpm_page); + unsigned char* section_3_start = (unsigned char*) + page_address(shared_data.msrpm_page) + 0x1000; + +#ifdef MSR_K7_HWCR_CPUID_USER_DIS_BIT + set_bit((MSR_K7_HWCR - MSR_PM_BASE3) * 2, + (unsigned long*) section_3_start); + set_bit((MSR_K7_HWCR - MSR_PM_BASE3) * 2 + 1, + (unsigned long*) section_3_start); +#else /* on older kernels intercept the intel register instead */ + set_bit((MSR_MISC_FEATURES_ENABLES - MSR_PM_BASE1) * 2, + (unsigned long*) section_1_start); + set_bit((MSR_MISC_FEATURES_ENABLES - MSR_PM_BASE1) * 2 + 1, + (unsigned long*) section_1_start); +#endif + + cpus_read_lock(); + u32 cpu; + for_each_online_cpu(cpu) { + smp_call_on_cpu(cpu, virtualize_processor, (void*)(u64)cpu, true); + } + cpus_read_unlock(); + shared_data.prev_cpuid_fault_cap = test_bit(X86_FEATURE_CPUID_FAULT, + (unsigned long *)(boot_cpu_data.x86_capability)); + set_bit(X86_FEATURE_CPUID_FAULT, + (unsigned long *)(boot_cpu_data.x86_capability)); + + register_pm_notifier(&pm_notifier); + + return 0; + +msrpm_failed: + return -ENOMEM; +} + +static void __exit deinit_emulation(void) { + unregister_pm_notifier(&pm_notifier); + if(!shared_data.prev_cpuid_fault_cap) + clear_bit(X86_FEATURE_CPUID_FAULT, + (unsigned long *)(boot_cpu_data.x86_capability)); + cpus_read_lock(); + u32 cpu; + for_each_online_cpu(cpu) { + smp_call_on_cpu(cpu, devirtualize_processor, (void*)(u64)cpu, true); + } + + cpus_read_unlock(); + if (shared_data.msrpm_page) + __free_pages(shared_data.msrpm_page, 1); +} + + + +module_init(init_emulation); +module_exit(deinit_emulation); + +MODULE_LICENSE("GPL"); diff --git a/pkgs/cpuid-fault-emulation/source/src/run_vm.S b/pkgs/cpuid-fault-emulation/source/src/run_vm.S new file mode 100644 index 0000000..1fea9ef --- /dev/null +++ b/pkgs/cpuid-fault-emulation/source/src/run_vm.S @@ -0,0 +1,121 @@ +#include +#include +#include + +#define save_to_offset_from(val, off, from) movq val, off -(HOST_STACK_OFFSET + HOST_STACK_SIZE) (from) +#define mov_from_offset_from(off, reg, from) movq off -(HOST_STACK_OFFSET + HOST_STACK_SIZE) (from), reg +#define save_to_offset(val, off) save_to_offset_from(val, off, %rsp) +#define mov_from_offset(off, reg) mov_from_offset_from(off, reg, %rsp) +#define save_to_reg_from(val, REG, from) save_to_offset_from(val, HOST_REGISTER_OFFSET + GUEST_ ## REG ## _OFFSET, from) +#define mov_from_reg_from(REG, reg, from) mov_from_offset_from(HOST_REGISTER_OFFSET + GUEST_ ## REG ## _OFFSET, reg, from) +#define save_to_reg(val, REG) save_to_reg_from(val, REG, %rsp) +#define mov_from_reg(REG, reg) mov_from_reg_from(REG, reg, %rsp) +SYM_CODE_START(run_vm) +#ifdef ENDBR + ENDBR +#endif + leaq HOST_STACK_OFFSET + HOST_STACK_SIZE(%_ASM_ARG1), %rsp + +vmloop: + mov_from_offset(HOST_HOST_VMCB_PA_OFFSET, %rax) + vmsave + + mov_from_offset(HOST_VMCB_PA_OFFSET, %rax) + vmload + + mov_from_reg(RBX, %rbx) + mov_from_reg(RCX, %rcx) + mov_from_reg(RDX, %rdx) + mov_from_reg(RSI, %rsi) + mov_from_reg(RDI, %rdi) + mov_from_reg(RBP, %rbp) + + mov_from_reg(R8, %r8) + mov_from_reg(R9, %r9) + mov_from_reg(R10, %r10) + mov_from_reg(R11, %r11) + mov_from_reg(R12, %r12) + mov_from_reg(R13, %r13) + mov_from_reg(R14, %r14) + mov_from_reg(R15, %r15) + + vmrun + + vmsave + + mov_from_offset(HOST_HOST_VMCB_PA_OFFSET, %rax) + vmload + + save_to_reg(%rbx, RBX) + save_to_reg(%rcx, RCX) + save_to_reg(%rdx, RDX) + save_to_reg(%rsi, RSI) + save_to_reg(%rdi, RDI) + save_to_reg(%rbp, RBP) + + save_to_reg(%r8, R8) + save_to_reg(%r9, R9) + save_to_reg(%r10, R10) + save_to_reg(%r11, R11) + save_to_reg(%r12, R12) + save_to_reg(%r13, R13) + save_to_reg(%r14, R14) + save_to_reg(%r15, R15) + + leaq -HOST_STACK_SIZE(%rsp), %_ASM_ARG1 + + /* Save volatile XMM registers */ + sub $0x80, %rsp + movaps %xmm0, 0x20(%rsp) + movaps %xmm1, 0x30(%rsp) + movaps %xmm2, 0x40(%rsp) + movaps %xmm3, 0x50(%rsp) + movaps %xmm4, 0x60(%rsp) + movaps %xmm5, 0x70(%rsp) + + sub $0x8, %rsp + call handle_vm_exit + add $0x8, %rsp + + /* Restore volatile XMM registers */ + movaps 0x70(%rsp), %xmm5 + movaps 0x60(%rsp), %xmm4 + movaps 0x50(%rsp), %xmm3 + movaps 0x40(%rsp), %xmm2 + movaps 0x30(%rsp), %xmm1 + movaps 0x20(%rsp), %xmm0 + add $0x80, %rsp + + test %rax, %rax + + jz vmloop + + mov_from_reg(RBX, %rbx) /* now holds rflags */ + pushq %rbx + popfq + leaq (%rsp), %rax; + mov_from_reg(RBX, %rbx) + mov_from_reg(RCX, %rcx) + mov_from_reg(RDX, %rdx) + mov_from_reg(RSI, %rsi) + mov_from_reg(RDI, %rdi) + mov_from_reg(RBP, %rbp) + + mov_from_reg(R8, %r8) + mov_from_reg(R9, %r9) + mov_from_reg(R10, %r10) + mov_from_reg(R11, %r11) + mov_from_reg(R12, %r12) + mov_from_reg(R13, %r13) + mov_from_reg(R14, %r14) + mov_from_reg(R15, %r15) + + mov_from_reg(RSP, %rsp) + mov_from_reg_from(RAX, %rax, %rax) /* now holds rip */ + + stgi + pushq %rax + RET + + +SYM_CODE_END(run_vm) From 9bde3e5bc9d70a21086ff781835f0aff4f7e3cbe Mon Sep 17 00:00:00 2001 From: KeksNino Date: Sat, 25 Jul 2026 17:40:56 +0200 Subject: [PATCH 21/25] remove dms --- flake.lock | 55 ------------------------------------------- flake.nix | 7 +----- home-manager/home.nix | 3 --- 3 files changed, 1 insertion(+), 64 deletions(-) diff --git a/flake.lock b/flake.lock index 4a2f464..269d16a 100644 --- a/flake.lock +++ b/flake.lock @@ -15,60 +15,6 @@ "type": "github" } }, - "dank-qml-common": { - "flake": false, - "locked": { - "lastModified": 1784935106, - "narHash": "sha256-aVgOBRynme6XNKYCZlf/oCjPDZFwddyUQPRRkEupC3c=", - "owner": "AvengeMedia", - "repo": "dank-qml-common", - "rev": "a172b39841d8f42bac46ac133b76cade1fae91b4", - "type": "github" - }, - "original": { - "owner": "AvengeMedia", - "repo": "dank-qml-common", - "type": "github" - } - }, - "dms": { - "inputs": { - "dank-qml-common": "dank-qml-common", - "flake-compat": "flake-compat", - "nixpkgs": [ - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1784936204, - "narHash": "sha256-XNbDvIaPzqqIpgJynqSADAj7Yf8KlGJTo5S/fQJUBxs=", - "owner": "AvengeMedia", - "repo": "DankMaterialShell", - "rev": "8bb7396362357650a80dcc8d81407095c91c7dcf", - "type": "github" - }, - "original": { - "owner": "AvengeMedia", - "repo": "DankMaterialShell", - "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-parts": { "inputs": { "nixpkgs-lib": "nixpkgs-lib" @@ -339,7 +285,6 @@ }, "root": { "inputs": { - "dms": "dms", "gsr-ui": "gsr-ui", "home-manager": "home-manager", "millennium": "millennium", diff --git a/flake.nix b/flake.nix index 5f37228..9e39304 100644 --- a/flake.nix +++ b/flake.nix @@ -5,10 +5,6 @@ url = "github:nix-community/home-manager"; inputs.nixpkgs.follows = "nixpkgs"; }; - dms = { - url = "github:AvengeMedia/DankMaterialShell"; - inputs.nixpkgs.follows = "nixpkgs"; - }; sls-steam = { url = "github:AceSLS/SLSsteam"; inputs.nixpkgs.follows = "nixpkgs"; @@ -36,7 +32,6 @@ sls-steam, yazi, millennium, - dms, noctalia, gsr-ui, ... @@ -72,7 +67,7 @@ home-manager.users.user = import ./home-manager/home.nix; home-manager.extraSpecialArgs = { - inherit dms noctalia; + inherit noctalia; }; home-manager.backupFileExtension = "backup"; diff --git a/home-manager/home.nix b/home-manager/home.nix index d1cf8d4..7bfd815 100644 --- a/home-manager/home.nix +++ b/home-manager/home.nix @@ -1,14 +1,12 @@ { pkgs, config, - dms, noctalia, ... }: { imports = [ ./mpd.nix - dms.homeModules.dank-material-shell noctalia.homeModules.default ]; @@ -95,7 +93,6 @@ services.mpdris2.enable = true; programs.fastfetch.enable = true; programs.prismlauncher.enable = true; - programs.dank-material-shell.enable = true; programs.fd.enable = true; programs.uv.enable = true; programs.satty.enable = true; From 86762e4fe82820bacda0b61ab1d65653bf72d9ef Mon Sep 17 00:00:00 2001 From: KeksNino Date: Tue, 28 Jul 2026 14:07:23 +0200 Subject: [PATCH 22/25] update --- configuration.nix | 1 - flake.lock | 21 +++++++++++++++++++++ flake.nix | 12 +++++++----- home-manager/home.nix | 20 +++++++++++++++++++- packages.nix | 8 +++----- 5 files changed, 50 insertions(+), 12 deletions(-) diff --git a/configuration.nix b/configuration.nix index 8f11b9f..8beb409 100644 --- a/configuration.nix +++ b/configuration.nix @@ -105,7 +105,6 @@ in networking.hostName = "nixos"; # Define your hostname. networking.firewall.enable = false; - networking.networkmanager.enable = true; # Set your time zone. diff --git a/flake.lock b/flake.lock index 269d16a..75f1f4a 100644 --- a/flake.lock +++ b/flake.lock @@ -169,6 +169,26 @@ "type": "github" } }, + "nix-index-database": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1784440659, + "narHash": "sha256-Q5kNLlWngt7TaIIZoxDKWMHjiSaNRVqr70FqWCRRfr4=", + "owner": "nix-community", + "repo": "nix-index-database", + "rev": "4f8d52a3598b0dc7db7a5e7b419e3edd9d1ecfdb", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nix-index-database", + "type": "github" + } + }, "nixpkgs": { "locked": { "lastModified": 1781577229, @@ -288,6 +308,7 @@ "gsr-ui": "gsr-ui", "home-manager": "home-manager", "millennium": "millennium", + "nix-index-database": "nix-index-database", "nixpkgs": "nixpkgs_2", "noctalia": "noctalia", "sls-steam": "sls-steam", diff --git a/flake.nix b/flake.nix index 9e39304..2363909 100644 --- a/flake.nix +++ b/flake.nix @@ -21,6 +21,10 @@ url = "github:rPlakama/gsr-ui-nix"; inputs.nixpkgs.follows = "nixpkgs"; }; + nix-index-database = { + url = "github:nix-community/nix-index-database"; + inputs.nixpkgs.follows = "nixpkgs"; + }; }; outputs = @@ -34,6 +38,7 @@ millennium, noctalia, gsr-ui, + nix-index-database, ... }: let @@ -51,23 +56,20 @@ home-manager.nixosModules.home-manager xremap-flake.nixosModules.default gsr-ui.nixosModules.default + nix-index-database.nixosModules.default { nixpkgs.overlays = [ yazi.overlays.default millennium.overlays.default ]; - environment.systemPackages = [ - zen-browser.packages.${system}.default - ]; - home-manager.useGlobalPkgs = true; home-manager.useUserPackages = true; home-manager.users.user = import ./home-manager/home.nix; home-manager.extraSpecialArgs = { - inherit noctalia; + inherit noctalia zen-browser; }; home-manager.backupFileExtension = "backup"; diff --git a/home-manager/home.nix b/home-manager/home.nix index 7bfd815..1a34e05 100644 --- a/home-manager/home.nix +++ b/home-manager/home.nix @@ -2,12 +2,14 @@ pkgs, config, noctalia, + zen-browser, ... }: { imports = [ ./mpd.nix noctalia.homeModules.default + zen-browser.homeModules.beta ]; # programs.noctalia.enable = true; @@ -27,6 +29,11 @@ enable = true; defaultApplications = { "inode/directory" = [ "nemo.desktop" ]; + "image/*" = [ "imv-dir.desktop" ]; + "image/gif" = [ "imv-dir.desktop" ]; + "image/jpeg" = [ "imv-dir.desktop" ]; + "image/png" = [ "imv-dir.desktop" ]; + "image/webp" = [ "imv-dir.desktop" ]; }; }; @@ -47,6 +54,11 @@ size = 20; }; + programs.zen-browser = { + enable = true; + setAsDefaultBrowser = true; + }; + programs.yazi.enable = true; programs.yazi.enableFishIntegration = true; @@ -83,13 +95,15 @@ programs.distrobox.enable = true; services.podman.enable = true; + programs.rofi.enable = true; + programs.rofi.plugins = [ pkgs.rofi-calc ]; + services.cliphist.enable = true; programs.btop.enable = true; services.udiskie.enable = true; programs.cava.enable = true; programs.equibop.enable = true; services.awww.enable = true; - programs.rofi.enable = true; services.mpdris2.enable = true; programs.fastfetch.enable = true; programs.prismlauncher.enable = true; @@ -100,6 +114,9 @@ programs.obsidian.enable = true; programs.gcc.enable = true; programs.mpv.enable = true; + programs.imv.enable = true; + programs.hexchat.enable = true; + programs.aria2.enable = true; programs.qutebrowser = { enable = true; settings = { @@ -107,6 +124,7 @@ auto_save.session = true; scrolling.smooth = true; content.autoplay = false; + content.blocking.method = "both"; url.default_page = "https://priv.au"; }; extraConfig = '' diff --git a/packages.nix b/packages.nix index 4140870..13410f5 100644 --- a/packages.nix +++ b/packages.nix @@ -19,7 +19,6 @@ python3 basedpyright waypaper - rofi-calc renoise pwvucontrol lsof @@ -30,17 +29,14 @@ trash-cli spek ffmpeg - vlc # wine ripgrep nemo-with-extensions - unrar papirus-icon-theme rust-analyzer scdl motrix-next onefetch - aria2 smartmontools qpwgraph pipewire.jack @@ -57,10 +53,12 @@ qt6Packages.qt6ct kdePackages.breeze kdePackages.breeze.qt5 - hexchat gnumake samrewritten gale + losslesscut + tree + stow ]; fonts.packages = with pkgs; [ From f542d981e6d4f2e8349c76b20967d1c53451f47a Mon Sep 17 00:00:00 2001 From: KeksNino Date: Tue, 28 Jul 2026 21:04:29 +0200 Subject: [PATCH 23/25] add git gpg key and temporarily switch to local slssteam --- configuration.nix | 35 ++++++++++++++++++--- flake.lock | 54 ++++++++++++++++---------------- flake.nix | 3 ++ home-manager/home.nix | 1 + package.nix | 71 +++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 132 insertions(+), 32 deletions(-) create mode 100644 package.nix diff --git a/configuration.nix b/configuration.nix index 8beb409..eb8495f 100644 --- a/configuration.nix +++ b/configuration.nix @@ -168,6 +168,7 @@ in }; virtualisation.docker.enable = true; + services.gvfs.enable = true; services.goxlr-utility.enable = true; services.lact.enable = true; services.rsync.enable = true; @@ -179,6 +180,10 @@ in programs.git = { enable = true; config = { + signing = { + key = "51AE8C6E80E6AF3BDFBE2BF804B31D181764898D"; + signByDefault = true; + }; user = { name = "KeksNino"; email = "KeksNino@proton.me"; @@ -189,17 +194,37 @@ in push = { autoSetupRemote = true; }; + commit = { + gpgsign = true; + }; + tag = { + gpgsign = true; + }; }; }; + programs.gnupg.agent = { + enable = true; + pinentryPackage = pkgs.pinentry-curses; + }; + + # programs.steam = { + # enable = true; + # package = pkgs.millennium-steam.override { + # extraEnv = { + # LD_AUDIT = "${ + # sls-steam.packages.${pkgs.stdenv.hostPlatform.system}.sls-steam + # }/library-inject.so:${ + # sls-steam.packages.${pkgs.stdenv.hostPlatform.system}.sls-steam + # }/SLSsteam.so"; + # }; + # }; + # }; + programs.steam = { enable = true; package = pkgs.millennium-steam.override { extraEnv = { - LD_AUDIT = "${ - sls-steam.packages.${pkgs.stdenv.hostPlatform.system}.sls-steam - }/library-inject.so:${ - sls-steam.packages.${pkgs.stdenv.hostPlatform.system}.sls-steam - }/SLSsteam.so"; + LD_AUDIT = "/home/user/Downloads/SLSsteam 20260722152506/bin/library-inject.so:/home/user/Downloads/SLSsteam 20260722152506/bin/SLSsteam.so"; }; }; }; diff --git a/flake.lock b/flake.lock index 75f1f4a..bebbc73 100644 --- a/flake.lock +++ b/flake.lock @@ -77,11 +77,11 @@ ] }, "locked": { - "lastModified": 1784926331, - "narHash": "sha256-EiyJny6oq41fes/x+vWmmzlbjZxwy+8TtbaQqKXyRgY=", + "lastModified": 1785085647, + "narHash": "sha256-VerKUIpQHGnXgpmRXzh767X0BJNjpACWdVp391t8n1s=", "owner": "rPlakama", "repo": "gsr-ui-nix", - "rev": "e463d47ca8724de7a83c394d9e323c6d9c449508", + "rev": "1f9a46bcdde0e805ced86a0e995f1449f8f7a12f", "type": "github" }, "original": { @@ -97,11 +97,11 @@ ] }, "locked": { - "lastModified": 1784913159, - "narHash": "sha256-JWq0BfjO4ktpH5USfQNQzdvHpIDT8fSKD5K7LvdMRFs=", + "lastModified": 1785239295, + "narHash": "sha256-aYFoftXjm7Df7CAoR0XoMQjJ9rTZ/l9d1jr9EqD7sHM=", "owner": "nix-community", "repo": "home-manager", - "rev": "079a3b5d1aa6a719920a51316253b7d6dd22738d", + "rev": "42bb40f7aaab63a107b64a20c4a4ade6550758d0", "type": "github" }, "original": { @@ -138,11 +138,11 @@ }, "locked": { "dir": "packages/nix", - "lastModified": 1784860807, - "narHash": "sha256-nznQFS9H8er9bTwxKG4LSa2D0lGsxIPUqDuWa1rbJkA=", + "lastModified": 1785163789, + "narHash": "sha256-nHTGaYBPKqOY4SPTqRJNX8MfV/GuIjgPCUxDHHeinGc=", "owner": "SteamClientHomebrew", "repo": "Millennium", - "rev": "266e41ea8924c41e51145ae986a9bdf68f9415d9", + "rev": "1375ceda332171907e64e9a9324f9a869f715d6c", "type": "github" }, "original": { @@ -176,11 +176,11 @@ ] }, "locked": { - "lastModified": 1784440659, - "narHash": "sha256-Q5kNLlWngt7TaIIZoxDKWMHjiSaNRVqr70FqWCRRfr4=", + "lastModified": 1785046085, + "narHash": "sha256-UiK+mmZJuLWQVhJ5b2wDzogIYWAesyRm6LA3h3Ulh3Y=", "owner": "nix-community", "repo": "nix-index-database", - "rev": "4f8d52a3598b0dc7db7a5e7b419e3edd9d1ecfdb", + "rev": "11665045df8b9938ef811a3bfdc65cffb02b4b70", "type": "github" }, "original": { @@ -222,11 +222,11 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 1784992771, - "narHash": "sha256-xEE5I69+WNqcs7Z0v5D9xwcHYRbvC8k/fKBmlUBdCp4=", + "lastModified": 1785239275, + "narHash": "sha256-T/qG4MmyCmFzqo9YMQwkjK7va3Tukr2OZI4xkcUSCqQ=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "37bfb33419c6e367e8bb6f44041eaecf953b5236", + "rev": "f536d5c00cd7ad28be33108ec9d67fe50b28e2a2", "type": "github" }, "original": { @@ -290,11 +290,11 @@ ] }, "locked": { - "lastModified": 1784993591, - "narHash": "sha256-4/evHMKmkO482OWfvaPk4uwyvUJxrJWcxXhNHqMQbDU=", + "lastModified": 1785240175, + "narHash": "sha256-mv6ZTvqozDYvs8aygyo0q76kWoi+7mcLWFijWVDknCU=", "owner": "noctalia-dev", "repo": "noctalia", - "rev": "62975eea9ea64171c35382d904c7564cd3d4077b", + "rev": "c73f168db529b0a5a37e3c13442637848b71658a", "type": "github" }, "original": { @@ -345,11 +345,11 @@ ] }, "locked": { - "lastModified": 1784795486, - "narHash": "sha256-0tdz12pbTWs+V7eIMpv6foT/qN4B1tuxs5LLc8b3A5M=", + "lastModified": 1785224226, + "narHash": "sha256-Aj0ZA0boiYSPrvN+5ECpcYmx8OFEF+M1OoVY7ko0H/E=", "owner": "AceSLS", "repo": "SLSsteam", - "rev": "6725ff148090976a32cb4b717c1acfe48f95b48f", + "rev": "4f7b79143a47a8ecb97c323745c7593d55fd6f20", "type": "github" }, "original": { @@ -433,11 +433,11 @@ "rust-overlay": "rust-overlay" }, "locked": { - "lastModified": 1784975066, - "narHash": "sha256-EoSjKF8AMBbtupTmen2n+CEJnWVW2ynSYIMNHYTTT2s=", + "lastModified": 1785208381, + "narHash": "sha256-oHCAhBClJmg2XTKwHNAyfTLnUXpwPk0Qq4oc3UiYgBA=", "owner": "sxyazi", "repo": "yazi", - "rev": "533d1aa3fbb9b388745c72d34d377ff8e8326d84", + "rev": "e58022b9aafc8dabf586e2cc29b79a230071716f", "type": "github" }, "original": { @@ -452,11 +452,11 @@ "nixpkgs": "nixpkgs_5" }, "locked": { - "lastModified": 1784985989, - "narHash": "sha256-Mz4G81HXJlUtHoJtA31D+Ob7uma2BX7E/y7F9QazuFc=", + "lastModified": 1785224333, + "narHash": "sha256-8DNJUVM10ktK02V9ZIV064CH+fuPF272VCAZBn6arig=", "owner": "0xc000022070", "repo": "zen-browser-flake", - "rev": "a8f9b6d014c9cfe0615dccb2bc7808713f6e62c2", + "rev": "5f1a4be4d280e1ae06d61a75775a234b1714da3f", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 2363909..36da0c3 100644 --- a/flake.nix +++ b/flake.nix @@ -59,6 +59,9 @@ nix-index-database.nixosModules.default { nixpkgs.overlays = [ + (final: prev: { + samrewritten = final.callPackage ./package.nix {}; + }) yazi.overlays.default millennium.overlays.default ]; diff --git a/home-manager/home.nix b/home-manager/home.nix index 1a34e05..c603755 100644 --- a/home-manager/home.nix +++ b/home-manager/home.nix @@ -98,6 +98,7 @@ programs.rofi.enable = true; programs.rofi.plugins = [ pkgs.rofi-calc ]; + services.polkit-gnome.enable = true; services.cliphist.enable = true; programs.btop.enable = true; services.udiskie.enable = true; diff --git a/package.nix b/package.nix new file mode 100644 index 0000000..5cdf679 --- /dev/null +++ b/package.nix @@ -0,0 +1,71 @@ +{ + lib, + rustPlatform, + fetchFromGitHub, + nix-update-script, + # Deps + gdk-pixbuf, + glib, + graphene, + gtk4, + openssl, + pango, + pkg-config, + wrapGAppsHook4, +}: +rustPlatform.buildRustPackage (finalAttrs: { + pname = "samrewritten"; + version = "1.4.5"; + + src = fetchFromGitHub { + owner = "PaulCombal"; + repo = "SamRewritten"; + tag = "v${finalAttrs.version}"; + hash = "sha256-sSZC7yN/WuMYkdcPmHyvasaWRFzppSxmlS1bYLZGvyM="; + }; + + cargoHash = "sha256-YKiICPP6z9lZWqdoPOYRq+0mmz7jY3/eJd7XzN8Vmnk="; + + # Tests require network access and a running Steam client. Skipping. + doCheck = false; + + nativeBuildInputs = [ + glib + pkg-config + wrapGAppsHook4 + ]; + + buildInputs = [ + gdk-pixbuf + glib + graphene + gtk4 + openssl + pango + ]; + + postInstall = '' + install -Dm644 assets/org.samrewritten.SamRewritten.gschema.xml \ + $out/share/glib-2.0/schemas/org.samrewritten.SamRewritten.gschema.xml + glib-compile-schemas $out/share/glib-2.0/schemas + cat package/samrewritten.desktop + substituteInPlace package/samrewritten.desktop \ + --replace-fail "Exec=/usr/bin/samrewritten" "Exec=samrewritten" + install -Dm644 package/samrewritten.desktop \ + $out/share/applications/samrewritten.desktop + ''; + + env.PKG_CONFIG_PATH = "${openssl.dev}/lib/pkgconfig"; + + passthru.updateScript = nix-update-script { }; + + meta = { + description = "Modern Steam achievements manager for Windows and Linux"; + mainProgram = "samrewritten"; + homepage = "https://github.com/PaulCombal/SamRewritten"; + changelog = "https://github.com/PaulCombal/SamRewritten/releases"; + license = lib.licenses.gpl3Only; + maintainers = with lib.maintainers; [ ludovicopiero ]; + platforms = [ "x86_64-linux" ]; + }; +}) From e221003c18cb62df43e042b57be94ad8080c9fc4 Mon Sep 17 00:00:00 2001 From: KeksNino Date: Tue, 28 Jul 2026 23:14:19 +0200 Subject: [PATCH 24/25] fix formatting --- configuration.nix | 8 +-- flake.nix | 2 +- package.nix | 71 -------------------------- pkgs/cpuid-fault-emulation/default.nix | 12 ++--- 4 files changed, 11 insertions(+), 82 deletions(-) delete mode 100644 package.nix diff --git a/configuration.nix b/configuration.nix index eb8495f..e2f1aee 100644 --- a/configuration.nix +++ b/configuration.nix @@ -231,8 +231,9 @@ in programs.nix-ld = { enable = true; - libraries = options.programs.nix-ld.libraries.default ++ ( - with pkgs; [ + libraries = + options.programs.nix-ld.libraries.default + ++ (with pkgs; [ dbus # libdbus-1.so.3 fontconfig # libfontconfig.so.1 freetype # libfreetype.so.6 @@ -241,8 +242,7 @@ in libxkbcommon # libxkbcommon.so.0 libx11 # libX11.so.6 wayland - ] - ); + ]); }; services.pipewire = { diff --git a/flake.nix b/flake.nix index 36da0c3..378252e 100644 --- a/flake.nix +++ b/flake.nix @@ -60,7 +60,7 @@ { nixpkgs.overlays = [ (final: prev: { - samrewritten = final.callPackage ./package.nix {}; + samrewritten = final.callPackage ./package.nix { }; }) yazi.overlays.default millennium.overlays.default diff --git a/package.nix b/package.nix deleted file mode 100644 index 5cdf679..0000000 --- a/package.nix +++ /dev/null @@ -1,71 +0,0 @@ -{ - lib, - rustPlatform, - fetchFromGitHub, - nix-update-script, - # Deps - gdk-pixbuf, - glib, - graphene, - gtk4, - openssl, - pango, - pkg-config, - wrapGAppsHook4, -}: -rustPlatform.buildRustPackage (finalAttrs: { - pname = "samrewritten"; - version = "1.4.5"; - - src = fetchFromGitHub { - owner = "PaulCombal"; - repo = "SamRewritten"; - tag = "v${finalAttrs.version}"; - hash = "sha256-sSZC7yN/WuMYkdcPmHyvasaWRFzppSxmlS1bYLZGvyM="; - }; - - cargoHash = "sha256-YKiICPP6z9lZWqdoPOYRq+0mmz7jY3/eJd7XzN8Vmnk="; - - # Tests require network access and a running Steam client. Skipping. - doCheck = false; - - nativeBuildInputs = [ - glib - pkg-config - wrapGAppsHook4 - ]; - - buildInputs = [ - gdk-pixbuf - glib - graphene - gtk4 - openssl - pango - ]; - - postInstall = '' - install -Dm644 assets/org.samrewritten.SamRewritten.gschema.xml \ - $out/share/glib-2.0/schemas/org.samrewritten.SamRewritten.gschema.xml - glib-compile-schemas $out/share/glib-2.0/schemas - cat package/samrewritten.desktop - substituteInPlace package/samrewritten.desktop \ - --replace-fail "Exec=/usr/bin/samrewritten" "Exec=samrewritten" - install -Dm644 package/samrewritten.desktop \ - $out/share/applications/samrewritten.desktop - ''; - - env.PKG_CONFIG_PATH = "${openssl.dev}/lib/pkgconfig"; - - passthru.updateScript = nix-update-script { }; - - meta = { - description = "Modern Steam achievements manager for Windows and Linux"; - mainProgram = "samrewritten"; - homepage = "https://github.com/PaulCombal/SamRewritten"; - changelog = "https://github.com/PaulCombal/SamRewritten/releases"; - license = lib.licenses.gpl3Only; - maintainers = with lib.maintainers; [ ludovicopiero ]; - platforms = [ "x86_64-linux" ]; - }; -}) diff --git a/pkgs/cpuid-fault-emulation/default.nix b/pkgs/cpuid-fault-emulation/default.nix index b0e46d1..f98194e 100644 --- a/pkgs/cpuid-fault-emulation/default.nix +++ b/pkgs/cpuid-fault-emulation/default.nix @@ -1,28 +1,28 @@ { stdenv, kernel }: - + stdenv.mkDerivation { pname = "cpuid_fault_emulation"; version = "0.1"; - + src = ./source; - + nativeBuildInputs = kernel.moduleBuildDependencies; hardeningDisable = [ "pic" "format" ]; - + # Patch the hardcoded host paths to point into the Nix store postPatch = '' substituteInPlace Makefile \ --replace '/lib/modules/$(KERNEL)/build' '${kernel.dev}/lib/modules/${kernel.modDirVersion}/build' \ --replace '$(shell uname -r)' '${kernel.modDirVersion}' ''; - + installPhase = '' install -D cpuid_fault_emulation.ko \ $out/lib/modules/${kernel.modDirVersion}/extra/cpuid_fault_emulation.ko ''; - + meta.platforms = [ "x86_64-linux" ]; } From de0d6b0d7e29c8f845923b565f6f3c5e839694b2 Mon Sep 17 00:00:00 2001 From: KeksNino Date: Wed, 29 Jul 2026 21:04:41 +0200 Subject: [PATCH 25/25] remove noctalia and nix-index-database + add bcdl-free flake --- configuration.nix | 17 +----- flake.lock | 128 ++++++++++++++++++++---------------------- flake.nix | 20 ++----- home-manager/home.nix | 5 -- 4 files changed, 68 insertions(+), 102 deletions(-) diff --git a/configuration.nix b/configuration.nix index e2f1aee..2d425f3 100644 --- a/configuration.nix +++ b/configuration.nix @@ -207,24 +207,13 @@ in pinentryPackage = pkgs.pinentry-curses; }; - # programs.steam = { - # enable = true; - # package = pkgs.millennium-steam.override { - # extraEnv = { - # LD_AUDIT = "${ - # sls-steam.packages.${pkgs.stdenv.hostPlatform.system}.sls-steam - # }/library-inject.so:${ - # sls-steam.packages.${pkgs.stdenv.hostPlatform.system}.sls-steam - # }/SLSsteam.so"; - # }; - # }; - # }; - programs.steam = { enable = true; package = pkgs.millennium-steam.override { extraEnv = { - LD_AUDIT = "/home/user/Downloads/SLSsteam 20260722152506/bin/library-inject.so:/home/user/Downloads/SLSsteam 20260722152506/bin/SLSsteam.so"; + LD_AUDIT = "${sls-steam.packages.${pkgs.stdenv.hostPlatform.system}.sls-steam}/library-inject.so:${ + sls-steam.packages.${pkgs.stdenv.hostPlatform.system}.sls-steam + }/SLSsteam.so"; }; }; }; diff --git a/flake.lock b/flake.lock index bebbc73..e9974aa 100644 --- a/flake.lock +++ b/flake.lock @@ -1,5 +1,23 @@ { "nodes": { + "bcdl-free": { + "inputs": { + "nixpkgs": "nixpkgs" + }, + "locked": { + "lastModified": 1785350661, + "narHash": "sha256-IEFWX9+OQkvYry8ODdVmRZkD8K0WiPVLRAo/GItzBJs=", + "ref": "refs/heads/main", + "rev": "8b9fa0ef8047861ca1b8959afdf8079b39a64d53", + "revCount": 74, + "type": "git", + "url": "https://git.pizzasucht.net/KeksNino/free-bandcamp-downloader" + }, + "original": { + "type": "git", + "url": "https://git.pizzasucht.net/KeksNino/free-bandcamp-downloader" + } + }, "crane": { "locked": { "lastModified": 1766774972, @@ -97,11 +115,11 @@ ] }, "locked": { - "lastModified": 1785239295, - "narHash": "sha256-aYFoftXjm7Df7CAoR0XoMQjJ9rTZ/l9d1jr9EqD7sHM=", + "lastModified": 1785306346, + "narHash": "sha256-DScBkW0fOgpGPK2trNoX3ryLTlaC14+gglFo/BhGJ4g=", "owner": "nix-community", "repo": "home-manager", - "rev": "42bb40f7aaab63a107b64a20c4a4ade6550758d0", + "rev": "e705714e918c3b11affcdd15db2cbe3a070420a0", "type": "github" }, "original": { @@ -134,7 +152,7 @@ "millennium": { "inputs": { "millennium-src": "millennium-src", - "nixpkgs": "nixpkgs" + "nixpkgs": "nixpkgs_2" }, "locked": { "dir": "packages/nix", @@ -169,39 +187,18 @@ "type": "github" } }, - "nix-index-database": { - "inputs": { - "nixpkgs": [ - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1785046085, - "narHash": "sha256-UiK+mmZJuLWQVhJ5b2wDzogIYWAesyRm6LA3h3Ulh3Y=", - "owner": "nix-community", - "repo": "nix-index-database", - "rev": "11665045df8b9938ef811a3bfdc65cffb02b4b70", - "type": "github" - }, - "original": { - "owner": "nix-community", - "repo": "nix-index-database", - "type": "github" - } - }, "nixpkgs": { "locked": { - "lastModified": 1781577229, - "narHash": "sha256-lrp67w8AulE9Ks53n27I45ADSzbOCn4H+CNW1Ck8B+8=", - "owner": "nixos", + "lastModified": 1785350410, + "narHash": "sha256-wXYrsdit8Z54aOAUf7/83LDhkY9+RgSuFBO/rFJeHb8=", + "owner": "NixOS", "repo": "nixpkgs", - "rev": "567a49d1913ce81ac6e9582e3553dd90a955875f", + "rev": "00d4d9bc4d406965d1e0081300dd8c854fd4ba11", "type": "github" }, "original": { - "owner": "nixos", + "owner": "NixOS", "repo": "nixpkgs", - "rev": "567a49d1913ce81ac6e9582e3553dd90a955875f", "type": "github" } }, @@ -222,11 +219,27 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 1785239275, - "narHash": "sha256-T/qG4MmyCmFzqo9YMQwkjK7va3Tukr2OZI4xkcUSCqQ=", + "lastModified": 1781577229, + "narHash": "sha256-lrp67w8AulE9Ks53n27I45ADSzbOCn4H+CNW1Ck8B+8=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "567a49d1913ce81ac6e9582e3553dd90a955875f", + "type": "github" + }, + "original": { + "owner": "nixos", + "repo": "nixpkgs", + "rev": "567a49d1913ce81ac6e9582e3553dd90a955875f", + "type": "github" + } + }, + "nixpkgs_3": { + "locked": { + "lastModified": 1785332987, + "narHash": "sha256-Eiw4ie++bC7tDWyBEZmcbEeKv1xv0UAihkVTjD4C5VM=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "f536d5c00cd7ad28be33108ec9d67fe50b28e2a2", + "rev": "97478ef76c1f4c40b12fd4a42c1feba41e60650d", "type": "github" }, "original": { @@ -235,7 +248,7 @@ "type": "github" } }, - "nixpkgs_3": { + "nixpkgs_4": { "locked": { "lastModified": 1767026758, "narHash": "sha256-7fsac/f7nh/VaKJ/qm3I338+wAJa/3J57cOGpXi0Sbg=", @@ -251,7 +264,7 @@ "type": "github" } }, - "nixpkgs_4": { + "nixpkgs_5": { "locked": { "lastModified": 1783279667, "narHash": "sha256-/NAkDSsve+GNM0Bt6tleJdCGfsTlK89nPjkVOzZMo0s=", @@ -267,7 +280,7 @@ "type": "github" } }, - "nixpkgs_5": { + "nixpkgs_6": { "locked": { "lastModified": 1784007870, "narHash": "sha256-djcLt/JJphyNt4eDY9XTly+/WbCK5lqWq9lSgCmJkkQ=", @@ -283,34 +296,13 @@ "type": "github" } }, - "noctalia": { - "inputs": { - "nixpkgs": [ - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1785240175, - "narHash": "sha256-mv6ZTvqozDYvs8aygyo0q76kWoi+7mcLWFijWVDknCU=", - "owner": "noctalia-dev", - "repo": "noctalia", - "rev": "c73f168db529b0a5a37e3c13442637848b71658a", - "type": "github" - }, - "original": { - "owner": "noctalia-dev", - "repo": "noctalia", - "type": "github" - } - }, "root": { "inputs": { + "bcdl-free": "bcdl-free", "gsr-ui": "gsr-ui", "home-manager": "home-manager", "millennium": "millennium", - "nix-index-database": "nix-index-database", - "nixpkgs": "nixpkgs_2", - "noctalia": "noctalia", + "nixpkgs": "nixpkgs_3", "sls-steam": "sls-steam", "xremap-flake": "xremap-flake", "yazi": "yazi", @@ -345,11 +337,11 @@ ] }, "locked": { - "lastModified": 1785224226, - "narHash": "sha256-Aj0ZA0boiYSPrvN+5ECpcYmx8OFEF+M1OoVY7ko0H/E=", + "lastModified": 1785275929, + "narHash": "sha256-3IbhTuHEqh2tokPGNKnv6x0HcsjOu3hk1MbLYRtzyRQ=", "owner": "AceSLS", "repo": "SLSsteam", - "rev": "4f7b79143a47a8ecb97c323745c7593d55fd6f20", + "rev": "1906382a482f35b2bc9b124f3849538ab432e4f3", "type": "github" }, "original": { @@ -409,7 +401,7 @@ "inputs": { "crane": "crane", "flake-parts": "flake-parts", - "nixpkgs": "nixpkgs_3", + "nixpkgs": "nixpkgs_4", "xremap": "xremap" }, "locked": { @@ -429,15 +421,15 @@ "yazi": { "inputs": { "flake-utils": "flake-utils_2", - "nixpkgs": "nixpkgs_4", + "nixpkgs": "nixpkgs_5", "rust-overlay": "rust-overlay" }, "locked": { - "lastModified": 1785208381, - "narHash": "sha256-oHCAhBClJmg2XTKwHNAyfTLnUXpwPk0Qq4oc3UiYgBA=", + "lastModified": 1785301727, + "narHash": "sha256-Z9g04KWv8aEowWW+QIiADE6ct36oIZmrykTzEh5sQ4M=", "owner": "sxyazi", "repo": "yazi", - "rev": "e58022b9aafc8dabf586e2cc29b79a230071716f", + "rev": "319f90e0eab185a231eef5562215ba322e320286", "type": "github" }, "original": { @@ -449,7 +441,7 @@ "zen-browser": { "inputs": { "home-manager": "home-manager_2", - "nixpkgs": "nixpkgs_5" + "nixpkgs": "nixpkgs_6" }, "locked": { "lastModified": 1785224333, diff --git a/flake.nix b/flake.nix index 378252e..2e5f9ee 100644 --- a/flake.nix +++ b/flake.nix @@ -9,10 +9,6 @@ url = "github:AceSLS/SLSsteam"; inputs.nixpkgs.follows = "nixpkgs"; }; - noctalia = { - url = "github:noctalia-dev/noctalia"; - inputs.nixpkgs.follows = "nixpkgs"; - }; zen-browser.url = "github:0xc000022070/zen-browser-flake"; xremap-flake.url = "github:xremap/nix-flake"; yazi.url = "github:sxyazi/yazi"; @@ -21,10 +17,7 @@ url = "github:rPlakama/gsr-ui-nix"; inputs.nixpkgs.follows = "nixpkgs"; }; - nix-index-database = { - url = "github:nix-community/nix-index-database"; - inputs.nixpkgs.follows = "nixpkgs"; - }; + bcdl-free.url = "git+https://git.pizzasucht.net/KeksNino/free-bandcamp-downloader"; }; outputs = @@ -36,9 +29,8 @@ sls-steam, yazi, millennium, - noctalia, gsr-ui, - nix-index-database, + bcdl-free, ... }: let @@ -56,23 +48,21 @@ home-manager.nixosModules.home-manager xremap-flake.nixosModules.default gsr-ui.nixosModules.default - nix-index-database.nixosModules.default { nixpkgs.overlays = [ - (final: prev: { - samrewritten = final.callPackage ./package.nix { }; - }) yazi.overlays.default millennium.overlays.default ]; + environment.systemPackages = [ bcdl-free.packages.${system}.default ]; + home-manager.useGlobalPkgs = true; home-manager.useUserPackages = true; home-manager.users.user = import ./home-manager/home.nix; home-manager.extraSpecialArgs = { - inherit noctalia zen-browser; + inherit zen-browser; }; home-manager.backupFileExtension = "backup"; diff --git a/home-manager/home.nix b/home-manager/home.nix index c603755..6def3e2 100644 --- a/home-manager/home.nix +++ b/home-manager/home.nix @@ -1,19 +1,15 @@ { pkgs, config, - noctalia, zen-browser, ... }: { imports = [ ./mpd.nix - noctalia.homeModules.default zen-browser.homeModules.beta ]; - # programs.noctalia.enable = true; - home.username = "user"; home.homeDirectory = "/home/user"; @@ -116,7 +112,6 @@ programs.gcc.enable = true; programs.mpv.enable = true; programs.imv.enable = true; - programs.hexchat.enable = true; programs.aria2.enable = true; programs.qutebrowser = { enable = true;