2025-02-14 13:31:18 -06:00
|
|
|
{ self, ... }:
|
|
|
|
let
|
2025-02-14 13:04:04 -06:00
|
|
|
inherit (self) outputs;
|
2025-02-14 13:31:18 -06:00
|
|
|
inherit (outputs)
|
|
|
|
nixosModules
|
2025-02-14 15:40:53 -06:00
|
|
|
# overlays
|
|
|
|
pubkey
|
2025-02-14 13:31:18 -06:00
|
|
|
;
|
|
|
|
in
|
|
|
|
{
|
2025-02-14 15:40:53 -06:00
|
|
|
common = {
|
|
|
|
imports = with nixosModules; [
|
|
|
|
deno-netlify-ddns-client
|
|
|
|
shell-defaults-and-applications
|
|
|
|
desktop
|
|
|
|
wifi
|
|
|
|
printing
|
|
|
|
podman
|
|
|
|
virtual-machines
|
|
|
|
postgres
|
|
|
|
gaming
|
|
|
|
gnome
|
|
|
|
daniel
|
|
|
|
root
|
|
|
|
];
|
|
|
|
};
|
|
|
|
|
|
|
|
nix-config = (import ../../../flake.nix).nixConfig;
|
2025-02-14 13:04:04 -06:00
|
|
|
shell-defaults-and-applications = import ./shell-config.nix;
|
|
|
|
deno-netlify-ddns-client = import ./deno-netlify-ddns-client.nix;
|
|
|
|
|
|
|
|
# boot.tmp.useTmpfs = true;
|
|
|
|
# boot.uki.tries = 3;
|
|
|
|
# services.irqbalance.enable = true;
|
|
|
|
|
2025-02-14 13:31:18 -06:00
|
|
|
remote-disk-key-entry-on-boot =
|
|
|
|
{
|
|
|
|
lib,
|
|
|
|
pkgs,
|
|
|
|
...
|
|
|
|
}:
|
|
|
|
{
|
|
|
|
/*
|
|
|
|
https://nixos.wiki/wiki/Remote_disk_unlocking
|
|
|
|
"When using DHCP, make sure your computer is always attached to the network and is able to get an IP adress, or the boot process will hang."
|
|
|
|
^ seems less than ideal
|
|
|
|
*/
|
|
|
|
boot.kernelParams = [ "ip=dhcp" ];
|
|
|
|
boot.initrd = {
|
|
|
|
# availableKernelModules = ["r8169"]; # ethernet drivers
|
|
|
|
systemd.users.root.shell = "/bin/cryptsetup-askpass";
|
|
|
|
network = {
|
2024-07-29 10:43:11 -05:00
|
|
|
enable = true;
|
2025-02-14 13:31:18 -06:00
|
|
|
ssh = {
|
|
|
|
enable = true;
|
|
|
|
port = 22;
|
|
|
|
authorizedKeys = [ pubkey ];
|
|
|
|
hostKeys = [ "/etc/secrets/initrd/ssh_host_rsa_key" ];
|
|
|
|
};
|
2024-07-29 10:43:11 -05:00
|
|
|
};
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
2025-02-14 13:31:18 -06:00
|
|
|
laptop =
|
2025-02-14 15:40:53 -06:00
|
|
|
# TODO: modularize
|
2025-02-14 13:31:18 -06:00
|
|
|
{ pkgs, ... }:
|
|
|
|
{
|
|
|
|
imports = with nixosModules; [
|
|
|
|
family-users
|
|
|
|
wifi
|
|
|
|
];
|
2024-06-28 16:10:06 -05:00
|
|
|
|
2025-02-14 13:31:18 -06:00
|
|
|
environment.systemPackages = with pkgs; [
|
|
|
|
acpi
|
|
|
|
];
|
2025-01-05 01:08:38 -06:00
|
|
|
|
2025-02-14 13:31:18 -06:00
|
|
|
services.udev.extraRules = ''
|
|
|
|
ACTION=="add", SUBSYSTEM=="backlight", RUN+="${pkgs.coreutils}/bin/chgrp video /sys/class/backlight/%k/brightness"
|
|
|
|
ACTION=="add", SUBSYSTEM=="backlight", RUN+="${pkgs.coreutils}/bin/chmod g+w /sys/class/backlight/%k/brightness"
|
2024-09-22 20:20:15 -05:00
|
|
|
'';
|
2024-06-28 16:10:06 -05:00
|
|
|
|
2025-02-14 13:31:18 -06:00
|
|
|
services.upower.enable = true;
|
|
|
|
|
|
|
|
# NOTE: I previously let plasma settings handle this
|
|
|
|
services.logind = {
|
|
|
|
lidSwitch = "suspend-then-hibernate";
|
|
|
|
extraConfig = ''
|
|
|
|
KillUserProcesses=no
|
|
|
|
HandlePowerKey=suspend
|
|
|
|
HandlePowerKeyLongPress=poweroff
|
|
|
|
HandleRebootKey=reboot
|
|
|
|
HandleRebootKeyLongPress=poweroff
|
|
|
|
HandleSuspendKey=suspend
|
|
|
|
HandleSuspendKeyLongPress=hibernate
|
|
|
|
HandleHibernateKey=hibernate
|
|
|
|
HandleHibernateKeyLongPress=ignore
|
|
|
|
HandleLidSwitch=suspend
|
|
|
|
HandleLidSwitchExternalPower=suspend
|
|
|
|
HandleLidSwitchDocked=suspend
|
|
|
|
HandleLidSwitchDocked=suspend
|
|
|
|
IdleActionSec=11m
|
|
|
|
IdleAction=ignore
|
|
|
|
'';
|
|
|
|
};
|
|
|
|
};
|
2025-01-05 01:08:38 -06:00
|
|
|
|
2025-02-14 15:40:53 -06:00
|
|
|
gnome =
|
2025-02-14 13:31:18 -06:00
|
|
|
{
|
|
|
|
pkgs,
|
|
|
|
lib,
|
|
|
|
config,
|
|
|
|
...
|
|
|
|
}:
|
|
|
|
{
|
2025-02-14 15:40:53 -06:00
|
|
|
config = lib.mkIf config.services.xserver.desktopManager.gnome.enable {
|
2024-06-28 16:10:06 -05:00
|
|
|
|
2025-02-14 15:40:53 -06:00
|
|
|
services = {
|
|
|
|
xserver = {
|
|
|
|
enable = true;
|
|
|
|
displayManager.gdm.enable = true;
|
|
|
|
# desktopManager.gnome.enable = true;
|
2025-02-14 13:31:18 -06:00
|
|
|
};
|
2025-02-14 15:40:53 -06:00
|
|
|
udev.packages = [ pkgs.gnome-settings-daemon ];
|
2024-07-31 10:24:55 -05:00
|
|
|
};
|
2025-02-14 13:31:18 -06:00
|
|
|
|
2025-02-14 15:40:53 -06:00
|
|
|
environment = {
|
|
|
|
variables.GSK_RENDERER = "gl";
|
|
|
|
systemPackages = with pkgs; [
|
|
|
|
bitwarden
|
|
|
|
# adwaita-gtk-theme
|
|
|
|
papirus-icon-theme
|
|
|
|
adwaita-icon-theme
|
|
|
|
adwaita-icon-theme-legacy
|
|
|
|
hydrapaper
|
|
|
|
];
|
|
|
|
};
|
2025-02-14 13:31:18 -06:00
|
|
|
|
2025-02-14 15:40:53 -06:00
|
|
|
programs.kdeconnect = {
|
2024-07-31 10:24:55 -05:00
|
|
|
enable = true;
|
2025-02-14 15:40:53 -06:00
|
|
|
package = pkgs.gnomeExtensions.gsconnect;
|
2024-07-31 10:24:55 -05:00
|
|
|
};
|
2024-06-28 16:10:06 -05:00
|
|
|
|
2025-02-14 15:40:53 -06:00
|
|
|
networking.firewall = rec {
|
|
|
|
allowedTCPPortRanges = [
|
|
|
|
{
|
|
|
|
from = 1714;
|
|
|
|
to = 1764;
|
|
|
|
}
|
|
|
|
];
|
|
|
|
allowedUDPPortRanges = allowedTCPPortRanges;
|
2025-02-10 11:14:39 -06:00
|
|
|
};
|
|
|
|
};
|
|
|
|
};
|
2024-06-28 16:10:06 -05:00
|
|
|
|
2025-02-14 13:31:18 -06:00
|
|
|
radio-tools =
|
|
|
|
{ pkgs, ... }:
|
|
|
|
{
|
|
|
|
environment = {
|
|
|
|
systemPackages = with pkgs; [
|
|
|
|
chirp
|
|
|
|
];
|
|
|
|
};
|
2024-10-09 13:44:02 -05:00
|
|
|
};
|
|
|
|
|
2024-06-28 16:10:06 -05:00
|
|
|
kde-connect = {
|
|
|
|
programs.kdeconnect.enable = true;
|
|
|
|
|
2024-09-12 12:05:22 -05:00
|
|
|
/*
|
2025-02-14 13:31:18 -06:00
|
|
|
# handled by enabling
|
|
|
|
networking.firewall = {
|
|
|
|
allowedTCPPortRanges = [ { from = 1714; to = 1764; } ];
|
|
|
|
allowedUDPPortRanges = [ { from = 1714; to = 1764; } ];
|
|
|
|
};
|
2024-09-12 12:05:22 -05:00
|
|
|
*/
|
2024-06-28 16:10:06 -05:00
|
|
|
};
|
|
|
|
|
2025-02-14 13:31:18 -06:00
|
|
|
fonts =
|
|
|
|
{ pkgs, ... }:
|
|
|
|
{
|
|
|
|
fonts.packages = [
|
|
|
|
(
|
|
|
|
# allow nixpkgs 24.11 and unstable to both work
|
|
|
|
if builtins.hasAttr "nerd-fonts" pkgs then
|
|
|
|
(pkgs.nerd-fonts.symbols-only)
|
|
|
|
else
|
|
|
|
(pkgs.nerdfonts.override { fonts = [ "NerdFontsSymbolsOnly" ]; })
|
|
|
|
)
|
|
|
|
pkgs.iosevkaLyteTerm
|
|
|
|
];
|
|
|
|
};
|
2024-06-28 16:10:06 -05:00
|
|
|
|
2025-02-14 13:31:18 -06:00
|
|
|
plasma6 =
|
|
|
|
{
|
|
|
|
pkgs,
|
|
|
|
lib,
|
|
|
|
...
|
|
|
|
}:
|
|
|
|
{
|
|
|
|
imports = with nixosModules; [
|
|
|
|
kde-connect
|
|
|
|
pipewire
|
|
|
|
];
|
2024-06-28 16:10:06 -05:00
|
|
|
|
2025-02-14 13:31:18 -06:00
|
|
|
services.xserver.enable = true;
|
2025-02-10 11:14:39 -06:00
|
|
|
|
2025-02-14 13:31:18 -06:00
|
|
|
services.displayManager.sddm = {
|
2025-02-10 11:14:39 -06:00
|
|
|
enable = true;
|
2025-02-14 13:31:18 -06:00
|
|
|
# package = lib.mkForce pkgs.kdePackages.sddm;
|
|
|
|
settings = { };
|
|
|
|
# theme = "";
|
|
|
|
enableHidpi = true;
|
|
|
|
wayland = {
|
|
|
|
enable = true;
|
|
|
|
compositor = "weston";
|
|
|
|
};
|
2025-02-10 11:14:39 -06:00
|
|
|
};
|
|
|
|
|
2025-02-14 13:31:18 -06:00
|
|
|
services.desktopManager.plasma6.enable = true;
|
|
|
|
programs.dconf.enable = true;
|
2024-09-12 12:05:22 -05:00
|
|
|
|
2025-02-14 13:31:18 -06:00
|
|
|
services.xrdp.enable = false;
|
|
|
|
services.xrdp.defaultWindowManager = "plasma";
|
|
|
|
services.xrdp.openFirewall = false;
|
2024-06-28 16:10:06 -05:00
|
|
|
|
2025-02-14 13:31:18 -06:00
|
|
|
environment.systemPackages = with pkgs; [
|
|
|
|
wl-clipboard
|
|
|
|
inkscape
|
|
|
|
krita
|
|
|
|
noto-fonts
|
|
|
|
vlc
|
|
|
|
wl-clipboard
|
|
|
|
|
|
|
|
kdePackages.qtvirtualkeyboard
|
|
|
|
maliit-keyboard
|
|
|
|
maliit-framework
|
2024-06-28 16:10:06 -05:00
|
|
|
|
2025-02-14 13:31:18 -06:00
|
|
|
kdePackages.kate
|
|
|
|
kdePackages.kcalc
|
|
|
|
kdePackages.filelight
|
|
|
|
kdePackages.krdc
|
|
|
|
kdePackages.krfb
|
|
|
|
kdePackages.kclock
|
|
|
|
kdePackages.kweather
|
|
|
|
kdePackages.ktorrent
|
|
|
|
kdePackages.kdeplasma-addons
|
|
|
|
|
|
|
|
unstable-packages.kdePackages.krdp
|
|
|
|
|
|
|
|
/*
|
|
|
|
kdePackages.kdenlive
|
|
|
|
kdePackages.merkuro
|
|
|
|
kdePackages.neochat
|
|
|
|
kdePackages.kdevelop
|
|
|
|
kdePackages.kdialog
|
|
|
|
*/
|
2024-06-28 16:10:06 -05:00
|
|
|
];
|
2025-02-14 13:31:18 -06:00
|
|
|
|
|
|
|
programs.gnupg.agent.pinentryPackage = lib.mkForce pkgs.pinentry-qt;
|
2024-06-28 16:10:06 -05:00
|
|
|
};
|
|
|
|
|
2025-02-14 13:31:18 -06:00
|
|
|
lutris =
|
|
|
|
{ pkgs, ... }:
|
|
|
|
{
|
|
|
|
environment = {
|
|
|
|
systemPackages = with pkgs; [
|
|
|
|
wineWowPackages.waylandFull
|
|
|
|
lutris
|
|
|
|
winetricks
|
|
|
|
];
|
|
|
|
};
|
|
|
|
};
|
2024-08-23 14:23:49 -05:00
|
|
|
|
2025-02-14 13:31:18 -06:00
|
|
|
gaming =
|
|
|
|
{ pkgs, ... }:
|
|
|
|
{
|
|
|
|
imports = with nixosModules; [
|
|
|
|
# lutris # use the flatpak
|
|
|
|
steam # TODO: use the flatpak?
|
2024-08-23 14:23:49 -05:00
|
|
|
];
|
2025-02-14 13:31:18 -06:00
|
|
|
|
|
|
|
environment = {
|
|
|
|
systemPackages = with pkgs; [
|
|
|
|
ludusavi
|
|
|
|
# ludusavi uses rclone
|
|
|
|
rclone
|
|
|
|
];
|
|
|
|
};
|
2024-08-23 14:23:49 -05:00
|
|
|
};
|
2024-06-28 16:10:06 -05:00
|
|
|
|
|
|
|
pipewire = {
|
|
|
|
services.pipewire = {
|
|
|
|
enable = true;
|
|
|
|
alsa.enable = true;
|
|
|
|
alsa.support32Bit = true;
|
|
|
|
pulse.enable = true;
|
|
|
|
jack.enable = true;
|
|
|
|
# wireplumber.enable = true; # this is default now
|
|
|
|
wireplumber.extraConfig = {
|
|
|
|
"monitor.bluez.properties" = {
|
|
|
|
"bluez5.enable-sbc-xq" = true;
|
|
|
|
"bluez5.enable-msbc" = true;
|
|
|
|
"bluez5.enable-hw-volume" = true;
|
2025-02-14 13:31:18 -06:00
|
|
|
"bluez5.roles" = [
|
|
|
|
"hsp_hs"
|
|
|
|
"hsp_ag"
|
|
|
|
"hfp_hf"
|
|
|
|
"hfp_ag"
|
|
|
|
];
|
2024-06-28 16:10:06 -05:00
|
|
|
};
|
|
|
|
};
|
|
|
|
extraConfig.pipewire."91-null-sinks" = {
|
|
|
|
"context.objects" = [
|
|
|
|
{
|
|
|
|
# A default dummy driver. This handles nodes marked with the "node.always-driver"
|
|
|
|
# properyty when no other driver is currently active. JACK clients need this.
|
|
|
|
factory = "spa-node-factory";
|
|
|
|
args = {
|
|
|
|
"factory.name" = "support.node.driver";
|
|
|
|
"node.name" = "Dummy-Driver";
|
|
|
|
"priority.driver" = 8000;
|
|
|
|
};
|
|
|
|
}
|
|
|
|
{
|
|
|
|
factory = "adapter";
|
|
|
|
args = {
|
|
|
|
"factory.name" = "support.null-audio-sink";
|
|
|
|
"node.name" = "Microphone-Proxy";
|
|
|
|
"node.description" = "Microphone";
|
|
|
|
"media.class" = "Audio/Source/Virtual";
|
|
|
|
"audio.position" = "MONO";
|
|
|
|
};
|
|
|
|
}
|
|
|
|
{
|
|
|
|
factory = "adapter";
|
|
|
|
args = {
|
|
|
|
"factory.name" = "support.null-audio-sink";
|
|
|
|
"node.name" = "Main-Output-Proxy";
|
|
|
|
"node.description" = "Main Output";
|
|
|
|
"media.class" = "Audio/Sink";
|
|
|
|
"audio.position" = "FL,FR";
|
|
|
|
};
|
|
|
|
}
|
|
|
|
];
|
|
|
|
};
|
2024-09-12 12:05:22 -05:00
|
|
|
/*
|
2025-02-14 13:31:18 -06:00
|
|
|
extraConfig.pipewire."92-low-latency" = {
|
|
|
|
context.properties = {
|
|
|
|
default.clock.rate = 48000;
|
|
|
|
default.clock.quantum = 32;
|
|
|
|
default.clock.min-quantum = 32;
|
|
|
|
default.clock.max-quantum = 32;
|
|
|
|
};
|
|
|
|
};
|
2024-09-12 12:05:22 -05:00
|
|
|
*/
|
2024-06-28 16:10:06 -05:00
|
|
|
};
|
|
|
|
|
|
|
|
# recommended by https://nixos.wiki/wiki/PipeWire
|
|
|
|
security.rtkit.enable = true;
|
|
|
|
|
2024-09-12 12:05:22 -05:00
|
|
|
/*
|
2025-02-14 13:31:18 -06:00
|
|
|
services.pipewire = {
|
|
|
|
enable = true;
|
2024-06-28 16:10:06 -05:00
|
|
|
|
2025-02-14 13:31:18 -06:00
|
|
|
wireplumber.enable = true;
|
|
|
|
pulse.enable = true;
|
|
|
|
jack.enable = true;
|
2024-06-28 16:10:06 -05:00
|
|
|
|
2025-02-14 13:31:18 -06:00
|
|
|
alsa = {
|
|
|
|
enable = true;
|
|
|
|
support32Bit = true;
|
|
|
|
};
|
2024-09-12 12:05:22 -05:00
|
|
|
};
|
2024-06-28 16:10:06 -05:00
|
|
|
|
2025-02-14 13:31:18 -06:00
|
|
|
hardware = {
|
|
|
|
pulseaudio = {
|
|
|
|
enable = false;
|
|
|
|
support32Bit = true;
|
|
|
|
};
|
2024-09-12 12:05:22 -05:00
|
|
|
};
|
2024-06-28 16:10:06 -05:00
|
|
|
|
2025-02-14 13:31:18 -06:00
|
|
|
security = {
|
|
|
|
# I forget why I need these exactly...
|
|
|
|
polkit.enable = true;
|
2024-06-28 16:10:06 -05:00
|
|
|
|
2025-02-14 13:31:18 -06:00
|
|
|
rtkit.enable = true;
|
|
|
|
};
|
2024-09-12 12:05:22 -05:00
|
|
|
*/
|
2024-06-28 16:10:06 -05:00
|
|
|
};
|
|
|
|
|
2025-02-14 13:31:18 -06:00
|
|
|
podman =
|
|
|
|
{
|
|
|
|
pkgs,
|
|
|
|
config,
|
|
|
|
lib,
|
|
|
|
...
|
|
|
|
}:
|
|
|
|
{
|
|
|
|
config = lib.mkIf config.virtualisation.podman.enable {
|
|
|
|
environment = {
|
|
|
|
systemPackages = with pkgs; [
|
|
|
|
podman-compose
|
|
|
|
];
|
|
|
|
};
|
|
|
|
|
|
|
|
virtualisation = {
|
|
|
|
podman = {
|
|
|
|
dockerCompat = config.virtualisation.podman.enable;
|
|
|
|
dockerSocket.enable = true;
|
|
|
|
defaultNetwork.settings.dns_enabled = true;
|
|
|
|
};
|
2024-06-28 16:10:06 -05:00
|
|
|
|
2025-02-14 13:31:18 -06:00
|
|
|
oci-containers = {
|
|
|
|
backend = "podman";
|
|
|
|
};
|
2025-02-14 13:04:04 -06:00
|
|
|
};
|
2024-06-28 16:10:06 -05:00
|
|
|
|
2025-02-14 13:31:18 -06:00
|
|
|
networking = {
|
|
|
|
extraHosts = ''
|
|
|
|
127.0.0.1 host.docker.internal
|
|
|
|
::1 host.docker.internal
|
|
|
|
127.0.0.1 host.containers.internal
|
|
|
|
::1 host.containers.internal
|
|
|
|
'';
|
2025-02-14 13:04:04 -06:00
|
|
|
};
|
2024-06-28 16:10:06 -05:00
|
|
|
};
|
2025-02-14 13:31:18 -06:00
|
|
|
};
|
2024-06-28 16:10:06 -05:00
|
|
|
|
2025-02-14 13:31:18 -06:00
|
|
|
virtual-machines =
|
|
|
|
{
|
|
|
|
lib,
|
|
|
|
config,
|
|
|
|
...
|
|
|
|
}:
|
|
|
|
{
|
|
|
|
config = lib.mkIf config.virtualisation.libvirtd.enable {
|
|
|
|
users.users.daniel.extraGroups = [ "libvirtd" ];
|
2024-06-28 16:10:06 -05:00
|
|
|
};
|
|
|
|
};
|
|
|
|
|
2025-02-14 13:31:18 -06:00
|
|
|
postgres =
|
|
|
|
{
|
|
|
|
pkgs,
|
|
|
|
lib,
|
|
|
|
config,
|
|
|
|
...
|
|
|
|
}:
|
|
|
|
{
|
|
|
|
config = lib.mkIf config.services.postgresql.enable {
|
|
|
|
# this is really just for development usage
|
|
|
|
services.postgresql = {
|
|
|
|
ensureDatabases = [ "daniel" ];
|
|
|
|
ensureUsers = [
|
|
|
|
{
|
|
|
|
name = "daniel";
|
|
|
|
ensureDBOwnership = true;
|
|
|
|
}
|
|
|
|
];
|
|
|
|
# enableTCPIP = true;
|
|
|
|
# package = pkgs.postgresql_15;
|
|
|
|
|
|
|
|
authentication = pkgs.lib.mkOverride 10 ''
|
|
|
|
#type database DBuser auth-method
|
|
|
|
local all postgres peer map=superuser_map
|
|
|
|
local all daniel peer map=superuser_map
|
|
|
|
local sameuser all peer map=superuser_map
|
|
|
|
|
|
|
|
# lan ipv4
|
|
|
|
host all all 10.0.0.0/24 trust
|
|
|
|
host all all 127.0.0.1/32 trust
|
|
|
|
|
|
|
|
# tailnet ipv4
|
|
|
|
host all all 100.64.0.0/10 trust
|
|
|
|
'';
|
|
|
|
|
|
|
|
identMap = ''
|
|
|
|
# ArbitraryMapName systemUser DBUser
|
|
|
|
superuser_map root postgres
|
|
|
|
superuser_map postgres postgres
|
|
|
|
superuser_map daniel postgres
|
|
|
|
|
|
|
|
superuser_map /^(.*)$ \1 # Let other names login as themselves
|
|
|
|
'';
|
|
|
|
};
|
2024-10-03 09:23:44 -05:00
|
|
|
|
2025-02-14 13:31:18 -06:00
|
|
|
environment.systemPackages = with pkgs; [
|
|
|
|
pgcli
|
2025-02-14 13:04:04 -06:00
|
|
|
];
|
|
|
|
};
|
2024-06-28 16:10:06 -05:00
|
|
|
};
|
|
|
|
|
2025-02-14 13:31:18 -06:00
|
|
|
desktop =
|
|
|
|
{
|
|
|
|
pkgs,
|
|
|
|
lib,
|
|
|
|
config,
|
2025-02-14 15:40:53 -06:00
|
|
|
options,
|
2025-02-14 13:31:18 -06:00
|
|
|
...
|
|
|
|
}:
|
|
|
|
let
|
|
|
|
cfg = config.lyte.desktop;
|
|
|
|
in
|
|
|
|
{
|
|
|
|
options = {
|
|
|
|
lyte = {
|
|
|
|
desktop = {
|
|
|
|
enable = lib.mkEnableOption "Enable my default desktop configuration and applications";
|
|
|
|
};
|
2025-02-14 13:04:04 -06:00
|
|
|
};
|
|
|
|
};
|
2025-02-14 13:31:18 -06:00
|
|
|
config = lib.mkIf cfg.enable {
|
2025-02-14 15:40:53 -06:00
|
|
|
services.xserver.desktopManager.gnome.enable = true;
|
|
|
|
|
|
|
|
xdg.portal.enable = true;
|
|
|
|
|
|
|
|
hardware =
|
|
|
|
if builtins.hasAttr "graphics" options.hardware then
|
|
|
|
{
|
|
|
|
graphics = {
|
|
|
|
enable = true;
|
|
|
|
# enable32Bit = true;
|
|
|
|
/*
|
|
|
|
driSupport32Bit = true;
|
|
|
|
driSupport = true;
|
|
|
|
*/
|
|
|
|
};
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
opengl = {
|
|
|
|
enable = true;
|
|
|
|
# driSupport32Bit = true;
|
|
|
|
driSupport = true;
|
|
|
|
};
|
|
|
|
};
|
|
|
|
fonts.packages = [
|
|
|
|
(
|
|
|
|
# allow nixpkgs 24.11 and unstable to both work
|
|
|
|
if builtins.hasAttr "nerd-fonts" pkgs then
|
|
|
|
(pkgs.nerd-fonts.symbols-only)
|
|
|
|
else
|
|
|
|
(pkgs.nerdfonts.override { fonts = [ "NerdFontsSymbolsOnly" ]; })
|
|
|
|
)
|
|
|
|
pkgs.iosevkaLyteTerm
|
|
|
|
];
|
2025-02-14 13:31:18 -06:00
|
|
|
services.flatpak.enable = true;
|
|
|
|
programs.appimage.binfmt = true;
|
|
|
|
services.printing.enable = true;
|
2025-02-14 15:40:53 -06:00
|
|
|
programs.virt-manager.enable = config.virtualisation.libvirtd.enable;
|
2025-02-14 13:04:04 -06:00
|
|
|
};
|
|
|
|
};
|
2024-06-28 16:10:06 -05:00
|
|
|
|
2025-02-14 13:31:18 -06:00
|
|
|
printing =
|
|
|
|
{
|
|
|
|
pkgs,
|
|
|
|
lib,
|
|
|
|
config,
|
|
|
|
...
|
|
|
|
}:
|
|
|
|
{
|
|
|
|
config = lib.mkIf config.services.printing.enable {
|
|
|
|
services.printing.browsing = true;
|
|
|
|
services.printing.browsedConf = ''
|
|
|
|
BrowseDNSSDSubTypes _cups,_print
|
|
|
|
BrowseLocalProtocols all
|
|
|
|
BrowseRemoteProtocols all
|
|
|
|
CreateIPPPrinterQueues All
|
|
|
|
|
|
|
|
BrowseProtocols all
|
|
|
|
'';
|
|
|
|
services.printing.drivers = [ pkgs.gutenprint ];
|
|
|
|
};
|
2025-02-14 13:04:04 -06:00
|
|
|
};
|
2024-06-28 16:10:06 -05:00
|
|
|
|
2025-02-14 13:31:18 -06:00
|
|
|
wifi =
|
|
|
|
{
|
|
|
|
lib,
|
|
|
|
config,
|
|
|
|
...
|
|
|
|
}:
|
|
|
|
let
|
|
|
|
inherit (lib) mkDefault;
|
|
|
|
cfg = config.networking.wifi;
|
|
|
|
in
|
|
|
|
{
|
|
|
|
options = {
|
|
|
|
networking.wifi.enable = lib.mkEnableOption "Enable wifi via NetworkManager";
|
2025-02-14 13:04:04 -06:00
|
|
|
};
|
2025-02-14 13:31:18 -06:00
|
|
|
config = lib.mkIf cfg.enable {
|
|
|
|
networking.networkmanager = {
|
|
|
|
enable = true;
|
|
|
|
# ensureProfiles = {
|
|
|
|
# profiles = {
|
|
|
|
# home-wifi = {
|
|
|
|
# id="home-wifi";
|
|
|
|
# permissions = "";
|
|
|
|
# type = "wifi";
|
|
|
|
# };
|
|
|
|
# wifi = {
|
|
|
|
# ssid = "";
|
|
|
|
# };
|
|
|
|
# wifi-security = {
|
|
|
|
# # auth-alg = "";
|
|
|
|
# # key-mgmt = "";
|
|
|
|
# psk = "";
|
|
|
|
# };
|
|
|
|
# };
|
|
|
|
# };
|
|
|
|
};
|
|
|
|
systemd.services.NetworkManager-wait-online.enable = mkDefault false;
|
2024-06-28 16:10:06 -05:00
|
|
|
|
2025-02-14 13:31:18 -06:00
|
|
|
/*
|
|
|
|
TODO: networking.networkmanager.wifi.backend = "iwd"; ?
|
|
|
|
TODO: powersave?
|
|
|
|
TODO: can I pre-configure my usual wifi networks with SSIDs and PSKs loaded from secrets?
|
|
|
|
*/
|
|
|
|
hardware.wirelessRegulatoryDatabase = true;
|
|
|
|
boot.extraModprobeConfig = ''
|
|
|
|
options cfg80211 ieee80211_regdom="US"
|
|
|
|
'';
|
|
|
|
};
|
2025-02-14 13:04:04 -06:00
|
|
|
};
|
2024-06-28 16:10:06 -05:00
|
|
|
|
2025-02-14 13:31:18 -06:00
|
|
|
steam =
|
2025-02-14 15:40:53 -06:00
|
|
|
{ pkgs, options, ... }:
|
2025-02-14 13:31:18 -06:00
|
|
|
{
|
|
|
|
programs.gamescope.enable = true;
|
2024-06-28 16:10:06 -05:00
|
|
|
|
2025-02-14 15:40:53 -06:00
|
|
|
services.pipewire = {
|
|
|
|
alsa.support32Bit = true;
|
|
|
|
};
|
|
|
|
|
2025-02-14 13:31:18 -06:00
|
|
|
programs.steam = {
|
|
|
|
enable = true;
|
2024-09-12 12:05:22 -05:00
|
|
|
|
2025-02-14 13:31:18 -06:00
|
|
|
extest.enable = true;
|
|
|
|
gamescopeSession.enable = true;
|
2024-06-28 16:10:06 -05:00
|
|
|
|
2025-02-14 13:31:18 -06:00
|
|
|
extraPackages = with pkgs; [
|
|
|
|
gamescope
|
|
|
|
];
|
2024-06-28 16:10:06 -05:00
|
|
|
|
2025-02-14 13:31:18 -06:00
|
|
|
extraCompatPackages = with pkgs; [
|
|
|
|
proton-ge-bin
|
|
|
|
];
|
2024-06-28 16:10:06 -05:00
|
|
|
|
2025-02-14 13:31:18 -06:00
|
|
|
localNetworkGameTransfers.openFirewall = true;
|
|
|
|
remotePlay.openFirewall = true;
|
|
|
|
};
|
2024-06-28 16:10:06 -05:00
|
|
|
|
2025-02-14 15:40:53 -06:00
|
|
|
hardware =
|
|
|
|
(
|
|
|
|
if builtins.hasAttr "graphics" options.hardware then
|
|
|
|
{
|
|
|
|
graphics = {
|
|
|
|
enable = true;
|
|
|
|
enable32Bit = true;
|
|
|
|
};
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
opengl = {
|
|
|
|
enable = true;
|
|
|
|
driSupport32Bit = true;
|
|
|
|
};
|
|
|
|
}
|
|
|
|
)
|
|
|
|
// {
|
|
|
|
steam-hardware.enable = true;
|
|
|
|
};
|
|
|
|
|
2025-02-14 13:31:18 -06:00
|
|
|
services.udev.packages = with pkgs; [ steam ];
|
2024-06-28 16:10:06 -05:00
|
|
|
|
2025-02-14 13:31:18 -06:00
|
|
|
environment.systemPackages = with pkgs; [
|
|
|
|
dualsensectl # for interfacing with dualsense controllers programmatically
|
|
|
|
];
|
2024-06-28 16:10:06 -05:00
|
|
|
|
2025-02-14 13:31:18 -06:00
|
|
|
# remote play ports - should be unnecessary due to programs.steam.remotePlay.openFirewall = true;
|
|
|
|
/*
|
|
|
|
networking.firewall.allowedUDPPortRanges = [ { from = 27031; to = 27036; } ];
|
|
|
|
networking.firewall.allowedTCPPortRanges = [ { from = 27036; to = 27037; } ];
|
|
|
|
*/
|
2024-07-30 17:02:42 -05:00
|
|
|
};
|
|
|
|
|
2025-02-14 13:31:18 -06:00
|
|
|
root =
|
|
|
|
{
|
|
|
|
pkgs,
|
|
|
|
lib,
|
|
|
|
...
|
|
|
|
}:
|
|
|
|
{
|
|
|
|
users.users.root = {
|
|
|
|
home = "/root";
|
|
|
|
createHome = true;
|
|
|
|
openssh.authorizedKeys.keys = [ pubkey ];
|
|
|
|
shell = lib.mkForce pkgs.fish;
|
2024-07-30 17:02:42 -05:00
|
|
|
};
|
2024-06-28 16:10:06 -05:00
|
|
|
};
|
|
|
|
|
2025-02-14 13:31:18 -06:00
|
|
|
daniel =
|
|
|
|
{
|
|
|
|
pkgs,
|
|
|
|
lib,
|
|
|
|
config,
|
|
|
|
...
|
|
|
|
}:
|
|
|
|
{
|
2025-02-14 15:40:53 -06:00
|
|
|
users.groups.daniel = { };
|
|
|
|
users.users.daniel = {
|
2025-02-14 13:31:18 -06:00
|
|
|
isNormalUser = true;
|
2025-02-14 15:40:53 -06:00
|
|
|
home = "/home/daniel/.home";
|
|
|
|
description = "Daniel Flanagan";
|
2025-02-14 13:31:18 -06:00
|
|
|
createHome = true;
|
|
|
|
openssh.authorizedKeys.keys = [ pubkey ];
|
2025-02-14 15:40:53 -06:00
|
|
|
group = "daniel";
|
2025-02-14 13:31:18 -06:00
|
|
|
extraGroups = [
|
|
|
|
"users"
|
|
|
|
"wheel"
|
|
|
|
"video"
|
|
|
|
"dialout"
|
|
|
|
"uucp"
|
|
|
|
"kvm"
|
|
|
|
];
|
|
|
|
packages = [ ];
|
2024-06-28 16:10:06 -05:00
|
|
|
};
|
|
|
|
};
|
|
|
|
}
|