nix/flake.nix

1183 lines
32 KiB
Nix
Raw Normal View History

2023-09-04 11:40:30 -05:00
{
inputs = {
2024-06-01 20:08:59 -05:00
nixpkgs.url = "github:nixos/nixpkgs/nixos-24.05";
2024-06-28 11:50:18 -05:00
# nixpkgs-unstable.url = "github:nixos/nixpkgs/nixpkgs-unstable";
2024-02-29 09:02:36 -06:00
2024-06-17 13:00:23 -05:00
disko.url = "github:nix-community/disko/master";
disko.inputs.nixpkgs.follows = "nixpkgs";
sops-nix.url = "github:Mic92/sops-nix";
# sops-nix.inputs.nixpkgs.follows = "nixpkgs-unstable";
sops-nix.inputs.nixpkgs.follows = "nixpkgs";
sops-nix.inputs.nixpkgs-stable.follows = "nixpkgs";
2024-06-28 09:51:25 -05:00
pre-commit.url = "github:cachix/pre-commit-hooks.nix";
pre-commit.inputs.nixpkgs.follows = "nixpkgs";
2024-06-17 13:00:23 -05:00
home-manager.url = "github:nix-community/home-manager/release-24.05";
2023-11-07 17:09:05 -06:00
home-manager.inputs.nixpkgs.follows = "nixpkgs";
2023-12-04 09:14:13 -06:00
helix.url = "github:helix-editor/helix/master";
2023-10-03 17:09:12 -05:00
hardware.url = "github:nixos/nixos-hardware";
2024-03-22 09:54:00 -05:00
hyprland.url = "github:hyprwm/Hyprland";
2024-05-29 14:58:10 -05:00
slippi.url = "github:lytedev/slippi-nix";
2023-09-04 11:40:30 -05:00
};
nixConfig = {
extra-experimental-features = ["nix-command" "flakes"];
extra-substituters = [
"https://cache.nixos.org/"
"https://helix.cachix.org"
"https://nix-community.cachix.org"
"https://nix.h.lyte.dev"
"https://hyprland.cachix.org"
];
extra-trusted-public-keys = [
"cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY="
"helix.cachix.org-1:ejp9KQpR1FBI2onstMQ34yogDm4OgU2ru6lIwPvuCVs="
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
"h.lyte.dev:HeVWtne31ZG8iMf+c15VY3/Mky/4ufXlfTpT8+4Xbs0="
"hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="
];
};
2023-10-03 11:52:44 -05:00
outputs = {
self,
2023-10-18 09:14:19 -05:00
nixpkgs,
2024-06-28 11:50:18 -05:00
# nixpkgs-unstable,
2024-06-28 09:51:25 -05:00
disko,
# sops-nix,
pre-commit,
2023-10-03 11:52:44 -05:00
home-manager,
2024-06-28 09:51:25 -05:00
helix,
2024-02-28 09:31:58 -06:00
hardware,
2024-06-28 11:50:18 -05:00
# hyprland,
2024-06-28 09:51:25 -05:00
slippi,
2023-10-03 11:52:44 -05:00
...
2024-06-28 09:51:25 -05:00
}: let
inherit (self) outputs;
# TODO: make @ inputs unnecessary by making arguments explicit in all modules?
2024-06-25 09:38:00 -05:00
systems = ["aarch64-linux" "aarch64-darwin" "x86_64-darwin" "x86_64-linux"];
forSystems = nixpkgs.lib.genAttrs systems;
2024-06-28 11:50:18 -05:00
pkgsFor = system: (import nixpkgs {inherit system;}).extend outputs.overlays.default;
2024-06-28 09:51:25 -05:00
genPkgs = func: (forSystems (system: func (pkgsFor system)));
pkg = callee: overrides: genPkgs (pkgs: pkgs.callPackage callee overrides);
2024-06-28 11:50:18 -05:00
colors = (pkg ./lib/colors.nix {}).schemes.catppuccin-mocha-sapphire;
2024-06-28 09:51:25 -05:00
# font = {
# name = "IosevkaLyteTerm";
# size = 12;
# };
2024-01-04 14:45:10 -06:00
2024-06-28 11:50:18 -05:00
# moduleArgs = {
# # inherit colors font;
# inherit helix slippi hyprland hardware disko home-manager;
# inherit (outputs) nixosModules homeManagerModules diskoConfigurations overlays;
# };
pubkey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAPLXOjupz3ScYjgrF+ehrbp9OvGAWQLI6fplX6w9Ijb daniel@lyte.dev";
2024-06-28 09:51:25 -05:00
in {
2024-06-28 11:50:18 -05:00
# in order to include our own packages in the overlay without causing
# infinite recursion errors, we make sure _not_ to use any of the helper
# functions above that involve pulling in the overlay
packages = forSystems (system: (import nixpkgs {inherit system;}).callPackage ./packages {});
2024-06-28 09:51:25 -05:00
diskoConfigurations = import ./disko;
templates = import ./templates;
formatter = genPkgs (p: p.alejandra);
2023-10-06 01:30:15 -05:00
2024-06-28 11:50:18 -05:00
checks = pkg ({system}: {
2024-06-28 09:51:25 -05:00
pre-commit-check = pre-commit.lib.${system}.run {
src = ./.;
hooks = {
alejandra.enable = true;
};
};
2024-06-28 11:50:18 -05:00
}) {};
2024-06-28 11:50:18 -05:00
devShells = pkg ({
2024-06-28 09:51:25 -05:00
system,
pkgs,
mkShell,
}: {
default = mkShell {
inherit (outputs.checks.${system}.pre-commit-check) shellHook;
2024-03-25 09:44:55 -05:00
buildInputs = with pkgs; [
lua-language-server
2024-06-28 09:51:25 -05:00
nodePackages.bash-language-server
2024-03-25 09:44:55 -05:00
];
2024-06-28 09:51:25 -05:00
};
2024-06-28 11:50:18 -05:00
}) {};
2024-06-28 09:51:25 -05:00
overlays = {
2024-06-28 11:50:18 -05:00
# the default overlay composes all the other overlays together
default = final: prev: {
overlays = with outputs.overlays; [
additions
modifications
# unstable-packages
];
};
2024-06-28 09:51:25 -05:00
additions = _final: prev: outputs.packages.${prev.system};
2023-10-03 11:52:44 -05:00
2024-06-28 09:51:25 -05:00
modifications = final: prev: {
final.helix = helix.outputs.packages.${final.system}.helix;
};
2023-10-03 11:52:44 -05:00
2024-06-28 11:50:18 -05:00
# unstable-packages = final: _prev: {
# final.unstable = import nixpkgs-unstable {
# system = final.system;
# config.allowUnfree = true;
# };
# };
};
nixosModules = {
fallback-hostname = {lib, ...}: {
networking.hostName = lib.mkDefault "set-a-hostname-dingus";
};
no-giant-logs = {lib, ...}: {
services.journald.extraConfig = lib.mkDefault "SystemMaxUse=1G";
};
allow-redistributable-firmware = {lib, ...}: {
hardware.enableRedistributableFirmware = lib.mkDefault true;
};
home-manager = {
imports = [
# enable home-manager
home-manager.nixosModules.home-manager
];
home-manager.useGlobalPkgs = true;
home-manager.useUserPkgs = true;
home-manager.backupFileExtension = "hm-backup";
};
mdns-and-lan-service-discovery = {
services.avahi = {
enable = true;
reflector = true;
openFirewall = true;
nssmdns4 = true;
};
};
less-pager = {pkgs, ...}: {
systemPackages = [
pkgs.less
];
environment = {
variables = {
PAGER = "less";
MANPAGER = "less";
};
};
};
helix-text-editor = {pkgs, ...}: {
systemPackages = [
pkgs.less
helix.packages.${pkgs.system}.helix
];
environment = {
variables = {
EDITOR = "hx";
SYSTEMD_EDITOR = "hx";
VISUAL = "hx";
};
};
};
zellij-multiplexer = {pkgs, ...}: {
systemPackages = [
pkgs.zellij
];
};
fish-shell = {
pkgs,
lib,
...
}: {
programs.fish = {
enable = true;
};
users = {
defaultUserShell = lib.mkDefault pkgs.fish;
};
};
nix-index = {
enable = true;
enableBashIntegration = true;
enableFishIntegration = true;
enableZshIntegration = true;
};
my-favorite-default-system-apps = {pkgs, ...}: {
import = with outputs.nixosModules; [
less-pager
helix-text-editor
zellij-multiplexer
fish-shell
];
systemPackages = with pkgs; [
curl
dua
eza # TODO: needs shell aliases
fd
file
iputils
nettools
# nodePackages.bash-language-server # just pull in as needed?
# shellcheck
# shfmt
killall
ripgrep
rsync
sd
];
programs = {
traceroute.enable = true;
git = {
enable = true;
package = pkgs.gitFull;
lfs.enable = true;
};
};
};
mosh = {lib, ...}: {
programs.mosh = {
enable = true;
openFirewall = lib.mkDefault true;
};
};
ssh-server = {lib, ...}: {
# enable an ssh server and provide root access with my primary public key
users.users.root = {
openssh.authorizedKeys.keys = pubkey;
};
services.openssh = {
enable = true;
settings = {
PasswordAuthentication = false;
KbdInteractiveAuthentication = false;
PermitRootLogin = "prohibit-password";
};
openFirewall = lib.mkDefault true;
# listenAddresses = [
# { addr = "0.0.0.0"; port = 22; }
# ];
};
};
tailscale = {lib, ...}: {
services.tailscale = {
enable = true;
useRoutingFeatures = lib.mkDefault "client";
};
};
default-nix-configuration-and-overlays = {
lib,
config,
...
}: {
nixpkgs = {
overlays = with outputs.overlays; [
additions
modifications
unstable-packages
];
config = {
allowUnfree = true;
};
};
nix = {
nixPath = lib.mapAttrsToList (key: value: "${key}=${value.to.path}") config.nix.registry;
registry = lib.mapAttrs (_: value: {flake = value;}) self.inputs;
settings = {
trusted-users = ["root" "daniel"];
experimental-features = lib.mkDefault ["nix-command" "flakes"];
substituters = [
# TODO: dedupe with flake's config? is that even necessary?
"https://cache.nixos.org/"
"https://helix.cachix.org"
"https://nix-community.cachix.org"
"https://nix.h.lyte.dev"
"https://hyprland.cachix.org"
];
trusted-public-keys = [
# TODO: dedupe with flake's config? is that even necessary?
"cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY="
"helix.cachix.org-1:ejp9KQpR1FBI2onstMQ34yogDm4OgU2ru6lIwPvuCVs="
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
"h.lyte.dev:HeVWtne31ZG8iMf+c15VY3/Mky/4ufXlfTpT8+4Xbs0="
"hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc="
];
auto-optimise-store = true;
};
};
};
laptop = {pkgs, ...}: {
imports = with outputs.nixosModules; [
family-users
wifi
];
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"
'';
};
development-tools = {pkgs, ...}: {
imports = with outputs.nixosModules; [
postgres
podman
];
environment.sessionVariables.NIXOS_OZONE_WL = "1";
programs.neovim = {
enable = true;
# plugins = [
# pkgs.vimPlugins.nvim-treesitter.withAllGrammars
# ];
};
environment.systemPackages = with pkgs; [
taplo # toml language server for editing helix configs per repo
pgcli
oil
watchexec
android-tools
kubectl
stern
libresprite
logseq
audacity
wol
shellcheck
skim
sops
gron
shfmt
vscode-langservers-extracted
nodePackages.bash-language-server
nodePackages.yaml-language-server
xh
curl
google-chrome
];
services.udev.packages = with pkgs; [
platformio
openocd
via
];
programs.adb.enable = true;
users.users.daniel.extraGroups = ["adbusers"];
home-manager.users.daniel = {
home = {
};
programs.nushell = {
enable = true;
};
programs.jujutsu = {
enable = true;
};
programs.k9s = {
enable = true;
};
programs.vscode = {
enable = true;
};
programs.jq = {
enable = true;
};
programs.chromium = {
enable = true;
};
programs.btop = {
enable = true;
package = pkgs.btop.override {
rocmSupport = true;
};
};
};
};
troubleshooting-tools = {pkgs, ...}: {
environment.systemPackages = with pkgs; [
pciutils
usbutils
htop
bottom
nmap
dogdns
dnsutils
];
};
graphical-workstation = {
imports = with outputs.nixosModules; [
plasma6
fonts
troubleshooting-tools
development-tools
printing
];
hardware = {
opengl = {
enable = true;
driSupport32Bit = true;
driSupport = true;
};
};
environment.variables = {
# GTK_THEME = "Catppuccin-Mocha-Compact-Sapphire-Dark";
# GTK_USE_PORTAL = "1";
};
};
# ewwbar = {};
# gnome = {};
# hyprland = {};
# intel = {};
kde-connect = {
programs.kdeconnect.enable = true;
# networking.firewall = {
# allowedTCPPortRanges = [ { from = 1714; to = 1764; } ];
# allowedUDPPortRanges = [ { from = 1714; to = 1764; } ];
# };
};
fonts = {pkgs, ...}: {
fonts.packages = with pkgs; [
(nerdfonts.override {fonts = ["NerdFontsSymbolsOnly"];})
pkgs.iosevkaLyteTerm
];
};
plasma6 = {
imports = with outputs.nixosModules; [
kde-connect
pipewire
];
services.xserver.enable = true;
services.displayManager.sddm = {
enable = true;
wayland.enable = true;
};
services.desktopManager.plasma6.enable = true;
programs.dconf.enable = true;
};
lutris = {pkgs, ...}: {
environment = {
systemPackages = with pkgs; [
wineWowPackages.waylandFull
lutris
proton-ge-bin
winetricks
];
2024-02-06 15:37:49 -06:00
};
2024-06-28 09:51:25 -05:00
};
2024-06-28 11:50:18 -05:00
gaming = {
imports = with outputs.nixosModules; [
lutris
steam
];
};
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;
"bluez5.roles" = ["hsp_hs" "hsp_ag" "hfp_hf" "hfp_ag"];
};
};
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";
};
}
];
};
# 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;
# };
# };
};
# recommended by https://nixos.wiki/wiki/PipeWire
security.rtkit.enable = true;
# services.pipewire = {
# enable = true;
# wireplumber.enable = true;
# pulse.enable = true;
# jack.enable = true;
# alsa = {
# enable = true;
# support32Bit = true;
# };
# };
# hardware = {
# pulseaudio = {
# enable = false;
# support32Bit = true;
# };
# };
# security = {
# # I forget why I need these exactly...
# polkit.enable = true;
# rtkit.enable = true;
# };
};
music-production = {pkgs, ...}: {
# TODO: may want to force nixpkgs-stable for a more-stable music production
# environment?
imports = [
{
environment.systemPackages = with pkgs; [
helvum # pipewire graph/patchbay GUI
ardour # DAW
helm # synth
];
}
];
# TODO: things to look into for music production:
# - https://linuxmusicians.com/viewtopic.php?t=27016
# - KXStudio?
# - falktx (https://github.com/DISTRHO/Cardinal)
# -
};
podman = {pkgs, ...}: {
environment = {
systemPackages = with pkgs; [
podman-compose
];
};
virtualisation = {
podman = {
enable = true;
# Create a `docker` alias for podman, to use it as a drop-in replacement
dockerCompat = true;
# Required for containers under podman-compose to be able to talk to each other.
defaultNetwork.settings.dns_enabled = true;
};
oci-containers = {
backend = "podman";
};
};
};
postgres = {pkgs, ...}: {
# this is really just for development usage
services.postgresql = {
enable = true;
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
'';
};
environment.systemPackages = with pkgs; [
pgcli
];
};
printing = {pkgs, ...}: {
services.printing.enable = true;
services.printing.browsing = true;
services.printing.browsedConf = ''
BrowseDNSSDSubTypes _cups,_print
BrowseLocalProtocols all
BrowseRemoteProtocols all
CreateIPPPrinterQueues All
BrowseProtocols all
'';
services.printing.drivers = [pkgs.gutenprint];
};
sway = {};
enable-flatpaks-and-appimages = {
services.flatpak.enable = true;
programs.appimage.binfmt = true;
};
wifi = {lib, ...}: let
inherit (lib) mkDefault;
in {
networking.networkmanager.enable = mkDefault true;
systemd.services.NetworkManager-wait-online.enable = mkDefault false;
# TODO: networking.networkmanager.wifi.backend = "iwd"; ?
# TODO: powersave?
# TODO: can I pre-configure my usual wifi networks with SSIDs and PSKs loaded from secrets?
};
steam = {pkgs, ...}: {
# programs.gamescope.enable = true;
programs.steam = {
enable = true;
# extest.enable = true;
# gamescopeSession.enable = true;
# extraPackages = with pkgs; [
# gamescope
# ];
extraCompatPackages = with pkgs; [
proton-ge-bin
];
localNetworkGameTransfers.openFirewall = true;
remotePlay.openFirewall = true;
};
hardware.steam-hardware.enable = true;
services.udev.packages = with pkgs; [steam];
environment.systemPackages = with pkgs; [
dualsensectl # for interfacing with dualsense controllers programmatically
];
# 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; } ];
};
daniel = let
username = "daniel";
in {
users.groups.${username} = {};
users.users.${username} = {
isNormalUser = true;
home = "/home/${username}/.home";
createHome = true;
openssh.authorizedKeys.keys = [pubkey];
group = username;
extraGroups = ["users" "wheel" "video" "dialout" "uucp"];
packages = [];
};
};
valerie = let
username = "valerie";
in {
users.groups.${username} = {};
users.users.${username} = {
isNormalUser = true;
home = "/home/${username}";
createHome = true;
openssh.authorizedKeys.keys = [pubkey];
group = username;
extraGroups = ["users" "video"];
packages = [];
};
};
flanfam = let
username = "flanfam";
in {
users.groups.${username} = {};
users.users.${username} = {
isNormalUser = true;
home = "/home/${username}";
createHome = true;
openssh.authorizedKeys.keys = [pubkey];
group = username;
extraGroups = ["users" "video"];
packages = [];
};
};
family-users = {
imports = with outputs.nixosModules; [
daniel
valerie
flanfam
];
};
# a common module that is intended to be imported by all NixOS systems
common = {
config,
lib,
pkgs,
...
}: {
imports = with outputs.nixosModules; [
default-nix-configuration-and-overlays
# allow any machine to make use of sops secrets
sops-nix.nixosModules.sops
# allow disko modules to manage disk config
disko.nixosModules.disko
fallback-hostname
no-giant-logs
allow-redistributable-firmware
mdns-and-lan-service-discovery
us-utf8
my-favorite-default-system-apps
mosh
home-manager
daniel
];
time = {
timeZone = lib.mkDefault "America/Chicago";
};
i18n = {
defaultLocale = lib.mkDefault "en_US.UTF-8";
};
services = {
# have the caps-lock key instead be a ctrl key
xserver.xkb = {
layout = lib.mkDefault "us";
options = lib.mkDefault "ctrl:nocaps";
};
};
console = {
# font = "Lat2-Terminus16"; # TODO: would like this font for non-hidpi displays, but this is not dynamic enough?
useXkbConfig = lib.mkDefault true;
earlySetup = lib.mkDefault true;
colors = with colors; [
bg
red
green
orange
blue
purple
yellow
fg3
fgdim
red
green
orange
blue
purple
yellow
fg
];
};
networking = {
useDHCP = lib.mkDefault true;
firewall = {
enable = lib.mkDefault true;
allowPing = lib.mkDefault true;
};
};
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
system.stateVersion = lib.mkDefault "24.05";
};
# intended to be auto-logged in and only run a certain application
# flanfamkiosk = {};
};
homeManagerModules = {
bat = {};
broot = {};
cargo = {};
common = {};
desktop = {};
ewwbar = {};
firefox = {};
firefox-no-tabs = {};
fish = {};
git = {};
gnome = {};
helix = {};
htop = {};
hyprland = {};
iex = {};
kitty = {};
linux = {};
linux-desktop = {};
macos = {};
mako = {};
melee = {};
nnn = {};
pass = {};
senpai = {};
sway = {};
sway-laptop = {};
swaylock = {};
tmux = {};
wallpaper-manager = {};
waybar = {};
wezterm = {};
zellij = {};
2023-10-03 11:52:44 -05:00
};
2024-06-28 11:50:18 -05:00
nixosConfigurations = {
beefcake = {...}: {
services.smartd.enable = true;
services.fwupd.enable = true;
};
dragon = {
pkgs,
config,
...
}: {
system.stateVersion = "24.05";
networking.hostName = "dragon";
imports = with outputs.nixosModules; [
outputs.diskoConfigurations.standard
hardware.nixosModules.common-cpu-amd
hardware.nixosModules.common-pc-ssd
common
wifi
graphical-workstation
music-production
gaming
slippi.nixosModules.default
{
# dragon hardware
boot.loader.efi.canTouchEfiVariables = true;
boot.loader.systemd-boot.enable = true;
boot.initrd.availableKernelModules = ["xhci_pci" "nvme" "ahci"];
boot.kernelModules = ["kvm-amd"];
boot.supportedFilesystems = ["ntfs"];
hardware.bluetooth = {
enable = true;
package = pkgs.bluez;
settings = {
General = {
AutoConnect = true;
MultiProfile = "multiple";
};
};
};
powerManagement.cpuFreqGovernor = lib.mkDefault "performance";
}
{
# dragon firewall
# TODO: maybe should go in the gaming module?
networking = {
firewall = let
terraria = 7777;
stardew-valley = 24642;
ports = [
terraria
stardew-valley
];
in {
allowedTCPPorts = ports;
allowedUDPPorts = ports;
};
};
}
];
environment.systemPackages = with pkgs; [
radeontop
godot_4
prismlauncher
obs-studio
];
home-manager.users.daniel = {
imports = with outputs.homeManagerModules; [
common
firefox-no-tabs
slippi.homeManagerModules.default
{
slippi.launcher = {
enable = true;
isoPath = "${config.home-manager.users.daniel.home.homeDirectory}/../games/roms/dolphin/melee.iso";
launchMeleeOnPlay = false;
};
}
];
# TODO: monitor config module?
# wayland.windowManager.hyprland = {
# settings = {
# env = [
# "EWW_BAR_MON,1"
# ];
# # See https://wiki.hyprland.org/Configuring/Keywords/ for more
# monitor = [
# # "DP-2,3840x2160@60,-2160x0,1,transform,3"
# "DP-3,3840x2160@120,${toString (builtins.ceil (2160 / 1.5))}x0,1"
# # HDR breaks screenshare? "DP-3,3840x2160@120,${toString (builtins.ceil (2160 / 1.5))}x0,1,bitdepth,10"
# # "desc:LG Display 0x0521,3840x2160@120,0x0,1"
# # "desc:Dell Inc. DELL U2720Q D3TM623,3840x2160@60,3840x0,1.5,transform,1"
# "DP-2,3840x2160@60,0x0,1.5,transform,1"
# ];
# input = {
# force_no_accel = true;
# sensitivity = 1; # -1.0 - 1.0, 0 means no modification.
# };
# };
# };
# wayland.windowManager.sway = {
# config = {
# output = {
# "GIGA-BYTE TECHNOLOGY CO., LTD. AORUS FO48U 23070B000307" = {
# mode = "3840x2160@120Hz";
# position = "${toString (builtins.ceil (2160 / 1.5))},0";
# };
# "Dell Inc. DELL U2720Q D3TM623" = {
# # desktop left vertical monitor
# mode = "3840x2160@60Hz";
# transform = "90";
# scale = "1.5";
# position = "0,0";
# };
# };
# workspaceOutputAssign =
# (
# map
# (ws: {
# output = "GIGA-BYTE TECHNOLOGY CO., LTD. AORUS FO48U 23070B000307";
# workspace = toString ws;
# })
# (lib.range 1 7)
# )
# ++ (
# map
# (ws: {
# output = "Dell Inc. DELL U2720Q D3TM623";
# workspace = toString ws;
# })
# (lib.range 8 9)
# );
# };
# };
};
};
foxtrot = {...}: {
imports = with outputs.nixosModules; [
common
laptop
];
};
thablet = {...}: {
imports = with outputs.nixosModules; [
common
laptop
];
};
thinker = {...}: {
imports = with outputs.nixosModules; [
common
laptop
];
};
};
2024-06-28 09:51:25 -05:00
# nixosConfigurations =
# (builtins.mapAttrs (name: {
# system,
# modules,
# ...
# }:
# nixpkgs.lib.nixosSystem {
# inherit system;
# # specialArgs = moduleArgs;
# modules =
# [
2024-06-28 11:50:18 -05:00
# outputs.nixosModules.common
2024-06-28 09:51:25 -05:00
# ]
# ++ modules;
# }) (import ./nixos))
# // {
# beefcake = nixpkgs.lib.nixosSystem {
# system = "x86_64-linux";
# specialArgs = moduleArgs;
2024-06-28 11:50:18 -05:00
# modules = [outputs.nixosModules.common ./nixos/beefcake.nix];
2024-06-28 09:51:25 -05:00
# };
# };
# homeConfigurations = {
# # TODO: non-system-specific home configurations?
# "deck" = let
# system = "x86_64-linux";
# in
# home-manager.lib.homeManagerConfiguration {
# pkgs = pkgsFor system;
# extraSpecialArgs = moduleArgs;
2024-06-28 11:50:18 -05:00
# modules = with outputs.homeManagerModules; [
2024-06-28 09:51:25 -05:00
# common
# {
# home.homeDirectory = "/home/deck";
# home.username = "deck";
# home.stateVersion = "24.05";
# }
# linux
# ];
# };
# workm1 = let
# system = "aarch64-darwin";
# in
# home-manager.lib.homeManagerConfiguration {
# pkgs = pkgsFor system;
# extraSpecialArgs = moduleArgs;
2024-06-28 11:50:18 -05:00
# modules = with outputs.homeManagerModules; [
2024-06-28 09:51:25 -05:00
# common
# {
# home.homeDirectory = "/Users/daniel.flanagan";
# home.username = "daniel.flanagan";
# home.stateVersion = "24.05";
# }
# macos
# ];
# };
# };
2024-01-04 14:45:10 -06:00
# TODO: nix-on-droid for phone terminal usage?
# TODO: nix-darwin for work?
# TODO: nixos ISO?
2023-12-19 10:27:11 -06:00
};
2023-09-04 11:40:30 -05:00
}