From e0176ec2d9fa05621ffe61d99d9beef7e8de025c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20R=C3=B6ger?= Date: Sat, 13 Apr 2024 16:42:51 +0200 Subject: [PATCH] modularize desktop components --- home/jonas.home.nix | 45 +++++++++++--------------- hosts/comfy-station/configuration.nix | 3 +- hosts/vm/configuration.nix | 12 ++++--- hosts/vm/hardware-configuration.nix | 10 +++--- modules/desktop/de/default.nix | 8 +++++ modules/desktop/de/hyprland.nix | 22 +++++++++++++ modules/desktop/de/plasma.nix | 14 ++++++++ modules/desktop/dm/default.nix | 39 ++++++++++++++++++++++ modules/desktop/dm/gdm.nix | 12 +++++++ modules/desktop/dm/sddm.nix | 13 ++++++++ modules/desktop/hyprland.nix | 8 ----- modules/desktop/x11-plasma-lightdm.nix | 29 ----------------- modules/desktop/x11-plasma.nix | 21 ------------ modules/services/docker.nix | 1 - 14 files changed, 141 insertions(+), 96 deletions(-) create mode 100644 modules/desktop/de/default.nix create mode 100644 modules/desktop/de/hyprland.nix create mode 100644 modules/desktop/de/plasma.nix create mode 100644 modules/desktop/dm/default.nix create mode 100644 modules/desktop/dm/gdm.nix create mode 100644 modules/desktop/dm/sddm.nix delete mode 100644 modules/desktop/hyprland.nix delete mode 100644 modules/desktop/x11-plasma-lightdm.nix delete mode 100644 modules/desktop/x11-plasma.nix diff --git a/home/jonas.home.nix b/home/jonas.home.nix index 22069fe..6c654a5 100644 --- a/home/jonas.home.nix +++ b/home/jonas.home.nix @@ -1,6 +1,7 @@ { config, pkgs, ... }: { + # Home Manager needs a bit of information about you and the paths it should # manage. home.username = "jonas"; @@ -17,31 +18,16 @@ # The home.packages option allows you to install Nix packages into your # environment. - home.packages = [ - # # Adds the 'hello' command to your environment. It prints a friendly - # # "Hello, world!" when run. - # pkgs.hello - - # # It is sometimes useful to fine-tune packages, for example, by applying - # # overrides. You can do that directly here, just don't forget the - # # parentheses. Maybe you want to install Nerd Fonts with a limited number of - # # fonts? - # (pkgs.nerdfonts.override { fonts = [ "FantasqueSansMono" ]; }) - - # # You can also create simple shell scripts directly inside your - # # configuration. For example, this adds a command 'my-hello' to your - # # environment: - # (pkgs.writeShellScriptBin "my-hello" '' - # echo "Hello, ${config.home.username}!" - # '') - pkgs.chromium - pkgs.firefox - pkgs.fzf - pkgs.nil - pkgs.nixpkgs-fmt - pkgs.poetry - pkgs.thefuck - pkgs.vscode + home.packages = with pkgs; [ + chromium + firefox + fzf + nil + nixpkgs-fmt + poetry + thefuck + vim + vscode ]; # Home Manager is pretty good at managing dotfiles. The primary way to manage @@ -75,7 +61,7 @@ # /etc/profiles/per-user/jonas/etc/profile.d/hm-session-vars.sh # home.sessionVariables = { - # EDITOR = "emacs"; + EDITOR = "vim"; }; # Let Home Manager install and manage itself. @@ -117,4 +103,11 @@ theme = "bureau"; }; }; + + # wayland.windowManager.hyprland = { + # enable = true; + # settings = { + # "$mod" = "SUPER"; + # }; + # }; } diff --git a/hosts/comfy-station/configuration.nix b/hosts/comfy-station/configuration.nix index 8bc02dd..8d5ea75 100644 --- a/hosts/comfy-station/configuration.nix +++ b/hosts/comfy-station/configuration.nix @@ -16,7 +16,6 @@ ../../modules/hardware/bluetooth.nix ../../modules/hardware/printing.nix ../../modules/hardware/sound.nix - ../../modules/desktop/x11-plasma.nix ../../modules/services/docker.nix ]; @@ -29,7 +28,7 @@ users.users.jonas = { isNormalUser = true; description = "Jonas"; - extraGroups = [ "networkmanager" "wheel" ]; + extraGroups = [ "networkmanager" "wheel" "docker"]; packages = with pkgs; [ ]; }; users.defaultUserShell = pkgs.zsh; diff --git a/hosts/vm/configuration.nix b/hosts/vm/configuration.nix index 6f9f06c..f58afdd 100644 --- a/hosts/vm/configuration.nix +++ b/hosts/vm/configuration.nix @@ -2,7 +2,7 @@ # your system. Help is available in the configuration.nix(5) man page # and in the NixOS manual (accessible by running ‘nixos-help’). -{ config, pkgs, inputs, ... }: +{ pkgs, inputs, ... }: { imports = @@ -16,11 +16,15 @@ ../../modules/hardware/bluetooth.nix ../../modules/hardware/printing.nix ../../modules/hardware/sound.nix - ../../modules/desktop/hyprland.nix ../../modules/services/docker.nix + ../../modules/desktop/dm + ../../modules/desktop/de ]; - nix.settings.experimental-features = [ "nix-command" "flakes" ]; + desktop.dm.name = "sddm"; + desktop.dm.autologin = "jonas"; + desktop.de.plasma.enable = true; + # Enable touchpad support (enabled default in most desktopManager). # services.xserver.libinput.enable = true; @@ -29,7 +33,7 @@ users.users.jonas = { isNormalUser = true; description = "Jonas"; - extraGroups = [ "networkmanager" "wheel" ]; + extraGroups = [ "networkmanager" "wheel" "docker"]; packages = with pkgs; [ ]; }; users.defaultUserShell = pkgs.zsh; diff --git a/hosts/vm/hardware-configuration.nix b/hosts/vm/hardware-configuration.nix index c0c3be1..ae9b81b 100644 --- a/hosts/vm/hardware-configuration.nix +++ b/hosts/vm/hardware-configuration.nix @@ -6,18 +6,18 @@ { imports = [ ]; - boot.initrd.availableKernelModules = [ "sd_mod" "sr_mod" ]; + boot.initrd.availableKernelModules = [ "ata_piix" "ohci_pci" "ehci_pci" "ahci" "sd_mod" "sr_mod" ]; boot.initrd.kernelModules = [ ]; boot.kernelModules = [ ]; boot.extraModulePackages = [ ]; fileSystems."/" = - { device = "/dev/disk/by-uuid/0bbdc54a-243c-4b40-8566-c12adff1417a"; + { device = "/dev/disk/by-uuid/a28cd2c0-67f3-4492-9cd9-996fdbe2b8ef"; fsType = "ext4"; }; fileSystems."/boot" = - { device = "/dev/disk/by-uuid/5DE9-BA20"; + { device = "/dev/disk/by-uuid/0134-2DF5"; fsType = "vfat"; }; @@ -28,8 +28,8 @@ # still possible to use this option, but it's recommended to use it in conjunction # with explicit per-interface declarations with `networking.interfaces..useDHCP`. networking.useDHCP = lib.mkDefault true; - # networking.interfaces.eth0.useDHCP = lib.mkDefault true; + # networking.interfaces.enp0s3.useDHCP = lib.mkDefault true; nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; - virtualisation.hypervGuest.enable = true; + virtualisation.virtualbox.guest.enable = true; } diff --git a/modules/desktop/de/default.nix b/modules/desktop/de/default.nix new file mode 100644 index 0000000..584d6c5 --- /dev/null +++ b/modules/desktop/de/default.nix @@ -0,0 +1,8 @@ +{ ... }: + +{ + imports = [ + ./hyprland.nix + ./plasma.nix + ]; +} \ No newline at end of file diff --git a/modules/desktop/de/hyprland.nix b/modules/desktop/de/hyprland.nix new file mode 100644 index 0000000..2f989b3 --- /dev/null +++ b/modules/desktop/de/hyprland.nix @@ -0,0 +1,22 @@ +{ lib, config, ... }: + +let + cfg = config.desktop.de.hyprland; +in +{ + options.desktop.de.hyprland = { + enable = lib.mkEnableOption "enable hyprland desktop environment"; + }; + + config = lib.mkIf cfg.enable { + services = { + xserver.libinput.enable = true; + dbus.enable = true; + }; + + programs.hyprland = { + enable = true; + xwayland.enable = true; + }; + }; +} diff --git a/modules/desktop/de/plasma.nix b/modules/desktop/de/plasma.nix new file mode 100644 index 0000000..392b27e --- /dev/null +++ b/modules/desktop/de/plasma.nix @@ -0,0 +1,14 @@ +{ config, lib, ... }: + +let + cfg = config.desktop.de.plasma; +in +{ + options.desktop.de.plasma = { + enable = lib.mkEnableOption "Enable Plasma desktop environment with sddm"; + }; + + config = lib.mkIf cfg.enable { + services.xserver.desktopManager.plasma5.enable = true; + }; +} \ No newline at end of file diff --git a/modules/desktop/dm/default.nix b/modules/desktop/dm/default.nix new file mode 100644 index 0000000..b0fa0ab --- /dev/null +++ b/modules/desktop/dm/default.nix @@ -0,0 +1,39 @@ +{ config, lib, ... }: + +let + cfg = config.desktop.dm; +in +{ + options.desktop.dm = with lib; { + name = mkOption { + type = types.nullOr (types.enum ["sddm" "gdm"]); + default = null; + description = "The display manager to use."; + }; + autologin = mkOption { + type = types.nullOr types.str; + default = null; + description = "The autologin username or null for no autologin."; + }; + wayland = mkOption { + type = types.bool; + default = false; + description = "Enable wayland"; + }; + }; + + imports = [ + ./gdm.nix + ./sddm.nix + ]; + + config = { + services.xserver.enable = true; + services.xserver = { + layout = "de"; + xkbVariant = ""; + }; + services.xserver.displayManager.autoLogin.enable = (cfg.autologin != null); + services.xserver.displayManager.autoLogin.user = cfg.autologin; + }; +} diff --git a/modules/desktop/dm/gdm.nix b/modules/desktop/dm/gdm.nix new file mode 100644 index 0000000..d80c1d6 --- /dev/null +++ b/modules/desktop/dm/gdm.nix @@ -0,0 +1,12 @@ +{ lib, config, ... }: +let + cfg = config.desktop.dm; +in +{ + config = lib.mkIf (cfg.name == "gdm") { + services.xserver.displayManager.gdm = { + enable = true; + wayland = cfg.wayland; + }; + }; +} \ No newline at end of file diff --git a/modules/desktop/dm/sddm.nix b/modules/desktop/dm/sddm.nix new file mode 100644 index 0000000..079db04 --- /dev/null +++ b/modules/desktop/dm/sddm.nix @@ -0,0 +1,13 @@ +{ lib, config, ... }: + +let + cfg = config.desktop.dm; +in +{ + config = lib.mkIf (cfg.name == "sddm") { + services.xserver.displayManager.sddm = { + enable = true; + wayland.enable = cfg.wayland; + }; + }; +} \ No newline at end of file diff --git a/modules/desktop/hyprland.nix b/modules/desktop/hyprland.nix deleted file mode 100644 index b7de2e9..0000000 --- a/modules/desktop/hyprland.nix +++ /dev/null @@ -1,8 +0,0 @@ -{ config, pkgs, ... }: - -{ - programs.hyprland = { - enable = true; - xwayland.enable = true; - }; -} diff --git a/modules/desktop/x11-plasma-lightdm.nix b/modules/desktop/x11-plasma-lightdm.nix deleted file mode 100644 index e7f2c0f..0000000 --- a/modules/desktop/x11-plasma-lightdm.nix +++ /dev/null @@ -1,29 +0,0 @@ -{ config, pkgs, ... }: - -{ - # Import unstable plasma6 module - imports = [ - "${nixpkgs-unstable}/nixos/modules/services/desktop-managers/plasma6.nix" - ]; - disable = [ - "services/desktop-managers/plasma6.nix" - ]; - - # Enable the X11 windowing system. - services.xserver.enable = true; - - # Configure keymap in X11 - services.xserver = { - layout = "de"; - xkbVariant = ""; - }; - - # Enable the KDE Plasma Desktop Environment. - services.xserver.displayManager.sddm.wayland.enable = true; - services.desktopManager.plasma6.enable = true; - - # Enable automatic login for the user. - services.xserver.displayManager.autoLogin.enable = true; - services.xserver.displayManager.autoLogin.user = "jonas"; - -} diff --git a/modules/desktop/x11-plasma.nix b/modules/desktop/x11-plasma.nix deleted file mode 100644 index cefb357..0000000 --- a/modules/desktop/x11-plasma.nix +++ /dev/null @@ -1,21 +0,0 @@ -{ config, ... }: - -{ - # Enable the X11 windowing system. - services.xserver.enable = true; - - # Configure keymap in X11 - services.xserver = { - layout = "de"; - xkbVariant = ""; - }; - - # Enable the KDE Plasma Desktop Environment. - services.xserver.displayManager.sddm.enable = true; - services.xserver.desktopManager.plasma5.enable = true; - - # Enable automatic login for the user. - services.xserver.displayManager.autoLogin.enable = true; - services.xserver.displayManager.autoLogin.user = "jonas"; - -} \ No newline at end of file diff --git a/modules/services/docker.nix b/modules/services/docker.nix index e3d8fb1..ed25305 100644 --- a/modules/services/docker.nix +++ b/modules/services/docker.nix @@ -2,5 +2,4 @@ { virtualisation.docker.enable = true; - users.users.jonas.extraGroups = [ "docker" ]; } \ No newline at end of file