Refactor configs to be much more shared. Big refactor using more shared modules, etc
18
flake.lock
generated
@ -71,11 +71,11 @@
|
||||
"firefox-gnome-theme": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1764873433,
|
||||
"narHash": "sha256-1XPewtGMi+9wN9Ispoluxunw/RwozuTRVuuQOmxzt+A=",
|
||||
"lastModified": 1773024283,
|
||||
"narHash": "sha256-6cGDN/2iSNUJWp035zzr6BZCzFtO92PIKNeWxuwPPcA=",
|
||||
"owner": "rafaelmardojai",
|
||||
"repo": "firefox-gnome-theme",
|
||||
"rev": "f7ffd917ac0d253dbd6a3bf3da06888f57c69f92",
|
||||
"rev": "43bc26501a637c68df723645966b77168cefa9d0",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@ -200,11 +200,11 @@
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1772047000,
|
||||
"narHash": "sha256-7DaQVv4R97cii/Qdfy4tmDZMB2xxtyIvNGSwXBBhSmo=",
|
||||
"lastModified": 1773814637,
|
||||
"narHash": "sha256-GNU+ooRmrHLfjlMsKdn0prEKVa0faVanm0jrgu1J/gY=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "1267bb4920d0fc06ea916734c11b0bf004bbe17e",
|
||||
"rev": "fea3b367d61c1a6592bc47c72f40a9f3e6a53e96",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@ -216,11 +216,11 @@
|
||||
},
|
||||
"nixpkgs-unstable": {
|
||||
"locked": {
|
||||
"lastModified": 1771848320,
|
||||
"narHash": "sha256-0MAd+0mun3K/Ns8JATeHT1sX28faLII5hVLq0L3BdZU=",
|
||||
"lastModified": 1773821835,
|
||||
"narHash": "sha256-TJ3lSQtW0E2JrznGVm8hOQGVpXjJyXY2guAxku2O9A4=",
|
||||
"owner": "nixos",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "2fc6539b481e1d2569f25f8799236694180c0993",
|
||||
"rev": "b40629efe5d6ec48dd1efba650c797ddbd39ace0",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
|
||||
27
flake.nix
@ -12,6 +12,9 @@
|
||||
stylix = {
|
||||
url = "github:nix-community/stylix/release-25.11";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
# Override to pick up fix for invisible extension icons
|
||||
# https://github.com/rafaelmardojai/firefox-gnome-theme/issues/1061
|
||||
inputs.firefox-gnome-theme.url = "github:rafaelmardojai/firefox-gnome-theme";
|
||||
};
|
||||
nur.url = "github:nix-community/NUR";
|
||||
nixos-hardware.url = "github:NixOS/nixos-hardware/master";
|
||||
@ -41,12 +44,12 @@
|
||||
inputs.home-manager.nixosModules.home-manager {
|
||||
home-manager.useGlobalPkgs = true;
|
||||
home-manager.useUserPackages = true;
|
||||
home-manager.users.luci = import ./luci/modules/home-manager/home.nix;
|
||||
home-manager.users.luci = import ./hosts/luci/modules/home-manager/home.nix;
|
||||
home-manager.extraSpecialArgs = {
|
||||
inherit inputs outputs;
|
||||
};
|
||||
}
|
||||
./luci/default.nix
|
||||
./hosts/luci/default.nix
|
||||
];
|
||||
};
|
||||
nate = nixpkgs.lib.nixosSystem {
|
||||
@ -60,12 +63,12 @@
|
||||
inputs.home-manager.nixosModules.home-manager {
|
||||
home-manager.useGlobalPkgs = true;
|
||||
home-manager.useUserPackages = true;
|
||||
home-manager.users.nate = import ./nate/modules/home-manager/home.nix;
|
||||
home-manager.users.nate = import ./hosts/nate/modules/home-manager/home.nix;
|
||||
home-manager.extraSpecialArgs = {
|
||||
inherit inputs outputs unstablePkgs;
|
||||
};
|
||||
}
|
||||
./nate/default.nix
|
||||
./hosts/nate/default.nix
|
||||
];
|
||||
};
|
||||
nate-work = nixpkgs.lib.nixosSystem {
|
||||
@ -79,12 +82,12 @@
|
||||
inputs.home-manager.nixosModules.home-manager {
|
||||
home-manager.useGlobalPkgs = true;
|
||||
home-manager.useUserPackages = true;
|
||||
home-manager.users.nate = import ./nate-work/modules/home-manager/home.nix;
|
||||
home-manager.users.nate = import ./hosts/nate-work/modules/home-manager/home.nix;
|
||||
home-manager.extraSpecialArgs = {
|
||||
inherit inputs outputs unstablePkgs;
|
||||
};
|
||||
}
|
||||
./nate-work/default.nix
|
||||
./hosts/nate-work/default.nix
|
||||
];
|
||||
};
|
||||
jaci = nixpkgs.lib.nixosSystem {
|
||||
@ -98,12 +101,12 @@
|
||||
inputs.home-manager.nixosModules.home-manager {
|
||||
home-manager.useGlobalPkgs = true;
|
||||
home-manager.useUserPackages = true;
|
||||
home-manager.users.jaci = import ./jaci/modules/home-manager/home.nix;
|
||||
home-manager.users.jaci = import ./hosts/jaci/modules/home-manager/home.nix;
|
||||
home-manager.extraSpecialArgs = {
|
||||
inherit inputs outputs unstablePkgs;
|
||||
};
|
||||
}
|
||||
./jaci/default.nix
|
||||
./hosts/jaci/default.nix
|
||||
];
|
||||
};
|
||||
# DEPRECATED: scrappy system is no longer in use
|
||||
@ -117,12 +120,12 @@
|
||||
# inputs.home-manager.nixosModules.home-manager {
|
||||
# home-manager.useGlobalPkgs = true;
|
||||
# home-manager.useUserPackages = true;
|
||||
# home-manager.users.scrappy = import ./scrappy/modules/home-manager/home.nix;
|
||||
# home-manager.users.scrappy = import ./hosts/scrappy/modules/home-manager/home.nix;
|
||||
# home-manager.extraSpecialArgs = {
|
||||
# inherit inputs outputs unstablePkgs;
|
||||
# };
|
||||
# }
|
||||
# ./scrappy/default.nix
|
||||
# ./hosts/scrappy/default.nix
|
||||
# ];
|
||||
# };
|
||||
frame12 = nixpkgs.lib.nixosSystem {
|
||||
@ -136,12 +139,12 @@
|
||||
inputs.home-manager.nixosModules.home-manager {
|
||||
home-manager.useGlobalPkgs = true;
|
||||
home-manager.useUserPackages = true;
|
||||
home-manager.users.nate = import ./frame12/modules/home-manager/home.nix;
|
||||
home-manager.users.nate = import ./hosts/frame12/modules/home-manager/home.nix;
|
||||
home-manager.extraSpecialArgs = {
|
||||
inherit inputs outputs unstablePkgs;
|
||||
};
|
||||
}
|
||||
./frame12/default.nix
|
||||
./hosts/frame12/default.nix
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
@ -1,43 +0,0 @@
|
||||
{ config, lib, inputs, outputs, pkgs, system, timeZone, ... }:
|
||||
let
|
||||
userName = "nate";
|
||||
fullName = "Nate Anderson";
|
||||
email = "n8r@tuta.io";
|
||||
hostName = "frame12";
|
||||
desktop = "niri";
|
||||
in
|
||||
{
|
||||
imports = [
|
||||
inputs.nixos-hardware.nixosModules.framework-12-13th-gen-intel
|
||||
./desktop-configuration.nix
|
||||
./nixos/hardware-configuration.nix
|
||||
];
|
||||
|
||||
deskCfg = {
|
||||
userName = userName;
|
||||
hostName = hostName;
|
||||
fullName = fullName;
|
||||
de = desktop;
|
||||
flakePath = "/home/${userName}/nixos";
|
||||
};
|
||||
|
||||
# Limit the number of generations to keep
|
||||
boot.loader.systemd-boot.configurationLimit = 5;
|
||||
|
||||
# Systemd initrd for Plymouth and faster boot
|
||||
boot.initrd.systemd.enable = true;
|
||||
|
||||
# Perform garbage collection weekly to maintain low disk usage
|
||||
nix.gc = {
|
||||
automatic = true;
|
||||
dates = "weekly";
|
||||
options = "--delete-older-than 14d";
|
||||
};
|
||||
|
||||
# Optimize storage
|
||||
# You can also manually optimize the store via:
|
||||
# nix-store --optimise
|
||||
# Refer to the following link for more details:
|
||||
# https://nixos.org/manual/nix/stable/command-ref/conf-file.html#conf-auto-optimise-store
|
||||
nix.settings.auto-optimise-store = true;
|
||||
}
|
||||
@ -1,239 +0,0 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
inputs,
|
||||
outputs,
|
||||
pkgs,
|
||||
timeZone,
|
||||
system,
|
||||
...
|
||||
}:
|
||||
let
|
||||
supportedDesktops = [ "niri" ];
|
||||
supportedDesktopsStr = lib.strings.concatStringsSep ", " supportedDesktops;
|
||||
deskCfg = config.deskCfg;
|
||||
in
|
||||
{
|
||||
options.deskCfg = {
|
||||
de = lib.mkOption {
|
||||
default = "";
|
||||
type = lib.types.str;
|
||||
description = "Desktop Environment";
|
||||
};
|
||||
userName = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
description = "Main username for system";
|
||||
};
|
||||
hostName = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
description = "Hostname for system";
|
||||
};
|
||||
fullName = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
default = "User";
|
||||
description = "Full display name for the user";
|
||||
};
|
||||
flakePath = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
description = "Absolute path to the NixOS flake configuration directory";
|
||||
};
|
||||
};
|
||||
|
||||
imports = [
|
||||
../shared/modules/user/main_user.nix
|
||||
modules/niri/niri_conf.nix
|
||||
modules/colemak-ec.nix
|
||||
../shared/modules/system/power_manager.nix
|
||||
../shared/modules/system/noctalia-system.nix
|
||||
];
|
||||
|
||||
config = {
|
||||
assertions = [
|
||||
{
|
||||
assertion = builtins.elem deskCfg.de supportedDesktops;
|
||||
message = "Unsupported desktop environment: ${deskCfg.de}\nSupported DE's: ${supportedDesktopsStr}";
|
||||
}
|
||||
];
|
||||
|
||||
# Stylix theming
|
||||
stylix = {
|
||||
enable = true;
|
||||
# image = ./wallpaper.png;
|
||||
|
||||
# Check with `nix build nixpkgs#base16-schemes && ls result/share/themes`
|
||||
base16Scheme = "${pkgs.base16-schemes}/share/themes/kimber.yaml";
|
||||
polarity = "dark";
|
||||
|
||||
# System-wide cursor
|
||||
cursor = {
|
||||
package = pkgs.bibata-cursors;
|
||||
name = "Bibata-Modern-Classic";
|
||||
size = 32;
|
||||
};
|
||||
|
||||
# Fonts
|
||||
fonts = {
|
||||
serif = {
|
||||
package = pkgs.lato;
|
||||
name = "Lato";
|
||||
};
|
||||
sansSerif = {
|
||||
package = pkgs.lato;
|
||||
name = "Lato";
|
||||
};
|
||||
monospace = {
|
||||
package = pkgs.maple-mono.NF;
|
||||
name = "Maple Mono NF";
|
||||
};
|
||||
emoji = {
|
||||
package = pkgs.noto-fonts-color-emoji;
|
||||
name = "Noto Color Emoji";
|
||||
};
|
||||
sizes = {
|
||||
applications = 14;
|
||||
desktop = 12;
|
||||
popups = 12;
|
||||
terminal = 16;
|
||||
};
|
||||
};
|
||||
|
||||
# Icon theme for tray applets (nm-applet, etc.)
|
||||
iconTheme = {
|
||||
enable = true;
|
||||
package = pkgs.papirus-icon-theme;
|
||||
light = "Papirus-Light";
|
||||
dark = "Papirus-Dark";
|
||||
};
|
||||
|
||||
targets = {
|
||||
# Keep custom Framework plymouth theme
|
||||
plymouth.enable = false;
|
||||
};
|
||||
};
|
||||
|
||||
nixpkgs.overlays = [
|
||||
inputs.nur.overlays.default
|
||||
];
|
||||
|
||||
# Intel graphics acceleration
|
||||
hardware.graphics.enable = true;
|
||||
hardware.enableRedistributableFirmware = true;
|
||||
|
||||
# Enable flakes feature
|
||||
nix.settings.experimental-features = [
|
||||
"nix-command"
|
||||
"flakes"
|
||||
];
|
||||
nixpkgs.config.allowUnfree = true;
|
||||
|
||||
boot = {
|
||||
plymouth = {
|
||||
enable = true;
|
||||
theme = "framework";
|
||||
themePackages = [
|
||||
(pkgs.runCommand "plymouth-framework-theme" { } ''
|
||||
mkdir -p $out/share/plymouth/themes/framework
|
||||
cp -r ${./framework-plymouth-theme/framework}/* $out/share/plymouth/themes/framework/
|
||||
substituteInPlace $out/share/plymouth/themes/framework/framework.plymouth \
|
||||
--replace-fail "@IMAGEDIR@" "$out/share/plymouth/themes/framework"
|
||||
# substituteInPlace $out/share/plymouth/themes/framework/framework.script \
|
||||
# --replace-fail "@IMAGEDIR@" "$out/share/plymouth/themes/framework"
|
||||
'')
|
||||
];
|
||||
};
|
||||
|
||||
# Enable "Silent Boot"
|
||||
consoleLogLevel = 0;
|
||||
initrd.verbose = false;
|
||||
kernelParams = [
|
||||
"quiet"
|
||||
"splash"
|
||||
"boot.shell_on_fail"
|
||||
"loglevel=3"
|
||||
"rd.systemd.show_status=false"
|
||||
"rd.udev.log_level=3"
|
||||
"udev.log_priority=3"
|
||||
];
|
||||
# Hide the OS choice for bootloaders.
|
||||
# It's still possible to open the bootloader list by pressing any key
|
||||
# It will just not appear on screen unless a key is pressed
|
||||
loader.timeout = 1;
|
||||
# Use the systemd-boot EFI boot loader.
|
||||
loader.systemd-boot.enable = true;
|
||||
loader.efi.canTouchEfiVariables = true;
|
||||
# Use latest kernel packages
|
||||
kernelPackages = pkgs.linuxPackages_latest;
|
||||
};
|
||||
networking.hostName = deskCfg.hostName; # Define your hostname.
|
||||
networking.networkmanager.enable = true; # Easiest to use and most distros use this by default.
|
||||
networking.wireless.iwd.enable = true;
|
||||
|
||||
time.timeZone = timeZone;
|
||||
|
||||
main_user = {
|
||||
enable = true;
|
||||
userName = deskCfg.userName;
|
||||
fullName = deskCfg.fullName;
|
||||
isDesktopUser = true;
|
||||
extraGroups = [
|
||||
"corectrl"
|
||||
"dialout"
|
||||
"docker"
|
||||
];
|
||||
};
|
||||
|
||||
power_manager = {
|
||||
enable = true;
|
||||
backend = "power-profiles-daemon"; # Required for Noctalia power profile widget
|
||||
};
|
||||
|
||||
# Enable Noctalia shell system services
|
||||
noctaliaSystem.enable = true;
|
||||
|
||||
niriwm = {
|
||||
enable = true;
|
||||
useNonFree = true;
|
||||
user = deskCfg.userName;
|
||||
systemPackages = with pkgs; [
|
||||
libreoffice
|
||||
rpi-imager
|
||||
];
|
||||
};
|
||||
|
||||
environment.systemPackages = with pkgs; [
|
||||
cryptsetup
|
||||
cage
|
||||
];
|
||||
|
||||
programs.niri.enable = true;
|
||||
# For electron apps in wayland
|
||||
environment.sessionVariables.NIXOS_OZONE_WL = "1";
|
||||
|
||||
# auto write colemak-dh to keyboard ec
|
||||
colemakEc.enable = true;
|
||||
|
||||
services.greetd = {
|
||||
enable = true;
|
||||
settings = rec {
|
||||
initial_session = {
|
||||
command = "${pkgs.niri}/bin/niri-session";
|
||||
user = "nate";
|
||||
};
|
||||
default_session = initial_session;
|
||||
};
|
||||
};
|
||||
|
||||
networking.firewall = {
|
||||
enable = true;
|
||||
allowedTCPPorts = [
|
||||
8080
|
||||
8081
|
||||
]; # Open port 8080 for TCP
|
||||
# allowedUDPPorts = [ ... ]; # If you need UDP ports
|
||||
};
|
||||
|
||||
# For yubioath desktop
|
||||
services.pcscd.enable = true;
|
||||
system.stateVersion = "25.05"; # Did you read the comment?
|
||||
};
|
||||
}
|
||||
@ -1,255 +0,0 @@
|
||||
{
|
||||
inputs,
|
||||
lib,
|
||||
config,
|
||||
pkgs,
|
||||
userName,
|
||||
...
|
||||
}:
|
||||
let
|
||||
unstable = import inputs.nixpkgs-unstable {
|
||||
system = "x86_64-linux";
|
||||
config.allowUnfree = true;
|
||||
};
|
||||
in
|
||||
{
|
||||
options.niriwm = {
|
||||
enable = lib.mkEnableOption "Enable niri window manager.";
|
||||
useNonFree = lib.mkOption {
|
||||
default = false;
|
||||
example = true;
|
||||
description = "Whether to enable non-free software in the niri config";
|
||||
};
|
||||
systemPackages = lib.mkOption {
|
||||
default = [ ];
|
||||
description = "Add any additional packages desired. Merged with niri defaults.";
|
||||
};
|
||||
user = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
###
|
||||
## Configuration
|
||||
###
|
||||
config = lib.mkIf config.niriwm.enable {
|
||||
|
||||
nixpkgs.config.allowUnfree = config.niriwm.useNonFree;
|
||||
|
||||
# Portal config: programs.niri.enable adds xdg-desktop-portal-gnome
|
||||
# and niri-portals.conf via configPackages, but the portal daemon
|
||||
# doesn't reliably pick up configPackages files. Setting config
|
||||
# explicitly ensures ScreenCast routes to the GNOME portal.
|
||||
xdg.portal.config.niri = {
|
||||
default = [ "gnome" "gtk" ];
|
||||
"org.freedesktop.impl.portal.Access" = [ "gtk" ];
|
||||
"org.freedesktop.impl.portal.Notification" = [ "gtk" ];
|
||||
"org.freedesktop.impl.portal.Secret" = [ "gnome-keyring" ];
|
||||
};
|
||||
xdg.sounds.enable = true;
|
||||
|
||||
###
|
||||
## System Packages
|
||||
###
|
||||
environment.systemPackages =
|
||||
with pkgs;
|
||||
lib.lists.flatten [
|
||||
[
|
||||
bash
|
||||
egl-wayland
|
||||
git
|
||||
glib # gsettings
|
||||
grim
|
||||
kanshi
|
||||
libnotify
|
||||
lxqt.lxqt-policykit
|
||||
man-pages
|
||||
man-pages-posix
|
||||
nautilus
|
||||
pavucontrol
|
||||
slurp
|
||||
swaylock
|
||||
swayosd
|
||||
syncthingtray
|
||||
unstable.ghostty
|
||||
unstable.xwayland-satellite
|
||||
wdisplays
|
||||
wl-clipboard
|
||||
xdg-utils
|
||||
zsh
|
||||
]
|
||||
config.niriwm.systemPackages
|
||||
];
|
||||
environment.variables.QT_STYLE_OVERRIDE = "kvantum";
|
||||
environment.sessionVariables = {
|
||||
# use wayland
|
||||
MOZ_ENABLE_WAYLAND = "1";
|
||||
# QT_QPA_PLATFORM and GDK_BACKEND must NOT be set - they break the screencast portal
|
||||
WLR_NO_HARDWARE_CURSORS = "1";
|
||||
ELECTRON_OZONE_PLATFORM_HINT = "auto";
|
||||
NIXOS_OZONE_WL = "1";
|
||||
# VA-API driver for hardware video acceleration (Intel 13th gen)
|
||||
LIBVA_DRIVER_NAME = "iHD";
|
||||
};
|
||||
|
||||
# adds additional man pages
|
||||
documentation.dev.enable = true;
|
||||
|
||||
programs.gamemode = {
|
||||
enable = true;
|
||||
settings = {
|
||||
general = {
|
||||
reaper_freq = 5;
|
||||
desiredgov = "performance";
|
||||
softrealtime = "auto";
|
||||
};
|
||||
};
|
||||
};
|
||||
programs.kdeconnect.enable = true;
|
||||
programs.niri.enable = true;
|
||||
programs.regreet.enable = true;
|
||||
programs.xfconf.enable = true;
|
||||
programs.zsh.enable = true;
|
||||
programs.ssh.startAgent = false; # Using GNOME Keyring's gcr-ssh-agent instead
|
||||
programs.adb.enable = true;
|
||||
|
||||
# For nautilus
|
||||
services.gnome.sushi.enable = true;
|
||||
programs.nautilus-open-any-terminal = {
|
||||
enable = true;
|
||||
terminal = "ghostty";
|
||||
};
|
||||
|
||||
services.syncthing = {
|
||||
enable = true;
|
||||
dataDir = "/home/${config.niriwm.user}/.syncthing";
|
||||
openDefaultPorts = true;
|
||||
user = config.niriwm.user;
|
||||
};
|
||||
systemd.services.syncthing.environment.STNODEFAULTFOLDER = "true"; # Don't create default ~/Sync folder
|
||||
|
||||
# Set zsh as the default shell system-wide
|
||||
users.defaultUserShell = pkgs.zsh;
|
||||
environment.shells = with pkgs; [
|
||||
zsh
|
||||
bash
|
||||
];
|
||||
|
||||
###
|
||||
## Services
|
||||
###
|
||||
# services.blueman.enable = true; # Noctalia handles bluetooth
|
||||
services.gvfs.enable = true; # file manager mount, trash, etc
|
||||
services.tumbler.enable = true; # thunar thumbnails
|
||||
services.openssh.enable = true;
|
||||
services.dbus.enable = true;
|
||||
services.gnome.gnome-keyring.enable = true;
|
||||
services.flatpak.enable = true;
|
||||
services.usbmuxd.enable = false;
|
||||
|
||||
# For yubioath desktop
|
||||
services.pcscd.enable = true;
|
||||
|
||||
# Printing
|
||||
services.printing = {
|
||||
enable = true;
|
||||
browsing = true;
|
||||
drivers = [ pkgs.brlaser ];
|
||||
};
|
||||
|
||||
# Audio - Modern PipeWire setup for Framework laptop
|
||||
# Disable PulseAudio in favor of PipeWire
|
||||
services.pulseaudio.enable = false;
|
||||
security.rtkit.enable = true;
|
||||
services.pipewire = {
|
||||
enable = true;
|
||||
audio.enable = true;
|
||||
alsa.enable = true;
|
||||
alsa.support32Bit = true;
|
||||
pulse.enable = true;
|
||||
wireplumber.enable = true;
|
||||
wireplumber.extraConfig = {
|
||||
"wireplumber.settings" = {
|
||||
bluetooth.autoswitch-to-headset-profile = false;
|
||||
};
|
||||
bluetoothEnhancements = {
|
||||
"monitor.bluez.properties" = {
|
||||
"bluez5.enable-sbc-xq" = true;
|
||||
"bluez5.enable-msbc" = true;
|
||||
"bluez5.enable-hw-volume" = true;
|
||||
# Default roles: https://pipewire.pages.freedesktop.org/wireplumber/daemon/configuration/bluetooth.html#monitor-properties
|
||||
"bluez5.roles" = [
|
||||
"a2dp_sink"
|
||||
"a2dp_source"
|
||||
"bap_sink"
|
||||
"bap_source"
|
||||
"hfp_hf"
|
||||
"hfp_ag"
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
###
|
||||
## Misc
|
||||
###
|
||||
# Necessary for home-manager niri setup
|
||||
security.polkit.enable = true;
|
||||
|
||||
# Keyring setup
|
||||
security.pam.services.greetd.enableGnomeKeyring = true;
|
||||
security.pam.services.login.enableGnomeKeyring = true;
|
||||
|
||||
hardware.bluetooth = {
|
||||
enable = true;
|
||||
powerOnBoot = true; # powers up the default Bluetooth controller on boot
|
||||
settings = {
|
||||
General = {
|
||||
Name = "Nate-Frame";
|
||||
ControllerMode = "dual";
|
||||
FastConnectable = "true";
|
||||
Experimental = "true";
|
||||
};
|
||||
Policy = {
|
||||
AutoEnable = "true";
|
||||
};
|
||||
LE = {
|
||||
EnableAdvMonInterleaveScan = 1;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
#
|
||||
# Hardware scanning support
|
||||
#
|
||||
hardware.sane = {
|
||||
enable = true;
|
||||
brscan5.enable = true;
|
||||
};
|
||||
|
||||
virtualisation.docker = {
|
||||
enable = true;
|
||||
rootless = {
|
||||
enable = true;
|
||||
setSocketVariable = true;
|
||||
};
|
||||
daemon.settings = {
|
||||
# not needed, intended for windoze
|
||||
userland-proxy = false;
|
||||
};
|
||||
};
|
||||
#
|
||||
# udev rules
|
||||
#
|
||||
services.udev.extraRules = ''
|
||||
# For betaflight configurator
|
||||
# DFU (Internal bootloader for STM32 and AT32 MCUs)
|
||||
SUBSYSTEM=="usb", ATTRS{idVendor}=="2e3c", ATTRS{idProduct}=="df11", MODE="0664", GROUP="dialout"
|
||||
SUBSYSTEM=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="df11", MODE="0664", GROUP="dialout"
|
||||
# For ddcutil monitor controls
|
||||
KERNEL=="i2c-[0-9]*", GROUP="i2c", MODE="0660"
|
||||
'';
|
||||
};
|
||||
}
|
||||
@ -1,59 +0,0 @@
|
||||
{ inputs, lib, config, pkgs, ... }:
|
||||
{
|
||||
imports = [
|
||||
../../../shared/modules/home-manager/waybar.nix
|
||||
];
|
||||
|
||||
options.nirihome = {
|
||||
enable = lib.mkEnableOption "Enable niri home config";
|
||||
homePackages = lib.mkOption {
|
||||
default = [];
|
||||
description = "Add any additional packages desired. Merged with niri defaults.";
|
||||
};
|
||||
};
|
||||
|
||||
config = lib.mkIf config.nirihome.enable {
|
||||
# Note: We don't use wayland.windowManager.niri in home-manager
|
||||
# because we manage the niri config through dotfiles.
|
||||
# The system-level module enables niri via programs.niri.enable
|
||||
|
||||
# Niri sets WAYLAND_DISPLAY and XDG_CURRENT_DESKTOP automatically.
|
||||
# Manually overriding session vars conflicts with xdg-desktop-portal-gnome
|
||||
# screencasting (breaks Zoom screen sharing).
|
||||
|
||||
# Cursor is managed by Stylix (stylix.cursor in frame12/default.nix)
|
||||
|
||||
# Waybar with Stylix theming
|
||||
waybarConfig.enable = true;
|
||||
|
||||
home.packages = with pkgs; lib.lists.flatten [
|
||||
[
|
||||
### niri packages
|
||||
swaybg
|
||||
swaylock-effects
|
||||
# Etc
|
||||
gopsuinfo # For system stats in panel
|
||||
wl-clipboard # System clipboard
|
||||
brightnessctl
|
||||
wev
|
||||
wdisplays
|
||||
# Notifs
|
||||
libnotify
|
||||
swaynotificationcenter
|
||||
# Tray Applets
|
||||
# networkmanagerapplet # Noctalia handles wifi
|
||||
pavucontrol
|
||||
syncthingtray
|
||||
tailscale-systray
|
||||
# Portals are managed at system level by programs.niri.enable
|
||||
]
|
||||
config.nirihome.homePackages
|
||||
];
|
||||
programs.cava = {
|
||||
enable = true;
|
||||
settings = {
|
||||
smoothing.noise_reduction = 55;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
128
hosts/frame12/default.nix
Normal file
@ -0,0 +1,128 @@
|
||||
{ config, lib, inputs, pkgs, timeZone, ... }:
|
||||
let
|
||||
deskCfg = config.deskCfg;
|
||||
in
|
||||
{
|
||||
imports = [
|
||||
inputs.nixos-hardware.nixosModules.framework-12-13th-gen-intel
|
||||
./nixos/hardware-configuration.nix
|
||||
../../shared/modules/desktop/base.nix
|
||||
../../shared/modules/desktop/stylix.nix
|
||||
../../shared/modules/desktop/silent-boot.nix
|
||||
../../shared/modules/desktop/greetd.nix
|
||||
../../shared/modules/wm/niri.nix
|
||||
../../shared/modules/services/syncthing.nix
|
||||
../../shared/modules/services/kdeconnect.nix
|
||||
../../shared/modules/services/docker.nix
|
||||
../../shared/modules/services/colemak-ec.nix
|
||||
../../shared/modules/services/hyprvoice.nix
|
||||
];
|
||||
|
||||
deskCfg = {
|
||||
userName = "nate";
|
||||
hostName = "frame12";
|
||||
fullName = "Nate Anderson";
|
||||
de = "niri";
|
||||
};
|
||||
|
||||
# Limit the number of generations to keep
|
||||
boot.loader.systemd-boot.configurationLimit = 5;
|
||||
boot.kernelPackages = pkgs.linuxPackages_latest;
|
||||
|
||||
# Systemd initrd for Plymouth and faster boot
|
||||
boot.initrd.systemd.enable = true;
|
||||
|
||||
# Silent boot
|
||||
silentBoot.enable = true;
|
||||
|
||||
# Plymouth — custom Framework theme
|
||||
boot.plymouth = {
|
||||
enable = true;
|
||||
theme = "framework";
|
||||
themePackages = [
|
||||
(pkgs.runCommand "plymouth-framework-theme" { } ''
|
||||
mkdir -p $out/share/plymouth/themes/framework
|
||||
cp -r ${./framework-plymouth-theme/framework}/* $out/share/plymouth/themes/framework/
|
||||
substituteInPlace $out/share/plymouth/themes/framework/framework.plymouth \
|
||||
--replace-fail "@IMAGEDIR@" "$out/share/plymouth/themes/framework"
|
||||
'')
|
||||
];
|
||||
};
|
||||
|
||||
# Perform garbage collection weekly to maintain low disk usage
|
||||
nix.gc = {
|
||||
automatic = true;
|
||||
dates = "weekly";
|
||||
options = "--delete-older-than 14d";
|
||||
};
|
||||
nix.settings.auto-optimise-store = true;
|
||||
|
||||
# IWD wireless backend
|
||||
networking.wireless.iwd.enable = true;
|
||||
|
||||
# Extra groups
|
||||
main_user.extraGroups = [ "corectrl" "dialout" "docker" ];
|
||||
|
||||
# Stylix overrides — kimber dark theme, terminal font size 16
|
||||
stylix = {
|
||||
base16Scheme = "${pkgs.base16-schemes}/share/themes/kimber.yaml";
|
||||
fonts.sizes.terminal = 16;
|
||||
};
|
||||
|
||||
# Intel graphics acceleration (Framework 12)
|
||||
hardware.graphics.enable = true;
|
||||
hardware.enableRedistributableFirmware = true;
|
||||
|
||||
# Intel iHD GPU
|
||||
environment.sessionVariables.LIBVA_DRIVER_NAME = "iHD";
|
||||
|
||||
# Niri WM config
|
||||
niriwm = {
|
||||
enable = true;
|
||||
useNonFree = true;
|
||||
user = deskCfg.userName;
|
||||
systemPackages = with pkgs; [
|
||||
libreoffice
|
||||
rpi-imager
|
||||
];
|
||||
};
|
||||
|
||||
# Frame12-specific packages
|
||||
environment.systemPackages = with pkgs; [
|
||||
cryptsetup
|
||||
cage
|
||||
kanshi
|
||||
man-pages
|
||||
man-pages-posix
|
||||
pavucontrol
|
||||
swayosd
|
||||
wdisplays
|
||||
];
|
||||
|
||||
# Colemak-DH EC remap
|
||||
colemakEc.enable = true;
|
||||
|
||||
# Docker — rootless
|
||||
dockerConfig.rootless = true;
|
||||
|
||||
# Hyprvoice dictation
|
||||
services.hyprvoice = {
|
||||
enable = true;
|
||||
user = deskCfg.userName;
|
||||
};
|
||||
|
||||
# Bluetooth name
|
||||
hardware.bluetooth.settings.General.Name = "Nate-Frame";
|
||||
|
||||
# udev rules — betaflight configurator + i2c for ddcutil
|
||||
services.udev.extraRules = ''
|
||||
# For betaflight configurator
|
||||
# DFU (Internal bootloader for STM32 and AT32 MCUs)
|
||||
SUBSYSTEM=="usb", ATTRS{idVendor}=="2e3c", ATTRS{idProduct}=="df11", MODE="0664", GROUP="dialout"
|
||||
SUBSYSTEM=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="df11", MODE="0664", GROUP="dialout"
|
||||
# For ddcutil monitor controls
|
||||
KERNEL=="i2c-[0-9]*", GROUP="i2c", MODE="0660"
|
||||
'';
|
||||
|
||||
system.stateVersion = "25.05";
|
||||
}
|
||||
|
Before Width: | Height: | Size: 616 B After Width: | Height: | Size: 616 B |
|
Before Width: | Height: | Size: 960 B After Width: | Height: | Size: 960 B |
|
Before Width: | Height: | Size: 8.8 KiB After Width: | Height: | Size: 8.8 KiB |
|
Before Width: | Height: | Size: 946 B After Width: | Height: | Size: 946 B |
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.0 KiB |
|
Before Width: | Height: | Size: 6.1 KiB After Width: | Height: | Size: 6.1 KiB |
|
Before Width: | Height: | Size: 6.1 KiB After Width: | Height: | Size: 6.1 KiB |
|
Before Width: | Height: | Size: 6.1 KiB After Width: | Height: | Size: 6.1 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 6.1 KiB After Width: | Height: | Size: 6.1 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 7.5 KiB After Width: | Height: | Size: 7.5 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 6.1 KiB After Width: | Height: | Size: 6.1 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 6.1 KiB After Width: | Height: | Size: 6.1 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 7.9 KiB After Width: | Height: | Size: 7.9 KiB |
|
Before Width: | Height: | Size: 7.9 KiB After Width: | Height: | Size: 7.9 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 6.3 KiB After Width: | Height: | Size: 6.3 KiB |
|
Before Width: | Height: | Size: 7.9 KiB After Width: | Height: | Size: 7.9 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 7.8 KiB After Width: | Height: | Size: 7.8 KiB |
|
Before Width: | Height: | Size: 7.6 KiB After Width: | Height: | Size: 7.6 KiB |
|
Before Width: | Height: | Size: 7.5 KiB After Width: | Height: | Size: 7.5 KiB |
|
Before Width: | Height: | Size: 7.4 KiB After Width: | Height: | Size: 7.4 KiB |
|
Before Width: | Height: | Size: 7.3 KiB After Width: | Height: | Size: 7.3 KiB |
|
Before Width: | Height: | Size: 6.4 KiB After Width: | Height: | Size: 6.4 KiB |
|
Before Width: | Height: | Size: 7.5 KiB After Width: | Height: | Size: 7.5 KiB |
|
Before Width: | Height: | Size: 7.5 KiB After Width: | Height: | Size: 7.5 KiB |
|
Before Width: | Height: | Size: 7.5 KiB After Width: | Height: | Size: 7.5 KiB |
|
Before Width: | Height: | Size: 7.5 KiB After Width: | Height: | Size: 7.5 KiB |
|
Before Width: | Height: | Size: 7.5 KiB After Width: | Height: | Size: 7.5 KiB |
|
Before Width: | Height: | Size: 7.5 KiB After Width: | Height: | Size: 7.5 KiB |
|
Before Width: | Height: | Size: 7.5 KiB After Width: | Height: | Size: 7.5 KiB |
|
Before Width: | Height: | Size: 7.5 KiB After Width: | Height: | Size: 7.5 KiB |
|
Before Width: | Height: | Size: 7.5 KiB After Width: | Height: | Size: 7.5 KiB |
|
Before Width: | Height: | Size: 7.5 KiB After Width: | Height: | Size: 7.5 KiB |
|
Before Width: | Height: | Size: 6.5 KiB After Width: | Height: | Size: 6.5 KiB |
|
Before Width: | Height: | Size: 7.4 KiB After Width: | Height: | Size: 7.4 KiB |
|
Before Width: | Height: | Size: 7.4 KiB After Width: | Height: | Size: 7.4 KiB |
|
Before Width: | Height: | Size: 7.5 KiB After Width: | Height: | Size: 7.5 KiB |
|
Before Width: | Height: | Size: 7.4 KiB After Width: | Height: | Size: 7.4 KiB |
|
Before Width: | Height: | Size: 7.4 KiB After Width: | Height: | Size: 7.4 KiB |
|
Before Width: | Height: | Size: 7.4 KiB After Width: | Height: | Size: 7.4 KiB |
|
Before Width: | Height: | Size: 7.4 KiB After Width: | Height: | Size: 7.4 KiB |
|
Before Width: | Height: | Size: 7.4 KiB After Width: | Height: | Size: 7.4 KiB |
|
Before Width: | Height: | Size: 7.3 KiB After Width: | Height: | Size: 7.3 KiB |
|
Before Width: | Height: | Size: 7.3 KiB After Width: | Height: | Size: 7.3 KiB |
|
Before Width: | Height: | Size: 6.6 KiB After Width: | Height: | Size: 6.6 KiB |
|
Before Width: | Height: | Size: 7.3 KiB After Width: | Height: | Size: 7.3 KiB |