diff --git a/config/hosts/aspects/doloro-laptop/home.nix b/config/hosts/aspects/doloro-laptop/home.nix index 6d4e092..9631830 100644 --- a/config/hosts/aspects/doloro-laptop/home.nix +++ b/config/hosts/aspects/doloro-laptop/home.nix @@ -15,6 +15,7 @@ modules.fish modules.kitty + modules.stylix ]; nixos = { config, pkgs, ... }: diff --git a/config/hosts/aspects/doloro-laptop/host.nix b/config/hosts/aspects/doloro-laptop/host.nix index 715163a..e194b7b 100644 --- a/config/hosts/aspects/doloro-laptop/host.nix +++ b/config/hosts/aspects/doloro-laptop/host.nix @@ -9,6 +9,7 @@ includes = [ modules.nix modules.tuigreet + ]; nixos = { pkgs, config, ... }: @@ -116,6 +117,27 @@ users.mutableUsers = false; services.system76-scheduler.enable = true; + powerManagement = { + enable = true; + # powertop.enable = true; + }; + + boot.kernelParams = [ + # "mem_sleep_default=deep" + # "i915.fastboot=1" + "ahci.mobile_lpm_policy=1" + ]; + + services.logind.settings.Login = { + HandleLidSwitch = "suspend"; + HandleLidSwitchExternalPower = "suspend"; + HandleLidSwitchDocked = "ignore"; + }; + systemd.sleep.extraConfig = '' + HibernateDelaySec=30min + SuspendEstimationSec=120 + ''; + # programs.firefox.enable = true; # List packages installed in system profile. diff --git a/config/modules/hyprland/doloro-settings.nix b/config/modules/hyprland/doloro-settings.nix index e2a6c70..731e8cd 100644 --- a/config/modules/hyprland/doloro-settings.nix +++ b/config/modules/hyprland/doloro-settings.nix @@ -8,6 +8,7 @@ { home.packages = [ pkgs.hyprcursor + pkgs.wlogout ]; home.pointerCursor = { enable = true; @@ -100,7 +101,7 @@ bind = [ "$mainMod, C, killactive" "$mainMod, M, exec, uwsm stop" - "$mainMod, E, exec, $fileManager" + "$mainMod, E, exec, zen" "$mainMod, Q, exec, kitty" "$mainMod, V, togglefloating," "$mainMod, P, pseudo, # dwindle" diff --git a/config/modules/power-management/auto-cpufreq.nix b/config/modules/power-management/auto-cpufreq.nix new file mode 100644 index 0000000..821b2ec --- /dev/null +++ b/config/modules/power-management/auto-cpufreq.nix @@ -0,0 +1,19 @@ +{ den, modules, ... }: +{ + modules.auto-cpufreq = { + nixos = + { ... }: + { + services.auto-cpufreq.settings = { + battery = { + governor = "powersave"; + turbo = "never"; + }; + charger = { + governor = "performance"; + turbo = "auto"; + }; + }; + }; + }; +} diff --git a/config/modules/power-management/battery-ac-targets.nix b/config/modules/power-management/battery-ac-targets.nix new file mode 100644 index 0000000..c277697 --- /dev/null +++ b/config/modules/power-management/battery-ac-targets.nix @@ -0,0 +1,13 @@ +{ den, modules, ... }: +{ + modules.battery-ac-targets = { + nixos = + { ... }: + { + services.udev.extraRules = '' + SUBSYSTEM=="power_supply",ENV{POWER_SUPPLY_ONLINE}=="0", RUN+="/run/current-system/systemd/bin/systemctl start battery.target" + SUBSYSTEM=="power_supply", ENV{POWER_SUPPLY_ONLINE}=="1", RUN+="/run/current-system/systemd/bin/systemctl start ac.target" + ''; + }; + }; +} diff --git a/config/modules/power-management/common.nix b/config/modules/power-management/common.nix new file mode 100644 index 0000000..ad773d7 --- /dev/null +++ b/config/modules/power-management/common.nix @@ -0,0 +1,13 @@ +{ den, modules, ... }: +{ + modules.common.provides = { + laptop-power-management = { + includes = [ + modules.auto-cpufreq + modules.battery-ac-targets + modules.intel-mgm + modules.tlp + ]; + }; + }; +} diff --git a/config/modules/power-management/intel-gpu-management.nix b/config/modules/power-management/intel-gpu-management.nix new file mode 100644 index 0000000..9f18d0a --- /dev/null +++ b/config/modules/power-management/intel-gpu-management.nix @@ -0,0 +1,46 @@ +{ den, modules, ... }: +{ + # Intel Mobile Gpu Management + modules.intel-mgm = { + nixos = + { pkgs, ... }: + let + batt-gpu = pkgs.writeShellScript "batt-igpu" '' + ${pkgs.intel-gpu-tools}/bin/intel_gpu_frequency -e + echo "800" > /sys/class/drm/card1/gt_boost_freq_mhz + ''; + ac-gpu = pkgs.writeShellScript "ac-igpu" '' + ${pkgs.intel-gpu-tools}/bin/intel_gpu_frequency -d + echo "2350" > /sys/class/drm/card1/gt_boost_freq_mhz + ''; + in + { + systemd.services.gpu-limit-on-batt = { + enable = true; + description = "Using rfkill; disable all rf devices before sleeping."; + before = [ "battery.target" ]; + + serviceConfig = { + Type = "oneshot"; + ExecStart = "${batt-gpu}"; + RemainAfterExit = true; + }; + wantedBy = [ "battery.target" ]; + partOf = [ "battery.target" ]; + }; + systemd.services.gpu-limit-on-ac = { + enable = true; + description = "Using rfkill; disable all rf devices before sleeping."; + before = [ "ac.target" ]; + + serviceConfig = { + Type = "oneshot"; + ExecStart = "${ac-gpu}"; + RemainAfterExit = true; + }; + wantedBy = [ "ac.target" ]; + partOf = [ "ac.target" ]; + }; + }; + }; +} diff --git a/config/modules/power-management/tlp.nix b/config/modules/power-management/tlp.nix new file mode 100644 index 0000000..edb0ac7 --- /dev/null +++ b/config/modules/power-management/tlp.nix @@ -0,0 +1,45 @@ +{ den, modules, ... }: +{ + modules.tlp = { + homeManager = { }; + nixos = { + services.tlp = { + enable = true; + settings = { + # Wireless power saving + WIFI_PWR_ON_BAT = "1"; + + # USB autosuspend + USB_AUTOSUSPEND = "1"; + + # SATA drive power management + SATA_LINKPWR_ON_BAT = "min_power"; + + # PCI Express Active-State Power Management (ASPM) + PCIE_ASPM_ON_BAT = "powersupersave"; + + RUNTIME_PM_ON_AC = "auto"; + RUNTIME_PM_ON_BAT = "auto"; + + # Disable Bluetooth on battery + # DEVICES_TO_DISABLE_ON_BAT = "bluetooth"; + + # Restore brightness on battery + RESTORE_BRIGHTNESS_ON_BAT = "1"; + PCIE_ASPM_ON_AC = "balanced"; + DEVICES_TO_DISABLE_ON_BAT_NOT_IN_USE = "bluetooth"; + INTEL_GPU_MAX_FREQ_ON_AC = 0; + INTEL_GPU_MAX_FREQ_ON_BAT = 800; + INTEL_GPU_BOOST_FREQ_ON_AC = 0; + INTEL_GPU_BOOST_FREQ_ON_BAT = 800; + + CPU_MAX_PERF_ON_BAT = 50; + + PLATFORM_PROFILE_ON_AC = "balanced"; + PLATFORM_PROFILE_ON_BAT = "quiet"; + STOP_CHARGE_THRESH_BAT0 = 80; + }; + }; + }; + }; +} diff --git a/config/modules/stylix.nix b/config/modules/stylix.nix new file mode 100644 index 0000000..6dccae7 --- /dev/null +++ b/config/modules/stylix.nix @@ -0,0 +1,42 @@ +{ + den, + modules, + inputs, + ... +}: +{ + flake-file.inputs = { + stylix = { + url = "github:nix-community/stylix"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + }; + modules.stylix = { + homeManager = + { pkgs, ... }: + { + imports = [ inputs.stylix.homeModules.stylix ]; + stylix = { + enable = true; + autoEnable = false; + targets.gtk.enable = true; + targets.qt.enable = true; + targets.tmux.enable = false; + fonts = { + monospace = { + name = "CaskaydiaCove Nerd Font Mono"; + package = pkgs.nerd-fonts.caskaydia-cove; + }; + }; + base16Scheme = "${pkgs.base16-schemes}/share/themes/gruvbox-dark-hard.yaml"; + }; + }; + nixos = + { ... }: + { + imports = [ inputs.stylix.nixosModules.stylix ]; + stylix.enable = true; + stylix.autoEnable = false; + }; + }; +} diff --git a/flake.lock b/flake.lock index 0e32288..9f81af5 100644 --- a/flake.lock +++ b/flake.lock @@ -33,6 +33,74 @@ "type": "github" } }, + "base16": { + "inputs": { + "fromYaml": "fromYaml" + }, + "locked": { + "lastModified": 1755819240, + "narHash": "sha256-qcMhnL7aGAuFuutH4rq9fvAhCpJWVHLcHVZLtPctPlo=", + "owner": "SenchoPens", + "repo": "base16.nix", + "rev": "75ed5e5e3fce37df22e49125181fa37899c3ccd6", + "type": "github" + }, + "original": { + "owner": "SenchoPens", + "repo": "base16.nix", + "type": "github" + } + }, + "base16-fish": { + "flake": false, + "locked": { + "lastModified": 1765809053, + "narHash": "sha256-XCUQLoLfBJ8saWms2HCIj4NEN+xNsWBlU1NrEPcQG4s=", + "owner": "tomyun", + "repo": "base16-fish", + "rev": "86cbea4dca62e08fb7fd83a70e96472f92574782", + "type": "github" + }, + "original": { + "owner": "tomyun", + "repo": "base16-fish", + "rev": "86cbea4dca62e08fb7fd83a70e96472f92574782", + "type": "github" + } + }, + "base16-helix": { + "flake": false, + "locked": { + "lastModified": 1760703920, + "narHash": "sha256-m82fGUYns4uHd+ZTdoLX2vlHikzwzdu2s2rYM2bNwzw=", + "owner": "tinted-theming", + "repo": "base16-helix", + "rev": "d646af9b7d14bff08824538164af99d0c521b185", + "type": "github" + }, + "original": { + "owner": "tinted-theming", + "repo": "base16-helix", + "type": "github" + } + }, + "base16-vim": { + "flake": false, + "locked": { + "lastModified": 1732806396, + "narHash": "sha256-e0bpPySdJf0F68Ndanwm+KWHgQiZ0s7liLhvJSWDNsA=", + "owner": "tinted-theming", + "repo": "base16-vim", + "rev": "577fe8125d74ff456cf942c733a85d769afe58b7", + "type": "github" + }, + "original": { + "owner": "tinted-theming", + "repo": "base16-vim", + "rev": "577fe8125d74ff456cf942c733a85d769afe58b7", + "type": "github" + } + }, "den": { "locked": { "lastModified": 1769935356, @@ -66,6 +134,22 @@ "type": "github" } }, + "firefox-gnome-theme": { + "flake": false, + "locked": { + "lastModified": 1764873433, + "narHash": "sha256-1XPewtGMi+9wN9Ispoluxunw/RwozuTRVuuQOmxzt+A=", + "owner": "rafaelmardojai", + "repo": "firefox-gnome-theme", + "rev": "f7ffd917ac0d253dbd6a3bf3da06888f57c69f92", + "type": "github" + }, + "original": { + "owner": "rafaelmardojai", + "repo": "firefox-gnome-theme", + "type": "github" + } + }, "flake-aspects": { "locked": { "lastModified": 1769723924, @@ -153,6 +237,43 @@ "type": "github" } }, + "flake-parts_3": { + "inputs": { + "nixpkgs-lib": [ + "stylix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1767609335, + "narHash": "sha256-feveD98mQpptwrAEggBQKJTYbvwwglSbOv53uCfH9PY=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "250481aafeb741edfe23d29195671c19b36b6dca", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "fromYaml": { + "flake": false, + "locked": { + "lastModified": 1731966426, + "narHash": "sha256-lq95WydhbUTWig/JpqiB7oViTcHFP8Lv41IGtayokA8=", + "owner": "SenchoPens", + "repo": "fromYaml", + "rev": "106af9e2f715e2d828df706c386a685698f3223b", + "type": "github" + }, + "original": { + "owner": "SenchoPens", + "repo": "fromYaml", + "type": "github" + } + }, "gitignore": { "inputs": { "nixpkgs": [ @@ -175,6 +296,25 @@ "type": "github" } }, + "gnome-shell": { + "flake": false, + "locked": { + "host": "gitlab.gnome.org", + "lastModified": 1767737596, + "narHash": "sha256-eFujfIUQDgWnSJBablOuG+32hCai192yRdrNHTv0a+s=", + "owner": "GNOME", + "repo": "gnome-shell", + "rev": "ef02db02bf0ff342734d525b5767814770d85b49", + "type": "gitlab" + }, + "original": { + "host": "gitlab.gnome.org", + "owner": "GNOME", + "ref": "gnome-49", + "repo": "gnome-shell", + "type": "gitlab" + } + }, "home-manager": { "inputs": { "nixpkgs": [ @@ -649,6 +789,31 @@ "type": "github" } }, + "nur": { + "inputs": { + "flake-parts": [ + "stylix", + "flake-parts" + ], + "nixpkgs": [ + "stylix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1767810917, + "narHash": "sha256-ZKqhk772+v/bujjhla9VABwcvz+hB2IaRyeLT6CFnT0=", + "owner": "nix-community", + "repo": "NUR", + "rev": "dead29c804adc928d3a69dfe7f9f12d0eec1f1a4", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "NUR", + "type": "github" + } + }, "pre-commit-hooks": { "inputs": { "flake-compat": "flake-compat", @@ -716,7 +881,8 @@ "nixvim": "nixvim", "raspberry-pi-nix": "raspberry-pi-nix", "sops-nix": "sops-nix", - "systems": "systems_3", + "stylix": "stylix", + "systems": "systems_4", "zen-browser": "zen-browser" } }, @@ -859,6 +1025,40 @@ "type": "github" } }, + "stylix": { + "inputs": { + "base16": "base16", + "base16-fish": "base16-fish", + "base16-helix": "base16-helix", + "base16-vim": "base16-vim", + "firefox-gnome-theme": "firefox-gnome-theme", + "flake-parts": "flake-parts_3", + "gnome-shell": "gnome-shell", + "nixpkgs": [ + "nixpkgs" + ], + "nur": "nur", + "systems": "systems_3", + "tinted-foot": "tinted-foot", + "tinted-kitty": "tinted-kitty", + "tinted-schemes": "tinted-schemes", + "tinted-tmux": "tinted-tmux", + "tinted-zed": "tinted-zed" + }, + "locked": { + "lastModified": 1770914701, + "narHash": "sha256-QHFYyngohNhih4w+3IqQty5DV+p1txsx1kkk6XJWar8=", + "owner": "nix-community", + "repo": "stylix", + "rev": "db03fed72e5ca02be34e1d24789345a943329738", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "stylix", + "type": "github" + } + }, "systems": { "locked": { "lastModified": 1689347949, @@ -904,6 +1104,102 @@ "type": "github" } }, + "systems_4": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "tinted-foot": { + "flake": false, + "locked": { + "lastModified": 1726913040, + "narHash": "sha256-+eDZPkw7efMNUf3/Pv0EmsidqdwNJ1TaOum6k7lngDQ=", + "owner": "tinted-theming", + "repo": "tinted-foot", + "rev": "fd1b924b6c45c3e4465e8a849e67ea82933fcbe4", + "type": "github" + }, + "original": { + "owner": "tinted-theming", + "repo": "tinted-foot", + "rev": "fd1b924b6c45c3e4465e8a849e67ea82933fcbe4", + "type": "github" + } + }, + "tinted-kitty": { + "flake": false, + "locked": { + "lastModified": 1735730497, + "narHash": "sha256-4KtB+FiUzIeK/4aHCKce3V9HwRvYaxX+F1edUrfgzb8=", + "owner": "tinted-theming", + "repo": "tinted-kitty", + "rev": "de6f888497f2c6b2279361bfc790f164bfd0f3fa", + "type": "github" + }, + "original": { + "owner": "tinted-theming", + "repo": "tinted-kitty", + "type": "github" + } + }, + "tinted-schemes": { + "flake": false, + "locked": { + "lastModified": 1767710407, + "narHash": "sha256-+W1EB79Jl0/gm4JqmO0Nuc5C7hRdp4vfsV/VdzI+des=", + "owner": "tinted-theming", + "repo": "schemes", + "rev": "2800e2b8ac90f678d7e4acebe4fa253f602e05b2", + "type": "github" + }, + "original": { + "owner": "tinted-theming", + "repo": "schemes", + "type": "github" + } + }, + "tinted-tmux": { + "flake": false, + "locked": { + "lastModified": 1767489635, + "narHash": "sha256-e6nnFnWXKBCJjCv4QG4bbcouJ6y3yeT70V9MofL32lU=", + "owner": "tinted-theming", + "repo": "tinted-tmux", + "rev": "3c32729ccae99be44fe8a125d20be06f8d7d8184", + "type": "github" + }, + "original": { + "owner": "tinted-theming", + "repo": "tinted-tmux", + "type": "github" + } + }, + "tinted-zed": { + "flake": false, + "locked": { + "lastModified": 1767488740, + "narHash": "sha256-wVOj0qyil8m+ouSsVZcNjl5ZR+1GdOOAooAatQXHbuU=", + "owner": "tinted-theming", + "repo": "base16-zed", + "rev": "11abb0b282ad3786a2aae088d3a01c60916f2e40", + "type": "github" + }, + "original": { + "owner": "tinted-theming", + "repo": "base16-zed", + "type": "github" + } + }, "xdph": { "inputs": { "hyprland-protocols": [ diff --git a/flake.nix b/flake.nix index ba58378..3f70a9c 100644 --- a/flake.nix +++ b/flake.nix @@ -29,6 +29,10 @@ inputs.nixpkgs.follows = "nixpkgs"; url = "github:Mic92/sops-nix"; }; + stylix = { + inputs.nixpkgs.follows = "nixpkgs"; + url = "github:nix-community/stylix"; + }; systems.url = "github:nix-systems/default"; zen-browser = { inputs.nixpkgs.follows = "nixpkgs";