diff --git a/flake.lock b/flake.lock index ee737671..77bd57b3 100644 --- a/flake.lock +++ b/flake.lock @@ -354,7 +354,7 @@ }, "original": { "owner": "nix-community", - "ref": "release-24.11", + "ref": "master", "repo": "home-manager", "type": "github" } @@ -401,6 +401,27 @@ "type": "github" } }, + "jovian": { + "inputs": { + "nix-github-actions": "nix-github-actions", + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1731736013, + "narHash": "sha256-AYB3yeogE9vtBuSStdFFmGR0kzGuumW4nrpdlcuZ/As=", + "owner": "Jovian-Experiments", + "repo": "Jovian-NixOS", + "rev": "a2c6d8d1acce49de8dc7ed951428aae901908316", + "type": "github" + }, + "original": { + "owner": "Jovian-Experiments", + "repo": "Jovian-NixOS", + "type": "github" + } + }, "lanzaboote": { "inputs": { "crane": "crane", @@ -450,6 +471,28 @@ "type": "github" } }, + "nix-github-actions": { + "inputs": { + "nixpkgs": [ + "jovian", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1729697500, + "narHash": "sha256-VFTWrbzDlZyFHHb1AlKRiD/qqCJIripXKiCSFS8fAOY=", + "owner": "zhaofengli", + "repo": "nix-github-actions", + "rev": "e418aeb728b6aa5ca8c5c71974e7159c2df1d8cf", + "type": "github" + }, + "original": { + "owner": "zhaofengli", + "ref": "matrix-name", + "repo": "nix-github-actions", + "type": "github" + } + }, "nixpkgs": { "locked": { "lastModified": 1732350895, @@ -461,7 +504,7 @@ }, "original": { "owner": "nixos", - "ref": "nixos-24.11", + "ref": "nixos-unstable", "repo": "nixpkgs", "type": "github" } @@ -494,22 +537,6 @@ "type": "github" } }, - "nixpkgs-unstable": { - "locked": { - "lastModified": 1732014248, - "narHash": "sha256-y/MEyuJ5oBWrWAic/14LaIr/u5E0wRVzyYsouYY3W6w=", - "owner": "nixos", - "repo": "nixpkgs", - "rev": "23e89b7da85c3640bbc2173fe04f4bd114342367", - "type": "github" - }, - "original": { - "owner": "nixos", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, "nur": { "locked": { "lastModified": 1732640183, @@ -558,10 +585,10 @@ "disko": "disko", "home-manager": "home-manager_2", "iio-hyprland": "iio-hyprland", + "jovian": "jovian", "lanzaboote": "lanzaboote", "nix-gaming": "nix-gaming", "nixpkgs": "nixpkgs", - "nixpkgs-unstable": "nixpkgs-unstable", "nur": "nur", "stylix": "stylix", "wallpapers": "wallpapers" diff --git a/flake.nix b/flake.nix index 253fffee..f2c8b3e8 100644 --- a/flake.nix +++ b/flake.nix @@ -2,8 +2,7 @@ description = "Aly's NixOS flake."; inputs = { - nixpkgs.url = "github:nixos/nixpkgs/nixos-24.11"; - nixpkgs-unstable.url = "github:nixos/nixpkgs/nixos-unstable"; + nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; agenix = { inputs.nixpkgs.follows = "nixpkgs"; @@ -17,7 +16,7 @@ home-manager = { inputs.nixpkgs.follows = "nixpkgs"; - url = "github:nix-community/home-manager/release-24.11"; + url = "github:nix-community/home-manager/master"; }; iio-hyprland = { @@ -25,6 +24,11 @@ url = "github:JeanSchoeller/iio-hyprland"; }; + jovian = { + url = "github:Jovian-Experiments/Jovian-NixOS"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + lanzaboote = { inputs.nixpkgs.follows = "nixpkgs"; url = "github:nix-community/lanzaboote/v0.4.1"; @@ -95,6 +99,7 @@ "fallarbor" "lavaridge" "mauville" + "pacifidlog" "petalburg" "rustboro" "slateport" diff --git a/hosts/pacifidlog/README.md b/hosts/pacifidlog/README.md new file mode 100644 index 00000000..cb8e331e --- /dev/null +++ b/hosts/pacifidlog/README.md @@ -0,0 +1,57 @@ +# pacifidlog + +## Overview + +Lenovo Legion Go with AMD Z1 Extreme. Gaming beast. Uses Jovian for Steam Deck-like interface. + +## Todo + +- \[x\] update hdd-ui and adjustor. +- \[ \] upgrade to large SSD. + +## Specs + +| Model | Legion Go | +|---------|---------------------------| +| Display | 8.8" 1600x2560 144Hz | +| CPU | AMD Z1 Extreme | +| RAM | 16GB LPDDR5 (soldered) | +| GPU | AMD Z1 Extreme | +| Disks | 512GB M.2 2242 NVMe | + +## Filesystems + +### / + +Encrypted LUKS btrfs volume. + +## Display + +Vertical-turned-horizontal 1600x2560 display running at 144Hz. Scales perfectly to 2x. + +## Steam / Jovian Docs + +Jovian delivers a Steam Deck-like interface on top of NixOS, with some limitations. This includes performance optimizations, patched versions of Mesa, and other tweaks to be as consistent with the Steam Deck as possible. + +### Features + +#### What works + +- Basic performance settings (frame limits, refresh rates, etc). +- Desktop mode with KDE. +- Installing GOG and EGS games with Heroic. +- Launching and playing games, natively and with Proton. +- Plugins and themes with Decky Loader. + +#### What does not work + +- Adaptive Brightness. +- EmuDeck. +- Formatting microSD cards. +- Night light. +- System updates. +- TDP control and Legion Go specific features (all work with Handheld Daemon). + +### Decky Loader + +Decky loader can be installed and configured through the Jovian modules, but needs CEF Remote Debugging enabled via Deveroper Options for the frontend UI to load. diff --git a/hosts/pacifidlog/default.nix b/hosts/pacifidlog/default.nix new file mode 100644 index 00000000..2d68b2ab --- /dev/null +++ b/hosts/pacifidlog/default.nix @@ -0,0 +1,135 @@ +# Lenovo Legion Go +{ + config, + pkgs, + lib, + self, + ... +}: { + imports = [ + ./home.nix + ./secrets.nix + ./stylix.nix + (import ./../../disko/luks-btrfs-subvolumes.nix {disks = ["/dev/nvme0n1"];}) + self.inputs.jovian.nixosModules.default + self.inputs.nix-gaming.nixosModules.pipewireLowLatency + self.inputs.nix-gaming.nixosModules.platformOptimizations + self.nixosModules.common-base + self.nixosModules.common-locale + self.nixosModules.common-mauville-share + self.nixosModules.common-nix + self.nixosModules.common-pkgs + self.nixosModules.common-tailscale + self.nixosModules.common-wifi-profiles + self.nixosModules.hw-lenovo-legion-go + ]; + + boot = { + initrd.systemd.enable = true; + + lanzaboote = { + enable = true; + pkiBundle = "/etc/secureboot"; + }; + + loader = { + efi.canTouchEfiVariables = true; + + systemd-boot = { + enable = lib.mkForce false; + consoleMode = "1"; + }; + }; + }; + + environment = { + systemPackages = with pkgs; [ + heroic + hhd-ui + lutris + ]; + + variables.GDK_SCALE = "2"; + }; + + hardware.pulseaudio.enable = lib.mkForce false; + + jovian = { + decky-loader = { + enable = true; + user = "aly"; + }; + + hardware.has.amd.gpu = true; + + steam = { + enable = true; + autoStart = true; + desktopSession = "plasma"; + + environment = { + STEAM_EXTRA_COMPAT_TOOLS_PATHS = lib.makeSearchPathOutput "steamcompattool" "" config.programs.steam.extraCompatPackages; + STEAM_GAMESCOPE_COLOR_MANAGED = "0"; + }; + + user = "aly"; + }; + + steamos = { + enableMesaPatches = lib.mkForce false; + useSteamOSConfig = true; + }; + }; + + networking.hostName = "pacifidlog"; + nixpkgs.overlays = [self.overlays.tablet]; + programs.steam.platformOptimizations.enable = true; + + services = { + handheld-daemon = { + enable = true; + + package = with pkgs; + handheld-daemon.overrideAttrs (oldAttrs: { + propagatedBuildInputs = + oldAttrs.propagatedBuildInputs + ++ [pkgs.adjustor]; + }); + + user = "aly"; + }; + + pipewire.lowLatency = { + enable = true; + quantum = 256; + rate = 48000; + }; + }; + + system.stateVersion = "24.11"; + systemd.services.handheld-daemon.path = with pkgs; [hhd-ui lsof]; + zramSwap.memoryPercent = 100; + + ar = { + apps = { + firefox.enable = true; + steam.enable = true; + }; + + desktop.kde.enable = true; + laptopMode = true; + services.flatpak.enable = true; + + users.aly = { + enable = true; + password = "$y$j9T$CXjk5Z9e2PXbSsWh5CK.81$I9Hm/Oa4KcYMqPi8KMBfsEv5NzoXCgaCK5xhyGeikH7"; + + syncthing = { + enable = true; + certFile = config.age.secrets.syncthingCert.path; + keyFile = config.age.secrets.syncthingKey.path; + syncMusic = false; + }; + }; + }; +} diff --git a/hosts/pacifidlog/home.nix b/hosts/pacifidlog/home.nix new file mode 100644 index 00000000..24ed60dd --- /dev/null +++ b/hosts/pacifidlog/home.nix @@ -0,0 +1,27 @@ +{self, ...}: { + home-manager = { + sharedModules = [ + { + wayland.windowManager = { + hyprland.settings = { + input = { + touchdevice = { + transform = 1; + output = "eDP-1"; + }; + }; + }; + }; + + ar.home = { + desktop.hyprland = { + laptopMonitors = ["desc:Lenovo Group Limited Go Display 0x00888888, 1600x2560@144, 0x0, 2, transform, 1"]; + tabletMode.enable = true; + }; + }; + } + ]; + + users.aly = self.homeManagerModules.aly; + }; +} diff --git a/hosts/pacifidlog/secrets.nix b/hosts/pacifidlog/secrets.nix new file mode 100644 index 00000000..cb448683 --- /dev/null +++ b/hosts/pacifidlog/secrets.nix @@ -0,0 +1,6 @@ +{ + age.secrets = { + syncthingCert.file = ../../secrets/aly/syncthing/pacifidlog/cert.age; + syncthingKey.file = ../../secrets/aly/syncthing/pacifidlog/key.age; + }; +} diff --git a/hosts/pacifidlog/stylix.nix b/hosts/pacifidlog/stylix.nix new file mode 100644 index 00000000..b264c09e --- /dev/null +++ b/hosts/pacifidlog/stylix.nix @@ -0,0 +1,50 @@ +{ + pkgs, + self, + ... +}: { + stylix = { + enable = true; + base16Scheme = "${pkgs.base16-schemes}/share/themes/default-dark.yaml"; + image = "${self.inputs.wallpapers}/Legion_Go_Meteorite_Wallpaper.jpg"; + imageScalingMode = "fill"; + polarity = "dark"; + + cursor = { + name = "Bibata-Modern-Classic"; + package = pkgs.bibata-cursors; + size = 24; + }; + + fonts = { + monospace = { + name = "CaskaydiaCove Nerd Font"; + package = pkgs.nerdfonts.override {fonts = ["CascadiaCode"];}; + }; + + sansSerif = { + name = "UbuntuSans Nerd Font"; + package = pkgs.nerdfonts.override {fonts = ["UbuntuSans"];}; + }; + + serif = { + name = "Source Serif Pro"; + package = pkgs.source-serif-pro; + }; + + sizes = { + applications = 12; + desktop = 11; + popups = 12; + terminal = 13; + }; + }; + + opacity = { + applications = 1.0; + desktop = 0.8; + terminal = 0.8; + popups = 0.8; + }; + }; +}