dotfiles/modules/desktop.nix
2024-07-10 09:15:03 -05:00

297 lines
7.4 KiB
Nix

{ pkgs, lib, config, stable, ... }:
with lib;
{
# nix = {
# package = pkgs.nixVersions.git;
# };
# This adds hyprland cache to cachix and relaxes sandbox
nix.settings = {
substituters = ["https://hyprland.cachix.org"];
trusted-public-keys = ["hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="];
sandbox = "relaxed";
};
# Use the systemd-boot EFI boot loader.
boot = {
kernelPackages = pkgs.linuxPackages_zen;
kernelParams = [ "mem_sleep_default=deep" "nvme.noacpi=1"];
# initrd.kernelModules = [ "amdgpu" ];
};
# The global useDHCP flag is deprecated, therefore explicitly set to false here.
# Per-interface useDHCP will be mandatory in the future, so this generated config
# replicates the default behaviour.
networking.useDHCP = false;
boot.supportedFilesystems = [ "ntfs" ];
services.xserver = {
enable = true;
autorun = false;
windowManager.awesome = {
enable = true;
package = pkgs.awesome;
};
desktopManager.plasma5 = {
enable = true;
runUsingSystemd = true;
};
# desktopManager.gnome.enable = true;
};
programs.ssh.startAgent = true;
security.pam.services.kwallet = {
name = "kwallet";
enableKwallet = true;
};
systemd.extraConfig = ''
DefaultTimeoutStopSec=10s
'';
# stylix = {
# enable = true;
# polarity = "dark";
# base16Scheme = {
# base00 = "282a36";
# base01 = "34353e";
# base02 = "43454f";
# base03 = "78787e";
# base04 = "a5a5a9";
# base05 = "e2e4e5";
# base06 = "eff0eb";
# base07 = "f1f1f0";
# base08 = "ff5c57";
# base09 = "ff9f43";
# base0A = "f3f99d";
# base0B = "5af78e";
# base0C = "9aedfe";
# base0D = "57c7ff";
# base0E = "ff6ac1";
# base0F = "b2643c";
# };
# image = "base0D";
# # targets.tofi.enable = false;
# };
fonts.packages = with pkgs; [
nerdfonts
noto-fonts
noto-fonts-cjk
noto-fonts-emoji
liberation_ttf
mplus-outline-fonts.githubRelease
dina-font
proggyfonts
];
hardware = {
keyboard.qmk.enable = true;
};
security.pam.services = {
sddm.enableKwallet = true;
greetd.enableKwallet = true;
swaylock = {};
};
services.greetd = {
enable = true;
settings = rec {
initial_session = {
command = "dbus-run-session Hyprland";
# command = "dbus-run-session startplasma-wayland";
user = "chris";
};
default_session = {
command = "${pkgs.greetd.tuigreet}/bin/tuigreet --time -r --window-padding 2 --cmd 'dbus-run-session Hyprland' -s /etc/greetd/environments";
user = "greeter";
};
plasma_session = {
command = "dbus-run-session startplasma-wayland";
user = "chris";
};
hyprland_session = {
command = "Hyprland";
user = "chris";
};
};
};
environment.etc."greetd/environments".text = ''
hyprland
dbus-run-session startplasma-wayland
fish
bash
'';
qt = {
platformTheme = "qt5ct";
enable = true;
};
# environment.etc."xdg/user-dirs.defaults".text = ''
# DESKTOP=
# DOWNLOAD=dls
# TEMPLATES=
# PUBLICSHARE=
# DOCUMENTS=docs
# MUSIC=music
# PICTURES=pics
# VIDEOS=vids
# '';
xdg.portal = {
enable = true;
extraPortals = [ pkgs.xdg-desktop-portal-kde ];
};
programs.hyprland = {
enable = true;
xwayland.enable = true;
# legacyRenderer = true;
# package = stable.hyprland;
# portalPackage = pkgs.xdg-desktop-portal-kde;
# xwayland.hidpi = true;
};
services.avahi = {
enable = true;
nssmdns4 = true;
};
# Enable sound.
security.rtkit.enable = true;
services.pipewire = {
enable = true;
alsa.enable = true;
alsa.support32Bit = true;
pulse.enable = true;
jack.enable = true;
wireplumber.enable = true;
};
# Needed for some pipewire progs and other gtk apps
programs.dconf.enable = true;
environment.variables = {
EDITOR = "emacsclient -t -a";
VISUAL = "emacsclient -c -a";
QT_LOGGING_RULES = "js=true; kwin_*.debug=true";
# GTK_USE_PORTAL = "1";
# Fixing Qt apps in other environments
# Thought I needed this but apparently they are working fine without it.
# QT_XCB_GL_INTEGRATION = "xcb_egl";
# QT_QPA_PLATFORM_PLUGIN_PATH = "${pkgs.qt5.qtbase.bin}/lib/qt-${pkgs.qt5.qtbase.qtCompatVersion}/plugins/platforms";
NIXOS_OZONE_WL = "1";
_JAVA_AWT_WM_NONEREPARENTING = "1";
# DISABLE_QT5_COMPAT = "0";
GDK_BACKEND = "wayland";
ANKI_WAYLAND = "1";
WLR_DRM_NO_ATOMIC = "1";
QT_AUTO_SCREEN_SCALE_FACTOR = "1";
QT_QPA_PLATFORM = "wayland";
# QT_WAYLAND_DISABLE_WINDOWDECORATION = "1";
# QT_QPA_PLATFORMTHEME = "qt5ct";
MOZ_ENABLE_WAYLAND = "1";
MOZ_DBUS_REMOTE = "1";
WLR_BACKEND = "vulkan";
WLR_RENDERER = "vulkan";
XDG_SESSION_TYPE = "wayland";
# Remember that this causes issues in some games use "unset SDL_VIDEODRIVER &&"
SDL_VIDEODRIVER = "wayland";
CLUTTER_BACKEND = "wayland";
WLR_NO_HARDWARE_CURSORS = "1";
};
programs.partition-manager.enable = true;
programs.kdeconnect.enable = true;
# Turn on flatpak
services.flatpak.enable = true;
# Configure keymap in X11
services.xserver.xkb.layout = "us";
# services.xserver.xkbOptions = "eurosign:e";
# Enable CUPS to print documents.
services.printing.enable = true;
services.printing.drivers = [ pkgs.gutenprint pkgs.gutenprintBin ];
services.usbmuxd.enable = true;
services.fstrim.enable = true;
# services.pantalaimon-headless = {
# instances = {
# tfc = {
# homeserver = "https://matrix.tfcconnection.org";
# # listenAddress = "localhost";
# listenPort = 8008;
# ssl = true;
# # extraSettings = {
# # IgnoreVerification = true;
# # }
# };
# };
# };
#######################
# VIRTUALIZATION
#######################
# virtualisation.waydroid.enable = true;
virtualisation.podman.enable = true;
# virtualisation.docker.enable = true;
virtualisation.libvirtd = {
enable = true;
qemu = {
runAsRoot = false;
ovmf = {
enable = true;
# packages = [
# pkgs.OVMFFull.fd
# pkgs.pkgsCross.aarch64-multiplatform.OVMF.fd
# ];
};
swtpm.enable = true;
};
};
services.samba-wsdd.enable = true;
services.samba = {
enable = true;
extraConfig = ''
workgroup = WORKGROUP
server string = smbnix
netbios name = smbnix
security = user
#use sendfile = yes
#max protocol = smb2
# note: localhost is the ipv6 localhost ::1
hosts allow = 192.168.0. 127.0.0.1 localhost
hosts deny = 0.0.0.0/0
guest account = nobody
map to guest = bad user
'';
shares = {
public = {
path = "/home/chris";
"read only" = false;
browsable = true;
"guest ok" = true;
comment = "Share";
};
};
};
# Android Tools
programs.adb.enable = true;
services.udev.packages = [ pkgs.android-udev-rules ];
services.esphome = {
enable = true;
};
}