modules: Add mkHost
This commit is contained in:
11
modules/hardware/amdgpu.nix
Normal file
11
modules/hardware/amdgpu.nix
Normal file
@@ -0,0 +1,11 @@
|
||||
{
|
||||
pkgs, ...
|
||||
}:
|
||||
|
||||
{
|
||||
environment.systemPackages = with pkgs; [
|
||||
unstable.mesa
|
||||
unstable.firmwareLinuxNonfree
|
||||
];
|
||||
services.xserver.videoDrivers = [ "amdgpu" ];
|
||||
}
|
||||
@@ -1,5 +0,0 @@
|
||||
{ ... }:
|
||||
|
||||
{
|
||||
hardware.bluetooth.enable = true;
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
environment.systemPackages = with pkgs; [ piper ];
|
||||
|
||||
services.ratbagd.enable = true;
|
||||
}
|
||||
@@ -1,38 +0,0 @@
|
||||
{ lib, pkgs, ... }:
|
||||
|
||||
{
|
||||
environment.systemPackages = [ pkgs.rtkit ];
|
||||
# NOTE: This assumes that the devices are x86_64 (cough i686 UEFI cough)
|
||||
hardware = {
|
||||
enableRedistributableFirmware = true;
|
||||
# This is a Pipewire household!
|
||||
pulseaudio.enable = false;
|
||||
|
||||
opengl = {
|
||||
enable = true;
|
||||
driSupport32Bit = true;
|
||||
driSupport = true;
|
||||
extraPackages = with pkgs; [ vaapiVdpau libvdpau-va-gl ];
|
||||
};
|
||||
|
||||
# Only a subset of my devices have bluetooth
|
||||
#bluetooth.enable = lib.mkDefault false;
|
||||
};
|
||||
|
||||
services = {
|
||||
# Everyone needs sound
|
||||
pipewire = {
|
||||
enable = true;
|
||||
pulse.enable = true;
|
||||
alsa.enable = true;
|
||||
alsa.support32Bit = true;
|
||||
};
|
||||
|
||||
# On desktop: Monitor keyboards, mice, ...
|
||||
# On portable devices: Monitor their battery
|
||||
upower.enable = true;
|
||||
|
||||
# What generated entropy?
|
||||
haveged.enable = true;
|
||||
};
|
||||
}
|
||||
9
modules/hardware/intel.nix
Normal file
9
modules/hardware/intel.nix
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
pkgs, ...
|
||||
}:
|
||||
|
||||
{
|
||||
hardware.opengl.extraPackages = with pkgs; [ vaapiIntel intel-media-driver ];
|
||||
# TODO: Remove?
|
||||
services.xserver.videoDrivers = [ "modesetting" "fbdev" ];
|
||||
}
|
||||
@@ -1,5 +0,0 @@
|
||||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
environment.systemPackages = with pkgs; [ unstable.mesa ];
|
||||
}
|
||||
Binary file not shown.
168
modules/host.nix
Normal file
168
modules/host.nix
Normal file
@@ -0,0 +1,168 @@
|
||||
{ config, lib, pkgs, ... }:
|
||||
|
||||
{
|
||||
userName
|
||||
, hostName
|
||||
, wireless ? false
|
||||
, overlays ? []
|
||||
, hardwareImports ? [ "generic" ]
|
||||
, programImports ? []
|
||||
, extraImports ? []
|
||||
, fileSystems
|
||||
, swapDevices ? []
|
||||
, extraPackages ? pkgs: []
|
||||
, extraOptions ? old: {}
|
||||
}:
|
||||
|
||||
let
|
||||
overlaysSet = import ../overlays { pkgs = pkgs; lib = lib; };
|
||||
home-manager = builtins.fetchGit {
|
||||
url = "https://github.com/nix-community/home-manager.git";
|
||||
rev = "35a24648d155843a4d162de98c17b1afd5db51e4";
|
||||
ref = "release-21.05";
|
||||
};
|
||||
baseConfig = {
|
||||
# Install home-manager
|
||||
imports = [
|
||||
"${home-manager}/nixos"
|
||||
./users # For system.singleUser
|
||||
(./users + "/${userName}.nix")
|
||||
] ++ (map (item: ./programs + "/${item}") programImports)
|
||||
++ (map (item: ./hardware + "/${item}.nix") hardwareImports)
|
||||
++ (map (item: ./. + "/${item}") extraImports);
|
||||
home-manager.useGlobalPkgs = true;
|
||||
|
||||
nixpkgs.overlays = (map (item: lib.getAttr item overlaysSet) overlays);
|
||||
|
||||
time.timeZone = "Europe/Berlin";
|
||||
networking = {
|
||||
useDHCP = false; # Done by the network manager
|
||||
networkmanager.enable = false;
|
||||
|
||||
#interfaces.*.useDHCP = false;
|
||||
|
||||
hostName = hostName;
|
||||
wireless.enable = (if wireless then true else lib.mkForce false);
|
||||
};
|
||||
|
||||
i18n.defaultLocale = "en_GB.UTF-8";
|
||||
console = {
|
||||
font = "Lat2-Terminus16";
|
||||
keyMap = "de";
|
||||
};
|
||||
|
||||
users = {
|
||||
mutableUsers = false;
|
||||
|
||||
extraUsers = {
|
||||
root = {
|
||||
# Disable root login
|
||||
hashedPassword = "*";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
environment = {
|
||||
systemPackages = with pkgs; [
|
||||
htop
|
||||
vim
|
||||
git # Otherwise we cannot install home-manager
|
||||
git-crypt
|
||||
gnupg
|
||||
python3
|
||||
|
||||
# CJK fonts
|
||||
source-han-sans source-han-serif
|
||||
|
||||
# RT scheduling
|
||||
rtkit
|
||||
] ++ extraPackages pkgs;
|
||||
|
||||
sessionVariables = {
|
||||
# Prevent us from having to always type it out
|
||||
NIXOS_CONFIG = "/home/${config.system.singleUser}/Development/Personal/nixos-config/hosts/${config.networking.hostName}.nix";
|
||||
};
|
||||
};
|
||||
|
||||
# We don't tolerate non-free software, except for Steam and Linux firmware
|
||||
nixpkgs.config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [
|
||||
"firmwareLinuxNonfree"
|
||||
"steam" "steam-original" "steam-runtime"
|
||||
"discord"
|
||||
];
|
||||
|
||||
services = {
|
||||
connman = {
|
||||
enable = true;
|
||||
extraFlags = [ "--nodnsproxy" ];
|
||||
|
||||
wifi = lib.mkIf wireless {
|
||||
# TODO: Maybe try out iwd
|
||||
backend = "wpa_supplicant";
|
||||
};
|
||||
};
|
||||
|
||||
# TODO: Is this correct? Maybe run once
|
||||
timesyncd.enable = false;
|
||||
|
||||
# Everyone needs sound
|
||||
pipewire = {
|
||||
enable = true;
|
||||
pulse.enable = true;
|
||||
alsa.enable = true;
|
||||
alsa.support32Bit = true;
|
||||
};
|
||||
|
||||
# On desktop: Monitor keyboards, mice, ...
|
||||
# On portable devices: Monitor their battery
|
||||
upower.enable = true;
|
||||
|
||||
# What generated entropy?
|
||||
haveged.enable = true;
|
||||
|
||||
printing.enable = lib.mkDefault false;
|
||||
avahi.enable = false;
|
||||
|
||||
# For debugging.
|
||||
# TODO: Lock to known IPs and keys
|
||||
sshd.enable = true;
|
||||
};
|
||||
|
||||
# Don't wait for a network connection
|
||||
systemd.services.NetworkManager-wait-online.enable = false;
|
||||
|
||||
security.sudo.extraConfig = ''
|
||||
Defaults env_keep += "NIXOS_CONFIG"
|
||||
'';
|
||||
|
||||
hardware = {
|
||||
enableRedistributableFirmware = true;
|
||||
# This is a Pipewire household!
|
||||
pulseaudio.enable = false;
|
||||
|
||||
opengl = {
|
||||
enable = true;
|
||||
driSupport32Bit = true;
|
||||
driSupport = true;
|
||||
extraPackages = with pkgs; [ vaapiVdpau libvdpau-va-gl ];
|
||||
};
|
||||
|
||||
# Only a subset of my devices have bluetooth
|
||||
bluetooth = lib.mkIf wireless {
|
||||
enable = true;
|
||||
};
|
||||
};
|
||||
|
||||
boot = {
|
||||
loader = {
|
||||
systemd-boot.enable = true;
|
||||
efi.canTouchEfiVariables = true;
|
||||
};
|
||||
};
|
||||
|
||||
fileSystems = fileSystems;
|
||||
swapDevices = swapDevices;
|
||||
|
||||
system.stateVersion = "21.05";
|
||||
};
|
||||
in lib.attrsets.recursiveUpdate baseConfig (extraOptions baseConfig)
|
||||
@@ -1,7 +1,9 @@
|
||||
{ config, ... }:
|
||||
{ config, pkgs, ... }:
|
||||
|
||||
{
|
||||
config.home-manager.users."${config.system.singleUser}".home.file = {
|
||||
services.emacs.package = pkgs.emacsPgtkGcc;
|
||||
|
||||
home-manager.users."${config.system.singleUser}".home.file = {
|
||||
".emacs".source = ./dotemacs;
|
||||
".emacs.d/early-init.el".source = ./early-init.el;
|
||||
".emacs.d/mu4e.el".source = ./mu4e.el;
|
||||
|
||||
@@ -259,12 +259,29 @@
|
||||
(setq mode-line-format saved-mode-line-format)
|
||||
(redraw-display))))
|
||||
|
||||
;; Development
|
||||
(use-package tide
|
||||
:straight t
|
||||
:config
|
||||
(defun setup-tide-mode ()
|
||||
(interactive)
|
||||
(tide-setup)
|
||||
(tide-hl-identifier-mode +1))
|
||||
(add-hook 'typescript-mode-hook #'setup-tide-mode)
|
||||
(add-hook 'web-mode-hook
|
||||
(lambda ()
|
||||
(when (string-equal "tsx" (file-name-extension buffer-file-name))
|
||||
(setup-tide-mode))))
|
||||
(add-to-list 'auto-mode-alist '("\\.tsx\\'" . web-mode)))
|
||||
(use-package nix-mode
|
||||
:straight t)
|
||||
|
||||
(use-package json-mode
|
||||
:straight t)
|
||||
|
||||
(use-package rust-mode
|
||||
:straight t)
|
||||
|
||||
;; Debugging
|
||||
(use-package explain-pause-mode
|
||||
:straight
|
||||
|
||||
@@ -1,24 +1,28 @@
|
||||
{ pkgs, ... }:
|
||||
{ config, pkgs, ... }:
|
||||
|
||||
{
|
||||
environment.systemPackages = with pkgs; [
|
||||
mpdevil
|
||||
mopidy mopidy-mpd mopidy-funkwhale
|
||||
];
|
||||
let
|
||||
secrets = import ../../../secrets;
|
||||
funkwhale = secrets.funkwhale.applications."${config.networking.hostName}";
|
||||
in {
|
||||
config = {
|
||||
environment.systemPackages = with pkgs; [ cantata ];
|
||||
|
||||
# TODO
|
||||
services.mopidy = {
|
||||
enable = true;
|
||||
configuration = ''
|
||||
[funkwhale]
|
||||
enabled = true
|
||||
url = https://audio.polynom.me
|
||||
client_id =
|
||||
client_secret =
|
||||
cache_duration = 600
|
||||
services.mopidy = {
|
||||
#enable = true;
|
||||
configuration = ''
|
||||
[funkwhale]
|
||||
enabled = true
|
||||
url = https://audio.polynom.me
|
||||
client_id = ${funkwhale.client_id}
|
||||
client_secret = ${funkwhale.client_secret}
|
||||
cache_duration = 600
|
||||
|
||||
[mpd]
|
||||
enabled = true;
|
||||
'';
|
||||
extensionPackages = with pkgs; [
|
||||
mopidy-mpd mopidy-funkwhale
|
||||
];
|
||||
extensionPackages = with pkgs; [
|
||||
mopidy-mpd mopidy-funkwhale
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user