dotfiles/modules/desktop.nix
2025-05-23 10:26:31 -05:00

298 lines
7.5 KiB
Nix

{ pkgs, lib, config, stable, ... }:
let
laptop = builtins.readFile "/etc/hostname" == "syl\n";
in
{
# 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 = {
desktopManager.cosmic.enable = true;
};
programs.nix-ld.enable = true;
programs.ssh.startAgent = true;
security.pam.services.kwallet = {
name = "kwallet";
enableKwallet = true;
};
systemd = {
oomd = {
enable = true;
enableRootSlice = true;
enableUserSlices = true;
enableSystemSlice = true;
};
extraConfig = ''
DefaultTimeoutStopSec=10s
DefaultTimeoutStartSec=10s
'';
};
fonts.packages = with pkgs; [
nerd-fonts.victor-mono
noto-fonts
noto-fonts-cjk-sans
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.displayManager.cosmic-greeter = {
enable = true;
};
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";
# };
# };
};
programs.regreet = { enable = true; };
environment.etc."greetd/environments".text = ''
hyprland
dbus-run-session startplasma-wayland
fish
bash
'';
qt = {
platformTheme = "qt5ct";
enable = true;
};
xdg.portal = {
enable = true;
extraPortals = [ pkgs.kdePackages.xdg-desktop-portal-kde ];
};
programs.hyprland = {
enable = true;
withUWSM = true;
xwayland.enable = 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";
# Enable CUPS to print documents.
services.printing.enable = true;
services.printing.drivers =
[ pkgs.gutenprint pkgs.gutenprintBin pkgs.cnijfilter2 ];
services.usbmuxd.enable = true;
services.fstrim.enable = 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;
# settings = {
# workgroup = "WORKGROUP";
# "server string" = "smbnix";
# "netbios name" = "smbnix";
# security = "user";
# "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";
};
};
};
# services.syncthing = {
# enable = true;
# dataDir = "/home/chris";
# openDefaultPorts = true;
# configDir = "/home/chris/.config/syncthing";
# user = "chris";
# group = "users";
# guiAddress = "0.0.0.0:8384";
# overrideFolders = true;
# overrideDevices = true;
# settings = {
# gui = {
# theme = "dark";
# };
# devices = {
# syl = {
# id = "AJMADOK-TENODAA-VSOEW2A-4RXY2XI-YNHIS7H-H3ZYAO5-3UQ64EE-O2N5BAY";
# };
# kaladin = {
# id = "4MQVV7D-WMZ6TZQ-2OSJCHO-ZCOCUCK-DXZLDM4-PWBHJHS-PMI45EH-QGIMAAJ";
# };
# shadow = {
# id = "B24VU6Z-URTMEXN-ZYKRWX7-XWSTHXD-XKX67EB-XSKMT4V-KWKGX7Q-W7DB2QV";
# };
# tablet = {
# id = "4HEXCNH-MCVBZQX-LQ735TG-P2VTJ7N-CZ5MK4P-ICZAPC7-YCXVEWV-7NILMA5";
# };
# kohlin = {
# id = "BSWKBRR-2IJBCHA-UQY7DE7-CV2U2IL-PMFQFCJ-D5ZZJMU-FPYRUPC-MCC32QQ";
# };
# dalinar = {
# id = "MPRMA33-XHW6SRE-D2EDBCP-TSMRNGI-ZCE2TAN-FE4BMKA-PSKGYJW-CRIEJQL";
# };
# };
# folders = {
# docs = {
# path = "/home/chris/docs";
# devices = [ (if laptop then "kaladin" else "syl") "shadow" "dalinar" ];
# versioning = {
# type = "staggered";
# fsPath = "~/.local/syncthing/backup";
# params = {
# cleanInterval = 3600;
# maxAge = 31536000;
# };
# };
# };
# };
# };
# };
# Android Tools
programs.adb.enable = true;
services.udev.packages = [ pkgs.android-udev-rules ];
services.esphome = { enable = true; };
}