From 5aa1fedfaf97bbcd48e7648299edf012855fd248 Mon Sep 17 00:00:00 2001 From: Alexander Szczepanski Date: Sat, 25 May 2024 15:41:10 +0200 Subject: [PATCH] framework-2024-05-25-15-41-10 --- backup/desktop.nix | 1 - backup/thinkpad.nix | 1 - config.json | 207 ++++++++++++++++++++++++++++++++++++++++++ configs/games.nix | 33 ++++--- configs/gnome.nix | 6 +- configs/gui.nix | 84 ----------------- configs/libvirt.nix | 3 +- configs/pantheon.nix | 16 ++-- configs/plasma.nix | 13 +++ configs/user-gui.nix | 83 ++++++++++++++--- home/bin/trim-check | 182 +++++++++++++++++++++++++++++++++++++ machine/desktop.nix | 1 - machine/framework.nix | 49 +++++++--- machine/nixos-vm.nix | 1 - machine/thinkpad.nix | 3 +- 15 files changed, 538 insertions(+), 145 deletions(-) create mode 100755 config.json delete mode 100755 configs/gui.nix create mode 100755 home/bin/trim-check diff --git a/backup/desktop.nix b/backup/desktop.nix index 48d7c7f..84a7b44 100755 --- a/backup/desktop.nix +++ b/backup/desktop.nix @@ -9,7 +9,6 @@ in imports = [ /etc/nixos/hardware-configuration.nix - ../configs/gui.nix ../configs/docker.nix ../configs/libvirt.nix ../configs/common.nix diff --git a/backup/thinkpad.nix b/backup/thinkpad.nix index 39b291a..578fca1 100755 --- a/backup/thinkpad.nix +++ b/backup/thinkpad.nix @@ -15,7 +15,6 @@ in [ /etc/nixos/hardware-configuration.nix - ../configs/gui.nix ../configs/docker.nix ../configs/libvirt.nix ../configs/common.nix diff --git a/config.json b/config.json new file mode 100755 index 0000000..faf9ffe --- /dev/null +++ b/config.json @@ -0,0 +1,207 @@ +{ + "defaultStrategy": "agile", + "strategyOnDischarging": "", + "batteryChargingStatusPath": "", + "strategies": { + "sleep": { + "fanSpeedUpdateFrequency": 5, + "movingAverageInterval": 40, + "speedCurve": [ + { + "temp": 0, + "speed": 0 + } + ] + }, + "lazyest": { + "fanSpeedUpdateFrequency": 5, + "movingAverageInterval": 40, + "speedCurve": [ + { + "temp": 0, + "speed": 0 + }, + { + "temp": 45, + "speed": 0 + }, + { + "temp": 65, + "speed": 25 + }, + { + "temp": 70, + "speed": 35 + }, + { + "temp": 75, + "speed": 50 + }, + { + "temp": 85, + "speed": 100 + } + ] + }, + "lazy": { + "fanSpeedUpdateFrequency": 5, + "movingAverageInterval": 30, + "speedCurve": [ + { + "temp": 0, + "speed": 15 + }, + { + "temp": 50, + "speed": 15 + }, + { + "temp": 65, + "speed": 25 + }, + { + "temp": 70, + "speed": 35 + }, + { + "temp": 75, + "speed": 50 + }, + { + "temp": 85, + "speed": 100 + } + ] + }, + "medium": { + "fanSpeedUpdateFrequency": 5, + "movingAverageInterval": 30, + "speedCurve": [ + { + "temp": 0, + "speed": 15 + }, + { + "temp": 40, + "speed": 15 + }, + { + "temp": 60, + "speed": 30 + }, + { + "temp": 70, + "speed": 40 + }, + { + "temp": 75, + "speed": 80 + }, + { + "temp": 85, + "speed": 100 + } + ] + }, + "agile": { + "fanSpeedUpdateFrequency": 3, + "movingAverageInterval": 15, + "speedCurve": [ + { + "temp": 0, + "speed": 15 + }, + { + "temp": 40, + "speed": 15 + }, + { + "temp": 60, + "speed": 30 + }, + { + "temp": 70, + "speed": 40 + }, + { + "temp": 75, + "speed": 80 + }, + { + "temp": 85, + "speed": 100 + } + ] + }, + "very-agile": { + "fanSpeedUpdateFrequency": 2, + "movingAverageInterval": 5, + "speedCurve": [ + { + "temp": 0, + "speed": 15 + }, + { + "temp": 40, + "speed": 15 + }, + { + "temp": 60, + "speed": 30 + }, + { + "temp": 70, + "speed": 40 + }, + { + "temp": 75, + "speed": 80 + }, + { + "temp": 85, + "speed": 100 + } + ] + }, + "deaf": { + "fanSpeedUpdateFrequency": 2, + "movingAverageInterval": 5, + "speedCurve": [ + { + "temp": 0, + "speed": 20 + }, + { + "temp": 40, + "speed": 30 + }, + { + "temp": 50, + "speed": 50 + }, + { + "temp": 60, + "speed": 100 + } + ] + }, + "aeolus": { + "fanSpeedUpdateFrequency": 2, + "movingAverageInterval": 5, + "speedCurve": [ + { + "temp": 0, + "speed": 20 + }, + { + "temp": 40, + "speed": 50 + }, + { + "temp": 65, + "speed": 100 + } + ] + } + } +} diff --git a/configs/games.nix b/configs/games.nix index 78c397f..33d23ca 100755 --- a/configs/games.nix +++ b/configs/games.nix @@ -1,24 +1,23 @@ { config, pkgs, lib, ... }: let - unstable = import { - config.allowUnfree = true; - config.packageOverrides = pkgs: { - steam = pkgs.steam.override { - extraPkgs = pkgs: with unstable.pkgs; [ - gamescope - mangohud - ncurses6 - ]; - }; - lutris = pkgs.lutris.override { - extraPkgs = pkgs: with unstable.pkgs; [ - gamescope - mangohud - ]; - }; - +unstable = import { + config.allowUnfree = true; + config.packageOverrides = pkgs: { + steam = pkgs.steam.override { + extraPkgs = pkgs: with unstable.pkgs; [ + gamescope + mangohud + ncurses6 + ]; + }; + lutris = pkgs.lutris.override { + extraPkgs = pkgs: with unstable.pkgs; [ + gamescope + mangohud + ]; }; }; +}; in { programs.steam = { diff --git a/configs/gnome.nix b/configs/gnome.nix index be67d8f..5701a1e 100755 --- a/configs/gnome.nix +++ b/configs/gnome.nix @@ -29,8 +29,12 @@ gnomeExtensions.blur-my-shell gnomeExtensions.vitals gnomeExtensions.dash-to-dock - gnomeExtensions.syncthing-indicator + # gnomeExtensions.syncthing-indicator pantheon.elementary-icon-theme + + flat-remix-icon-theme + flat-remix-gtk + flat-remix-gnome ]; environment.gnome.excludePackages = (with pkgs; [ gnome-tour ]) diff --git a/configs/gui.nix b/configs/gui.nix deleted file mode 100755 index ccd3811..0000000 --- a/configs/gui.nix +++ /dev/null @@ -1,84 +0,0 @@ -{ config, pkgs, ... }: -let - unstable = import { - config = { - allowUnfree = true; - }; - }; -in -{ - nixpkgs.config.allowUnfree = true; - - networking = { - firewall.enable = false; - networkmanager = { - enable = true; - }; - }; - - environment.systemPackages = with unstable.pkgs; [ - glxinfo - gparted - libsecret - gnome.simple-scan - ]; - - programs = { - dconf.enable = true; - adb.enable = true; - ssh = { - startAgent = true; - }; - # gnupg.agent = { - # enable = true; - # pinentryFlavor = "curses"; - # # enableSSHSupport = true; - # }; - }; - - fonts = { - enableDefaultPackages = true; - fontDir.enable = true; - - packages = with pkgs; [ - # (nerdfonts.override { fonts = [ "Liberation" ]; }) - nerdfonts - corefonts - google-fonts - liberation_ttf - libertinus - gyre-fonts - noto-fonts - noto-fonts-cjk - noto-fonts-emoji - noto-fonts-extra - - open-sans - stix-two - twemoji-color-font - ]; - - # fontconfig = { - # enable = true; - # antialias = true; - # defaultFonts = { - # # monospace = [ "Fira Mono" ]; - # serif = [ "Linux Libertine" ]; - # sansSerif = [ "Open Sans" ]; - # emoji = [ "Twitter Color Emoji" ]; - # }; - # }; - }; - - hardware.bluetooth.enable = true; - hardware.sane.enable = true; - - services = { - # mullvad-vpn.enable = true; - gvfs.enable = true; - # etesync-dav = { - # enable = true; - # apiUrl = "https://etesync.szczepan.ski/"; - # }; - }; -} diff --git a/configs/libvirt.nix b/configs/libvirt.nix index cf819e5..511bf77 100755 --- a/configs/libvirt.nix +++ b/configs/libvirt.nix @@ -1,5 +1,4 @@ { config, pkgs, lib, ... }: - { virtualisation = { libvirtd = { @@ -10,7 +9,7 @@ ovmf = { enable = true; packages = [ - (pkgs.unstable.OVMF.override { + (pkgs.OVMF.override { secureBoot = true; tpmSupport = true; }).fd diff --git a/configs/pantheon.nix b/configs/pantheon.nix index f5319c4..636280c 100755 --- a/configs/pantheon.nix +++ b/configs/pantheon.nix @@ -32,14 +32,14 @@ }; systemd.user.services = { - monitor = { - description = "indicator-monitor"; - wantedBy = [ "graphical-session.target" ]; - partOf = [ "graphical-session.target" ]; - serviceConfig = { - ExecStart = "${pkgs.monitor}/bin/com.github.stsdc.monitor"; - }; - }; + # monitor = { + # description = "indicator-monitor"; + # wantedBy = [ "graphical-session.target" ]; + # partOf = [ "graphical-session.target" ]; + # serviceConfig = { + # ExecStart = "${pkgs.monitor}/bin/com.github.stsdc.monitor"; + # }; + # }; indicatorapp = { description = "indicator-application-gtk3"; diff --git a/configs/plasma.nix b/configs/plasma.nix index 0848595..33a8744 100755 --- a/configs/plasma.nix +++ b/configs/plasma.nix @@ -6,6 +6,19 @@ kdeconnect.enable = true; }; + environment.systemPackages = with pkgs; [ + libsForQt5.kalk + libsForQt5.plasma-browser-integration + ]; + + environment.plasma5.excludePackages = with pkgs.libsForQt5; [ + # plasma-browser-integration + konsole + oxygen + ]; + + environment.etc."chromium/native-messaging-hosts/org.kde.plasma.browser_integration.json".source = "${pkgs.plasma-browser-integration}/etc/chromium/native-messaging-hosts/org.kde.plasma.browser_integration.json"; + services = { xserver = { enable = true; diff --git a/configs/user-gui.nix b/configs/user-gui.nix index adbdc67..64b0248 100755 --- a/configs/user-gui.nix +++ b/configs/user-gui.nix @@ -1,11 +1,77 @@ { config, pkgs, lib, ... }: - -with builtins; let unstable = import { config.allowUnfree = true; }; in { imports = [ ]; + networking = { + firewall.enable = false; + networkmanager = { + enable = true; + }; + }; + + fonts = { + enableDefaultPackages = true; + fontDir.enable = true; + + packages = with pkgs; [ + # (nerdfonts.override { fonts = [ "Liberation" ]; }) + nerdfonts + corefonts + google-fonts + liberation_ttf + libertinus + gyre-fonts + noto-fonts + noto-fonts-cjk + noto-fonts-emoji + noto-fonts-extra + + open-sans + stix-two + twemoji-color-font + ]; + + # fontconfig = { + # enable = true; + # antialias = true; + # defaultFonts = { + # # monospace = [ "Fira Mono" ]; + # serif = [ "Linux Libertine" ]; + # sansSerif = [ "Open Sans" ]; + # emoji = [ "Twitter Color Emoji" ]; + # }; + # }; + }; + + hardware = { + bluetooth.enable = true; + sane.enable = true; + }; + + services = { + gvfs.enable = true; + # mullvad-vpn.enable = true; + + # etesync-dav = { + # enable = true; + # apiUrl = "https://etesync.szczepan.ski/"; + # }; + }; + + programs = { + adb.enable = true; + ssh = { + startAgent = true; + }; + # dconf.enable = true; + # gnupg.agent = { + # enable = true; + # pinentryFlavor = "curses"; + # # enableSSHSupport = true; + # }; + }; environment.systemPackages = with unstable.pkgs; [ xfce.catfish @@ -14,7 +80,6 @@ in espeak-ng handbrake insomnia - libreoffice meld nextcloud-client pinta @@ -27,11 +92,13 @@ in grsync virt-manager rustdesk + glxinfo + gparted + gnome.simple-scan ]; home-manager.users.alex = { pkgs, ... }: { # services = { syncthing = { enable = true; }; }; - programs = { vscode = { enable = true; @@ -47,14 +114,6 @@ in }; }; - git = { - extraConfig = { - credential.helper = "${ - pkgs.git.override { withLibsecret = true; } - }/bin/git-credential-libsecret"; - }; - }; - kitty = { enable = true; extraConfig = '' diff --git a/home/bin/trim-check b/home/bin/trim-check new file mode 100755 index 0000000..668901e --- /dev/null +++ b/home/bin/trim-check @@ -0,0 +1,182 @@ +#!/usr/bin/env bash +# +# This script is provided "as is" without warranty of any kind, either expressed or implied, including, but not limited to, the implied warranties of merchantability, fitness for a particular purpose, or non-infringement. +# +# License GPL2 +# +# by desgua 2014/04/29 + +function CLEAN { +cd "$pasta" +[ -f test-trim-by-desgua ] && rm test-trim-by-desgua && echo "Temp file removed" +echo "Goodbye" +exit 0 +} + +trap 'echo ; echo "Aborted." ; CLEAN; echo ; exit 0' INT HUP + +if [[ "$(echo $USER)" != "root" ]]; then + +read -n 1 -p 'Become root? [Y/n]' a + if [[ $a == "Y" || $a == "y" || $a == "" ]]; then + sudo $0 $1 + exit 0 + else + echo " + This script needs root privilege. + " + exit 1 + + fi + +fi + + +name=$(echo $0 | sed 's/.*\///') +if [ $# -ne 1 ]; then + +echo " +Usage: $name /folder/to/test/ + +" +exit 1 +fi + +pasta=$1 + +read -n 1 -p 'Use fstrim? [y/N]' a +if [[ $a == "Y" || $a == "y" ]]; then + fs=1 +fi + +method= +while [[ "$method" != "1" && "$method" != "2" ]]; do +read -n 1 -s -p 'Choose a method: +[1] hdparm (will fail in LUKS on LVM) +[2] filefrag (warning: you may have to force quit - close the terminal - in some cases of success trim if you see an output that never ends) +' method +done + +function SDATEST { +disk=$(fdisk -l | grep /dev/nvme0n1) +if [ "$disk" == "" ]; then +echo " +fdisk did not found /dev/nvme0n1 +" +exit 1 +fi +} + +function TEST { +echo "Entrying /" ; echo +cd $pasta +echo "Creating the file test-trim-by-desgua at $pasta" ; echo +dd if=/dev/urandom of=test-trim-by-desgua count=10 bs=512k +echo "Syncing and sleeping 2 seconds." ; echo +sync +sleep 2 + +hdparm --fibmap test-trim-by-desgua +lbab=$(hdparm --fibmap test-trim-by-desgua | tail -n1 | awk '{ print $2 }') + +echo "As you can see, the file was created and its LBA begins at $lbab" ; echo + +echo "Syncing and sleeping 2 seconds." ; echo +sync +sleep 2 + +echo "Removing file test-trim-by-desgua" ; echo +rm test-trim-by-desgua + +trap 'echo ; echo ; echo "Aborted." ; echo ; exit 0' INT +echo "Syncing and sleeping 2 seconds." ; echo +sync +sleep 2 + +if [[ "$fs" == "1" ]]; then + echo "fstrim $pasta && sleep 2" ; echo + fstrim $pasta + sleep 2 +fi + +echo "This is readed from sector $lbab: " +hdparm --read-sector $lbab /dev/nvme0n1 + +pass=$(hdparm --read-sector $lbab /dev/nvme0n1 | grep "0000 0000 0000 0000") + +if [[ $pass == "" ]]; then + echo " +Trim failed... +You should see only 0000 0000 0000 0000 ... +" +else + echo "Success!!!" +fi +exit 0 + +} + +function LUKSTEST { +# Reference: https://unix.stackexchange.com/questions/85865/trim-with-lvm-and-dm-crypt# +echo 1 > /proc/sys/vm/drop_caches +cd $pasta +echo "Creating a \"yes\" file." +yes | dd iflag=fullblock bs=1M count=1 of=test-trim-by-desgua + +#position=`filefrag -s -v test-trim-by-desgua | grep "eof" | awk '{ print $3 }'` +position=`filefrag -s -v test-trim-by-desgua | grep "eof" | sed 's| ||g ; s|.*255:|| ; s|\.\..*||'` +[[ "$position" == "" ]] && echo "Could not find the position of the file. Are you on a LUKS on LVM?" && CLEAN; + +device=`df test-trim-by-desgua | grep "dev/" | awk '{ print $1 }'` + +yes=`dd bs=4096 skip=$position count=256 if=$device | hexdump -C` + +echo "In the next line you should see a pattern like: +00000000 79 0a 79 0a 79 0a 79 0a 79 0a 79 0a 79 0a 79 0a |y.y.y.y.y.y.y.y.| +$yes +" + +if [[ "`echo "$yes" | grep "y.y.y"`" == "" ]]; then + echo "The pattern could not be checked. Something went wrong. Exiting." + CLEAN; +else + echo "Pattern confirmed." +fi + +echo "Removing the temp file." +rm test-trim-by-desgua + +echo "Syncing." +sync +sleep 1 + +if [[ "$fs" == "1" ]]; then + echo "fstrim -v $pasta && sleep 2" ; echo + fstrim -v $pasta + sleep 2 +fi + +# Drop cache +echo 1 > /proc/sys/vm/drop_caches + +echo "In the next line you should **NOT** see a yes pattern like: +00000000 79 0a 79 0a 79 0a 79 0a 79 0a 79 0a 79 0a 79 0a |y.y.y.y.y.y.y.y.| +If you see, then trim is not working: +`dd bs=4096 skip=$position count=256 if=$device | hexdump -C`" + +yes=`dd bs=4096 skip=$position count=256 if=$device | hexdump -C` +if [[ "`echo "$yes" | grep "y.y.y"`" != "" ]]; then + echo "TRIM not working." +else + echo "TRIM is working!" +fi +CLEAN; +} + +if [[ "$method" == "1" ]]; then + SDATEST; + TEST; +elif [[ "$method" == "2" ]]; then + LUKSTEST; +fi +exit 0 diff --git a/machine/desktop.nix b/machine/desktop.nix index 5759469..5cdc695 100755 --- a/machine/desktop.nix +++ b/machine/desktop.nix @@ -11,7 +11,6 @@ in ../configs/common.nix ../configs/docker.nix ../configs/games.nix - ../configs/gui.nix ../configs/libvirt.nix ../configs/pantheon.nix ../configs/user-gui.nix diff --git a/machine/framework.nix b/machine/framework.nix index a026318..b8c553f 100755 --- a/machine/framework.nix +++ b/machine/framework.nix @@ -4,7 +4,8 @@ let be = import ../configs/borg-exclude.nix; secrets = import ../configs/secrets.nix; wireguard = import ../configs/wireguard.nix; -in { +in +{ imports = [ @@ -13,7 +14,6 @@ in { ../configs/common.nix ../configs/docker.nix ../configs/games.nix - ../configs/gui.nix ../configs/libvirt.nix ../configs/plasma.nix ../configs/user-gui.nix @@ -24,20 +24,22 @@ in { boot = { initrd.systemd.enable = true; loader = { - # systemd-boot.enable = true; - grub = { - enable = true; - device = "nodev"; - useOSProber = true; - efiSupport = true; - }; +# grub = { +# enable = true; +# device = "nodev"; +# useOSProber = true; +# efiSupport = true; +# }; + systemd-boot.enable = true; efi = { canTouchEfiVariables = true; }; }; plymouth.enable = true; }; + nixpkgs.config.allowUnfree = true; nixpkgs.config.packageOverrides = pkgs: { - vaapiIntel = pkgs.vaapiIntel.override { enableHybridCodec = true; }; + intel-vaapi-driver = + pkgs.intel-vaapi-driver.override { enableHybridCodec = true; }; }; # nixpkgs.localSystem = { @@ -46,6 +48,8 @@ in { # system = "x86_64-linux"; # }; + # nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + nix.settings.system-features = [ "nixos-test" "benchmark" "big-parallel" "kvm" "gccarch-alderlake" ]; @@ -77,7 +81,7 @@ in { opengl = { enable = true; driSupport32Bit = true; - extraPackages = with pkgs; [ intel-media-driver ]; + extraPackages = with pkgs; [ intel-media-driver intel-vaapi-driver ]; }; pulseaudio.enable = false; }; @@ -87,7 +91,18 @@ in { # rtkit is optional but recommended services = { power-profiles-daemon.enable = true; - fw-fanctrl.enable = true; + colord.enable = true; + + fw-fanctrl = { + enable = true; + configJsonPath = "/home/alex/nixos-config/config.json"; + }; + + xserver.displayManager.autoLogin = { + enable = true; + user = "alex"; + }; + pipewire = { enable = true; alsa.enable = true; @@ -115,6 +130,8 @@ in { extraPruneArgs = "--save-space --list --stats"; exclude = map (x: "/home/alex/" + x) be.borg-exclude; }; + + tailscale.enable = true; }; powerManagement = { @@ -126,6 +143,8 @@ in { DefaultTimeoutStopSec=10s ''; + # systemd.services.nix-daemon.serviceConfig.LimitNOFILE = 40960; + environment.systemPackages = with unstable.pkgs; [ rustdesk cinnamon.warpinator @@ -149,11 +168,11 @@ in { }]; # Partition swapfile is on (after LUKS decryption) - boot.resumeDevice = "/dev/disk/by-uuid/e5472308-de8b-4e60-91f4-4e7f194dad76"; + boot.resumeDevice = "/dev/disk/by-uuid/5549d49d-165e-4a45-973e-6a32a63e31be"; # Resume Offset is offset of swapfile # https://wiki.archlinux.org/title/Power_management/Suspend_and_hibernate#Hibernation_into_swap_file - boot.kernelParams = [ "mem_sleep_default=deep" "resume_offset=40241152" ]; + boot.kernelParams = [ "mem_sleep_default=deep" "resume_offset=190937088" ]; # Suspend-then-hibernate everywhere services.logind = { @@ -164,7 +183,7 @@ in { IdleActionSec=2m ''; }; - systemd.sleep.extraConfig = "HibernateDelaySec=60m"; + systemd.sleep.extraConfig = "HibernateDelaySec=20m"; home-manager.users.alex.services.barrier.client = { enable = true; diff --git a/machine/nixos-vm.nix b/machine/nixos-vm.nix index 766c9b3..73e33a6 100755 --- a/machine/nixos-vm.nix +++ b/machine/nixos-vm.nix @@ -8,7 +8,6 @@ in { ../configs/user.nix ../configs/docker.nix ../configs/pantheon.nix - ../configs/gui.nix ../configs/user-gui.nix ]; diff --git a/machine/thinkpad.nix b/machine/thinkpad.nix index 93ca284..bf0b225 100755 --- a/machine/thinkpad.nix +++ b/machine/thinkpad.nix @@ -10,7 +10,6 @@ in /etc/nixos/hardware-configuration.nix ../configs/common.nix ../configs/docker.nix - ../configs/gui.nix ../configs/libvirt.nix ../configs/plasma.nix ../configs/user-gui.nix @@ -99,7 +98,7 @@ in }; # Enable sound. - + # hardware.pulseaudio = { # enable = true; # support32Bit = true;