diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a357584 --- /dev/null +++ b/.gitignore @@ -0,0 +1,9 @@ +# Ignore build outputs from performing a nix-build or `nix build` command +result +result-* + +# Ignore automatically generated direnv output +.direnv + +# Ignore NixOS interactive test driver history +**/.nixos-test-history diff --git a/flake.nix b/flake.nix index ffcc356..96e28ad 100644 --- a/flake.nix +++ b/flake.nix @@ -4,7 +4,7 @@ inputs = { nixpkgs.url = "github:nixos/nixpkgs/nixos-26.05"; nixpkgs-unstable.url = "github:nixos/nixpkgs/nixpkgs-unstable"; # used for some packages - + # Only uncomment when needed. This uses a lot of space and compute ressources for sometimes not that much. If not used, make it follow unstable nixpkgs-master.follows = "nixpkgs-unstable"; #nixpkgs-master.url = "github:nixos/nixpkgs/master"; # used with precaution as they are untested and not cached diff --git a/modules/applications/hyprland.nix b/modules/applications/hyprland.nix index d2c3c4a..d851950 100644 --- a/modules/applications/hyprland.nix +++ b/modules/applications/hyprland.nix @@ -198,8 +198,8 @@ "$mod_SHIFT, S, exec, caelestia shell picker open" # framework 16 rgb macropad "Ctrl+$mod, 6, exec, custom-killall" # pos 1 1 killall apps except focused one - #"Ctrl+Alt, 7, exec, custom-performance" # pos 2 1 start performance mode - "Ctrl+Alt, 7, exec, caelestia shell gameMode toggle" + "Ctrl+Alt, 7, exec, custom-performance" # pos 2 1 start performance mode + #"Ctrl+Alt, 7, exec, caelestia shell gameMode toggle" # reloads the autostart programs # pos 3 1 # we passed to caelestia-shell and stoped using that /* @@ -211,7 +211,9 @@ #"Ctrl+Alt, 1, exec, swaync-client -t" # pos 4 1 notification center "Ctrl+Alt, 1, exec, qs ipc call notifications toggle" */ + # pos 4 1 notification center. "Ctrl+Alt, 1, exec, caelestia shell drawers toggle sidebar" + "Ctrl+Alt, 1, exec, [[ -f ~/.cache/hypr-battery-saver ]] || swaync-client -t" "Ctrl+$mod, 4, exec, caelestia shell notifs toggleDnd" "Ctrl+$mod, 3, exec, pavucontrol" # pos 1 2 audiocontrol "Ctrl+Shift+Alt, 0, exec, kitty --hold --class \"custom-changeAudioOutput\" --name \"Select audio output\" zsh -c \"custom-changeAudioOutput\"" # pos 2 2 change audio output fzf @@ -279,6 +281,8 @@ #"QS-notifycache" # builds the cache that will be used for the notification history "sleep 4 & caelestia-shell" #works better if it sleeps a bit before "sleep 20 && ngcp pull --automatic" # see github.com/tomasriveral/nix-git-cherry-picker + "rm ~/.cache/hypr-battery-saver" + "rm ~/.cache/hypr-battery-saver.brightness" /* We stopped using that ######################### maybe we should desactivate those scripts # login autostart diff --git a/modules/applications/mathematics.nix b/modules/applications/mathematics.nix index 2d8ce6e..e5cded2 100644 --- a/modules/applications/mathematics.nix +++ b/modules/applications/mathematics.nix @@ -3,5 +3,5 @@ _: { environment.systemPackages = with pkgs; [ elan ]; - }; + }; } diff --git a/modules/applications/neovim.nix b/modules/applications/neovim.nix index c405449..9c7eca9 100644 --- a/modules/applications/neovim.nix +++ b/modules/applications/neovim.nix @@ -52,6 +52,7 @@ _: { pkgs-unstable.vimPlugins.nvim-treesitter-parsers.nix pkgs-unstable.vimPlugins.nvim-treesitter-parsers.printf pkgs-unstable.vimPlugins.nvim-treesitter-parsers.python + pkgs-unstable.vimPlugins.nvim-treesitter-parsers.sparql pkgs-unstable.vimPlugins.telescope-nvim pkgs-unstable.vimPlugins.nvim-scrollbar pkgs-unstable.vimPlugins.promise-async diff --git a/modules/applications/waybar.nix b/modules/applications/waybar.nix index 3fbe247..4567825 100644 --- a/modules/applications/waybar.nix +++ b/modules/applications/waybar.nix @@ -1,4 +1,32 @@ _: { + flake.homeModules.waybar-minimal = _: { + programs.waybar = { + enable = true; + settings = [ + { + layer = "top"; + modules-left = []; + modules-center = []; + modules-right = [ + "battery" + "clock" + ]; + + battery = { + format = "{capacity}% {icon}"; + states = { + warning = 30; + critical = 15; + }; + }; + + clock = { + format = "{:%H:%M}"; + }; + } + ]; + }; + }; flake.homeModules.waybar = _: { # replaced by caelestia programs.waybar = { diff --git a/modules/applications/zsh.nix b/modules/applications/zsh.nix index c58545b..cc40343 100644 --- a/modules/applications/zsh.nix +++ b/modules/applications/zsh.nix @@ -2,8 +2,25 @@ _: { flake.homeModules.zsh-laptop = _: { programs.zsh = { shellAliases = { - snrt = "git -C ~/nixos add -A && time sudo nixos-rebuild test --flake ~/nixos/#laptop && pkill shell || true && pkill caelestia-shell || true && caelestia-shell -n > /dev/null 2>&1 & disown"; - snrs = "git -C ~/nixos add -A && time sudo nixos-rebuild switch --flake ~/nixos/#laptop && pkill shell || true && pkill caelestia-shell || true && caelestia-shell -n > /dev/null 2>&1 & disown"; + snrt = '' + git -C ~/nixos add -A && + time sudo nixos-rebuild test --flake ~/nixos/#laptop && + pkill shell || true && + if [ ! -f ~/.cache/hypr-battery-saver ]; then + pkill caelestia-shell || true && + caelestia-shell -n > /dev/null 2>&1 & disown + fi + ''; + + snrs = '' + git -C ~/nixos add -A && + time sudo nixos-rebuild switch --flake ~/nixos/#laptop && + pkill shell || true && + if [ ! -f ~/.cache/hypr-battery-saver ]; then + pkill caelestia-shell || true && + caelestia-shell -n > /dev/null 2>&1 & disown + fi + ''; }; }; }; @@ -33,7 +50,7 @@ _: { command cat "$@" fi } - + custom-eza() { # behaves differently if we just call it or if we pipe initContent if [[ -t 1 ]]; then eza -hlF -aa --color=always --hyperlink --group-directories-first --show-symlinks --icons=always --git --no-permissions "$@" diff --git a/modules/hardware/battery.nix b/modules/hardware/battery.nix index 13e27b2..096d37d 100644 --- a/modules/hardware/battery.nix +++ b/modules/hardware/battery.nix @@ -1,9 +1,9 @@ -_: { - flake.nixosModules.battery-laptop = { - lib, - config, - ... - }: +{ + self, + inputs, + ... +}: { + flake.nixosModules.battery-laptop = {pkgs, ...}: # https://discourse.nixos.org/t/what-is-the-best-option-for-power-management/63406/2 # we just activate tlp unconditonally #let @@ -22,7 +22,8 @@ _: { # }; # config = lib.mkIf cfg.battery.enable { - powerManagement.powertop.enable = true; # enable powertop auto tuning on startup. + /* + powerManagement.powertop.enable = true; # enable powertop auto tuning on startup. # Acording to https://community.frame.work/t/solved-keys-stick-and-repeat-after-being-released/51153/12 # Some powertop bug is responsable for the problem of the random keypress being stuck # fix: from https://git.gabbie.blue/blue/nixconf/src/commit/2d1bc6dad4684c019b6b3e894408e76e2734806c/hosts/gabbielaptop/configuration.nix#L68 @@ -31,10 +32,11 @@ _: { # Retrigger macropad udev rules ${lib.getExe' config.systemd.package "udevadm"} trigger -c bind -s usb -a idVendor=32ac -a idProduct=0013 ''; + */ services.system76-scheduler.settings.cfsProfiles.enable = true; # Better scheduling for CPU cycles - thanks System76!!! - services.thermald.enable = true; # Enable thermald, the temperature management daemon. (only necessary if on Intel CPUs) - services.power-profiles-daemon.enable = false; # Disable GNOMEs power management - services.tlp = { + services.thermald.enable = false; # Enable thermald, the temperature management daemon. (only necessary if on Intel CPUs) + services.power-profiles-daemon.enable = true; # ppd is recommended over tlp for framework 16 + /*services.tlp = { enable = true; # Enable TLP (better than gnomes internal power manager) settings = { CPU_BOOST_ON_AC = 1; @@ -47,11 +49,12 @@ _: { CPU_ENERGY_PERF_POLICY_ON_BAT = "powersave"; PLATFORM_PROFILE_ON_AC = "balanced"; PLATFORM_PROFILE_ON_BAT = "powersave"; - START_CHARGE_THRESH_BAT1 = 40; STOP_CHARGE_THRESH_BAT1 = 80; }; - }; - # }; + };*/ + environment.systemPackages = [ + self.packages.${pkgs.system}.custom-performance + ]; }; perSystem = {pkgs, ...}: let NotifySound = ../../assets/battery_notify.mp3; @@ -336,28 +339,97 @@ _: { name = "custom-performance"; runtimeInputs = with pkgs; [ hyprland - gawk + brightnessctl + swaynotificationcenter + self.packages.${pkgs.system}.custom-wallpaper libnotify + inputs.caelestia-shell.packages.${pkgs.system}.default ]; text = '' - HYPRGAMEMODE=$(hyprctl getoption animations:enabled | awk 'NR==1{print $2}') - if [ "$HYPRGAMEMODE" = 1 ] ; then + STATE="$HOME/.cache/hypr-battery-saver" + + enable() { + mkdir -p "$(dirname "$STATE")" + + echo "Enabling battery saver mode..." + + # Save brightness + brightnessctl get > "''${STATE}.brightness" 2>/dev/null || true + + # Kill heavy UI components + pkill -f caelestia-shell || true + pkill -f caelestia || true + pkill shell || true + pkill -f custom-wallpaper || true + + # Start lightweight notifications + pkill swaync || true + swaync & disown + + # Start lightweight waybar + pkill waybar || true + waybar & disown + + # Lower refresh rate (BIGGEST win) + hyprctl keyword monitor "eDP-1,2560x1600@60,0x0,1" + + # Core performance toggles hyprctl --batch "\ keyword animations:enabled 0;\ - keyword animation borderangle,0; \ + keyword animation borderangle,0;\ keyword decoration:shadow:enabled 0;\ keyword decoration:blur:enabled 0;\ - keyword decoration:fullscreen_opacity 1;\ + keyword decoration:rounding 0;\ + keyword decoration:fullscreen_opacity 1;\ keyword general:gaps_in 0;\ keyword general:gaps_out 0;\ keyword general:border_size 1;\ - keyword decoration:rounding 0" - notify-send -u critical -t 5000 "Performance mode [ON]" - exit - else - notify-send -u critical -t 5000 "Performance mode [OFF]" + keyword decoration:active_opacity 1;\ + keyword decoration:inactive_opacity 1;\ + keyword misc:vfr true" + + # Lower brightness + brightnessctl set 5% 2>/dev/null || true + + touch "$STATE" + + notify-send "Battery Saver" "Enabled" + } + + disable() { + echo "Disabling battery saver mode..." + + # Restore refresh rate + hyprctl keyword monitor "eDP-1,2560x1600@165,0x0,1" + + # Restore Caelestia + pkill swaync || true + pkill waybar || true + caelestia shell -d >/dev/null 2>&1 & + disown + + + # Restart wallpaper + custom-wallpaper >/dev/null 2>&1 & + disown + + # Restore full UI via reload (safe here on exit) hyprctl reload - exit 0 + + # Restore brightness + if [[ -f "''${STATE}.brightness" ]]; then + brightnessctl set "$(cat "''${STATE}.brightness")" 2>/dev/null || true + fi + + rm -f "$STATE" "''${STATE}.brightness" + + notify-send "Battery Saver" "Disabled" + } + + if [[ -f "$STATE" ]]; then + disable + else + enable fi ''; }; diff --git a/modules/hardware/performance.nix b/modules/hardware/performance.nix new file mode 100644 index 0000000..868124f --- /dev/null +++ b/modules/hardware/performance.nix @@ -0,0 +1,7 @@ +{self, ...}: { + flake.nixosModules.performance-desktop = {pkgs,...}: { + environment.systemPackages = [ + self.packages.${pkgs.system}.custom-performance + ]; + }; +} diff --git a/modules/hosts/desktop.nix b/modules/hosts/desktop.nix index b56cb9d..6dbf7bf 100644 --- a/modules/hosts/desktop.nix +++ b/modules/hosts/desktop.nix @@ -44,6 +44,7 @@ office #ollama otherUtils + performance-desktop printer rss udev @@ -74,15 +75,17 @@ rofi sbb-tui ssh + swaync # used in performance mode thunderbird tomasr vivify + waybar-minimal # used in performance mode zoxide zsh zsh-desktop ]; }; - flake.nixosModules.desktop = _: { + flake.nixosModules.desktop = {pkgs, ...}: { # 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 @@ -94,6 +97,9 @@ "nix-command" "flakes" ]; + environment.systemPackages = [ + self.packages.${pkgs.system}.custom-performance + ]; }; flake.nixosModules.home-manager-desktop = {pkgs, ...}: { imports = [ diff --git a/modules/hosts/laptop.nix b/modules/hosts/laptop.nix index 13553ba..76ed58d 100644 --- a/modules/hosts/laptop.nix +++ b/modules/hosts/laptop.nix @@ -18,7 +18,7 @@ audioAndMedia autoCleanup-laptop autoUpdate-laptop - #battery-laptop + battery-laptop bluetooth bootloader browsers @@ -76,9 +76,11 @@ rofi sbb-tui ssh + swaync # used in performance mode thunderbird tomasr vivify + waybar-minimal # used in performance mode zoxide zsh zsh-laptop diff --git a/modules/utilities/nixUtils.nix b/modules/utilities/nixUtils.nix index 36964b6..5078834 100644 --- a/modules/utilities/nixUtils.nix +++ b/modules/utilities/nixUtils.nix @@ -1,4 +1,8 @@ -{inputs, self, ...}: { +{ + inputs, + self, + ... +}: { flake.nixosModules.nixUtils-laptop = _: { # nixpkgs-review crashed my laptop multiple times. We must reduce how much ressources it can take. # for reference, my laptop is a 12 core ryzen 7