diff --git a/hosts/slab/configuration.nix b/hosts/slab/configuration.nix index 1982631..469884d 100644 --- a/hosts/slab/configuration.nix +++ b/hosts/slab/configuration.nix @@ -17,14 +17,18 @@ [ # Include the results of the hardware scan. ./hardware-configuration.nix + ../../system # nixfiles modules ./nvidia-optimus.nix - ../../system/remote.nix - # ../../system/plasma.nix - ../../system/fragments/opengl.nix - ../../system/gaming.nix - ../../system/android.nix - ../../system/hyprland.nix + ../../system/fragments/android.nix ]; + nixfiles = { + common.remoteAccess.enable = true; + hardware.opengl.enable = true; + packageSets.gaming.enable = true; + sessions.hyprland.enable = true; + sessions.plasma.enable = lib.mkDefault false; + }; + networking.hostName = "slab"; diff --git a/modules/home-manager/default.nix b/modules/home-manager/default.nix index 0967ef4..da2b766 100644 --- a/modules/home-manager/default.nix +++ b/modules/home-manager/default.nix @@ -1 +1,2 @@ +_: {} diff --git a/system/README.md b/system/README.md index e91ba36..f066869 100644 --- a/system/README.md +++ b/system/README.md @@ -1,2 +1,4 @@ # system -This directory contains modules and configuration specific to my NixOS configuration. `default.nix` is the entrypoint to my module set; it can safely be loaded without making any configuration changes by default. +This directory contains modules and configuration specific to my NixOS +configuration. `default.nix` is the entrypoint to my module set; it can +safely be loaded without making any configuration changes by default. diff --git a/system/base.nix b/system/base.nix deleted file mode 100644 index aa55cee..0000000 --- a/system/base.nix +++ /dev/null @@ -1,7 +0,0 @@ -{ config, lib, pkgs, ...}: -{ - imports = [ - ./fragments/base.nix - ./fragments/me.nix - ]; -} diff --git a/system/common/default.nix b/system/common/default.nix new file mode 100644 index 0000000..84e16c5 --- /dev/null +++ b/system/common/default.nix @@ -0,0 +1,9 @@ +{...}: +{ + imports = [ + ./desktop.nix + ./me.nix + ./remote.nix + ./wm.nix + ]; +} diff --git a/system/common/desktop.nix b/system/common/desktop.nix new file mode 100644 index 0000000..edf5df4 --- /dev/null +++ b/system/common/desktop.nix @@ -0,0 +1,59 @@ +{ config, lib, pkgs, outputs, ...}: +let + cfg = config.nixfiles.common.desktop; + inherit (lib) mkIf mkDefault mkForce mkEnableOption; +in +{ + # imports = [ + # ./base.nix + # ./fragments/sound.nix + # ./fragments/multimedia.nix + # ./fragments/software/syncthing.nix + # ./fragments/hardware/bluetooth.nix + # ]; + + options.nixfiles.common.desktop = { + enable = mkEnableOption "common desktop options"; + }; + + config = mkIf cfg.enable { + # enable option sets + nixfiles = { + profile.base.enable = true; + packageSets.multimedia.enable = mkDefault true; + programs.syncthing.enable = mkDefault true; + hardware = { + bluetooth.enable = mkDefault true; + sound.enable = mkDefault true; + }; + }; + + # Enable the X11 windowing system. + services.xserver.enable = true; + + environment.systemPackages = with pkgs; [ + arc-theme + wl-clipboard + ]; + + # Enable flatpak + services.flatpak.enable = mkDefault true; + + # Enable CUPS to print documents. + services.printing.enable = mkDefault true; + + fonts.packages = with pkgs; [ + (nerdfonts.override { fonts = [ "FiraCode" ]; }) + noto-fonts-cjk + (outputs.packages.${pkgs.system}.google-fonts.override { fonts = [ "NovaSquare" ];}) + ]; + + # TODO this should be defined in home-manager or not at all probably + # FIXME also my name is hardcoded + users.users.nullbite = { + packages = with pkgs; [ + firefox + ]; + }; + }; +} diff --git a/system/common/me.nix b/system/common/me.nix new file mode 100644 index 0000000..74c3271 --- /dev/null +++ b/system/common/me.nix @@ -0,0 +1,28 @@ +{ config, lib, pkgs, ...}: +let + cfg = config.nixfiles.common.me; +in +{ + options.nixfiles.common.me = { + enable = lib.mkEnableOption "my user account"; + }; + + config = lib.mkIf cfg.enable { + users.users.nullbite = { + isNormalUser = true; + extraGroups = [ "wheel" ]; + packages = with pkgs; [ + keychain + ]; + initialPassword = "changeme"; + shell = pkgs.zsh; + }; + + # shell config + programs.zsh.enable = true; + programs.fzf = { + keybindings = true; + fuzzyCompletion = true; + }; + }; +} diff --git a/system/common/remote.nix b/system/common/remote.nix new file mode 100644 index 0000000..699e0d2 --- /dev/null +++ b/system/common/remote.nix @@ -0,0 +1,23 @@ +{ config, lib, pkgs, ... }: +let + cfg = config.nixfiles.common.remoteAccess; +in +{ + config = lib.mkIf cfg.enable { + # Enable the OpenSSH daemon. + # services.openssh.enable = true; + services.openssh = { + enable = true; + openFirewall = true; + settings = { + + }; + }; + + services.tailscale.enable = true; + + networking.wireguard.enable = true; + }; + options = { + nixfiles.common.remoteAccess.enable = lib.mkEnableOption "remote access options" ; }; +} diff --git a/system/common/wm.nix b/system/common/wm.nix new file mode 100644 index 0000000..30b6f20 --- /dev/null +++ b/system/common/wm.nix @@ -0,0 +1,21 @@ +{ pkgs, lib, config, options, ...}: +let + inherit (lib) mkDefault mkIf mkEnableOption; + cfg = config.nixfiles.common.wm; +in +{ + config = mkIf cfg.enable { + # Common options for standalone window managers; many of these (or + # alternatives thereof) are pulled in by desktop environments. + services = { + power-profiles-daemon.enable = mkDefault true; + blueman.enable = mkDefault config.hardware.bluetooth.enable; + }; + programs = { + nm-applet.enable = mkDefault config.networking.networkmanager.enable; + }; + }; + options = { + nixfiles.common.wm.enable = mkEnableOption "common window manager configuration"; + }; +} diff --git a/system/default.nix b/system/default.nix index 09dcd6a..d3ce6be 100644 --- a/system/default.nix +++ b/system/default.nix @@ -4,6 +4,12 @@ let in { imports = [ + ./common + ./hardware + ./package-sets + ./profile + ./programs + ./sessions ]; config = {}; options.nixfiles = { diff --git a/system/desktop-common.nix b/system/desktop-common.nix deleted file mode 100644 index 49aa07e..0000000 --- a/system/desktop-common.nix +++ /dev/null @@ -1,37 +0,0 @@ -{ config, lib, pkgs, outputs, ...}: - -{ - imports = [ - ./base.nix - ./fragments/sound.nix - ./fragments/multimedia.nix - ./fragments/software/syncthing.nix - ./fragments/hardware/bluetooth.nix - ]; - - # Enable the X11 windowing system. - services.xserver.enable = true; - - environment.systemPackages = with pkgs; [ - arc-theme - wl-clipboard - ]; - - # Enable flatpak - services.flatpak.enable = true; - - # Enable CUPS to print documents. - services.printing.enable = true; - - fonts.packages = with pkgs; [ - (nerdfonts.override { fonts = [ "FiraCode" ]; }) - noto-fonts-cjk - (outputs.packages.${pkgs.system}.google-fonts.override { fonts = [ "NovaSquare" ];}) - ]; - - users.users.nullbite = { - packages = with pkgs; [ - firefox - ]; - }; -} diff --git a/system/fragments/README.md b/system/fragments/README.md deleted file mode 100644 index 3031dac..0000000 --- a/system/fragments/README.md +++ /dev/null @@ -1,19 +0,0 @@ -# Fragments -These are Nix modules which aim to configure only one aspect of the system. -This can include installing and configuring single programs such as Steam, -MangoHud, Syncthing, or OpenSSH, as well as setting generic options for certain -hardware setups, such as NVIDIA PRIME Offloading. - -## TODO -These are some fragments that I want to create: -- hardware/nvidia -- hardware/nvidia-supergfxd -- hardware/printing - - CUPS - - QZTray (maybe?) -- software/steam -- software/syncthing -- software/libreoffice -- software/ssh -- software/gnupg -- software/pam-gnupg (dep. software/gnupg) diff --git a/system/android.nix b/system/fragments/android.nix similarity index 100% rename from system/android.nix rename to system/fragments/android.nix diff --git a/system/fragments/base.nix b/system/fragments/base.nix deleted file mode 100644 index de4d18b..0000000 --- a/system/fragments/base.nix +++ /dev/null @@ -1,74 +0,0 @@ -{ config, lib, pkgs, options, inputs, ...}@args: -{ - # locale settings - i18n = { - defaultLocale = "en_US.UTF-8"; - extraLocaleSettings = { - LC_ALL = "en_US.UTF-8"; - }; - }; - - # Enable flakes - nix.settings.experimental-features = ["nix-command" "flakes" ]; - - # fallback to building locally if binary cache fails (home-manager should be - # able to handle simple rebuilds offline) - nix.settings.fallback = true; - - # Allow unfree packages - nixpkgs.config.allowUnfree = true; - - # networking.hostName = "nixos"; # Define your hostname. - # Pick only one of the below networking options. - # networking.wireless.enable = true; # Enables wireless support via wpa_supplicant. - networking.networkmanager.enable = lib.mkDefault true; # Easiest to use and most distros use this by default. - - # List packages installed in system profile. To search, run: - # $ nix search wget - environment.systemPackages = with pkgs; [ - neovim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default. - wget - curl - git - git-lfs - stow - zsh - ntfs3g - openssh - sshfs - file - - fd - ripgrep - sbctl # TODO move this elsewhere - comma - nil - - # network utilities - inetutils - socat - nmap - hping - - # system utilities - htop - lshw - pciutils - ]; - - # this makes comma and legacy nix utils use the flake nixpkgs for ABI - # compatibility becasue once `, vkcube` couldn't find the correct opengl - # driver or something (also it reduces the download size of temporary shell - # closures) - nix.nixPath = [ "nixpkgs=${inputs.nixpkgs}" ] ++ options.nix.nixPath.default; - - programs.ssh.enableAskPassword = false; - programs.fuse.userAllowOther = true; - - programs.gnupg.agent = { - enable = lib.mkDefault true; - enableSSHSupport = lib.mkDefault true; - }; - - boot.loader.systemd-boot.configurationLimit = lib.mkDefault 15; -} diff --git a/system/fragments/cli-multimedia.nix b/system/fragments/cli-multimedia.nix deleted file mode 100644 index 370aac0..0000000 --- a/system/fragments/cli-multimedia.nix +++ /dev/null @@ -1,8 +0,0 @@ -{ config, lib, pkgs, ...}: -{ - environment.systemPackages = with pkgs; [ - yt-dlp - imagemagick - ffmpeg - ]; -} diff --git a/system/debugging.nix b/system/fragments/debugging.nix similarity index 100% rename from system/debugging.nix rename to system/fragments/debugging.nix diff --git a/system/fragments/hardware/bluetooth.nix b/system/fragments/hardware/bluetooth.nix deleted file mode 100644 index dd84452..0000000 --- a/system/fragments/hardware/bluetooth.nix +++ /dev/null @@ -1,7 +0,0 @@ -{ config, lib, pkgs, ...}: -{ - hardware.bluetooth = { - enable = lib.mkDefault true; - powerOnBoot = lib.mkDefault true; - }; -} diff --git a/system/fragments/hardware/nvidia-modeset.nix b/system/fragments/hardware/nvidia-modeset.nix deleted file mode 100644 index 2f9c44b..0000000 --- a/system/fragments/hardware/nvidia-modeset.nix +++ /dev/null @@ -1,37 +0,0 @@ -{ config, lib, pkgs, ...}: -{ - imports = [ - ../opengl.nix - ]; - - # Load nvidia driver for Xorg and Wayland - services.xserver.videoDrivers = ["nvidia"]; - - hardware.nvidia = { - - # Modesetting is required. - modesetting.enable = lib.mkDefault true; - - # Nvidia power management. Experimental, and can cause sleep/suspend to fail. - powerManagement.enable = lib.mkDefault false; - # Fine-grained power management. Turns off GPU when not in use. - # Experimental and only works on modern Nvidia GPUs (Turing or newer). - powerManagement.finegrained = lib.mkDefault false; - - # Use the NVidia open source kernel module (not to be confused with the - # independent third-party "nouveau" open source driver). - # Support is limited to the Turing and later architectures. Full list of - # supported GPUs is at: - # https://github.com/NVIDIA/open-gpu-kernel-modules#compatible-gpus - # Only available from driver 515.43.04+ - # Currently alpha-quality/buggy, so false is currently the recommended setting. - open = lib.mkDefault false; - - # Enable the Nvidia settings menu, - # accessible via `nvidia-settings`. - nvidiaSettings = lib.mkDefault true; - - # Optionally, you may need to select the appropriate driver version for your specific GPU. - package = lib.mkDefault config.boot.kernelPackages.nvidiaPackages.production; - }; -} diff --git a/system/fragments/me.nix b/system/fragments/me.nix deleted file mode 100644 index 5a74daa..0000000 --- a/system/fragments/me.nix +++ /dev/null @@ -1,20 +0,0 @@ -{ config, lib, pkgs, ...}: -{ - users.users.nullbite = { - isNormalUser = true; - extraGroups = [ "wheel" ]; - packages = with pkgs; [ - keychain - ]; - initialPassword = "changeme"; - shell = pkgs.zsh; - }; - - # shell config - programs.zsh.enable = true; - programs.fzf = { - keybindings = true; - fuzzyCompletion = true; - }; - -} diff --git a/system/fragments/multimedia.nix b/system/fragments/multimedia.nix deleted file mode 100644 index 7120919..0000000 --- a/system/fragments/multimedia.nix +++ /dev/null @@ -1,8 +0,0 @@ -{ config, lib, pkgs, ...}: -{ - imports = [ ./cli-multimedia.nix ]; - environment.systemPackages = with pkgs; [ - mpv - gimp-with-plugins - ]; -} diff --git a/system/fragments/opengl.nix b/system/fragments/opengl.nix deleted file mode 100644 index 79ee5d2..0000000 --- a/system/fragments/opengl.nix +++ /dev/null @@ -1,11 +0,0 @@ -{ config, lib, pkgs, ...}: -{ - - # Enable OpenGL - hardware.opengl = { - enable = true; - driSupport = true; - driSupport32Bit = true; - }; - -} diff --git a/system/fragments/software/syncthing.nix b/system/fragments/software/syncthing.nix deleted file mode 100644 index da6d2da..0000000 --- a/system/fragments/software/syncthing.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ config, lib, pkgs, ...}: -{ - services.syncthing = { - enable = lib.mkDefault true; - user = lib.mkDefault "nullbite"; - dataDir = lib.mkDefault "/home/nullbite/Documents"; - configDir = lib.mkDefault "/home/nullbite/.config/syncthing"; - }; -} diff --git a/system/fragments/sound.nix b/system/fragments/sound.nix deleted file mode 100644 index a4e606a..0000000 --- a/system/fragments/sound.nix +++ /dev/null @@ -1,22 +0,0 @@ -{ config, lib, pkgs, ...}: -{ - # Enable sound. - # sound.enable = true; - # hardware.pulseaudio.enable = true; - security.rtkit.enable = true; - services.pipewire = { - enable = true; - alsa.enable = true; - alsa.support32Bit = true; - pulse.enable = true; - jack.enable = true; - }; - - environment.systemPackages = with pkgs; [ - qpwgraph - pavucontrol - ncpamixer - pulsemixer - easyeffects - ]; -} diff --git a/system/gaming.nix b/system/gaming.nix deleted file mode 100644 index 258d158..0000000 --- a/system/gaming.nix +++ /dev/null @@ -1,32 +0,0 @@ -{ config, lib, pkgs, ...}: -{ - # oopsies this is for home-manager - # programs.mangohud.enable = lib.mkDefault true; - - programs.steam = { - enable = lib.mkDefault true; - gamescopeSession = { - enable = lib.mkDefault true; - }; - }; - - programs.gamemode = { - enable = lib.mkDefault true; - enableRenice = lib.mkDefault true; - }; - - programs.gamescope = { - enable = lib.mkDefault true; - capSysNice = lib.mkDefault false; - }; - - environment.systemPackages = with pkgs; [ - mangohud - goverlay - prismlauncher - glxinfo - vulkan-tools - legendary-gl - heroic - ]; -} diff --git a/system/hardware/bluetooth.nix b/system/hardware/bluetooth.nix new file mode 100644 index 0000000..a6916aa --- /dev/null +++ b/system/hardware/bluetooth.nix @@ -0,0 +1,16 @@ +{ config, lib, pkgs, ...}: +let + cfg = config.nixfiles.hardware.bluetooth; +in +{ + options.nixfiles.hardware.bluetooth = { + enable = lib.mkEnableOption "Bluetooth"; + }; + + config = lib.mkIf cfg.enable { + hardware.bluetooth = { + enable = lib.mkDefault true; + powerOnBoot = lib.mkDefault true; + }; + }; +} diff --git a/system/hardware/default.nix b/system/hardware/default.nix new file mode 100644 index 0000000..2b2c44c --- /dev/null +++ b/system/hardware/default.nix @@ -0,0 +1,9 @@ +{...}: +{ + imports = [ + ./bluetooth.nix + ./nvidia.nix + ./opengl.nix + ./sound.nix + ]; +} diff --git a/system/hardware/nvidia.nix b/system/hardware/nvidia.nix new file mode 100644 index 0000000..7b36584 --- /dev/null +++ b/system/hardware/nvidia.nix @@ -0,0 +1,47 @@ +{ config, lib, pkgs, ...}: +let + cfg = config.nixfiles.hardware.nvidia; +in +{ + # imports = [ + # ../opengl.nix + # ]; + + # Load nvidia driver for Xorg and Wayland + options.nixfiles.hardware.nvidia = { + modesetting.enable = lib.mkEnableOption "NVIDIA configuration with modesetting"; + }; + config = lib.mkIf cfg.modesetting.enable { + services.xserver.videoDrivers = ["nvidia"]; + + nixfiles.hardware.opengl.enable = true; + + hardware.nvidia = { + + # Modesetting is required. + modesetting.enable = lib.mkDefault true; + + # Nvidia power management. Experimental, and can cause sleep/suspend to fail. + powerManagement.enable = lib.mkDefault false; + # Fine-grained power management. Turns off GPU when not in use. + # Experimental and only works on modern Nvidia GPUs (Turing or newer). + powerManagement.finegrained = lib.mkDefault false; + + # Use the NVidia open source kernel module (not to be confused with the + # independent third-party "nouveau" open source driver). + # Support is limited to the Turing and later architectures. Full list of + # supported GPUs is at: + # https://github.com/NVIDIA/open-gpu-kernel-modules#compatible-gpus + # Only available from driver 515.43.04+ + # Currently alpha-quality/buggy, so false is currently the recommended setting. + open = lib.mkDefault false; + + # Enable the Nvidia settings menu, + # accessible via `nvidia-settings`. + nvidiaSettings = lib.mkDefault true; + + # Optionally, you may need to select the appropriate driver version for your specific GPU. + package = lib.mkDefault config.boot.kernelPackages.nvidiaPackages.production; + }; + }; +} diff --git a/system/hardware/opengl.nix b/system/hardware/opengl.nix new file mode 100644 index 0000000..b48a19b --- /dev/null +++ b/system/hardware/opengl.nix @@ -0,0 +1,15 @@ +{ config, lib, pkgs, ...}: +let + cfg = config.nixfiles.hardware.opengl; +in +{ + options.nixfiles.hardware.opengl.enable = lib.mkEnableOption "OpenGL configuration"; + config = lib.mkIf cfg.enable { + # Enable OpenGL + hardware.opengl = { + enable = true; + driSupport = lib.mkDefault true; + driSupport32Bit = lib.mkDefault config.hardware.opengl.driSupport; + }; + }; +} diff --git a/system/hardware/sound.nix b/system/hardware/sound.nix new file mode 100644 index 0000000..1e8b92f --- /dev/null +++ b/system/hardware/sound.nix @@ -0,0 +1,34 @@ +{ config, lib, pkgs, ...}: +let + cfg = config.nixfiles.hardware.sound; + inherit (lib) optionals mkEnableOption mkIf mkDefault; +in +{ + # Enable sound. + # sound.enable = true; + # hardware.pulseaudio.enable = true; + + options.nixfiles.hardware.sound = { + enable = mkEnableOption "sound configuration"; + }; + + config = mkIf cfg.enable { + security.rtkit.enable = mkDefault true; + services.pipewire = { + enable = true; + alsa.enable = mkDefault true; + alsa.support32Bit = mkDefault config.services.pipewire.alsa.enable; + pulse.enable = mkDefault true; + jack.enable = mkDefault true; + }; + + environment.systemPackages = with pkgs; [ + qpwgraph + easyeffects + ] ++ optionals config.services.pipewire.pulse.enable [ + pavucontrol + ncpamixer + pulsemixer + ]; + }; +} diff --git a/system/hyprland.nix b/system/hyprland.nix deleted file mode 100644 index a71426e..0000000 --- a/system/hyprland.nix +++ /dev/null @@ -1,35 +0,0 @@ -{ lib, pkgs, config, ... }: -{ - imports = [ - ./desktop-common.nix - # FIXME make this into an option - ./wm-common.nix - ]; - - services.xserver.displayManager.sddm.enable = true; - - programs.hyprland = { - enable = true; - enableNvidiaPatches = true; - xwayland.enable = true; - }; - - xdg.portal = { - enable = true; - extraPortals = [ - pkgs.xdg-desktop-portal-gtk - ]; - }; - - environment.systemPackages = with pkgs; [ - kitty - dunst - polkit-kde-agent - eww - hyprpaper - rofi - hyprpicker - udiskie - polkit-kde-agent - ]; -} diff --git a/system/package-sets/default.nix b/system/package-sets/default.nix new file mode 100644 index 0000000..ba7cdaf --- /dev/null +++ b/system/package-sets/default.nix @@ -0,0 +1,7 @@ +{...}: +{ + imports = [ + ./gaming.nix + ./multimedia.nix + ]; +} diff --git a/system/package-sets/gaming.nix b/system/package-sets/gaming.nix new file mode 100644 index 0000000..a332b65 --- /dev/null +++ b/system/package-sets/gaming.nix @@ -0,0 +1,40 @@ +{ config, lib, pkgs, ...}: +let + cfg = config.nixfiles.packageSets.gaming; +in +{ + # oopsies this is for home-manager + # programs.mangohud.enable = lib.mkDefault true; + + options.nixfiles.packageSets.gaming = { + enable = lib.mkEnableOption "gaming package set"; + }; + config = lib.mkIf cfg.enable { + programs.steam = { + enable = lib.mkDefault true; + gamescopeSession = { + enable = lib.mkDefault true; + }; + }; + + programs.gamemode = { + enable = lib.mkDefault true; + enableRenice = lib.mkDefault true; + }; + + programs.gamescope = { + enable = lib.mkDefault true; + capSysNice = lib.mkDefault false; + }; + + environment.systemPackages = with pkgs; [ + mangohud + goverlay + prismlauncher + glxinfo + vulkan-tools + legendary-gl + heroic + ]; + }; +} diff --git a/system/package-sets/multimedia.nix b/system/package-sets/multimedia.nix new file mode 100644 index 0000000..ab6f5fc --- /dev/null +++ b/system/package-sets/multimedia.nix @@ -0,0 +1,22 @@ +{ config, lib, pkgs, ...}: +let + cfg = config.nixfiles.packageSets.multimedia; + inherit (lib) optionals mkEnableOption mkIf; +in +{ + options.nixfiles.packageSets.multimedia = { + enable = mkEnableOption "multimedia packages"; + }; + config = mkIf cfg.enable { + environment.systemPackages = with pkgs; optionals config.services.xserver.enable [ + mpv + gimp-with-plugins + krita + inkscape + ] ++ [ + yt-dlp + imagemagick + ffmpeg + ]; + }; +} diff --git a/system/plasma.nix b/system/plasma.nix deleted file mode 100644 index 5e69c8d..0000000 --- a/system/plasma.nix +++ /dev/null @@ -1,39 +0,0 @@ -{ config, lib, pkgs, ...}: -let - sleep = "${pkgs.coreutils}/bin/sleep"; - systemctl = "${pkgs.systemd}/bin/systemctl"; -in -{ - imports = [ - ./desktop-common.nix - ]; - - services.xserver.displayManager.sddm.enable = true; - services.xserver.desktopManager.plasma5.enable = true; - services.xserver.displayManager.defaultSession = "plasmawayland"; - programs.kdeconnect.enable = true; - - systemd.user = { - services.restart-xdg-desktop-portal-kde = { - enable = true; - description = "hack to fix xdg-desktop-portal on kde"; - wantedBy = [ "graphical-session.target" ]; - after = [ "plasma-core.target" "xdg-desktop-portal.service" ]; - requisite = [ "plasma-core.target" ]; - - serviceConfig = { - ExecStart = [ - "${sleep} 5" - "${systemctl} --user restart xdg-desktop-portal.service" - ]; - Type = "oneshot"; - RemainAfterExit = "yes"; - }; - }; - }; - - environment.systemPackages = with pkgs; [ - # this fixes tiny file dialogs for Minecraft - libsForQt5.kdialog - ]; -} diff --git a/system/profile/base.nix b/system/profile/base.nix new file mode 100644 index 0000000..589f681 --- /dev/null +++ b/system/profile/base.nix @@ -0,0 +1,90 @@ +{ config, lib, pkgs, options, inputs, ...}@args: +let + cfg = config.nixfiles.profile.base; +in +{ + options.nixfiles.profile.base = { + enable = lib.mkEnableOption "base config"; + }; + # TODO was gonna add something but i forgor and now i'm too lazy + # to delete this + config = lib.mkMerge [ + (lib.mkIf cfg.enable { + + # Enable my account + nixfiles.common.me.enable = lib.mkDefault true; + + # locale settings + i18n = { + defaultLocale = "en_US.UTF-8"; + extraLocaleSettings = { + LC_ALL = "en_US.UTF-8"; + }; + }; + + # Enable flakes + nix.settings.experimental-features = ["nix-command" "flakes" ]; + + # fallback to building locally if binary cache fails (home-manager should be + # able to handle simple rebuilds offline) + nix.settings.fallback = true; + + # Allow unfree packages + nixpkgs.config.allowUnfree = true; + + # networking.hostName = "nixos"; # Define your hostname. + # Pick only one of the below networking options. + # networking.wireless.enable = true; # Enables wireless support via wpa_supplicant. + networking.networkmanager.enable = lib.mkDefault true; # Easiest to use and most distros use this by default. + + # List packages installed in system profile. To search, run: + # $ nix search wget + environment.systemPackages = with pkgs; [ + neovim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default. + wget + curl + git + git-lfs + stow + zsh + ntfs3g + openssh + sshfs + file + + fd + ripgrep + sbctl # TODO move this elsewhere + comma + nil + + # network utilities + inetutils + socat + nmap + hping + + # system utilities + htop + lshw + pciutils + ]; + + # this makes comma and legacy nix utils use the flake nixpkgs for ABI + # compatibility becasue once `, vkcube` couldn't find the correct opengl + # driver or something (also it reduces the download size of temporary shell + # closures) + nix.nixPath = [ "nixpkgs=${inputs.nixpkgs}" ] ++ options.nix.nixPath.default; + + programs.ssh.enableAskPassword = false; + programs.fuse.userAllowOther = true; + + programs.gnupg.agent = { + enable = lib.mkDefault true; + enableSSHSupport = lib.mkDefault true; + }; + + boot.loader.systemd-boot.configurationLimit = lib.mkDefault 15; + }) + ]; +} diff --git a/system/profile/default.nix b/system/profile/default.nix new file mode 100644 index 0000000..8d83827 --- /dev/null +++ b/system/profile/default.nix @@ -0,0 +1,6 @@ +{...}: +{ + imports = [ + ./base.nix + ]; +} diff --git a/system/programs/default.nix b/system/programs/default.nix new file mode 100644 index 0000000..eb50170 --- /dev/null +++ b/system/programs/default.nix @@ -0,0 +1,6 @@ +{...}: +{ + imports = [ + ./syncthing.nix + ]; +} diff --git a/system/programs/syncthing.nix b/system/programs/syncthing.nix new file mode 100644 index 0000000..e17fad4 --- /dev/null +++ b/system/programs/syncthing.nix @@ -0,0 +1,19 @@ +{ config, lib, pkgs, ...}: +let + inherit (lib) mkEnableOption mkIf; + cfg = config.nixfiles.programs.syncthing; +in +{ + options.nixfiles.programs.syncthing = { + enable = mkEnableOption "Syncthing configuration"; + }; + + config = mkIf cfg.enable { + services.syncthing = { + enable = lib.mkDefault true; + user = lib.mkDefault "nullbite"; + dataDir = lib.mkDefault "/home/nullbite/Documents"; + configDir = lib.mkDefault "/home/nullbite/.config/syncthing"; + }; + }; +} diff --git a/system/remote.nix b/system/remote.nix deleted file mode 100644 index 86d20e3..0000000 --- a/system/remote.nix +++ /dev/null @@ -1,16 +0,0 @@ -{ config, lib, pkgs, ... }: -{ - # Enable the OpenSSH daemon. - # services.openssh.enable = true; - services.openssh = { - enable = true; - openFirewall = true; - settings = { - - }; - }; - - services.tailscale.enable = true; - - networking.wireguard.enable = true; -} diff --git a/system/sessions/default.nix b/system/sessions/default.nix new file mode 100644 index 0000000..d8474e3 --- /dev/null +++ b/system/sessions/default.nix @@ -0,0 +1,5 @@ +{...}: +{ imports = [ + ./hyprland.nix + ./plasma.nix +];} diff --git a/system/sessions/hyprland.nix b/system/sessions/hyprland.nix new file mode 100644 index 0000000..a55ba7d --- /dev/null +++ b/system/sessions/hyprland.nix @@ -0,0 +1,51 @@ +{ lib, pkgs, config, ... }: +let + cfg = config.nixfiles.sessions.hyprland; +in +{ + # imports = [ + # ./desktop-common.nix + # # FIXME make this into an option + # ./wm-common.nix + # ]; + + options.nixfiles.sessions.hyprland = { + enable = lib.mkEnableOption "hyprland configuration"; + }; + + config = lib.mkIf cfg.enable { + # enable dependencies + nixfiles.common = { + desktop.enable = true; + wm.enable = true; + }; + + services.xserver.displayManager.sddm.enable = true; + + programs.hyprland = { + enable = true; + # TODO base this on if nvidia is enabled + enableNvidiaPatches = lib.mkDefault true; + xwayland.enable = true; + }; + + xdg.portal = { + enable = true; + extraPortals = [ + pkgs.xdg-desktop-portal-gtk + ]; + }; + + environment.systemPackages = with pkgs; [ + kitty + dunst + polkit-kde-agent + eww + hyprpaper + rofi + hyprpicker + udiskie + polkit-kde-agent + ]; + }; +} diff --git a/system/sessions/plasma.nix b/system/sessions/plasma.nix new file mode 100644 index 0000000..f1dc0f4 --- /dev/null +++ b/system/sessions/plasma.nix @@ -0,0 +1,49 @@ +{ config, lib, pkgs, ...}: +let + sleep = "${pkgs.coreutils}/bin/sleep"; + systemctl = "${pkgs.systemd}/bin/systemctl"; + inherit (lib) mkIf mkEnableOption mkForce mkDefault; + cfg = config.nixfiles.session.plasma; +in +{ + # imports = [ + # ./desktop-common.nix + # ]; + + options.nixfiles.session.plasma = { + enable = mkEnableOption "KDE Plasma session"; + }; + + config = mkIf cfg.enable { + nixfiles.common.desktop.enable = true; + + services.xserver.displayManager.sddm.enable = mkDefault true; + services.xserver.desktopManager.plasma5.enable = true; + services.xserver.displayManager.defaultSession = "plasmawayland"; + programs.kdeconnect.enable = mkDefault true; + + systemd.user = { + services.restart-xdg-desktop-portal-kde = { + enable = true; + description = "hack to fix xdg-desktop-portal on kde"; + wantedBy = [ "graphical-session.target" ]; + after = [ "plasma-core.target" "xdg-desktop-portal.service" ]; + requisite = [ "plasma-core.target" ]; + + serviceConfig = { + ExecStart = [ + "${sleep} 5" + "${systemctl} --user restart xdg-desktop-portal.service" + ]; + Type = "oneshot"; + RemainAfterExit = "yes"; + }; + }; + }; + + environment.systemPackages = with pkgs; [ + # this fixes tiny file dialogs for Minecraft + libsForQt5.kdialog + ]; + }; +} diff --git a/system/wm-common.nix b/system/wm-common.nix deleted file mode 100644 index 606f19b..0000000 --- a/system/wm-common.nix +++ /dev/null @@ -1,15 +0,0 @@ -{ pkgs, lib, config, options, ...}: -let - inherit (lib) mkDefault; -in -{ - # Common options for standalone window managers; many of these (or - # alternatives thereof) are pulled in by desktop environments. - services = { - power-profiles-daemon.enable = mkDefault true; - blueman.enable = mkDefault config.hardware.bluetooth.enable; - }; - programs = { - nm-applet.enable = mkDefault config.networking.networkmanager.enable; - }; -}