From b75946fde45c97d0893802e6ca390910097cc7fc Mon Sep 17 00:00:00 2001 From: ItsDrike Date: Sun, 23 Jun 2024 17:40:30 +0200 Subject: [PATCH 1/9] Enable secure-boot on voyager --- hosts/voyager/default.nix | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/hosts/voyager/default.nix b/hosts/voyager/default.nix index 125eb7b..22dcdf5 100644 --- a/hosts/voyager/default.nix +++ b/hosts/voyager/default.nix @@ -99,6 +99,11 @@ devices."/dev/disk/by-label/NIXOS-FS".subvolumes = [ "root" ]; }; }; + + boot = { + secure-boot.enable = true; + #tmpOnTmpfs = true; + }; }; device = { From d796eea0456701286ac353973514320c23000198 Mon Sep 17 00:00:00 2001 From: ItsDrike Date: Sun, 23 Jun 2024 17:40:58 +0200 Subject: [PATCH 2/9] Update tpm unlocking docs --- docs/04_TPM_UNLOCKING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/04_TPM_UNLOCKING.md b/docs/04_TPM_UNLOCKING.md index daed812..2862cd5 100644 --- a/docs/04_TPM_UNLOCKING.md +++ b/docs/04_TPM_UNLOCKING.md @@ -115,7 +115,7 @@ sudo systemd-cryptenroll --tpm2-device=auto --tpm2-pcrs=0+7+12 /dev/disk/by-labe > [!NOTE] > If you already had something in the tpm2 module, you'll want to add `--wipe-slot=tpm2` too. -> [!NOTE] +> [!TIP] > If you're extra paranoid, you can also provide `--tpm2-with-pin=yes`, to prompt for a PIN code on each boot. > > I have mentioned why you may want to do this in the beginning. From 6bedfed95c69769214467b0258f16e57a6e04802 Mon Sep 17 00:00:00 2001 From: ItsDrike Date: Sun, 23 Jun 2024 18:11:45 +0200 Subject: [PATCH 3/9] Fix qt theme --- home/themes/gtk.nix | 7 ++++++- home/themes/qt.nix | 24 ++++++++++++++++++++++-- options/home/theme.nix | 18 +++++++++++++++--- 3 files changed, 43 insertions(+), 6 deletions(-) diff --git a/home/themes/gtk.nix b/home/themes/gtk.nix index 131c421..7a3b2c1 100644 --- a/home/themes/gtk.nix +++ b/home/themes/gtk.nix @@ -2,7 +2,6 @@ osConfig, config, pkgs, - lib, ... }: let cfg = osConfig.myOptions.home-manager.theme.gtk; @@ -77,4 +76,10 @@ in { gtk-application-prefer-dark-theme = true; }; }; + + dconf.settings = { + "org/gnome/desktop/interface".gtk-theme = cfg.theme.name; + # For Gnome shell + "org/gnome/shell/extensions/user-theme".name = cfg.theme.name; + }; } diff --git a/home/themes/qt.nix b/home/themes/qt.nix index 0e257a7..c98753d 100644 --- a/home/themes/qt.nix +++ b/home/themes/qt.nix @@ -10,9 +10,13 @@ in { qt = { enable = true; - platformTheme.name = mkIf cfg.forceGtk "gtk"; # just an override for QT_QPA_PLATFORMTHEME, takes "gtk", "gnome", "qtct" or "kde" + # just an override for QT_QPA_PLATFORMTHEME, takes "gtk", "gnome", "qtct" or "kde" + platformTheme.name = + if cfg.forceGtk + then "gtk" + else "qtct"; style = mkIf (!cfg.forceGtk) { - name = cfg.theme.name; + name = "Kvantum"; package = cfg.theme.package; }; }; @@ -35,6 +39,16 @@ in { libsForQt5.qtstyleplugins qt6Packages.qt6gtk2 ]) + + (mkIf (!cfg.forceGtk) [ + # If we're not forcing GTK themes, use Kvantum. + # Kvantum as a library and a program to theme qt applications. + qt6Packages.qtstyleplugin-kvantum + libsForQt5.qtstyleplugin-kvantum + + # Also add the theme package to path just in case + cfg.theme.package + ]) ]; sessionVariables = { @@ -53,5 +67,11 @@ in { # tell calibre to use the dark theme, because the light one hurts my eyes CALIBRE_USE_DARK_PALETTE = "1"; }; + + xdg.configFile = mkIf (!cfg.forceGtk) { + "Kvantum/kvantum.kvconfig".source = (pkgs.formats.ini {}).generate "kvantum.kvconfig" { + General.theme = cfg.theme.name; + }; + }; }; } diff --git a/options/home/theme.nix b/options/home/theme.nix index a2e76bb..5d23c2a 100644 --- a/options/home/theme.nix +++ b/options/home/theme.nix @@ -62,19 +62,31 @@ in forceGtk = mkOption { type = types.bool; default = false; - description = "Whether to force QT applications to try and use the GTK theme."; + description = '' + Whether to force QT applications to try and use the GTK theme. + + If false, qtct platform theme & Kvantum will be used instead. + ''; }; theme = { name = mkOption { type = types.str; default = "Catppuccin-Mocha-Dark"; - description = "The name for the QT theme package"; + description = '' + The name for the QT theme package. + + This has no effect if forceGtk is set. + ''; }; package = mkOption { type = types.package; - description = "The theme package to be used for QT programs"; + description = '' + The theme package to be used for QT programs. + + This has no effect if forceGtk is set. + ''; default = pkgs.catppuccin-kde.override { flavour = ["mocha"]; accents = ["blue"]; From 6545dda7f8a982a4068479ccbfdd3950cb8d4630 Mon Sep 17 00:00:00 2001 From: ItsDrike Date: Sun, 23 Jun 2024 20:17:08 +0200 Subject: [PATCH 4/9] Add webcord --- home/programs/graphical/apps/default.nix | 1 + .../graphical/apps/webcord/default.nix | 34 +++++++++++++++++++ hosts/voyager/default.nix | 2 ++ options/home/programs/default.nix | 4 +++ 4 files changed, 41 insertions(+) create mode 100644 home/programs/graphical/apps/webcord/default.nix diff --git a/home/programs/graphical/apps/default.nix b/home/programs/graphical/apps/default.nix index df8e966..78d7bea 100644 --- a/home/programs/graphical/apps/default.nix +++ b/home/programs/graphical/apps/default.nix @@ -2,5 +2,6 @@ _: { imports = [ ./spotify ./vesktop + ./webcord ]; } diff --git a/home/programs/graphical/apps/webcord/default.nix b/home/programs/graphical/apps/webcord/default.nix new file mode 100644 index 0000000..dad3236 --- /dev/null +++ b/home/programs/graphical/apps/webcord/default.nix @@ -0,0 +1,34 @@ +{ + lib, + osConfig, + pkgs, + ... +}: let + inherit (lib) mkIf; + + cfg = osConfig.myOptions.home-manager.programs.applications.webcord; +in { + config = mkIf cfg.enable { + home.packages = with pkgs; [ + # Webcord with vencord extension installed + webcord-vencord + ]; + + systemd.user.services."webcord" = mkIf cfg.autoStart { + Unit = { + Description = "Webcord (An electron-based Discord client implemented without Discord API with Vencord built-in)"; + After = [ "graphical-session.target" ]; + PartOf = [ "graphical-session.target" ]; + }; + + Service = { + Type = "simple"; + Restart = "on-failure"; + ExecStart = "${pkgs.webcord-vencord}/bin/webcord"; + }; + + Install.WantedBy = [ "graphical-session.target" ]; + }; + }; +} + diff --git a/hosts/voyager/default.nix b/hosts/voyager/default.nix index 22dcdf5..c83db29 100644 --- a/hosts/voyager/default.nix +++ b/hosts/voyager/default.nix @@ -70,6 +70,7 @@ # Applications ".config/spotify" ".config/vesktop" + ".config/WebCord" ".local/share/Smart Code ltd/Stremio" # Tools @@ -178,6 +179,7 @@ enable = true; autoStart = true; }; + webcord.enable = true; mpv.enable = true; nomacs.enable = true; # TODO: probably disable qimgv.enable = true; diff --git a/options/home/programs/default.nix b/options/home/programs/default.nix index bd5593d..73ae056 100644 --- a/options/home/programs/default.nix +++ b/options/home/programs/default.nix @@ -33,6 +33,10 @@ in enable = mkEnableOption "Vesktop (An alternate client for Discord with Vencord built-in)"; autoStart = mkEnableOption "Auto-Start for Vesktop"; }; + webcord = { + enable = mkEnableOption "Webcord (An electron-based Discord client implemented without Discord API with Vencord built-in)"; + autoStart = mkEnableOption "Auto-Start for Webcord"; + }; nomacs.enable = mkEnableOption "Nomacs (Qt-based image viewer)"; qimgv.enable = mkEnableOption "QImgV (Qt-based image viewer with video support)"; qbittorrent.enable = mkEnableOption "Qbittorrent (Free software BitTorrent client)"; From 08864662bb610ec481865925d8950b16dc991f9b Mon Sep 17 00:00:00 2001 From: ItsDrike Date: Sun, 23 Jun 2024 21:58:12 +0200 Subject: [PATCH 5/9] Restructure & rework power management config --- system/roles/laptop/power/acpi.nix | 23 +++++++++ .../laptop/power/auto-cpufreq/default.nix | 47 ------------------- system/roles/laptop/power/default.nix | 32 ++----------- .../power-profiles-daemon/default.nix | 0 .../scripts/power_monitor.sh | 0 system/roles/laptop/power/upower.nix | 19 ++++++++ 6 files changed, 47 insertions(+), 74 deletions(-) create mode 100644 system/roles/laptop/power/acpi.nix delete mode 100644 system/roles/laptop/power/auto-cpufreq/default.nix rename system/roles/laptop/power/{auto-cpufreq => }/power-profiles-daemon/default.nix (100%) rename system/roles/laptop/power/{auto-cpufreq => }/power-profiles-daemon/scripts/power_monitor.sh (100%) create mode 100644 system/roles/laptop/power/upower.nix diff --git a/system/roles/laptop/power/acpi.nix b/system/roles/laptop/power/acpi.nix new file mode 100644 index 0000000..795cb57 --- /dev/null +++ b/system/roles/laptop/power/acpi.nix @@ -0,0 +1,23 @@ +{ pkgs, lib, config, ...}: let + inherit (lib) mkIf; + deviceType = config.myOptions.device.roles.type; + acceptedTypes = ["laptop"]; +in { + config = mkIf (builtins.elem deviceType acceptedTypes) { + hardware.acpilight.enable = true; + + environment.systemPackages = with pkgs; [ acpi ]; + + # handle ACPI events + services.acpid.enable = true; + + boot = { + kernelModules = ["acpi_call"]; + extraModulePackages = with config.boot.kernelPackages; [ + acpi_call + cpupower + ]; + }; + }; +} + diff --git a/system/roles/laptop/power/auto-cpufreq/default.nix b/system/roles/laptop/power/auto-cpufreq/default.nix deleted file mode 100644 index 9f70597..0000000 --- a/system/roles/laptop/power/auto-cpufreq/default.nix +++ /dev/null @@ -1,47 +0,0 @@ -# This sets up power management using auto-cpufreq, -# alongside with upower and power-profiles-daemon. -# Together, this provides a complete alternative to TLP -{ pkgs, lib, config, ...}: let - inherit (lib) mkIf mkDefault; - deviceType = config.myOptions.device.roles.type; - acceptedTypes = ["laptop"]; -in { - imports = [ - ./power-profiles-daemon - ]; - - config = mkIf (builtins.elem deviceType acceptedTypes) { - services = { - # superior power management - auto-cpufreq = { - enable = true; - settings = let - MHz = x: x * 1000; - in { - battery = { - governor = "powersave"; - scaling_min_freq = mkDefault (MHz 1200); - scaling_max_freq = mkDefault (MHz 1800); - turbo = "never"; - }; - - charger = { - governor = "performance"; - scaling_min_freq = mkDefault (MHz 1800); - scaling_max_freq = mkDefault (MHz 3800); - turbo = "auto"; - }; - }; - }; - - # DBus service that provides power management support to applications - upower = { - enable = true; - percentageLow = 15; - percentageCritical = 5; - percentageAction = 3; - criticalPowerAction = "Hibernate"; - }; - }; - }; -} diff --git a/system/roles/laptop/power/default.nix b/system/roles/laptop/power/default.nix index f122c22..6ffaf07 100644 --- a/system/roles/laptop/power/default.nix +++ b/system/roles/laptop/power/default.nix @@ -1,37 +1,15 @@ { pkgs, lib, config, ...}: let - inherit (lib) mkIf mkDefault; + inherit (lib) mkIf; deviceType = config.myOptions.device.roles.type; acceptedTypes = ["laptop"]; in { imports = [ - ./auto-cpufreq + ./power-profiles-daemon + ./upower.nix + ./acpi.nix ]; config = mkIf (builtins.elem deviceType acceptedTypes) { - hardware.acpilight.enable = true; - - environment.systemPackages = with pkgs; [ - acpi - powertop - ]; - - services = { - # handle ACPI events - acpid.enable = true; - - # temperature target on battery - undervolt = { - tempBat = 65; # deg C - package = pkgs.undervolt; - }; - }; - - boot = { - kernelModules = ["acpi_call"]; - extraModulePackages = with config.boot.kernelPackages; [ - acpi_call - cpupower - ]; - }; + environment.systemPackages = with pkgs; [ powertop ]; }; } diff --git a/system/roles/laptop/power/auto-cpufreq/power-profiles-daemon/default.nix b/system/roles/laptop/power/power-profiles-daemon/default.nix similarity index 100% rename from system/roles/laptop/power/auto-cpufreq/power-profiles-daemon/default.nix rename to system/roles/laptop/power/power-profiles-daemon/default.nix diff --git a/system/roles/laptop/power/auto-cpufreq/power-profiles-daemon/scripts/power_monitor.sh b/system/roles/laptop/power/power-profiles-daemon/scripts/power_monitor.sh similarity index 100% rename from system/roles/laptop/power/auto-cpufreq/power-profiles-daemon/scripts/power_monitor.sh rename to system/roles/laptop/power/power-profiles-daemon/scripts/power_monitor.sh diff --git a/system/roles/laptop/power/upower.nix b/system/roles/laptop/power/upower.nix new file mode 100644 index 0000000..2e59b30 --- /dev/null +++ b/system/roles/laptop/power/upower.nix @@ -0,0 +1,19 @@ +{ pkgs, lib, config, ...}: let + inherit (lib) mkIf; + deviceType = config.myOptions.device.roles.type; + acceptedTypes = ["laptop"]; +in { + config = mkIf (builtins.elem deviceType acceptedTypes) { + services = { + # DBus service that provides power management support to applications + upower = { + enable = true; + percentageLow = 15; + percentageCritical = 5; + percentageAction = 3; + criticalPowerAction = "Hibernate"; + }; + }; + }; +} + From cfd9ccb24f61aabdeaa74ddb8cedbbbacda0edd0 Mon Sep 17 00:00:00 2001 From: ItsDrike Date: Sun, 23 Jun 2024 21:58:47 +0200 Subject: [PATCH 6/9] Disable nss override for ungoogled-chromium --- home/programs/graphical/browsers/chromium/default.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/home/programs/graphical/browsers/chromium/default.nix b/home/programs/graphical/browsers/chromium/default.nix index f79495c..dae25da 100644 --- a/home/programs/graphical/browsers/chromium/default.nix +++ b/home/programs/graphical/browsers/chromium/default.nix @@ -14,7 +14,6 @@ in { enable = true; package = pkgs.ungoogled-chromium.override { - nss = pkgs.nss_latest; commandLineArgs = [ # Ungoogled features "--disable-search-engine-collection" From 8f6137e52be55b11c54d8209a018baff447db618 Mon Sep 17 00:00:00 2001 From: ItsDrike Date: Sun, 23 Jun 2024 21:58:57 +0200 Subject: [PATCH 7/9] Update inputs --- flake.lock | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/flake.lock b/flake.lock index 57cf817..063f20c 100644 --- a/flake.lock +++ b/flake.lock @@ -238,11 +238,11 @@ ] }, "locked": { - "lastModified": 1713898448, - "narHash": "sha256-6q6ojsp/Z9P2goqnxyfCSzFOD92T3Uobmj8oVAicUOs=", + "lastModified": 1718018037, + "narHash": "sha256-03rLBd/lKecgaKz0j5ESUf9lDn5R0SJatZTKLL5unWE=", "owner": "hercules-ci", "repo": "hercules-ci-effects", - "rev": "c0302ec12d569532a6b6bd218f698bc402e93adc", + "rev": "0ab08b23ce3c3f75fe9a5598756b6fb8bcf0b414", "type": "github" }, "original": { @@ -285,11 +285,11 @@ ] }, "locked": { - "lastModified": 1717931644, - "narHash": "sha256-Sz8Wh9cAiD5FhL8UWvZxBfnvxETSCVZlqWSYWaCPyu0=", + "lastModified": 1719037157, + "narHash": "sha256-aOKd8+mhBsLQChCu1mn/W5ww79ta5cXVE59aJFrifM8=", "owner": "nix-community", "repo": "home-manager", - "rev": "3d65009effd77cb0d6e7520b68b039836a7606cf", + "rev": "cd886711998fe5d9ff7979fdd4b4cbd17b1f1511", "type": "github" }, "original": { @@ -321,11 +321,11 @@ }, "impermanence": { "locked": { - "lastModified": 1717932370, - "narHash": "sha256-7C5lCpiWiyPoIACOcu2mukn/1JRtz6HC/1aEMhUdcw0=", + "lastModified": 1719091691, + "narHash": "sha256-AxaLX5cBEcGtE02PeGsfscSb/fWMnyS7zMWBXQWDKbE=", "owner": "nix-community", "repo": "impermanence", - "rev": "27979f1c3a0d3b9617a3563e2839114ba7d48d3f", + "rev": "23c1f06316b67cb5dabdfe2973da3785cfe9c34a", "type": "github" }, "original": { @@ -370,11 +370,11 @@ ] }, "locked": { - "lastModified": 1717865884, - "narHash": "sha256-imcv6tx4lSfffv6o8T0cIxJmgheItGSSGzxyO4cWnKg=", + "lastModified": 1718850197, + "narHash": "sha256-EAb/EhurT7KIIqqZ8cMYM6rL8eJh95ZPdJbwv1j06ds=", "owner": "nixpak", "repo": "nixpak", - "rev": "f938c3c01026c00a305b5fba8edeb8f7efcfb85a", + "rev": "98931e88e39da1daf17adbd5e4a839de1059cb4b", "type": "github" }, "original": { @@ -411,11 +411,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1717786204, - "narHash": "sha256-4q0s6m0GUcN7q+Y2DqD27iLvbcd1G50T2lv08kKxkSI=", + "lastModified": 1719075281, + "narHash": "sha256-CyyxvOwFf12I91PBWz43iGT1kjsf5oi6ax7CrvaMyAo=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "051f920625ab5aabe37c920346e3e69d7d34400e", + "rev": "a71e967ef3694799d0c418c98332f7ff4cc5f6af", "type": "github" }, "original": { @@ -539,11 +539,11 @@ "systems": "systems_2" }, "locked": { - "lastModified": 1717289290, - "narHash": "sha256-NS2WFE2mEodtPATQIC16N0ylWnog8B0IownZWnM9JPE=", + "lastModified": 1719058240, + "narHash": "sha256-pprpeDB/mvINS5m5FIOq/1I0xpBvO8l7FyWNmmO0Ir0=", "owner": "schizofox", "repo": "schizofox", - "rev": "04e204d8f605a45e2537343a5e467d5af0518eef", + "rev": "becff9b92a28c3cd6e6a215da7f5f56883d3a304", "type": "github" }, "original": { From 919a2efc1707d4c8ca3bdc248ab2677bbf0ed3f7 Mon Sep 17 00:00:00 2001 From: ItsDrike Date: Sun, 23 Jun 2024 21:59:11 +0200 Subject: [PATCH 8/9] Update deprecated names --- system/shared/hardware/gpu/amd.nix | 10 +++------- system/shared/hardware/gpu/nvidia.nix | 2 +- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/system/shared/hardware/gpu/amd.nix b/system/shared/hardware/gpu/amd.nix index a65b5cf..146330a 100644 --- a/system/shared/hardware/gpu/amd.nix +++ b/system/shared/hardware/gpu/amd.nix @@ -23,16 +23,12 @@ in ]; # Enable OpenGL - hardware.opengl = { + hardware.graphics = { enable = true; # Enable OpenCL and AMDVLK - extraPackages = with pkgs; [ - amdvlk - ]; - extraPackages32 = with pkgs; [ - driversi686Linux.amdvlk - ]; + extraPackages = with pkgs; [ amdvlk ]; + extraPackages32 = with pkgs; [ driversi686Linux.amdvlk ]; }; }; } diff --git a/system/shared/hardware/gpu/nvidia.nix b/system/shared/hardware/gpu/nvidia.nix index 5679760..8480875 100644 --- a/system/shared/hardware/gpu/nvidia.nix +++ b/system/shared/hardware/gpu/nvidia.nix @@ -63,7 +63,7 @@ in }; # Enable OpenGL - opengl = { + graphics = { enable = true; # VA-API implementation using NVIDIA's NVDEC From d87680738d2e90850f284765e07a26e87cd4eb4e Mon Sep 17 00:00:00 2001 From: ItsDrike Date: Sun, 23 Jun 2024 21:59:46 +0200 Subject: [PATCH 9/9] Move dconf dark mode override to gtk.nix --- home/misc/dconf.nix | 7 ++----- home/themes/gtk.nix | 6 ++++++ 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/home/misc/dconf.nix b/home/misc/dconf.nix index b7a7b17..72c09e9 100644 --- a/home/misc/dconf.nix +++ b/home/misc/dconf.nix @@ -2,11 +2,8 @@ dconf = { enable = true; settings = { - # This is like a system-wide dark mode swithc that some apps respect - # Equivalent of the following dconf command: - # `conf write /org/gnome/desktop/interface/color-scheme "'prefer-dark'"` - "org/gnome/desktop/interface" = { - color-scheme = "prefer-dark"; + "org/gtk/settings/file-chooser" = { + sort-directories-first = true; }; }; }; diff --git a/home/themes/gtk.nix b/home/themes/gtk.nix index 7a3b2c1..b8c84e9 100644 --- a/home/themes/gtk.nix +++ b/home/themes/gtk.nix @@ -78,7 +78,13 @@ in { }; dconf.settings = { + # This is like a system-wide dark mode swithc that some apps respect it. + # Equivalent of the following dconf command: + # `conf write /org/gnome/desktop/interface/color-scheme "'prefer-dark'"` + "org/gnome/desktop/interface".color-scheme = "prefer-dark"; + "org/gnome/desktop/interface".gtk-theme = cfg.theme.name; + # For Gnome shell "org/gnome/shell/extensions/user-theme".name = cfg.theme.name; };