modularizes linux desktop
This commit is contained in:
parent
c01472797b
commit
b34a0b3234
13 changed files with 181 additions and 189 deletions
|
|
@ -40,6 +40,15 @@
|
||||||
nixosModules.macos = import ./modules/macos;
|
nixosModules.macos = import ./modules/macos;
|
||||||
nixosModules.homebrew = import ./modules/homebrew;
|
nixosModules.homebrew = import ./modules/homebrew;
|
||||||
nixosModules.aerospace = import ./modules/aerospace;
|
nixosModules.aerospace = import ./modules/aerospace;
|
||||||
|
nixosModules.keyd = import ./modules/keyd;
|
||||||
|
nixosModules.ly = import ./modules/wm/ly;
|
||||||
|
nixosModules.unix = import ./modules/unix;
|
||||||
|
nixosModules.nvidia = import ./modules/unix/nvidia.nix;
|
||||||
|
nixosModules.bluetooth = import ./modules/unix/bluetooth.nix;
|
||||||
|
nixosModules.audio = import ./modules/unix/audio.nix;
|
||||||
|
nixosModules.printing = import ./modules/unix/printing.nix;
|
||||||
|
nixosModules.steam = import ./modules/steam;
|
||||||
|
nixosModules.niriSystem = import ./modules/wm/niri-system;
|
||||||
|
|
||||||
nixosConfigurations.dnsc-machine = nixpkgs.lib.nixosSystem {
|
nixosConfigurations.dnsc-machine = nixpkgs.lib.nixosSystem {
|
||||||
system = "x86_64-linux";
|
system = "x86_64-linux";
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
# Edit this configuration file to define what should be installed on
|
# TODO: Modularize similar to dnsc-air configuration
|
||||||
# your system. Help is available in the configuration.nix(5) man page
|
# Create further subdirectories in modules if it gets
|
||||||
# and in the NixOS manual (accessible by running ‘nixos-help’).
|
# unwieldy
|
||||||
{
|
{
|
||||||
config,
|
config,
|
||||||
inputs,
|
inputs,
|
||||||
|
|
@ -14,65 +14,23 @@
|
||||||
# Include the results of the hardware scan.
|
# Include the results of the hardware scan.
|
||||||
./hardware-configuration.nix
|
./hardware-configuration.nix
|
||||||
inputs.home-manager.nixosModules.home-manager
|
inputs.home-manager.nixosModules.home-manager
|
||||||
../../modules/wm/ly
|
outputs.nixosModules.base
|
||||||
../../modules/keyd
|
outputs.nixosModules.unix
|
||||||
|
outputs.nixosModules.nvidia
|
||||||
|
outputs.nixosModules.bluetooth
|
||||||
|
outputs.nixosModules.printing
|
||||||
|
outputs.nixosModules.audio
|
||||||
|
outputs.nixosModules.ly
|
||||||
|
outputs.nixosModules.niriSystem
|
||||||
|
outputs.nixosModules.keyd
|
||||||
|
outputs.nixosModules.steam
|
||||||
];
|
];
|
||||||
|
|
||||||
# Bootloader.
|
|
||||||
boot.loader.systemd-boot.enable = true;
|
|
||||||
boot.loader.efi.canTouchEfiVariables = true;
|
|
||||||
|
|
||||||
# Networking
|
|
||||||
networking.hostName = "dnsc-machine"; # Define your hostname.
|
|
||||||
networking.networkmanager.enable = true;
|
|
||||||
|
|
||||||
# General settings
|
# General settings
|
||||||
|
networking.hostName = "dnsc-machine";
|
||||||
time.timeZone = "Europe/Berlin";
|
time.timeZone = "Europe/Berlin";
|
||||||
i18n.defaultLocale = "en_US.UTF-8";
|
services.xserver.xkb.layout = "eu";
|
||||||
i18n.extraLocaleSettings = {
|
|
||||||
LC_ADDRESS = "de_DE.UTF-8";
|
|
||||||
LC_IDENTIFICATION = "de_DE.UTF-8";
|
|
||||||
LC_MEASUREMENT = "de_DE.UTF-8";
|
|
||||||
LC_MONETARY = "de_DE.UTF-8";
|
|
||||||
LC_NAME = "de_DE.UTF-8";
|
|
||||||
LC_NUMERIC = "de_DE.UTF-8";
|
|
||||||
LC_PAPER = "de_DE.UTF-8";
|
|
||||||
LC_TELEPHONE = "de_DE.UTF-8";
|
|
||||||
LC_TIME = "de_DE.UTF-8";
|
|
||||||
};
|
|
||||||
security.sudo.enable = true;
|
|
||||||
|
|
||||||
services.xserver = {
|
|
||||||
xkb = {
|
|
||||||
layout = "eu";
|
|
||||||
};
|
|
||||||
|
|
||||||
videoDrivers = [ "nvidia" ];
|
|
||||||
};
|
|
||||||
|
|
||||||
# Hardware Setup
|
|
||||||
hardware = {
|
|
||||||
bluetooth = {
|
|
||||||
enable = true;
|
|
||||||
settings = {
|
|
||||||
General = {
|
|
||||||
Enable = "Source,Sink,Media,Socket";
|
|
||||||
Experimental = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
graphics.enable = true;
|
|
||||||
nvidia = {
|
|
||||||
modesetting.enable = true;
|
|
||||||
powerManagement.enable = false;
|
|
||||||
powerManagement.finegrained = false;
|
|
||||||
open = true;
|
|
||||||
nvidiaSettings = true;
|
|
||||||
package = config.boot.kernelPackages.nvidiaPackages.stable;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
# Define a user account. Don't forget to set a password with ‘passwd’.
|
|
||||||
users.users.dennis = {
|
users.users.dennis = {
|
||||||
isNormalUser = true;
|
isNormalUser = true;
|
||||||
description = "dennis";
|
description = "dennis";
|
||||||
|
|
@ -80,46 +38,12 @@
|
||||||
"networkmanager"
|
"networkmanager"
|
||||||
"wheel"
|
"wheel"
|
||||||
];
|
];
|
||||||
packages = with pkgs; [ ];
|
|
||||||
openssh.authorizedKeys.keys = [
|
openssh.authorizedKeys.keys = [
|
||||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILvXWZOPOJJDAoF+Sx/ZLoAVu6G/7/MAWoknBgMAzjul dennis@dnsc-mac"
|
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILvXWZOPOJJDAoF+Sx/ZLoAVu6G/7/MAWoknBgMAzjul dennis@dnsc-mac"
|
||||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKnmuxDkpDIku5t1Tykz21u78xoQ7LJR8JEcfth32LGu dennis@dnsc-work"
|
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKnmuxDkpDIku5t1Tykz21u78xoQ7LJR8JEcfth32LGu dennis@dnsc-work"
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
# Shell
|
|
||||||
programs.fish.enable = true;
|
|
||||||
users.defaultUserShell = pkgs.fish;
|
|
||||||
|
|
||||||
# Window Manager Setup
|
|
||||||
programs.niri.enable = true;
|
|
||||||
security.polkit.enable = true;
|
|
||||||
services.gnome.gnome-keyring.enable = true;
|
|
||||||
security.pam.services.hyprlock = { };
|
|
||||||
|
|
||||||
# Steam
|
|
||||||
programs.steam = {
|
|
||||||
enable = true;
|
|
||||||
remotePlay.openFirewall = true; # Open ports in the firewall for Steam Remote Play
|
|
||||||
dedicatedServer.openFirewall = true; # Open ports in the firewall for Source Dedicated Server
|
|
||||||
localNetworkGameTransfers.openFirewall = true; # Open ports in the firewall for Steam Local Network Game Transfers
|
|
||||||
};
|
|
||||||
|
|
||||||
# Nix settings
|
|
||||||
nix.gc = {
|
|
||||||
automatic = true;
|
|
||||||
dates = "weekly";
|
|
||||||
options = "--delete-older-than 1w";
|
|
||||||
};
|
|
||||||
nix.settings = {
|
|
||||||
auto-optimise-store = true;
|
|
||||||
experimental-features = [
|
|
||||||
"nix-command"
|
|
||||||
"flakes"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
nixpkgs.config.allowUnfree = true;
|
|
||||||
|
|
||||||
# Home Manager
|
# Home Manager
|
||||||
home-manager = {
|
home-manager = {
|
||||||
extraSpecialArgs = { inherit inputs outputs; };
|
extraSpecialArgs = { inherit inputs outputs; };
|
||||||
|
|
@ -135,107 +59,12 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
# System Packages
|
# System Packages
|
||||||
environment.systemPackages = with pkgs; [
|
environment.systemPackages = lib.mkAfter (with pkgs; []);
|
||||||
gcc
|
|
||||||
wget
|
|
||||||
git
|
|
||||||
neovim
|
|
||||||
btop
|
|
||||||
ghostty
|
|
||||||
fish
|
|
||||||
pwvucontrol
|
|
||||||
];
|
|
||||||
|
|
||||||
# Some programs need SUID wrappers, can be configured further or are
|
# Enable some services that do not need configuration
|
||||||
# started in user sessions.
|
|
||||||
programs.mtr.enable = true;
|
|
||||||
programs.gnupg.agent = {
|
|
||||||
enable = true;
|
|
||||||
enableSSHSupport = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
xdg.portal = {
|
|
||||||
enable = true;
|
|
||||||
extraPortals = [
|
|
||||||
pkgs.xdg-desktop-portal-gtk
|
|
||||||
pkgs.xdg-desktop-portal-gnome
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
# Services
|
|
||||||
|
|
||||||
# Pipewire
|
|
||||||
security.rtkit.enable = true;
|
|
||||||
services.pipewire = {
|
|
||||||
enable = true;
|
|
||||||
alsa.enable = true;
|
|
||||||
alsa.support32Bit = true;
|
|
||||||
pulse.enable = true;
|
|
||||||
raopOpenFirewall = true;
|
|
||||||
wireplumber.extraConfig."10-bluez" = {
|
|
||||||
"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 = {
|
|
||||||
"10-airplay" = {
|
|
||||||
"context.modules" = [
|
|
||||||
{
|
|
||||||
name = "libpipewire-module-raop-discover";
|
|
||||||
# increase the buffer size if you get dropouts/glitches
|
|
||||||
# args = {
|
|
||||||
# "raop.latency.ms" = 500;
|
|
||||||
# };
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
# Bluetooth
|
|
||||||
services.blueman.enable = true;
|
|
||||||
|
|
||||||
# SSH
|
|
||||||
services.openssh.enable = true;
|
services.openssh.enable = true;
|
||||||
|
|
||||||
# Tailscale
|
|
||||||
services.tailscale.enable = true;
|
services.tailscale.enable = true;
|
||||||
|
|
||||||
# Printing
|
|
||||||
services.printing.enable = true;
|
|
||||||
services.avahi = {
|
|
||||||
enable = true;
|
|
||||||
nssmdns4 = true;
|
|
||||||
openFirewall = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
# External Storage Devices
|
|
||||||
services.udisks2.enable = true;
|
services.udisks2.enable = true;
|
||||||
|
|
||||||
# GVFS (e.g. for trash)
|
system.stateVersion = "25.05";
|
||||||
services.gvfs.enable = true;
|
|
||||||
|
|
||||||
# Environment & session variables
|
|
||||||
environment.variables = {
|
|
||||||
EDITOR = "nvim";
|
|
||||||
SYSTEMD_EDITOR = "nvim";
|
|
||||||
VISUAL = "nvim";
|
|
||||||
};
|
|
||||||
environment.sessionVariables.NIXOS_OZONE_WL = "1";
|
|
||||||
|
|
||||||
# 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. It‘s 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 = "25.05"; # Did you read the comment?
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -32,6 +32,8 @@
|
||||||
};
|
};
|
||||||
|
|
||||||
environment.systemPackages = with pkgs; [
|
environment.systemPackages = with pkgs; [
|
||||||
|
gcc
|
||||||
|
wget
|
||||||
git
|
git
|
||||||
btop
|
btop
|
||||||
fish
|
fish
|
||||||
|
|
|
||||||
8
modules/steam/default.nix
Normal file
8
modules/steam/default.nix
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
programs.steam = {
|
||||||
|
enable = true;
|
||||||
|
remotePlay.openFirewall = true; # Open ports in the firewall for Steam Remote Play
|
||||||
|
dedicatedServer.openFirewall = true; # Open ports in the firewall for Source Dedicated Server
|
||||||
|
localNetworkGameTransfers.openFirewall = true; # Open ports in the firewall for Steam Local Network Game Transfers
|
||||||
|
};
|
||||||
|
}
|
||||||
41
modules/unix/audio.nix
Normal file
41
modules/unix/audio.nix
Normal file
|
|
@ -0,0 +1,41 @@
|
||||||
|
{ config, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
environment.systemPackages = lib.mkAfter (with pkgs; [
|
||||||
|
pwvucontrol
|
||||||
|
]);
|
||||||
|
security.rtkit.enable = true;
|
||||||
|
services.pipewire = {
|
||||||
|
enable = true;
|
||||||
|
alsa.enable = true;
|
||||||
|
alsa.support32Bit = true;
|
||||||
|
pulse.enable = true;
|
||||||
|
raopOpenFirewall = true;
|
||||||
|
wireplumber.extraConfig."10-bluez" = {
|
||||||
|
"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 = {
|
||||||
|
"10-airplay" = {
|
||||||
|
"context.modules" = [
|
||||||
|
{
|
||||||
|
name = "libpipewire-module-raop-discover";
|
||||||
|
# increase the buffer size if you get dropouts/glitches
|
||||||
|
# args = {
|
||||||
|
# "raop.latency.ms" = 500;
|
||||||
|
# };
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
28
modules/unix/base.nix
Normal file
28
modules/unix/base.nix
Normal file
|
|
@ -0,0 +1,28 @@
|
||||||
|
{
|
||||||
|
boot.loader.systemd-boot.enable = true;
|
||||||
|
boot.loader.efi.canTouchEfiVariables = true;
|
||||||
|
networking.networkmanager.enable = true;
|
||||||
|
i18n.defaultLocale = "en_US.UTF-8";
|
||||||
|
i18n.extraLocaleSettings = {
|
||||||
|
LC_ADDRESS = "de_DE.UTF-8";
|
||||||
|
LC_IDENTIFICATION = "de_DE.UTF-8";
|
||||||
|
LC_MEASUREMENT = "de_DE.UTF-8";
|
||||||
|
LC_MONETARY = "de_DE.UTF-8";
|
||||||
|
LC_NAME = "de_DE.UTF-8";
|
||||||
|
LC_NUMERIC = "de_DE.UTF-8";
|
||||||
|
LC_PAPER = "de_DE.UTF-8";
|
||||||
|
LC_TELEPHONE = "de_DE.UTF-8";
|
||||||
|
LC_TIME = "de_DE.UTF-8";
|
||||||
|
};
|
||||||
|
security.sudo.enable = true;
|
||||||
|
programs.gnupg.agent = {
|
||||||
|
enable = true;
|
||||||
|
enableSSHSupport = true;
|
||||||
|
};
|
||||||
|
programs.mtr.enable = true;
|
||||||
|
environment.variables = {
|
||||||
|
EDITOR = "nvim";
|
||||||
|
SYSTEMD_EDITOR = "nvim";
|
||||||
|
VISUAL = "nvim";
|
||||||
|
};
|
||||||
|
}
|
||||||
14
modules/unix/bluetooth.nix
Normal file
14
modules/unix/bluetooth.nix
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
{ config, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
services.blueman.enable = true;
|
||||||
|
hardware.bluetooth = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
General = {
|
||||||
|
Enable = "Source,Sink,Media,Socket";
|
||||||
|
Experimental = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
6
modules/unix/default.nix
Normal file
6
modules/unix/default.nix
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
./base.nix
|
||||||
|
./shell.nix
|
||||||
|
];
|
||||||
|
}
|
||||||
15
modules/unix/nvidia.nix
Normal file
15
modules/unix/nvidia.nix
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
{ config, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
services.xserver.videoDrivers = [ "nvidia" ];
|
||||||
|
graphics.enable = true;
|
||||||
|
nvidia = {
|
||||||
|
modesetting.enable = true;
|
||||||
|
powerManagement.enable = false;
|
||||||
|
powerManagement.finegrained = false;
|
||||||
|
open = true;
|
||||||
|
nvidiaSettings = true;
|
||||||
|
package = config.boot.kernelPackages.nvidiaPackages.stable;
|
||||||
|
};
|
||||||
|
environment.sessionVariables.NIXOS_OZONE_WL = "1";
|
||||||
|
}
|
||||||
10
modules/unix/printing.nix
Normal file
10
modules/unix/printing.nix
Normal file
|
|
@ -0,0 +1,10 @@
|
||||||
|
{ ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
services.printing.enable = true;
|
||||||
|
services.avahi = {
|
||||||
|
enable = true;
|
||||||
|
nssmdns4 = true;
|
||||||
|
openFirewall = true;
|
||||||
|
};
|
||||||
|
}
|
||||||
6
modules/unix/shell.nix
Normal file
6
modules/unix/shell.nix
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
{ pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
programs.fish.enable = true;
|
||||||
|
users.defaultUserShell = pkgs.fish;
|
||||||
|
}
|
||||||
10
modules/wm/default.nix
Normal file
10
modules/wm/default.nix
Normal file
|
|
@ -0,0 +1,10 @@
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
./awww
|
||||||
|
./cliphist
|
||||||
|
./fuzzel
|
||||||
|
./ironbar
|
||||||
|
./niri
|
||||||
|
./swaync
|
||||||
|
];
|
||||||
|
}
|
||||||
14
modules/wm/niri-system/default.nix
Normal file
14
modules/wm/niri-system/default.nix
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
{
|
||||||
|
programs.niri.enable = true;
|
||||||
|
security.polkit.enable = true;
|
||||||
|
services.gnome.gnome-keyring.enable = true;
|
||||||
|
security.pam.services.hyprlock = { };
|
||||||
|
xdg.portal = {
|
||||||
|
enable = true;
|
||||||
|
extraPortals = [
|
||||||
|
pkgs.xdg-desktop-portal-gtk
|
||||||
|
pkgs.xdg-desktop-portal-gnome
|
||||||
|
];
|
||||||
|
};
|
||||||
|
services.gvfs.enable = true;
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue