diff --git a/flake.nix b/flake.nix index fc07b76..cfe5587 100644 --- a/flake.nix +++ b/flake.nix @@ -82,14 +82,15 @@ imports = [ self.nixosModules.helix-texta ]; config.deployment = { allowLocalDeployment = true; - targetHost = null; + targetHost = "helix-texta"; + targetUser = "root"; }; }; murex-pecten = { name, nodes, pkgs, ... }: { imports = [ self.nixosModules.murex-pecten ]; config.deployment = { - #allowLocalDeployment = true; + allowLocalDeployment = true; targetHost = "murex-pecten"; targetUser = "root"; }; @@ -98,7 +99,7 @@ cornu-aspersum = { ... }: { imports = [ self.nixosModules.cornu-aspersum ]; config.deployment = { - targetHost = "ccqcraft.de"; + targetHost = "cornu-aspersum"; targetUser = "root"; }; }; diff --git a/hardware/aorus.nix b/hardware/aorus.nix index b9600a3..fe3c54d 100644 --- a/hardware/aorus.nix +++ b/hardware/aorus.nix @@ -8,13 +8,12 @@ availableKernelModules = [ "nvme" "xhci_pci" "ahci" "usbhid" "usb_storage" "sd_mod" ]; - kernelModules = [ "dm-snapshot" ]; + kernelModules = [ "dm-snapshot" "amdgpu" ]; luks.devices."enc".device = "/dev/disk/by-uuid/037d5dc5-17c3-4643-9ad8-7403d280b191"; }; kernelModules = [ "kvm-amd" ]; - extraModulePackages = [ ]; }; fileSystems = { @@ -51,4 +50,9 @@ # Enable bluetooth hardware.bluetooth.enable = true; services.hardware.bolt.enable = true; + + # Prevent GPP0 from waking up the device! + wakeup.toggleDevice = [ "GPP0" ]; + + services.xserver.videoDrivers = lib.mkForce [ "amdgpu" ]; } diff --git a/hardware/thinkpad-p1-gen3.nix b/hardware/thinkpad-p1-gen3.nix index b91c897..c363f5f 100644 --- a/hardware/thinkpad-p1-gen3.nix +++ b/hardware/thinkpad-p1-gen3.nix @@ -27,6 +27,8 @@ }; }; + settings.nvidiaUsed = true; + hardware = { # high-resolution display video.hidpi.enable = lib.mkDefault true; diff --git a/hosts/helix-texta.nix b/hosts/helix-texta.nix index f63d93e..d6b6334 100644 --- a/hosts/helix-texta.nix +++ b/hosts/helix-texta.nix @@ -30,11 +30,7 @@ in { networking = { hostName = "helix-texta"; - # nm ftw - networkmanager = { - enable = true; - packages = with pkgs; [ networkmanager-vpnc ]; - }; + networkmanager.enable = true; }; system.fsPackages = [ pkgs.sshfs ]; diff --git a/hosts/murex-pecten.nix b/hosts/murex-pecten.nix index e276d49..98480c0 100644 --- a/hosts/murex-pecten.nix +++ b/hosts/murex-pecten.nix @@ -2,8 +2,10 @@ { # Use the systemd-boot EFI boot loader. - boot.loader.systemd-boot.enable = true; - boot.loader.efi.canTouchEfiVariables = true; + boot.loader = { + systemd-boot.enable = true; + efi.canTouchEfiVariables = true; + }; networking = { hostName = "murex-pecten"; @@ -12,18 +14,51 @@ system.fsPackages = [ pkgs.sshfs ]; - services.xserver.enable = true; - services.xserver.displayManager.gdm.enable = true; - services.xserver.desktopManager.gnome.enable = true; - sound.enable = true; + security.rtkit.enable = true; + services.pipewire = { + enable = true; + alsa.enable = true; + alsa.support32Bit = true; + pulse.enable = true; + jack.enable = true; + + config.pipewire-pulse."stream.properties" = { + "channelmix.upmix" = true; + "channelmix.lfe-cutoff" = 150; + }; + + config.pipewire."default.clock.allowed-rates" = [ 48000 44100 ]; + + media-session.config.alsa-monitor = { + rules = [{ + matches = [{ + "node.name" = + "alsa_output.usb-Focusrite_Scarlett_Solo_USB_Y7ENM550A6399B-00.pro-output-0"; + }]; + actions = { + update-props = { + #"audio.rate" = 96000; + "api.alsa.headroom" = 1024; + }; + }; + }]; + }; + }; + + xdg.portal = { + enable = true; + extraPortals = with pkgs; [ xdg-desktop-portal-gtk xdg-desktop-portal-wlr ]; + gtkUsePortal = true; + }; hardware = { - pulseaudio.enable = true; opengl = { enable = true; driSupport = true; driSupport32Bit = true; + extraPackages = with pkgs; [ amdvlk ]; + extraPackages32 = with pkgs; [ driversi686Linux.amdvlk ]; }; }; @@ -153,6 +188,8 @@ vial ]; + programs.sway.enable = true; + sops.defaultSopsFile = ../secrets/hosts/murex-pecten/secrets.yaml; sops.age.sshKeyPaths = [ "/etc/ssh/ssh_host_ed25519_key" ]; # TODO: Improve this @@ -170,6 +207,7 @@ }; environment.systemPackages = with pkgs; [ + qt5.qtwayland thunderbolt chrysalis openrgb diff --git a/modules/base-system.nix b/modules/base-system.nix index 946a190..0e503d5 100644 --- a/modules/base-system.nix +++ b/modules/base-system.nix @@ -1,7 +1,7 @@ # Settings that most of my hosts can agree on, but # some of these settings are overriden on a per-host basis. -{ pkgs, config, ... }: +{ pkgs, lib, config, ... }: { imports = [ @@ -10,8 +10,17 @@ ./grafana.nix ./radicale.nix ./restic.nix + ./wakeup.nix ]; + options.settings = with lib; { + nvidiaUsed = mkOption { + type = types.bool; + default = false; + description = "Whether or not an NVIDIA graphics card is used"; + }; + }; + config = { # Allow joypixels' license and unfree licenses in general nixpkgs.config = { diff --git a/modules/wakeup.nix b/modules/wakeup.nix new file mode 100644 index 0000000..d194b02 --- /dev/null +++ b/modules/wakeup.nix @@ -0,0 +1,31 @@ +{ pkgs, lib, config, ... }: + +let + cfg = config.wakeup; + + createServiceName = dev: "toggle-acpi-${dev}"; + createService = dev: { + description = "Toggle ${dev} wakeup setting"; + serviceConfig.ExecStart = '' + /bin/sh -c "${pkgs.coreutils}/bin/echo ${dev} > /proc/acpi/wakeup" + ''; + wantedBy = [ "multi-user.target" ]; + }; + +in { + options.wakeup = with lib; { + toggleDevice = mkOption { + type = types.listOf types.str; + default = [ ]; + description = "ACPI devices to toggle as wakeup devices"; + }; + }; + + config = { + systemd.services = let + pairs = map (dev: + lib.attrsets.nameValuePair (createServiceName dev) (createService dev)) + cfg.toggleDevice; + in builtins.listToAttrs pairs; + }; +} diff --git a/pkgs/gruvbox-material-gtk.nix b/pkgs/gruvbox-material-gtk.nix index ff44f85..e5ed152 100644 --- a/pkgs/gruvbox-material-gtk.nix +++ b/pkgs/gruvbox-material-gtk.nix @@ -1,9 +1,9 @@ -{ lib, stdenv, fetchFromGitHub, hiDpi ? false }: +{ lib, stdenv, fetchFromGitHub, hiDPI ? false }: let lock = builtins.fromJSON (builtins.readFile ../flake.lock); variant = - if hiDpi then "Gruvbox-Material-Dark-HIDPI" else "Gruvbox-Material-Dark"; + if hiDPI then "Gruvbox-Material-Dark-HIDPI" else "Gruvbox-Material-Dark"; in stdenv.mkDerivation rec { pname = lock.nodes.gruvbox-material-gtk.locked.repo; version = lock.nodes.gruvbox-material-gtk.locked.rev; diff --git a/users/malte/gtk.nix b/users/malte/gtk.nix index 4b2f879..e48224e 100644 --- a/users/malte/gtk.nix +++ b/users/malte/gtk.nix @@ -1,6 +1,8 @@ -{ pkgs, ... }: +{ pkgs, lib, nixosConfig, ... }: -rec { +let hiDPI = nixosConfig.hardware.video.hidpi.enable; + +in rec { home.packages = with pkgs; [ numix-cursor-theme gtk-engine-murrine @@ -10,7 +12,7 @@ rec { enable = true; theme = { package = - pkgs.callPackage ../../pkgs/gruvbox-material-gtk.nix { hiDpi = true; }; + pkgs.callPackage ../../pkgs/gruvbox-material-gtk.nix { inherit hiDPI; }; name = "gruvbox-material"; }; iconTheme = { @@ -21,8 +23,9 @@ rec { gtk2 = { extraConfig = '' gtk-cursor-theme-name = "Numix-Cursor-Light" + '' + (lib.optionalString hiDPI '' gtk-cursor-theme-size = 48 - ''; + ''); }; gtk3 = { @@ -31,7 +34,7 @@ rec { ]; extraConfig = { gtk-cursor-theme-name = "Numix-Cursor-Light"; - gtk-cursor-theme-size = 48; + gtk-cursor-theme-size = lib.mkIf hiDPI 48; }; }; }; diff --git a/users/malte/home.nix b/users/malte/home.nix index f2dad00..466d649 100644 --- a/users/malte/home.nix +++ b/users/malte/home.nix @@ -58,6 +58,8 @@ in { config = { + settings.sway.enable = true; + home = { packages = with pkgs; [ aseprite diff --git a/users/malte/kanshi.nix b/users/malte/kanshi.nix index a0725c3..d6cd3fa 100644 --- a/users/malte/kanshi.nix +++ b/users/malte/kanshi.nix @@ -23,14 +23,14 @@ in { scale = 2.0; } { - criteria = "DP-2"; + criteria = "BenQ Corporation BenQ GW2270 P9J02423SL0"; mode = "1920x1080@60Hz"; position = "1920,0"; scale = 1.0; transform = "270"; } { - criteria = "DP-1"; + criteria = "Goldstar Company Ltd IPS226 SerialNumber"; mode = "1920x1080@60Hz"; position = "3000,420"; scale = 1.0; @@ -38,6 +38,24 @@ in { ]; exec = notify "Docked"; }; + dual = { + outputs = [ + { + criteria = "BenQ Corporation BenQ GW2270 P9J02423SL0"; + mode = "1920x1080@60Hz"; + position = "1920,0"; + scale = 1.0; + transform = "270"; + } + { + criteria = "Goldstar Company Ltd IPS226 SerialNumber"; + mode = "1920x1080@60Hz"; + position = "3000,420"; + scale = 1.0; + } + ]; + exec = notify "Dual"; + }; }; }; } diff --git a/users/malte/sway.nix b/users/malte/sway.nix index d0f73ca..dcbefc2 100644 --- a/users/malte/sway.nix +++ b/users/malte/sway.nix @@ -1,9 +1,16 @@ -{ pkgs, config, lib, ... }: +{ pkgs, config, lib, nixosConfig, ... }: let col = config.colors; + backgrounds = pkgs.fetchFromGitHub { + owner = "vctrblck"; + repo = "gruvbox-wallpapers"; + rev = "ff9ade4c49299e08c11bd8ce2f17cdae7f9b706d"; + sha256 = "d28r/s+m32hqzF/S/ebyBCd5XLKJTFSaQXmMdHFUH64="; + }; + bemenu = (import ./bemenu.nix) pkgs; grim = "${pkgs.grim}/bin/grim"; wl-copy = "${pkgs.wl-clipboard}/bin/wl-copy"; @@ -69,6 +76,10 @@ let text-caps-lock-color=#ebdbb2 ''; + cfg = config.settings.sway; + nvidiaUsed = nixosConfig.settings.nvidiaUsed; + hiDPI = nixosConfig.hardware.video.hidpi.enable; + in { imports = [ ./gammastep.nix @@ -80,7 +91,11 @@ in { ./kanshi.nix ]; - config = { + options.settings.sway = with lib; { + enable = mkEnableOption "Enable sway config"; + }; + + config = lib.mkIf cfg.enable { home.packages = [ pkgs.firaCodeNerd @@ -97,7 +112,7 @@ in { wayland.windowManager.sway = { enable = true; - extraOptions = [ "--unsupported-gpu" ]; + extraOptions = lib.optional nvidiaUsed "--unsupported-gpu"; systemdIntegration = true; wrapperFeatures = { base = true; @@ -105,14 +120,6 @@ in { }; extraSessionCommands = '' - __GLX_VENDOR_LIBRARY=nvidia - GBM_BACKEND=nvidia-drm - GBM_BACKEND_PATH=/etc/gbm - # Set DRM devices and fix cursor - export WLR_NO_HARDWARE_CURSORS=0 - export WLR_DRM_DEVICES=/dev/dri/card0:/dev/dri/card1 - # Let's not, since it breaks most games - #export SDL_VIDEODRIVER=wayland # needs qt5.qtwayland in systemPackages export QT_QPA_PLATFORM=wayland export QT_WAYLAND_DISABLE_WINDOWDECORATION="1" @@ -121,11 +128,18 @@ in { # Fix for some Java AWT applications (e.g. Android Studio), # use this if they aren't displayed properly: export _JAVA_AWT_WM_NONREPARENTING=1 - # Breaks QT applications on wayland.. - #export QT_WAYLAND_FORCE_DPI=physical export XDG_CURRENT_DESKTOP=Sway export XDG_SESSION_TYPE=wayland - ''; + '' + + # TODO: See what actually is required here! + (lib.optionalString nvidiaUsed '' + # Set DRM devices and fix cursor + export WLR_NO_HARDWARE_CURSORS=0 + export WLR_DRM_DEVICES=/dev/dri/card0:/dev/dri/card1 + __GLX_VENDOR_LIBRARY=nvidia + GBM_BACKEND=nvidia-drm + GBM_BACKEND_PATH=/etc/gbm + ''); config = { modifier = "Mod4"; @@ -164,7 +178,8 @@ in { position = "top"; }]; - seat = { "*" = { xcursor_theme = "Numix-Cursor-Light 48"; }; }; + seat."*".xcursor_theme = + if hiDPI then "Numix-Cursor-Light 48" else "Numix-Cursor-Light 32"; keybindings = let mod = config.wayland.windowManager.sway.config.modifier; @@ -262,6 +277,12 @@ in { xkb_variant = ",workman"; xkb_options = "compose:rctrl,grp:alt_space_toggle,grp_led:caps"; }; + # Ducky One 2 TKL + "1241:661:USB-HID_Keyboard" = { + xkb_layout = "us,us"; + xkb_variant = ",workman"; + xkb_options = "compose:rwin,grp:alt_space_toggle,grp_led:caps"; + }; # Fancy Keyboardio Atreus "4617:8963:Keyboardio_Atreus_Keyboard" = { xkb_layout = "us"; @@ -284,7 +305,13 @@ in { }; }; - output = { eDP-1 = { bg = "~/Pictures/wallpapers/bg.jpg fill"; }; }; + output = { + "Unknown 0x1500 0x00000000".bg = "${backgrounds}/forest2.jpg fill"; + "Goldstar Company Ltd IPS226 SerialNumber".bg = + "${backgrounds}/future-town.jpg fill"; + "BenQ Corporation BenQ GW2270 P9J02423SL0".bg = + "${backgrounds}/leaves3.jpg fill"; + }; colors = let primary = col.primary.hashRgb; @@ -326,35 +353,16 @@ in { }; }; }; + + # Configure swaylock + xdg.configFile."swaylock/config".text = swaylockConfig; + + # If running from tty1 start sway + xdg.configFile."fish/conf.d/sway.fish".text = '' + set TTY1 (tty) + if test -z \"$DISPLAY\"; and test $TTY1 = '/dev/tty1' + systemd-cat -t sway sway + end + ''; }; - - config.systemd.user.services = { - swaylock = { - Unit = { - Description = "Idle manager for Wayland"; - Documentation = [ "man:swayidle(1)" ]; - PartOf = "graphical-session.target"; - }; - Service = { - Type = "simple"; - ExecStart = '' - ${pkgs.swayidle}/bin/swayidle \ - timeout 300 swaylock \ - timeout 600 'systemctl suspend' \ - ''; - }; - Install = { WantedBy = [ "graphical-session.target" ]; }; - }; - }; - - # Configure swaylock - config.xdg.configFile."swaylock/config".text = swaylockConfig; - - # If running from tty1 start sway - config.xdg.configFile."fish/conf.d/sway.fish".text = '' - set TTY1 (tty) - if test -z \"$DISPLAY\"; and test $TTY1 = '/dev/tty1' - systemd-cat -t sway sway - end - ''; } diff --git a/users/malte/waybar.nix b/users/malte/waybar.nix index b230071..1bc38cb 100644 --- a/users/malte/waybar.nix +++ b/users/malte/waybar.nix @@ -51,8 +51,7 @@ in { modules-left = [ "sway/workspaces" "sway/mode" "sway/window" ]; modules-center = [ "clock#time" "clock#date" ]; - modules-right = - [ "custom/taskwarrior" "idle_inhibitor" "network" "battery" "tray" ]; + modules-right = [ "custom/taskwarrior" "network" "battery" "tray" ]; modules = { "sway/workspaces" = {