diff --git a/laptop/battery.nix b/laptop/battery.nix new file mode 100644 index 0000000..7bfbef0 --- /dev/null +++ b/laptop/battery.nix @@ -0,0 +1,29 @@ +{ config, pkgs, ... }: + +{ + + # Better scheduling for CPU cycles - thanks System76!!! + services.system76-scheduler.settings.cfsProfiles.enable = true; + + # Enable TLP (better than gnomes internal power manager) + services.tlp = { + enable = true; + settings = { + CPU_BOOST_ON_AC = 1; + CPU_BOOST_ON_BAT = 0; + CPU_SCALING_GOVERNOR_ON_AC = "performance"; + CPU_SCALING_GOVERNOR_ON_BAT = "powersave"; + }; + }; + + # Disable GNOMEs power management + services.power-profiles-daemon.enable = false; + + # Enable powertop + #powerManagement.powertop.enable = true; + + # Enable thermald (only necessary if on Intel CPUs) + services.thermald.enable = true; + +} + diff --git a/laptop/flake.lock b/laptop/flake.lock new file mode 100644 index 0000000..c56e4f3 --- /dev/null +++ b/laptop/flake.lock @@ -0,0 +1,66 @@ +{ + "nodes": { + "home-manager": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1695108154, + "narHash": "sha256-gSg7UTVtls2yO9lKtP0yb66XBHT1Fx5qZSZbGMpSn2c=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "07682fff75d41f18327a871088d20af2710d4744", + "type": "github" + }, + "original": { + "owner": "nix-community", + "ref": "release-23.05", + "repo": "home-manager", + "type": "github" + } + }, + "nixos-hardware": { + "locked": { + "lastModified": 1697100850, + "narHash": "sha256-qSAzJVzNRIo+r3kBjL8TcpJctcgcHlnZyqdzpWgtg0M=", + "owner": "NixOS", + "repo": "nixos-hardware", + "rev": "fb6af288f6cf0f00d3af60cf9d5110433b954565", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "master", + "repo": "nixos-hardware", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1697226376, + "narHash": "sha256-cumLLb1QOUtWieUnLGqo+ylNt3+fU8Lcv5Zl+tYbRUE=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "898cb2064b6e98b8c5499f37e81adbdf2925f7c5", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-23.05", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "home-manager": "home-manager", + "nixos-hardware": "nixos-hardware", + "nixpkgs": "nixpkgs" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/laptop/flake.nix b/laptop/flake.nix new file mode 100644 index 0000000..169af6a --- /dev/null +++ b/laptop/flake.nix @@ -0,0 +1,114 @@ +{ + description = "Kop's NixOS Flake"; + + # This is the standard format for flake.nix. + # `inputs` are the dependencies of the flake, + # and `outputs` function will return all the build results of the flake. + # Each item in `inputs` will be passed as a parameter to + # the `outputs` function after being pulled and built. + inputs = { + # There are many ways to reference flake inputs. + # The most widely used is `github:owner/name/reference`, + # which represents the GitHub repository URL + branch/commit-id/tag. + + # Official NixOS package source + nixpkgs.url = "github:NixOS/nixpkgs/nixos-23.05"; + nixos-hardware.url = "github:NixOS/nixos-hardware/master"; + # home-manager, used for managing user configuration + home-manager = { + url = "github:nix-community/home-manager/release-23.05"; + # The `follows` keyword in inputs is used for inheritance. + # Here, `inputs.nixpkgs` of home-manager is kept consistent with + # the `inputs.nixpkgs` of the current flake, + # to avoid problems caused by different versions of nixpkgs. + inputs.nixpkgs.follows = "nixpkgs"; + }; + }; + + # `outputs` are all the build result of the flake. + # + # A flake can have many use cases and different types of outputs. + # + # parameters in function `outputs` are defined in `inputs` and + # can be referenced by their names. However, `self` is an exception, + # this special parameter points to the `outputs` itself(self-reference) + # + # The `@` syntax here is used to alias the attribute set of the + # inputs's parameter, making it convenient to use inside the function. + outputs = { self, nixpkgs, nixos-hardware, ... }@inputs: { + nixosConfigurations = { + # By default, NixOS will try to refer the nixosConfiguration with + # its hostname, so the system named `nixos-test` will use this one. + # However, the configuration name can also be specified using: + # sudo nixos-rebuild switch --flake /path/to/flakes/directory# + # + # The `nixpkgs.lib.nixosSystem` function is used to build this + # configuration, the following attribute set is its parameter. + # + # Run the following command in the flake's directory to + # deploy this configuration on any NixOS system: + # sudo nixos-rebuild switch --flake .#nixos-test + "nix-laptop" = nixpkgs.lib.nixosSystem { + system = "x86_64-linux"; + + # The Nix module system can modularize configuration, + # improving the maintainability of configuration. + # + # Each parameter in the `modules` is a Nix Module, and + # there is a partial introduction to it in the nixpkgs manual: + # + # It is said to be partial because the documentation is not + # complete, only some simple introductions. + # such is the current state of Nix documentation... + # + # A Nix Module can be an attribute set, or a function that + # returns an attribute set. By default, if a Nix Module is a + # function, this function have the following default parameters: + # + # lib: the nixpkgs function library, which provides many + # useful functions for operating Nix expressions: + # https://nixos.org/manual/nixpkgs/stable/#id-1.4 + # config: all config options of the current flake, every useful + # options: all options defined in all NixOS Modules + # in the current flake + # pkgs: a collection of all packages defined in nixpkgs, + # plus a set of functions related to packaging. + # you can assume its default value is + # `nixpkgs.legacyPackages."${system}"` for now. + # can be customed by `nixpkgs.pkgs` option + # modulesPath: the default path of nixpkgs's modules folder, + # used to import some extra modules from nixpkgs. + # this parameter is rarely used, + # you can ignore it for now. + # + # The default parameters mentioned above are automatically + # generated by Nixpkgs. + # However, if you need to pass other non-default parameters + # to the submodules, + # you'll have to manually configure these parameters using + # `specialArgs`. + # you must use `specialArgs` by uncomment the following line: + # + # specialArgs = {...}; # pass custom arguments into all sub module. + modules = [ + # Import the configuration.nix here, so that the + # old configuration file can still take effect. + # Note: configuration.nix itself is also a Nix Module, + ./configuration.nix + nixos-hardware.nixosModules.dell-xps-15-7590-nvidia + + ]; + }; + "nix-laptop-no-gpu" = nixpkgs.lib.nixosSystem { + system = "x86_64-linux"; + modules = [ + # Import the configuration.nix here, so that the + # old configuration file can still take effect. + # Note: configuration.nix itself is also a Nix Module, + ./configuration.nix + nixos-hardware.nixosModules.dell-xps-15-7590 + ]; + }; + }; + }; +} diff --git a/laptop/hardware-configuration.nix b/laptop/hardware-configuration.nix new file mode 100644 index 0000000..041c0ce --- /dev/null +++ b/laptop/hardware-configuration.nix @@ -0,0 +1,40 @@ +# 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" "nvme" "usb_storage" "uas" "sd_mod" "rtsx_pci_sdmmc" ]; + boot.initrd.kernelModules = [ ]; + boot.kernelModules = [ "kvm-intel" ]; + boot.extraModulePackages = [ ]; + + fileSystems."/" = + { device = "/dev/disk/by-uuid/b90bb1c8-922d-45b4-b911-74c37dca2ed3"; + fsType = "ext4"; + }; + + fileSystems."/boot" = + { device = "/dev/disk/by-uuid/A8FA-CBD2"; + fsType = "vfat"; + }; + + swapDevices = + [ { device = "/dev/disk/by-uuid/0b333658-fb7a-4120-8fc7-b1d00c0588c3"; } + ]; + + # 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.wlp59s0.useDHCP = lib.mkDefault true; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + powerManagement.cpuFreqGovernor = lib.mkDefault "powersave"; + hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; +}