commit 6b7e2f278d082fd4a1875766189b860f2657ce8c Author: Abigail Freeman Date: Mon Jul 7 23:54:50 2025 -0400 Initial vr machine commit diff --git a/combined-bsb-6-10.patch b/combined-bsb-6-10.patch new file mode 100644 index 0000000..f9002d4 --- /dev/null +++ b/combined-bsb-6-10.patch @@ -0,0 +1,241 @@ +diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c +index 3b4065099..639699e3b 100644 +--- a/drivers/gpu/drm/drm_edid.c ++++ b/drivers/gpu/drm/drm_edid.c +@@ -189,6 +189,9 @@ static const struct edid_quirk { + /* Rotel RSX-1058 forwards sink's EDID but only does HDMI 1.1*/ + EDID_QUIRK('E', 'T', 'R', 13896, EDID_QUIRK_FORCE_8BPC), + ++ /* Bigscreen Beyond Headset */ ++ EDID_QUIRK('B', 'I', 'G', 0x1234, EDID_QUIRK_NON_DESKTOP), ++ + /* Valve Index Headset */ + EDID_QUIRK('V', 'L', 'V', 0x91a8, EDID_QUIRK_NON_DESKTOP), + EDID_QUIRK('V', 'L', 'V', 0x91b0, EDID_QUIRK_NON_DESKTOP), + +From c33583995576e9ac532c4ad9e260324b1c4fa3a3 Mon Sep 17 00:00:00 2001 +From: Yaroslav Bolyukin +Date: Sun, 30 Oct 2022 19:04:26 +0100 +Subject: [PATCH 3/3] drm/amd: use fixed dsc bits-per-pixel from edid + +VESA vendor header from DisplayID spec may contain fixed bit per pixel +rate, it should be respected by drm driver + +Signed-off-by: Yaroslav Bolyukin +Reviewed-by: Wayne Lin +--- + drivers/gpu/drm/amd/display/dc/core/dc_stream.c | 2 ++ + drivers/gpu/drm/amd/display/dc/dc_types.h | 3 +++ + 2 files changed, 5 insertions(+) + +diff --git a/drivers/gpu/drm/amd/display/dc/core/dc_stream.c b/drivers/gpu/drm/amd/display/dc/core/dc_stream.c +index 38d71b5c1f2d..f2467b64268b 100644 +--- a/drivers/gpu/drm/amd/display/dc/core/dc_stream.c ++++ b/drivers/gpu/drm/amd/display/dc/core/dc_stream.c +@@ -103,6 +103,8 @@ static bool dc_stream_construct(struct dc_stream_state *stream, + + /* EDID CAP translation for HDMI 2.0 */ + stream->timing.flags.LTE_340MCSC_SCRAMBLE = dc_sink_data->edid_caps.lte_340mcsc_scramble; ++ stream->timing.dsc_fixed_bits_per_pixel_x16 = ++ dc_sink_data->edid_caps.dsc_fixed_bits_per_pixel_x16; + + memset(&stream->timing.dsc_cfg, 0, sizeof(stream->timing.dsc_cfg)); + stream->timing.dsc_cfg.num_slices_h = 0; +diff --git a/drivers/gpu/drm/amd/display/dc/dc_types.h b/drivers/gpu/drm/amd/display/dc/dc_types.h +index dc78e2404b48..65915a10ab48 100644 +--- a/drivers/gpu/drm/amd/display/dc/dc_types.h ++++ b/drivers/gpu/drm/amd/display/dc/dc_types.h +@@ -231,6 +231,9 @@ struct dc_edid_caps { + bool edid_hdmi; + bool hdr_supported; + ++ /* DisplayPort caps */ ++ uint32_t dsc_fixed_bits_per_pixel_x16; ++ + struct dc_panel_patch panel_patch; + }; + +-- +2.38.1 + + +diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c +index 3b4065099..15268afa3 100644 +--- a/drivers/gpu/drm/drm_edid.c ++++ b/drivers/gpu/drm/drm_edid.c +@@ -6391,7 +6391,7 @@ static void drm_parse_vesa_mso_data(struct drm_connector *connector, + if (oui(vesa->oui[0], vesa->oui[1], vesa->oui[2]) != VESA_IEEE_OUI) + return; + +- if (sizeof(*vesa) != sizeof(*block) + block->num_bytes) { ++ if (block->num_bytes < 5) { + drm_dbg_kms(connector->dev, + "[CONNECTOR:%d:%s] Unexpected VESA vendor block size\n", + connector->base.id, connector->name); +@@ -6414,24 +6414,37 @@ static void drm_parse_vesa_mso_data(struct drm_connector *connector, + break; + } + +- if (!info->mso_stream_count) { +- info->mso_pixel_overlap = 0; +- return; +- } ++ info->mso_pixel_overlap = 0; ++ ++ if (info->mso_stream_count) { ++ info->mso_pixel_overlap = FIELD_GET(DISPLAYID_VESA_MSO_OVERLAP, vesa->mso); ++ ++ if (info->mso_pixel_overlap > 8) { ++ drm_dbg_kms(connector->dev, ++ "[CONNECTOR:%d:%s] Reserved MSO pixel overlap value %u\n", ++ connector->base.id, connector->name, ++ info->mso_pixel_overlap); ++ info->mso_pixel_overlap = 8; ++ } + +- info->mso_pixel_overlap = FIELD_GET(DISPLAYID_VESA_MSO_OVERLAP, vesa->mso); +- if (info->mso_pixel_overlap > 8) { + drm_dbg_kms(connector->dev, +- "[CONNECTOR:%d:%s] Reserved MSO pixel overlap value %u\n", +- connector->base.id, connector->name, +- info->mso_pixel_overlap); +- info->mso_pixel_overlap = 8; ++ "[CONNECTOR:%d:%s] MSO stream count %u, pixel overlap %u\n", ++ connector->base.id, connector->name, ++ info->mso_stream_count, info->mso_pixel_overlap); ++ } ++ ++ if (block->num_bytes < 7) { ++ /* DSC bpp is optional */ ++ return; + } + ++ info->dp_dsc_bpp = FIELD_GET(DISPLAYID_VESA_DSC_BPP_INT, vesa->dsc_bpp_int) * 16 + ++ FIELD_GET(DISPLAYID_VESA_DSC_BPP_FRACT, vesa->dsc_bpp_fract); ++ + drm_dbg_kms(connector->dev, +- "[CONNECTOR:%d:%s] MSO stream count %u, pixel overlap %u\n", +- connector->base.id, connector->name, +- info->mso_stream_count, info->mso_pixel_overlap); ++ "[CONNECTOR:%d:%s] DSC bits per pixel %u\n", ++ connector->base.id, connector->name, ++ info->dp_dsc_bpp); + } + + static void drm_update_mso(struct drm_connector *connector, +@@ -6479,6 +6492,7 @@ static void drm_reset_display_info(struct drm_connector *connector) + info->mso_stream_count = 0; + info->mso_pixel_overlap = 0; + info->max_dsc_bpp = 0; ++ info->dp_dsc_bpp = 0; + + kfree(info->vics); + info->vics = NULL; +diff --git a/drivers/gpu/drm/drm_edid.c.rej b/drivers/gpu/drm/drm_edid.c.rej +new file mode 100644 +index 000000000..de3b3bf4e +--- /dev/null ++++ b/drivers/gpu/drm/drm_edid.c.rej +@@ -0,0 +1,9 @@ ++diff a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c (rejected hunks) ++@@ -6376,6 +6389,7 @@ static void drm_reset_display_info(struct drm_connector *connector) ++ info->mso_stream_count = 0; ++ info->mso_pixel_overlap = 0; ++ info->max_dsc_bpp = 0; +++ info->dp_dsc_bpp = 0; ++ } ++ ++ static u32 update_display_info(struct drm_connector *connector, +diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h +index fe88d7fc6..1de1d1726 100644 +--- a/include/drm/drm_connector.h ++++ b/include/drm/drm_connector.h +@@ -803,6 +803,12 @@ struct drm_display_info { + */ + u32 max_dsc_bpp; + ++ /** ++ * @dp_dsc_bpp: DP Display-Stream-Compression (DSC) timing's target ++ * DST bits per pixel in 6.4 fixed point format. 0 means undefined ++ */ ++ u16 dp_dsc_bpp; ++ + /** + * @vics: Array of vics_len VICs. Internal to EDID parsing. + */ +diff --git a/include/drm/drm_connector.h.rej b/include/drm/drm_connector.h.rej +new file mode 100644 +index 000000000..d54d40443 +--- /dev/null ++++ b/include/drm/drm_connector.h.rej +@@ -0,0 +1,13 @@ ++diff a/include/drm/drm_connector.h b/include/drm/drm_connector.h (rejected hunks) ++@@ -721,6 +721,11 @@ struct drm_display_info { ++ * monitor's default value is used instead. ++ */ ++ u32 max_dsc_bpp; +++ /** +++ * @dp_dsc_bpp: DP Display-Stream-Compression (DSC) timing's target +++ * DST bits per pixel in 6.4 fixed point format. 0 means undefined +++ */ +++ u16 dp_dsc_bpp; ++ }; ++ ++ int drm_display_info_set_bus_formats(struct drm_display_info *info, +diff --git a/include/drm/drm_displayid.h b/include/drm/drm_displayid.h +index 566497eeb..3a4bd0816 100644 +--- a/drivers/gpu/drm/drm_displayid_internal.h ++++ b/drivers/gpu/drm/drm_displayid_internal.h +@@ -131,12 +131,16 @@ struct displayid_detailed_timing_block { + + #define DISPLAYID_VESA_MSO_OVERLAP GENMASK(3, 0) + #define DISPLAYID_VESA_MSO_MODE GENMASK(6, 5) ++#define DISPLAYID_VESA_DSC_BPP_INT GENMASK(5, 0) ++#define DISPLAYID_VESA_DSC_BPP_FRACT GENMASK(3, 0) + + struct displayid_vesa_vendor_specific_block { + struct displayid_block base; + u8 oui[3]; + u8 data_structure_type; + u8 mso; ++ u8 dsc_bpp_int; ++ u8 dsc_bpp_fract; + } __packed; + + /* +diff --git a/include/drm/drm_displayid.h.rej b/include/drm/drm_displayid.h.rej +new file mode 100644 +index 000000000..61fbd38e0 +--- /dev/null ++++ b/include/drm/drm_displayid.h.rej +@@ -0,0 +1,18 @@ ++diff a/include/drm/drm_displayid.h b/include/drm/drm_displayid.h (rejected hunks) ++@@ -131,12 +131,16 @@ struct displayid_detailed_timing_block { ++ ++ #define DISPLAYID_VESA_MSO_OVERLAP GENMASK(3, 0) ++ #define DISPLAYID_VESA_MSO_MODE GENMASK(6, 5) +++#define DISPLAYID_VESA_DSC_BPP_INT GENMASK(5, 0) +++#define DISPLAYID_VESA_DSC_BPP_FRACT GENMASK(3, 0) ++ ++ struct displayid_vesa_vendor_specific_block { ++ struct displayid_block base; ++ u8 oui[3]; ++ u8 data_structure_type; ++ u8 mso; +++ u8 dsc_bpp_int; +++ u8 dsc_bpp_fract; ++ } __packed; ++ ++ /* DisplayID iteration */ + +diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c +index 2c36f3d00ca2..322059dca3ae 100644 +--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c ++++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_helpers.c +@@ -135,3 +1,5 @@ enum dc_edid_status dm_helpers_parse_edid_caps( + AUDIO_INFO_DISPLAY_NAME_SIZE_IN_CHARS); + ++ edid_caps->dsc_fixed_bits_per_pixel_x16 = connector->display_info.dp_dsc_bpp; ++ + edid_caps->edid_hdmi = connector->display_info.is_hdmi; + diff --git a/configuration.nix b/configuration.nix new file mode 100644 index 0000000..16a0373 --- /dev/null +++ b/configuration.nix @@ -0,0 +1,234 @@ +# 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, lemonake, ... }: + +{ + imports = + [ # Include the results of the hardware scan. + ./hardware-configuration.nix + ]; + + + nix.settings.experimental-features = [ "nix-command" "flakes" ]; + + # Bootloader. + boot.loader.systemd-boot.enable = true; + boot.loader.efi.canTouchEfiVariables = true; + + + + # Use latest kernel. + boot.kernelPackages = pkgs.linuxPackages_latest; + boot.kernelPatches = [{ + name = "combined-bsb-6-10"; + # patch = "./combined-bsb-6-10.patch"; + patch = (builtins.fetchurl { + url = "https://triazo.net/files/combined-bsb-6-15.patch"; + # url = "https://gist.githubusercontent.com/galister/08cddf10ac18929647d5fb6308df3e4b/raw/0f6417b6cb069f19d6c28b730499c07de06ec413/combined-bsb-6-10.patch"; + sha256 = "938552a278197614402d997c2a21af798ebc4771f99d0b8d99dfcdf6df10ffb7"; + }); + } + { + name = "amdgpu-ignore-ctx-privileges"; + patch = pkgs.fetchpatch { + name = "cap_sys_nice_begone.patch"; + url = "https://github.com/Frogging-Family/community-patches/raw/master/linux61-tkg/cap_sys_nice_begone.mypatch"; + hash = "sha256-Y3a0+x2xvHsfLax/uwycdJf3xLxvVfkfDVqjkxNaYEo="; + }; + } + ]; + + networking.hostName = "pewter"; # 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 = "America/New_York"; + + # Select internationalisation properties. + i18n.defaultLocale = "en_US.UTF-8"; + + i18n.extraLocaleSettings = { + LC_ADDRESS = "en_US.UTF-8"; + LC_IDENTIFICATION = "en_US.UTF-8"; + LC_MEASUREMENT = "en_US.UTF-8"; + LC_MONETARY = "en_US.UTF-8"; + LC_NAME = "en_US.UTF-8"; + LC_NUMERIC = "en_US.UTF-8"; + LC_PAPER = "en_US.UTF-8"; + LC_TELEPHONE = "en_US.UTF-8"; + LC_TIME = "en_US.UTF-8"; + }; + + # Enable the X11 windowing system. + # You can disable this if you're only using the Wayland session. + services.xserver.enable = true; + + # Enable the KDE Plasma Desktop Environment. + services.displayManager.sddm.enable = true; + services.desktopManager.plasma6.enable = true; + + # Configure keymap in X11 + services.xserver.xkb = { + layout = "us"; + variant = "dvorak"; + }; + + # Configure console keymap + console.keyMap = "dvorak"; + + # Enable CUPS to print documents. + services.printing.enable = true; + + # Enable sound with pipewire. + services.pulseaudio.enable = false; + security.rtkit.enable = true; + services.pipewire = { + enable = true; + alsa.enable = true; + alsa.support32Bit = true; + pulse.enable = true; + # If you want to use JACK applications, uncomment this + #jack.enable = true; + + # use the example session manager (no others are packaged yet so this is enabled by default, + # no need to redefine it in your config for now) + #media-session.enable = true; + }; + + # Enable touchpad support (enabled default in most desktopManager). + # services.xserver.libinput.enable = true; + + # Define a user account. Don't forget to set a password with ‘passwd’. + users.users.abby = { + isNormalUser = true; + description = "Abigail"; + extraGroups = [ "networkmanager" "wheel" ]; + packages = with pkgs; [ + kdePackages.kate + librewolf + wlx-overlay-s + protonup-ng + # thunderbird + ]; + openssh.authorizedKeys.keys = [ + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOYmdrmGnKrC3baYXihar6PoR1r64r8SCctEy8BVv2BQ triazo@nicrosil" + "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC3Dv3wVYJ77FNZU8JuGCwBAr9cAdsYMibGyImUSs+R73vEI6XpK/R5NQEDqC/y8TUL+nwLmBIrCj9k+At9FxLlGphUQhQcUKxUvx0qXCP52M3XLxGhbQinTACEsSa15SLli5WsD9xqj3TjiqD35jz/a3s1r2gwzj4vqGxcU1pwYlGNyU+RfyddgOdQTtBr5FzVjHKMMA4UW3HTtC1AyjdKrwhbQApDKrif3tAabcn0jG6dLpLxS7v/fugUQSPTzPne0Bw+SthPKb/R95EWfs7EoSjNAmIc+RSgKO+om9hqHVPTFK95TosmYr5VZVlJ0/uHw0GrpRfQNXpoFEbJ6g4l" + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIK/4a7VOiTVo8g1L1cckHz+Od87lsAOaw0WaNoip2Wdv abby@copper-asahi" + ]; + }; + + # home-manager.users.abby = { pkgs, ...}: { + # home.packages = [ pkgs.atool pkgs.httpie ]; + # programs.bash.enable = true; + + # home.stateVersion = "25.05"; + # }; + + # Enable automatic login for the user. + services.displayManager.autoLogin.enable = true; + services.displayManager.autoLogin.user = "abby"; + + # Install firefox. + # programs.firefox.enable = true; + + + # Allow unfree packages + nixpkgs.config.allowUnfree = true; + + + # url = "https://gitlab.freedesktop.org/monado/monado/-/merge_requests/2425.diff"; + # hash = sha256-572a968fda55d9fabd22ab94f8bc1bbdadb4ac21fbe2bf927d05fbf00d9a0e42 + + + # List packages installed in system profile. To search, run: + # $ nix search wget + environment.systemPackages = with pkgs; [ + vim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default. + wget + emacs + rxvt-unicode + kitty + jq + git + file + efibootmgr + kdePackages.kdialog + zenity + lemonake.packages.${pkgs.system}.wayvr-dashboard + + (monado.overrideAttrs (oldAttrs: rec { + src = fetchFromGitHub { + # domain = "gitlab.freedesktop.org"; + owner = "xantoz"; + repo = "monado"; + rev = "ded3d927b58184502042aafa4f2a804037aab7ca"; + hash = "sha256-Tsmb7MubKAorGD3AQZoJOW87b0mm5SCqr5QObisnouM="; + }; + patches = []; + # (pkgs.fetchpatch { + # url = "https://gitlab.freedesktop.org/monado/monado/-/merge_requests/2425.diff"; + # sha256 = "0hhfk86z1yq5gn9bzqpv46nb9bdx3fygi55b4ayzmnamva7rcajp"; + # }) + # ]; + })) + ]; + + # + # github:PassiveLemon/lemonake/master/pkgs/wayvr-dashboard + + # 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 = [ 22 ]; + # 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 = "25.05"; # Did you read the comment? + + programs.steam = { + enable = true; + remotePlay.openFirewall = true; # Open ports in the firewall for Steam Remote Play + localNetworkGameTransfers.openFirewall = true; # Open ports in the firewall for Steam Local Network Game Transfers + }; + + services.monado = { + enable = true; + defaultRuntime = true; # Register as default OpenXR runtime + }; + + systemd.user.services.monado.environment = { + STEAMVR_LH_ENABLE = "1"; + XRT_COMPOSITOR_COMPUTE = "1"; + WMR_HANDTRACKING = "0"; + U_PACING_COMP_MIN_TIME_MS = "5"; + }; + + +} diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..bc9db87 --- /dev/null +++ b/flake.lock @@ -0,0 +1,106 @@ +{ + "nodes": { + "flake-parts": { + "inputs": { + "nixpkgs-lib": [ + "lemonake", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1749398372, + "narHash": "sha256-tYBdgS56eXYaWVW3fsnPQ/nFlgWi/Z2Ymhyu21zVM98=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "9305fe4e5c2a6fcf5ba6a3ff155720fbe4076569", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "home-manager": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1750792728, + "narHash": "sha256-Lh3dopA8DdY+ZoaAJPrtkZOZaFEJGSYjOdAYYgOPgE4=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "366f00797b1efb70f2882d3da485e3c10fd3d557", + "type": "github" + }, + "original": { + "owner": "nix-community", + "ref": "release-25.05", + "repo": "home-manager", + "type": "github" + } + }, + "lemonake": { + "inputs": { + "flake-parts": "flake-parts", + "nixpkgs": "nixpkgs" + }, + "locked": { + "lastModified": 1750907660, + "narHash": "sha256-4Kbi9RvVQmCFO2OR71CeoP6/zMlMj3REPlVMaWVeXaU=", + "owner": "passivelemon", + "repo": "lemonake", + "rev": "19b90923a8880a5fe9f13dc23501b658ee90dad7", + "type": "github" + }, + "original": { + "owner": "passivelemon", + "repo": "lemonake", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1750865895, + "narHash": "sha256-p2dWAQcLVzquy9LxYCZPwyUdugw78Qv3ChvnX755qHA=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "61c0f513911459945e2cb8bf333dc849f1b976ff", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_2": { + "locked": { + "lastModified": 1750622754, + "narHash": "sha256-kMhs+YzV4vPGfuTpD3mwzibWUE6jotw5Al2wczI0Pv8=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "c7ab75210cb8cb16ddd8f290755d9558edde7ee1", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-25.05", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "home-manager": "home-manager", + "lemonake": "lemonake", + "nixpkgs": "nixpkgs_2" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..0eab741 --- /dev/null +++ b/flake.nix @@ -0,0 +1,28 @@ +{ + description = "Root System NixOS flake"; + + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.05"; + home-manager.url = "github:nix-community/home-manager/release-25.05"; + home-manager.inputs.nixpkgs.follows = "nixpkgs"; + lemonake.url = "github:passivelemon/lemonake"; + + # wayvr-dashbourd.url = "github:PassiveLemon/lemonake/master/pkgs/wayvr-dashboard" + }; + + outputs = { self, nixpkgs, lemonake, home-manager, ...}@inputs: { + nixosConfigurations.pewter = nixpkgs.lib.nixosSystem { + system = "x86_64-linux"; + specialArgs = inputs; + modules = [ + ./configuration.nix + home-manager.nixosModules.home-manager + { + home-manager.useGlobalPkgs = true; + home-manager.useUserPackages = true; + home-manager.users.abby = ./home.nix; + } + ]; + }; + }; +} diff --git a/hardware-configuration.nix b/hardware-configuration.nix new file mode 100644 index 0000000..633de5e --- /dev/null +++ b/hardware-configuration.nix @@ -0,0 +1,43 @@ +# Do not modify this file! It was generated by ‘nixos-generate-config’ +# and may be overwritten by future invocations. Please make changes +# to /etc/nixos/configuration.nix instead. +{ config, lib, pkgs, modulesPath, ... }: + +{ + imports = + [ (modulesPath + "/installer/scan/not-detected.nix") + ]; + + boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "ahci" "thunderbolt" "usbhid" "usb_storage" "sd_mod" ]; + boot.initrd.kernelModules = [ ]; + boot.kernelModules = [ "kvm-amd" ]; + boot.extraModulePackages = [ ]; + + + fileSystems."/" = + { device = "/dev/disk/by-uuid/f20d561e-283e-4fc9-9f06-33cd4dcb7208"; + fsType = "ext4"; + }; + + fileSystems."/boot" = + { device = "/dev/disk/by-uuid/A7F6-EC69"; + fsType = "vfat"; + options = [ "fmask=0077" "dmask=0077" ]; + }; + + swapDevices = + [ { device = "/dev/disk/by-uuid/33c7ad78-35f3-4965-80aa-11d1c9af9dcc"; } + ]; + + # 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.enp9s0.useDHCP = lib.mkDefault true; + # networking.interfaces.wlp10s0.useDHCP = lib.mkDefault true; + # networking.interfaces.wlp118s0f4u2.useDHCP = lib.mkDefault true; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; +} diff --git a/home.nix b/home.nix new file mode 100644 index 0000000..4fde619 --- /dev/null +++ b/home.nix @@ -0,0 +1,67 @@ +{ config, pkgs, lemonake, ... }: + +{ + # Home Manager needs a bit of information about you and the + # paths it should manage. + home.username = "abby"; + home.homeDirectory = "/home/abby"; + + # This value determines the Home Manager release that your + # configuration is compatible with. This helps avoid breakage + # when a new Home Manager release introduces backwards + # incompatible changes. + # + # You can update Home Manager without changing this value. See + # the Home Manager release notes for a list of state version + # changes in each release. + home.stateVersion = "25.05"; + + # Let Home Manager install and manage itself. + programs.home-manager.enable = true; + + # For wayvr-dashboard/wlx integration + xdg.configFile."wlxoverlay/wayvr.conf.d/dashboard.yaml".text = '' +dashboard: + exec: "/run/current-system/sw/bin/wayvr-dashboard" + args: "" + env: [] +''; + + # For Monado: + xdg.configFile."openxr/1/active_runtime.json".source = "${pkgs.monado}/share/openxr/1/openxr_monado.json"; + + xdg.configFile."openvr/openvrpaths.vrpath".text = '' + { + "config" : + [ + "${config.xdg.dataHome}/Steam/config" + ], + "external_drivers" : null, + "jsonid" : "vrpathreg", + "log" : + [ + "${config.xdg.dataHome}/Steam/logs" + ], + "runtime" : + [ + "${pkgs.opencomposite}/lib/opencomposite" + ], + "version" : 1 + } +''; + + # Custom proton version for vrchat + # https://github.com/SpookySkeletons/proton-ge-rtsp/releases for new releases + home.file = { + ".steam/steam/compatibilitytools.d/proton-ge-rtsp" = { + source = pkgs.fetchzip { + url = "https://github.com/SpookySkeletons/proton-ge-rtsp/releases/download/GE-Proton9-22-rtsp17-1/GE-Proton9-22-rtsp17-1.tar.gz"; + sha256 = "sha256-GeExWNW0J3Nfq5rcBGiG2BNEmBg0s6bavF68QqJfuX8="; + }; + # source = builtins.fetchGit { + # url = "https://github.com/SpookySkeletons/proton-ge-rtsp"; + # rev = "a0bd24515522a708c7503f3f2c057d91f58750ef"; + # }; + }; + }; +}