diff --git a/provision/nixos/hosts/kestrel/configuration.nix b/provision/nixos/hosts/kestrel/configuration.nix index bdb5a687..c195947c 100644 --- a/provision/nixos/hosts/kestrel/configuration.nix +++ b/provision/nixos/hosts/kestrel/configuration.nix @@ -37,26 +37,26 @@ time.timeZone = "America/Los_Angeles"; i18n.defaultLocale = "en_US.UTF-8"; - services.xserver = { - enable = true; - layout = "us"; + #services.xserver = { + # enable = true; + # layout = "us"; - desktopManager.xterm.enable = false; + # desktopManager.xterm.enable = false; - # Use nvidia drivers - videoDrivers = [ "amdgpu" ]; + # # Use nvidia drivers + # videoDrivers = [ "amdgpu" ]; - displayManager.gdm.enable = true; - desktopManager.gnome.enable = true; + # displayManager.gdm.enable = true; + # desktopManager.gnome.enable = true; - # Use the xmonad wm - windowManager = { - xmonad = { - enable = true; - enableContribAndExtras = true; - }; - }; - }; + # # Use the xmonad wm + # windowManager = { + # xmonad = { + # enable = true; + # enableContribAndExtras = true; + # }; + # }; + #}; # Enable sound. sound.enable = true; @@ -96,6 +96,7 @@ pinentry-curses zsh ripgrep + trash-cli ]; # Enable user services @@ -125,12 +126,12 @@ }; + # Enable modules imports = [ ../../modules ]; - modules = { services = { samba.enable = true; - vfio.enable = true; + vfio.enable = false; # Currently broken }; devel = { python.enable = true; @@ -139,6 +140,9 @@ gaming = { steam.enable = true; }; + desktop = { + sway.enable = true; + }; }; system.stateVersion = "22.11"; # Did you read the comment? diff --git a/provision/nixos/hosts/kestrel/home-configuration.nix b/provision/nixos/hosts/kestrel/home-configuration.nix index 32c083ef..da6b23ce 100644 --- a/provision/nixos/hosts/kestrel/home-configuration.nix +++ b/provision/nixos/hosts/kestrel/home-configuration.nix @@ -7,30 +7,17 @@ home.packages = with pkgs; [ firefox - rofi alacritty gamemode lutris - prismlauncher - nitrogen - keepassxc pcmanfm discord inkscape - gruvbox-dark-gtk - gruvbox-dark-icons-gtk libreoffice-fresh chezmoi rbw vscodium.fhs ]; - gtk = { - enable = true; - theme = { - name = "gruvbox-dark"; - }; - }; - home.stateVersion = "22.11"; } diff --git a/provision/nixos/modules/default.nix b/provision/nixos/modules/default.nix index a72bbf60..efa58c8d 100644 --- a/provision/nixos/modules/default.nix +++ b/provision/nixos/modules/default.nix @@ -1,4 +1,4 @@ { ... }: { - imports = [ ./gaming ./devel ./services ./editors ]; + imports = [ ./desktop ./gaming ./devel ./services ]; } diff --git a/provision/nixos/modules/desktop/default.nix b/provision/nixos/modules/desktop/default.nix new file mode 100644 index 00000000..82bc7354 --- /dev/null +++ b/provision/nixos/modules/desktop/default.nix @@ -0,0 +1,4 @@ +{ ... }: +{ + imports = [ ./sway.nix ]; +} diff --git a/provision/nixos/modules/desktop/sway.nix b/provision/nixos/modules/desktop/sway.nix new file mode 100644 index 00000000..24208c5b --- /dev/null +++ b/provision/nixos/modules/desktop/sway.nix @@ -0,0 +1,85 @@ +{ config, lib, pkgs, user, ... }: + +let + cfg = config.modules.desktop.sway; + # 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 + 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 { + options.modules.desktop.sway.enable = lib.mkEnableOption "sway"; + config = lib.mkIf cfg.enable { + + environment.systemPackages = with pkgs; [ + sway + dbus-sway-environment + wayland + configure-gtk + xdg-utils # for opening default programs when clicking links + glib # gsettings + dracula-theme # gtk theme + gnome3.adwaita-icon-theme # default gnome cursors + swaylock + swayidle + grim # screenshot functionality + wl-clipboard # wl-copy and wl-paste for copy/paste from stdin / stdout + mako # notification system developed by swaywm maintainer + wdisplays # tool to configure displays + rofi + ]; + + # xdg-desktop-portal works by exposing a series of D-Bus interfaces + # known as portals under a well-known name + # (org.freedesktop.portal.Desktop) and object path + # (/org/freedesktop/portal/desktop). + # The portal interfaces include APIs for file access, opening URIs, + # printing and others. + services.dbus.enable = true; + xdg.portal = { + enable = true; + wlr.enable = true; + # gtk portal needed to make gtk apps happy + extraPortals = [ pkgs.xdg-desktop-portal-gtk ]; + }; + + # enable sway window manager + programs.sway = { + enable = true; + wrapperFeatures.gtk = true; + }; + }; +} diff --git a/provision/nixos/modules/editors/default.nix b/provision/nixos/modules/editors/default.nix deleted file mode 100644 index ca62e98a..00000000 --- a/provision/nixos/modules/editors/default.nix +++ /dev/null @@ -1,5 +0,0 @@ -{ ... }: - -{ - imports = [ ./emacs.nix ]; -} diff --git a/provision/nixos/modules/editors/emacs.nix b/provision/nixos/modules/editors/emacs.nix deleted file mode 100644 index 7eb6c267..00000000 --- a/provision/nixos/modules/editors/emacs.nix +++ /dev/null @@ -1,22 +0,0 @@ -# emacs because my life isn't already hard enough - -{ config, lib, pkgs, user, ... }: - -let cfg = config.modules.editors.emacs; -in { - options.modules.editors.emacs.enable = lib.mkEnableOption "emacs"; - config = lib.mkIf cfg.enable { - - # Install packages - environment.systemPackages = with pkgs; [ emacs silver-searcher ripgrep ]; - - # Setup SystemCrafter's awesome crafted-emacs - system.userActivationScripts = { - installCraftedEmacs = '' - if [ ! -d "/home/${user}/.emacs.d" ]; then - ${pkgs.git}/bin/git clone "https://github.com/SystemCrafters/crafted-emacs.git" "/home/${user}/.emacs.d" - fi - ''; - }; - }; -} diff --git a/provision/nixos/modules/gaming/steam.nix b/provision/nixos/modules/gaming/steam.nix index ab3233c7..409355f1 100644 --- a/provision/nixos/modules/gaming/steam.nix +++ b/provision/nixos/modules/gaming/steam.nix @@ -1,8 +1,8 @@ { config, lib, pkgs, user, ... }: -let cfg = config.modules.editors.steam; +let cfg = config.modules.gaming.steam; in { - options.modules.editors.steam.enable = lib.mkEnableOption "steam"; + options.modules.gaming.steam.enable = lib.mkEnableOption "steam"; config = lib.mkIf cfg.enable { hardware.opengl = { # this fixes the "glXChooseVisual failed" bug, context: https://github.com/NixOS/nixpkgs/issues/47932 enable = true;