dotfiles/nix/hosts/lemp11/configuration.nix
Oliver Davies af9edbfe1a Refactor NixOS and Home Manager modules
This makes them more modular and configurable by allowing features to be
enabled per-host.

Squashed commit of the following:

commit e9896d6166125de7aa26ddc63dac3adb196e8c23
Author: Oliver Davies <oliver@oliverdavies.dev>
Date:   Mon Nov 25 23:06:23 2024 +0000

    Use mkMerge

    To ensure features isn't overridden and values aren't lost accidentally

commit c9c8ff5d059f08ade3aee9bb4e25bd51d4817a6d
Author: Oliver Davies <oliver@oliverdavies.dev>
Date:   Mon Nov 25 22:56:38 2024 +0000

    Move NixOS module imports

commit 4a85bbac9dfa8f06825f6b1fee45ef27befa16d3
Author: Oliver Davies <oliver@oliverdavies.dev>
Date:   Mon Nov 25 22:39:54 2024 +0000

    Move Home Manager module imports

commit 6d7a1b0aac68ccc8649fa2d8cd6e8b17ecebb4f0
Author: Oliver Davies <oliver@oliverdavies.dev>
Date:   Mon Nov 25 21:15:54 2024 +0000

    Add host-specific Home Manager configurations

commit b32da2fbf7498c9684d8289be0f02800994e9110
Author: Oliver Davies <oliver@oliverdavies.dev>
Date:   Mon Nov 25 18:00:00 2024 +0000

    Start to parameterise Home Manager modules

commit e80e89b415849cc4c6051a07b70587ac98724e2c
Author: Oliver Davies <oliver@oliverdavies.dev>
Date:   Mon Nov 25 18:00:00 2024 +0000

    Rename wsl commands to home-manager

commit 6d82ed73da3c104fb25117fb843c3f3b5d833180
Author: Oliver Davies <oliver@oliverdavies.dev>
Date:   Mon Nov 25 18:00:00 2024 +0000

    Refactor NixOS Home Manager configuration

commit cc5cbf5ac1a407a456d7258dd65a78ba3128a88f
Author: Oliver Davies <oliver@oliverdavies.dev>
Date:   Mon Nov 25 08:05:00 2024 +0000

    Refactor WSL Home Manager configuration

commit deaf664a0997871b6f2bb0a8f97d638a91cb10bc
Author: Oliver Davies <oliver@oliverdavies.dev>
Date:   Mon Nov 25 08:04:00 2024 +0000

    Refactor lemp11 configuration
2024-11-26 08:13:46 +00:00

326 lines
7.1 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.

