dotfiles/system/syl/configuration.nix

446 lines
12 KiB
Nix
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{ lib, config, pkgs, callPackage, ... }:
{
imports =
[
./hardware-configuration.nix
/etc/nixos/cachix.nix
];
nix = {
extraOptions = "experimental-features = nix-command flakes";
package = pkgs.nixVersions.unstable;
};
# Use the systemd-boot EFI boot loader.
boot.kernelPackages = pkgs.linuxPackages_zen;
boot.loader.systemd-boot.enable = true;
boot.loader.efi.canTouchEfiVariables = true;
boot.initrd.kernelModules = [ "i915" ];
nixpkgs.config.allowUnfree = true;
boot.kernelParams = [ "mem_sleep_default=deep" "nvme.noacpi=1" ];
hardware.cpu.intel.updateMicrocode =
lib.mkDefault config.hardware.enableRedistributableFirmware;
hardware.acpilight.enable = lib.mkDefault true;
networking.hostName = "syl"; # Define your hostname.
networking.networkmanager.enable = true;
# networking.wireless.enable = true; # Enables wireless support via wpa_supplicant.
# Set your time zone.
time.timeZone = "America/Chicago";
# 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;
networking.interfaces.wlp170s0.useDHCP = 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;
};
};
# Select internationalisation properties.
i18n.defaultLocale = "en_US.UTF-8";
hardware.uinput.enable = true;
hardware.bluetooth.enable = true;
nixpkgs.config.packageOverrides = pkgs: {
vaapiIntel = pkgs.vaapiIntel.override { enableHybridCodec = true; };
};
hardware.opengl = {
enable = true;
extraPackages = with pkgs; [
intel-media-driver # LIBVA_DRIVER_NAME=iHD
vaapiIntel # LIBVA_DRIVER_NAME=i965 (older but works better for Firefox/Chromium)
libvdpau-va-gl
];
};
services.xserver.videoDrivers = ["intel"];
# This adds hyprland cache to cachix
nix.settings = {
substituters = ["https://hyprland.cachix.org"];
trusted-public-keys = ["hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="];
};
boot.supportedFilesystems = [ "ntfs" ];
services.xserver = {
enable = true;
autorun = false;
# windowManager.awesome = {
# enable = true;
# package = pkgs.awesome;
# };
displayManager = {
startx.enable = true;
sddm = {
enable = false;
};
session = [
{
manage = "desktop";
name = "Hyprland";
start = ''
/home/chris/bin/hyprland &
waitPID=$!
'';
}
];
};
desktopManager.plasma5 = {
enable = true;
runUsingSystemd = true;
};
# desktopManager.gnome.enable = true;
};
services.greetd = {
enable = true;
settings = rec {
initial_session = {
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 startplasma-wayland'";
user = "greeter";
};
plasma_session = {
command = "dbus-run-session startplasma-wayland";
user = "chris";
};
hyprland_session = {
command = "/home/chris/bin/hyprland";
user = "chris";
};
};
};
environment.etc."greetd/environments".text = ''
/home/chris/bin/hyprland
fish
bash
dbus-run-session startplasma-wayland
'';
programs.hyprland = {
enable = true;
};
services.avahi = {
enable = true;
nssmdns = true;
};
# Configure keymap in X11
services.xserver.layout = "us";
# services.xserver.xkbOptions = "eurosign:e";
systemd.services.display-manager = {
wants = [ "systemd-user-sessions.service" "multi-user.target" "network-online.target" ];
after = [ "systemd-user-sessions.service" "multi-user.target" "network-online.target" ];
};
# Enable CUPS to print documents.
services.printing.enable = true;
services.printing.drivers = [ pkgs.gutenprint pkgs.gutenprintBin pkgs.hplipWithPlugin ];
# Enable fingerprint
services.fprintd.enable = true;
# programs.qt5ct.enable = true;
# Enable sound.
security.rtkit.enable = true;
services.pipewire = {
enable = true;
alsa.enable = true;
alsa.support32Bit = true;
pulse.enable = true;
wireplumber.enable = true;
};
# Needed for some pipewire progs and other gtk apps
programs.dconf.enable = true;
# Turn on flatpak
services.flatpak.enable = true;
# Some other things
services.thermald.enable = true;
services.power-profiles-daemon.enable = false;
services.tlp = {
enable = true;
settings = {
CPU_SCALING_GOVERNOR_ON_AC="performance";
CPU_SCALING_GOVERNOR_ON_BAT="powersave";
CPU_ENERGY_PERF_POLICY_ON_AC="balance_performance";
CPU_ENERGY_PERF_POLICY_ON_BAT="power";
PCIE_ASPM_ON_AC="default";
PCIE_ASPM_ON_BAT="powersupersave";
SCHED_POWERSAVE_ON_AC=0;
SCHED_POWERSAVE_ON_BAT=1;
START_CHARGE_THRESH_BAT1=70;
STOP_CHARGE_THRESH_BAT1=80;
USB_ALLOWLIST="32ac:0002";
};
};
services.usbmuxd.enable = true;
services.fstrim.enable = true;
# Enable touchpad support (enabled default in most desktopManager).
services.xserver.libinput.enable = true;
# Set default shell to be dash for speed
# Apparently this is bad because a lot of nix relies on bash
# environment.binsh = "${pkgs.dash}/bin/dash";
environment.homeBinInPath = true;
programs.fish.enable = true;
programs.zsh.enable = true;
environment.variables = {
EDITOR = "emacsclient -t -a";
VISUAL = "emacsclient -c -a";
# 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";
VDPAU_DRIVER = lib.mkIf config.hardware.opengl.enable (lib.mkDefault "va_gl");
# QT_QPA_PLATFORMTHEME = "qt5ct";
# QT_WAYLAND_DISABLE_WINDOWDECORATION = "1";
# QT_QPA_PLATFORM = "wayland;xcb";
# QT_AUTO_SCREEN_SCALE_FACTOR = "1";
};
# Define a user account. Don't forget to set a password with passwd.
users.users.chris = {
isNormalUser = true;
extraGroups = [ "adbusers" "wheel" "networkmanager" "input" "uinput" ];
};
programs.adb.enable = true;
services.udev.packages = [ pkgs.android-udev-rules ];
programs.partition-manager.enable = true;
programs.kdeconnect.enable = true;
security.pam.services.kwallet = {
name = "kwallet";
enableKwallet = true;
};
security.pam.services.sddm.enableKwallet = true;
# virtualisation.waydroid.enable = true;
# nixpkgs.config.firefox.enableTridactyl = true;
import ../../pkgs/base-packges.nix;
import ../../pkgs/desktop-packges.nix;
services.emacs = {
enable = true;
package = with pkgs; ((emacsPackagesFor emacsPgtk).emacsWithPackages
(epkgs: with epkgs; [
vterm
magit
pdf-tools
consult-eglot
org
org-roam
command-log-mode
all-the-icons
doom-modeline
doom-themes
rainbow-delimiters
smartparens
aggressive-indent
adaptive-wrap
which-key
exec-path-from-shell
no-littering
tree-sitter
tree-sitter-langs
rustic
evil
evil-collection
general
evil-escape
evil-surround
evil-org
org-super-agenda
websocket
org-roam-ui
org-present
org-modern
org-re-reveal
org-re-reveal-ref
org-re-reveal-citeproc
ox-reveal
oer-reveal
ox-spectacle
unicode-fonts
emojify
undo-tree
visual-fill-column
toc-org
pulsar
vertico
consult
marginalia
all-the-icons-completion
embark
embark-consult
corfu
orderless
cape
devdocs
yasnippet
tempel
projectile
simple-httpd
avy
evil-avy
ace-link
ace-window
helpful
format-all
web-mode
lua-mode
nix-mode
cmake-mode
fennel-mode
yaml-mode
docker
docker-tramp
fish-mode
markdown-mode
qml-mode
csv-mode
restclient
ob-restclient
dart-mode
flutter
hover
direnv
all-the-icons-dired
dired-single
dired-rainbow
diredfl
dired-rsync
fd-dired
ledger-mode
org-msg
calfw
calfw-org
calfw-ical
org-caldav
org-wild-notifier
magit
sly
nov
elfeed
elfeed-org
bongo
emms
transmission
hass
pass
password-store
password-store-otp
plz
ement
mastodon
qrencode
gcmh
use-package
esh-autosuggest
pkgs.mu
]));
defaultEditor = 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/Public";
"read only" = false;
browsable = true;
"guest ok" = true;
comment = "Share";
};
};
};
# Some programs need SUID wrappers, can be configured further or are
# started in user sessions.
# programs.mtr.enable = true;
# programs.gnupg.agent = {
# enable = true;
# enableSSHSupport = true;
# };
# List services that you want to enable:
services.locate = {
enable = true;
locate = pkgs.plocate;
localuser = null;
interval = "hourly";
prunePaths = [ "/tmp" "/nix/store" "/nix/var/log/nix" "/etc" "/bin" "/boot" "/usr" "/var" "/run" "/srv" "/sys" "/root" "/proc" "/opt" "/dev" "/home/chris/.emacs.d" "/home/chris/.config" "/home/chris/.nix-profile" "/home/chris/.profile" "/home/chris/dev/nixpkgs" "/home/chris/.cache" "/home/chris/.local" "/home/chris/.dotemacs" "/home/chris/.cargo" "/home/chris/.mozilla" "/home/chris/.var" "/home/chris/.dotfiles" "/home/chris/.dbus" "/home/chris/.android" "/var/lib"];
};
# Enable the OpenSSH daemon.
services.openssh.enable = true;
# Open ports in the firewall.
# networking.firewall.allowedTCPPorts = [ ... ];
# networking.firewall.allowedUDPPorts = [ ... ];
# Or disable the firewall altogether.
# networking.firewall.enable = false;
# This value determines the NixOS release from which the default
# settings for stateful data, like file locations and database versions
# on your system were taken. Its perfectly fine and recommended to leave
# this value at the release version of the first install of this system.
# Before changing this value read the documentation for this option
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
system.stateVersion = "21.11"; # Did you read the comment?
}