diff options
Diffstat (limited to 'modules')
| -rw-r--r-- | modules/btrfs.nix | 18 | ||||
| -rw-r--r-- | modules/default.nix | 10 | ||||
| -rw-r--r-- | modules/desktop/common.nix | 72 | ||||
| -rw-r--r-- | modules/desktop/default.nix | 49 | ||||
| -rw-r--r-- | modules/desktop/wayland.nix | 6 | ||||
| -rw-r--r-- | modules/desktop/wms/default.nix | 6 | ||||
| -rw-r--r-- | modules/desktop/wms/hyprland.nix | 43 | ||||
| -rw-r--r-- | modules/desktop/wms/xfce.nix | 37 | ||||
| -rw-r--r-- | modules/desktop/x11.nix | 11 | ||||
| -rw-r--r-- | modules/gpg.nix | 18 | ||||
| -rw-r--r-- | modules/virt.nix | 35 | ||||
| -rw-r--r-- | modules/vpn.nix | 20 |
12 files changed, 325 insertions, 0 deletions
diff --git a/modules/btrfs.nix b/modules/btrfs.nix new file mode 100644 index 0000000..70d35ac --- /dev/null +++ b/modules/btrfs.nix @@ -0,0 +1,18 @@ +{pkgs, lib, config, ...}: +let + cfg = config.addons.btrfs; +in +{ + options.addons.btrfs = { + enable = lib.mkEnableOption "Enable btrfs-related apps and utils"; + }; + + config = lib.mkMerge [ + (lib.mkIf cfg.enable { + services.btrfs.autoScrub = { + enable = true; + interval = "weekly"; + }; + }) + ]; +} diff --git a/modules/default.nix b/modules/default.nix new file mode 100644 index 0000000..786c440 --- /dev/null +++ b/modules/default.nix @@ -0,0 +1,10 @@ +{pkgs, lib, config ,...}: { + imports = [ + ./desktop + ./virt.nix + ./gpg.nix + ./btrfs.nix + ./vpn.nix + ]; + +} diff --git a/modules/desktop/common.nix b/modules/desktop/common.nix new file mode 100644 index 0000000..088ad73 --- /dev/null +++ b/modules/desktop/common.nix @@ -0,0 +1,72 @@ +{pkgs, config, lib, ...}: { + options.addons.desktop.enable = lib.mkEnableOption "On if the machine needs a desktop"; + + config = lib.mkIf config.addons.desktop.enable { + programs = { + dconf.enable = true; + thunar = { + enable = true; + plugins = with pkgs.xfce; [ + thunar-archive-plugin + thunar-media-tags-plugin + thunar-volman + ]; + }; + }; + + environment.systemPackages = with pkgs; [ + xdg-user-dirs + zathura + sioyek + vlc + mpv + gparted + kitty + # qalculate + networkmanagerapplet + surf # A basic browser in case we don't want to import a larger browser + ]; + + + # Enable CUPS to print documents. + # services.printing.enable = true; + + + # Enable touchpad support (enabled default in most desktopManager). + services.libinput.enable = true; + + services = { + blueman.enable = true; + # Enable sound + pipewire = { + enable = true; + pulse.enable = true; + }; + + displayManager.sddm = { + enable=true; + #theme = "catppuccin-mocha"; + }; + + }; + + i18n.inputMethod = { + type = "fcitx5"; + enable = true; + fcitx5.addons = with pkgs; [ + fcitx5-gtk + fcitx5-lua + fcitx5-mozc + catppuccin-fcitx5 + fcitx5-table-other + ]; + }; + + fonts.packages = with pkgs; [ + noto-fonts + font-awesome + nerd-fonts.hurmit + minecraftia + ]; + }; +} diff --git a/modules/desktop/default.nix b/modules/desktop/default.nix new file mode 100644 index 0000000..c3e0b45 --- /dev/null +++ b/modules/desktop/default.nix @@ -0,0 +1,49 @@ +{pkgs, lib, config,...}: +with lib; + let + wmMeta = config.addons.desktop.wmMeta; + + # Gets all the vm's that are enabled and checks which protocols are used + enabledWMs = (filter (wm: wm.enable) (attrValues wmMeta)); + protos = (unique (map (wm: wm.protocol) enabledWMs)); + desktopEnabled = protos != []; + x11Enabled = elem "x11" protos; + waylandEnabled = elem "wayland" protos; + + +in { + imports = [ + ./common.nix + ./x11.nix + ./wayland.nix + ./wms + ]; + options.addons.desktop = with types; { + wmMeta = mkOption { + type = attrsOf (submodule { + options = { + enable = mkOption { + type = bool; + default = false; + }; + protocol = mkOption { + type = str; + description = "Used display protocol (x11 or wayland)"; + }; + }; + }); + default = {}; + description = "Window manager metadata used for determining which protocol to enable."; + }; + + # enable = lib.mkEnableOption "Whenever any desktop environment is enabled."; + # x11.enable = lib.mkEnableOption "Whenever x11 desktop environment is enabled."; + # wayland.enable = lib.mkEnableOption "Whenever wayland desktop environment is enabled."; + }; + + config.addons.desktop = { + enable = desktopEnabled; + x11.enable = x11Enabled; + wayland.enable = waylandEnabled; + }; +} diff --git a/modules/desktop/wayland.nix b/modules/desktop/wayland.nix new file mode 100644 index 0000000..0b78daf --- /dev/null +++ b/modules/desktop/wayland.nix @@ -0,0 +1,6 @@ +{pkgs, lib, config, ...}: { + options.addons.desktop.wayland.enable = lib.mkEnableOption "Enable wayland" ; + config = lib.mkIf config.addons.desktop.wayland.enable { + services.displayManager.sddm.wayland.enable = true; + }; +} diff --git a/modules/desktop/wms/default.nix b/modules/desktop/wms/default.nix new file mode 100644 index 0000000..94d0e05 --- /dev/null +++ b/modules/desktop/wms/default.nix @@ -0,0 +1,6 @@ +{...}: { + imports = [ + ./hyprland.nix + ./xfce.nix + ]; +} diff --git a/modules/desktop/wms/hyprland.nix b/modules/desktop/wms/hyprland.nix new file mode 100644 index 0000000..8243b3d --- /dev/null +++ b/modules/desktop/wms/hyprland.nix @@ -0,0 +1,43 @@ +{pkgs, lib, config, ...}: + let cfg = config.addons.desktop.hyprland; +in { + options.addons.desktop.hyprland = { + enable = lib.mkEnableOption "Enable Hyprland"; + }; + + config = lib.mkIf cfg.enable (lib.mkMerge [ + (import ../../../utils/makeWm.nix "hyprland" "wayland" ) + { + programs.hyprland.enable = true; + programs.hyprland.withUWSM = true; + programs.uwsm = { + enable = true; + waylandCompositors ={ + hyprland = { + prettyName = "Hyprland"; + comment = "Hyprland compositor managed by UWSM"; + binPath = "/run/current-system/sw/bin/Hyprland"; + }; + }; + }; + + environment.systemPackages = with pkgs; [ + hyprland + hyprshot + hypridle + hyprpaper + hyprpicker + hyprnotify + hyprcursor + hyprpolkitagent + wofi + waybar + waybar-mpris + mako + xdg-desktop-portal-gnome + xdg-desktop-portal-hyprland + wl-clipboard + ]; + } + ]); +} diff --git a/modules/desktop/wms/xfce.nix b/modules/desktop/wms/xfce.nix new file mode 100644 index 0000000..0c62ee0 --- /dev/null +++ b/modules/desktop/wms/xfce.nix @@ -0,0 +1,37 @@ +{pkgs, config, lib, ...}: +let + cfg = config.addons.desktop.xfce; +in { + + options.addons.desktop.xfce = { + enable = lib.mkEnableOption "Enable xfce"; + }; + + config = lib.mkIf cfg.enable (lib.mkMerge [ + (import ../../../utils/makeWm.nix "xfce" "x11" ) + { + environment.systemPackages = with pkgs; [ + # XFCE stuff + xfce.catfish + xfce.xfce4-appfinder + xfce.xfce4-clipman-plugin + xfce.xfce4-cpugraph-plugin + xfce.xfce4-dict + xfce.xfce4-fsguard-plugin + xfce.xfce4-genmon-plugin + xfce.xfce4-netload-plugin + xfce.xfce4-panel + xfce.xfce4-pulseaudio-plugin + xfce.xfce4-systemload-plugin + xfce.xfce4-weather-plugin + xfce.xfce4-whiskermenu-plugin + xfce.xfce4-xkb-plugin + xfce.xfdashboard + + # GNOME stuff + file-roller + gnome-disk-utility + ]; + services.xserver.desktopManager.xfce.enable = true; + }]); +} diff --git a/modules/desktop/x11.nix b/modules/desktop/x11.nix new file mode 100644 index 0000000..cdbf3a3 --- /dev/null +++ b/modules/desktop/x11.nix @@ -0,0 +1,11 @@ +{pkgs, lib, config, ...}: { + options.addons.desktop.x11.enable = lib.mkEnableOption "Enabled if X11 is needed for this machine"; + config = lib.mkIf config.addons.desktop.x11.enable { + services.xserver = { + enable = true; + excludePackages = with pkgs; [ + xterm + ]; + }; + }; +} diff --git a/modules/gpg.nix b/modules/gpg.nix new file mode 100644 index 0000000..e7b6984 --- /dev/null +++ b/modules/gpg.nix @@ -0,0 +1,18 @@ +{pkgs, config, lib, ... }: +let cfg = config.addons.gpg; in +{ + options.addons.gpg = { + enable = lib.mkEnableOption "Allow gpg for all users"; + }; + + config = lib.mkMerge ([ + (lib.mkIf cfg.enable { + programs.gnupg = { + agent = { + enable = true; + }; + }; + }) + ]); + +} diff --git a/modules/virt.nix b/modules/virt.nix new file mode 100644 index 0000000..416f1c4 --- /dev/null +++ b/modules/virt.nix @@ -0,0 +1,35 @@ +{pkgs, config, lib, ...}: +let + cfg = config.addons.virtualisation; +in +{ + options.addons.virtualisation = { + host = lib.mkEnableOption "Allow to host vm's and containers"; + guest = lib.mkEnableOption "Enable guest agents"; + }; + + config = lib.mkMerge([ + (lib.mkIf cfg.host { + environment.systemPackages = with pkgs; [ + qemu + ]; + virtualisation = { + docker.enable = true; + libvirtd = { + enable = true; + qemu = { + swtpm.enable = true; + vhostUserPackages = with pkgs; [ virtiofsd ]; + ovmf.enable = true; + ovmf.packages = [ pkgs.OVMFFull.fd ]; + }; + }; + }; + + }) + (lib.mkIf cfg.guest { + virtualisation.spiceUSBRedirection.enable = true; + services.spice-vdagentd.enable = true; + }) + ]); +} diff --git a/modules/vpn.nix b/modules/vpn.nix new file mode 100644 index 0000000..5b5cf09 --- /dev/null +++ b/modules/vpn.nix @@ -0,0 +1,20 @@ +{config, pkgs, lib, ...}: +let + desktop = config.addons.desktop; + cfg = config.addons.vpn; + opt-mullvad = config.addons.vpn.mullvad; +in +{ + options.addons.vpn = { + mullvad.enable = lib.mkEnableOption "Enable mullvad vpn"; + }; + + config = lib.mkMerge [ + ({ services.mullvad-vpn.enable = opt-mullvad.enable; }) + (lib.mkIf desktop.enable (lib.mkMerge [ + (lib.mkIf opt-mullvad.enable { + services.mullvad-vpn.package = pkgs.mullvad-vpn; + }) + ])) + ]; +} |