{
hostname,
inputs,
outputs,
pkgs,
desktop ? false,
self,
system,
username,
...
}:
{
imports = [
inputs.home-manager.nixosModules.home-manager
inputs.nixos-hardware.nixosModules.common-cpu-intel
inputs.nixos-hardware.nixosModules.common-gpu-intel
inputs.nixos-hardware.nixosModules.common-pc-laptop
inputs.nixos-hardware.nixosModules.common-pc-laptop-hdd
inputs.nixos-hardware.nixosModules.system76
outputs.nixosModules.default
./hardware-configuration.nix
];
home-manager = {
extraSpecialArgs = {
inherit
hostname
inputs
outputs
desktop
self
system
username
;
};
useGlobalPkgs = true;
useUserPackages = true;
users."${username}" = import "${self}/nix/home/${username}";
};
nixpkgs = {
config = {
allowUnfree = true;
permittedInsecurePackages = [ "electron-27.3.11" ];
};
overlays = [
outputs.overlays.additions
outputs.overlays.modifications
outputs.overlays.stable-packages
];
};
nix.nixPath = [ "nixpkgs=${inputs.nixpkgs}" ];
# Bootloader.
boot = {
loader = {
systemd-boot = {
enable = true;
configurationLimit = 10;
};
efi = {
canTouchEfiVariables = true;
efiSysMountPoint = "/boot/efi";
};
};
};
services.thermald.enable = true;
services.power-profiles-daemon.enable = false;
systemd.extraConfig = ''
DefaultTimeoutStopSec=10s
'';
networking.hostName = hostname;
# networking.wireless.enable = true; # Enables wireless support via wpa_supplicant.
# Configure network proxy if necessary
# networking.proxy.default = "http://user:password@proxy:port/";
# networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain";
# Enable networking
networking.networkmanager.enable = true;
# Set your time zone.
time.timeZone = "Europe/London";
# Select internationalisation properties.
i18n.defaultLocale = "en_GB.UTF-8";
i18n.extraLocaleSettings = {
LC_ADDRESS = "en_GB.UTF-8";
LC_IDENTIFICATION = "en_GB.UTF-8";
LC_MEASUREMENT = "en_GB.UTF-8";
LC_MONETARY = "en_GB.UTF-8";
LC_NAME = "en_GB.UTF-8";
LC_NUMERIC = "en_GB.UTF-8";
LC_PAPER = "en_GB.UTF-8";
LC_TELEPHONE = "en_GB.UTF-8";
LC_TIME = "en_GB.UTF-8";
};
# Enable the X11 windowing system.
services.xserver.enable = true;
services.xserver = {
xkb = {
layout = "gb";
variant = "";
};
};
# Configure console keymap
console.keyMap = "uk";
services.avahi.enable = true;
services.avahi.nssmdns4 = true;
services.avahi.openFirewall = true;
services.printing.enable = true;
# Enable sound with pipewire.
hardware.pulseaudio.enable = false;
hardware.bluetooth.enable = true;
security = {
polkit.enable = true;
rtkit.enable = true;
};
services.pipewire = {
enable = true;
alsa = {
enable = true;
support32Bit = true;
};
pulse.enable = true;
};
# Enable touchpad support (enabled default in most desktopManager).
# services.xserver.libinput.enable = true;
users.users.${username} = {
isNormalUser = true;
description = "Oliver Davies";
extraGroups = [
"docker"
"networkmanager"
"wheel"
];
packages = [ ];
};
security.sudo.wheelNeedsPassword = false;
# List packages installed in system profile. To search, run:
# $ nix search wget
environment.systemPackages =
with pkgs;
[
caffeine-ng
gtypist
fastfetch
mermaid-cli
mkcert
taskopen
taskwarrior3
taskwarrior-tui
ttyper
yt-dlp
ytfzf
]
++ pkgs.lib.optionals desktop [
acpi
arandr
bluetuith
brightnessctl
cpufrequtils
libnotify
pmutils
ffmpegthumbnailer
libreoffice
logseq
rclone
rclone-browser
shotwell
slack
vscode
xfce.thunar
xfce.thunar-volman
xfce.tumbler
# Games.
zeroad
];
# 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:
# Enable the OpenSSH daemon.
services.openssh.enable = true;
# Open ports in the firewall.
networking.firewall.allowedTCPPorts = [
9003 # xdebug
];
# 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 = "22.11"; # Did you read the comment?
programs.dconf.enable = true;
programs.zsh.enable = true;
programs.zsh.histSize = 5000;
users.defaultUserShell = "/etc/profiles/per-user/${username}/bin/zsh";
zramSwap.enable = true;
nix = {
extraOptions = ''
trusted-users = root ${username}
'';
gc = {
automatic = true;
dates = "daily";
options = "--delete-older-than 7d";
};
optimise.automatic = true;
settings = {
auto-optimise-store = true;
experimental-features = [
"nix-command"
"flakes"
];
warn-dirty = false;
};
};
# Make Caps lock work as an Escape key on press and Ctrl on hold.
services.interception-tools =
let
dfkConfig = pkgs.writeText "dual-function-keys.yaml" ''
MAPPINGS:
- KEY: KEY_CAPSLOCK
TAP: KEY_ESC
HOLD: KEY_LEFTCTRL
'';
in
{
enable = true;
plugins = pkgs.lib.mkForce [ pkgs.interception-tools-plugins.dual-function-keys ];
udevmonConfig = ''
- JOB: "${pkgs.interception-tools}/bin/intercept -g $DEVNODE | ${pkgs.interception-tools-plugins.dual-function-keys}/bin/dual-function-keys -c ${dfkConfig} | ${pkgs.interception-tools}/bin/uinput -d $DEVNODE"
DEVICE:
NAME: "AT Translated Set 2 keyboard"
EVENTS:
EV_KEY: [[KEY_CAPSLOCK, KEY_ESC, KEY_LEFTCTRL]]
'';
};
services.gvfs.enable = true;
programs.gnupg.agent = {
enable = true;
enableSSHSupport = true;
pinentryPackage = pkgs.pinentry-qt;
};
programs.firefox = {
enable = true;
languagePacks = [ "en-GB" ];
preferences = {
"intl.accept_languages" = "en-GB, en";
"intl.regional_prefs.use_os_locales" = true;
};
};
services.blueman.enable = true;
services.cron = {
enable = true;
systemCronJobs = [ "* * * * * opdavies /home/${username}/.local/bin/notify-battery" ];
};
services.auto-cpufreq.enable = true;
services.udev = {
enable = true;
extraRules = ''
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", MODE="0660", GROUP="users", TAG+="uaccess", TAG+="udev-acl"
'';
};
}