diff --git a/host-specific/odin/configuration.nix b/host-specific/odin/configuration.nix index 2d18355..bc2648b 100644 --- a/host-specific/odin/configuration.nix +++ b/host-specific/odin/configuration.nix @@ -9,6 +9,7 @@ ./hardware-configuration.nix ./boot.nix ./networking.nix + ./gui.nix ./packages.nix ./services.nix ./valheim.nix diff --git a/host-specific/odin/gui.nix b/host-specific/odin/gui.nix index bda23b9..a822d0a 100644 --- a/host-specific/odin/gui.nix +++ b/host-specific/odin/gui.nix @@ -1,4 +1,34 @@ { pkgs, unstable, ... }: +let + # Propagate Wayland/Sway environment variables to user services after Sway starts. + dbus-sway-environment = pkgs.writeTextFile { + name = "dbus-sway-environment"; + destination = "/bin/dbus-sway-environment"; + executable = true; + + text = '' + dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP=sway + systemctl --user stop pipewire pipewire-media-session xdg-desktop-portal xdg-desktop-portal-wlr + systemctl --user start pipewire pipewire-media-session xdg-desktop-portal xdg-desktop-portal-wlr + ''; + }; + + configure-gtk = pkgs.writeTextFile { + name = "configure-gtk"; + destination = "/bin/configure-gtk"; + executable = true; + text = + let + schema = pkgs.gsettings-desktop-schemas; + datadir = "${schema}/share/gsettings-schemas/${schema.name}"; + in + '' + export XDG_DATA_DIRS=${datadir}:$XDG_DATA_DIRS + gnome_schema=org.gnome.desktop.interface + gsettings set $gnome_schema gtk-theme 'Dracula' + ''; + }; +in { # Enable the X11 windowing system. services.xserver = { @@ -84,7 +114,12 @@ xdg.portal = { enable = true; wlr.enable = true; - extraPortals = [ pkgs.xdg-desktop-portal-gtk ]; + extraPortals = [ + pkgs.xdg-desktop-portal + pkgs.xdg-desktop-portal-wlr + pkgs.xdg-desktop-portal-gtk + pkgs.xdg-desktop-portal-termfilechooser + ]; }; xdg.mime = { enable = true; @@ -96,7 +131,24 @@ services.dbus.enable = true; services.gnome.gnome-keyring.enable = true; - environment.systemPackages = [ + environment.systemPackages = with pkgs; [ + wdisplays + mako + bemenu + wl-clipboard + slurp + grim + swayidle + swaylock + adwaita-icon-theme + dracula-theme + glib + xdg-utils + wayland + configure-gtk + dbus-sway-environment + dbus unstable.firefox-devedition + unstable.ghostty ]; } diff --git a/host-specific/odin/packages.nix b/host-specific/odin/packages.nix index fcd3d17..f7552ae 100644 --- a/host-specific/odin/packages.nix +++ b/host-specific/odin/packages.nix @@ -1,44 +1,4 @@ -{ pkgs, lib, ... }: -let # bash script to let dbus know about important env variables and - # propagate them to relevent services run at the end of sway config - # see - # https://github.com/emersion/xdg-desktop-portal-wlr/wiki/"It-doesn't-work"-Troubleshooting-Checklist - # note: this is pretty much the same as /etc/sway/config.d/nixos.conf but also restarts - # some user services to make sure they have the correct environment variables - dbus-sway-environment = pkgs.writeTextFile { - name = "dbus-sway-environment"; - destination = "/bin/dbus-sway-environment"; - executable = true; - - text = '' - dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP=sway - systemctl --user stop pipewire pipewire-media-session xdg-desktop-portal xdg-desktop-portal-wlr - systemctl --user start pipewire pipewire-media-session xdg-desktop-portal xdg-desktop-portal-wlr - ''; - }; - - # currently, there is some friction between sway and gtk: - # https://github.com/swaywm/sway/wiki/GTK-3-settings-on-Wayland - # the suggested way to set gtk settings is with gsettings - # for gsettings to work, we need to tell it where the schemas are - # using the XDG_DATA_DIR environment variable - # run at the end of sway config - configure-gtk = pkgs.writeTextFile { - name = "configure-gtk"; - destination = "/bin/configure-gtk"; - executable = true; - text = - let - # TODO: figure out why these bindings exist or where they're used - schema = pkgs.gsettings-desktop-schemas; - datadir = "${schema}/share/gsettings-schemas/${schema.name}"; - in - '' - 6 gnome_schema=org.gnome.desktop.interface - gsettings set $gnome_schema gtk-theme 'Dracula' - ''; - }; -in +{ pkgs, ... }: { # List packages installed in system profile. To search, run: @@ -66,23 +26,6 @@ in smartmontools - # Sway stuff - wdisplays - mako - bemenu - wl-clipboard - slurp - grim - swayidle - swaylock - adwaita-icon-theme - dracula-theme - glib - xdg-utils - wayland - configure-gtk - dbus-sway-environment - dbus pkg-config zlib # why wouldn't I want documentation on my system