diff --git a/flake.lock b/flake.lock index 3cac89a..4f0da01 100644 --- a/flake.lock +++ b/flake.lock @@ -137,6 +137,27 @@ "type": "github" } }, + "jovian": { + "inputs": { + "nix-github-actions": "nix-github-actions", + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1770366813, + "narHash": "sha256-q6dmMSV2EcA6/EXy2oJXoLgxSGjrKY0bixfYbK4fi/4=", + "owner": "Jovian-Experiments", + "repo": "Jovian-NixOS", + "rev": "2af374cd694b45c7d1773edda154081d0ee81f64", + "type": "github" + }, + "original": { + "owner": "Jovian-Experiments", + "repo": "Jovian-NixOS", + "type": "github" + } + }, "nix-darwin": { "inputs": { "nixpkgs": [ @@ -158,6 +179,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" + } + }, "nix-homebrew": { "inputs": { "brew-src": "brew-src" @@ -236,6 +279,7 @@ "disko": "disko", "firefox-addons": "firefox-addons", "home-manager": "home-manager", + "jovian": "jovian", "nix-darwin": "nix-darwin", "nix-homebrew": "nix-homebrew", "nixpkgs": "nixpkgs_2", diff --git a/flake.nix b/flake.nix index 7e7bbd8..02c533d 100644 --- a/flake.nix +++ b/flake.nix @@ -17,9 +17,11 @@ nix-homebrew.url = "github:zhaofengli/nix-homebrew"; disko.url = "github:nix-community/disko"; disko.inputs.nixpkgs.follows = "nixpkgs"; + jovian.url = "github:Jovian-Experiments/Jovian-NixOS"; + jovian.inputs.nixpkgs.follows = "nixpkgs"; }; - outputs = inputs@{ self, nix-darwin, nixpkgs, home-manager, nixvim, claude-code, firefox-addons, nix-homebrew, disko }: + outputs = inputs@{ self, nix-darwin, nixpkgs, home-manager, nixvim, claude-code, firefox-addons, nix-homebrew, disko, jovian }: { darwinConfigurations."macbook" = nix-darwin.lib.darwinSystem { modules = [ @@ -62,6 +64,16 @@ ]; }; + nixosConfigurations."deck" = nixpkgs.lib.nixosSystem { + system = "x86_64-linux"; + modules = [ + jovian.nixosModules.default + disko.nixosModules.disko + ./hosts/nixos/deck/system.nix + ./hosts/nixos/deck/disk-config.nix + ]; + }; + homeConfigurations = { "yanlin@macbook" = home-manager.lib.homeManagerConfiguration { pkgs = nixpkgs.legacyPackages.aarch64-darwin; @@ -92,6 +104,12 @@ modules = [ ./hosts/nixos/nfss/home.nix ]; extraSpecialArgs = { inherit claude-code nixvim; }; }; + + "yanlin@deck" = home-manager.lib.homeManagerConfiguration { + pkgs = nixpkgs.legacyPackages.x86_64-linux; + modules = [ ./hosts/nixos/deck/home.nix ]; + extraSpecialArgs = { inherit claude-code nixvim; }; + }; }; }; } diff --git a/hosts/nixos/deck/disk-config.nix b/hosts/nixos/deck/disk-config.nix new file mode 100644 index 0000000..ba80a91 --- /dev/null +++ b/hosts/nixos/deck/disk-config.nix @@ -0,0 +1,34 @@ +{ + disko.devices = { + disk = { + main = { + type = "disk"; + device = "/dev/nvme0n1"; + content = { + type = "gpt"; + partitions = { + ESP = { + size = "512M"; + type = "EF00"; + content = { + type = "filesystem"; + format = "vfat"; + mountpoint = "/boot"; + mountOptions = [ "fmask=0077" "dmask=0077" ]; + }; + }; + + root = { + size = "100%"; + content = { + type = "filesystem"; + format = "ext4"; + mountpoint = "/"; + }; + }; + }; + }; + }; + }; + }; +} diff --git a/hosts/nixos/deck/hardware-configuration.nix b/hosts/nixos/deck/hardware-configuration.nix new file mode 100644 index 0000000..10c1d46 --- /dev/null +++ b/hosts/nixos/deck/hardware-configuration.nix @@ -0,0 +1,14 @@ +{ config, lib, pkgs, modulesPath, ... }: + +{ + imports = [ + (modulesPath + "/installer/scan/not-detected.nix") + ]; + + boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "usbhid" "usb_storage" "sd_mod" "sdhci_pci" ]; + boot.kernelModules = [ "kvm-amd" ]; + + hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; +} diff --git a/hosts/nixos/deck/home.nix b/hosts/nixos/deck/home.nix new file mode 100644 index 0000000..bdd9801 --- /dev/null +++ b/hosts/nixos/deck/home.nix @@ -0,0 +1,7 @@ +{ config, pkgs, ... }: + +{ + imports = [ + ../home-default.nix + ]; +} diff --git a/hosts/nixos/deck/system.nix b/hosts/nixos/deck/system.nix new file mode 100644 index 0000000..5ed6a45 --- /dev/null +++ b/hosts/nixos/deck/system.nix @@ -0,0 +1,44 @@ +{ config, pkgs, lib, ... }: + +{ + imports = [ + ./hardware-configuration.nix + ../system-default.nix + ]; + + boot.loader = { + systemd-boot.enable = true; + systemd-boot.configurationLimit = 10; + efi.canTouchEfiVariables = true; + timeout = 3; + }; + + jovian.devices.steamdeck.enable = true; + + jovian.steam = { + enable = true; + autoStart = true; + user = "yanlin"; + }; + + jovian.steamos.useSteamOSConfig = true; + + jovian.hardware.has.amd.gpu = true; + + hardware.enableRedistributableFirmware = true; + + networking = { + hostName = "deck"; + networkmanager.enable = true; + firewall.enable = false; + }; + + users.users.yanlin = { + extraGroups = [ "networkmanager" "wheel" "video" "audio" "input" ]; + }; + + environment.systemPackages = with pkgs; [ + pciutils + usbutils + ]; +} diff --git a/modules/ssh.nix b/modules/ssh.nix index 419d3c6..67839bc 100644 --- a/modules/ssh.nix +++ b/modules/ssh.nix @@ -9,6 +9,7 @@ "*" = { addKeysToAgent = "yes"; + identitiesOnly = true; }; "github.com" = {