refact(config) : separate in modules
This commit is contained in:
parent
fa08ab4c82
commit
f2a88c1b06
11 changed files with 382 additions and 230 deletions
11
configuration.nix
Normal file
11
configuration.nix
Normal file
|
@ -0,0 +1,11 @@
|
|||
|
||||
# Generic NixOS config entry point
|
||||
# point to the hardware and configuration files specific to your machine
|
||||
{
|
||||
imports =
|
||||
[
|
||||
./machines/MacBookPro12.1-hardware-configuration.nix
|
||||
./machines/MacBookPro12.1-configuration.nix
|
||||
];
|
||||
}
|
||||
|
|
@ -1,230 +0,0 @@
|
|||
# Edit this configuration file to define what should be installed on
|
||||
# your system. Help is available in the configuration.nix(5) man page
|
||||
# and in the NixOS manual (accessible by running ‘nixos-help’).
|
||||
|
||||
{ config, pkgs, ... }:
|
||||
let
|
||||
unstableTarball =
|
||||
fetchTarball
|
||||
https://github.com/NixOS/nixpkgs/archive/nixos-unstable.tar.gz;
|
||||
in
|
||||
{
|
||||
imports =
|
||||
[ # Include the results of the hardware scan.
|
||||
./hardware-configuration.nix
|
||||
];
|
||||
hardware.bluetooth.enable = true;
|
||||
|
||||
# Additional configuration from github/jeremiehuchet/nixos-macbookpro
|
||||
boot.kernelParams = [
|
||||
"hid_apple.fnmode=1"
|
||||
"hid_apple.swap_fn_leftctrl=1"
|
||||
];
|
||||
|
||||
# Bootloader.
|
||||
boot.loader.systemd-boot.enable = true;
|
||||
boot.loader.systemd-boot.consoleMode = "0";
|
||||
boot.loader.efi.canTouchEfiVariables = true;
|
||||
boot.loader.efi.efiSysMountPoint = "/boot/efi";
|
||||
|
||||
networking.hostName = "mrflos-mbp-nixos"; # Define your hostname.
|
||||
networking.extraHosts = ''
|
||||
127.0.0.1 yeswiki.test
|
||||
'';
|
||||
# networking.wireless.enable = true; # Enables wireless support via wpa_supplicant.
|
||||
|
||||
# Configure network proxy if necessary
|
||||
# networking.proxy.default = "http://user:password@proxy:port/";
|
||||
# networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain";
|
||||
|
||||
# Enable networking
|
||||
networking.networkmanager.enable = true;
|
||||
|
||||
# Set your time zone.
|
||||
time.timeZone = "Europe/Moscow";
|
||||
|
||||
# Select internationalisation properties.
|
||||
i18n.defaultLocale = "fr_FR.UTF-8";
|
||||
|
||||
i18n.extraLocaleSettings = {
|
||||
LC_ADDRESS = "fr_FR.UTF-8";
|
||||
LC_ALL = "fr_FR.UTF-8";
|
||||
LC_IDENTIFICATION = "fr_FR.UTF-8";
|
||||
LC_MEASUREMENT = "fr_FR.UTF-8";
|
||||
LC_MESSAGES = "fr_FR.UTF-8";
|
||||
LC_MONETARY = "fr_FR.UTF-8";
|
||||
LC_NAME = "fr_FR.UTF-8";
|
||||
LC_NUMERIC = "fr_FR.UTF-8";
|
||||
LC_PAPER = "fr_FR.UTF-8";
|
||||
LC_TELEPHONE = "fr_FR.UTF-8";
|
||||
LC_TIME = "fr_FR.UTF-8";
|
||||
};
|
||||
|
||||
# Enable the X11 windowing system.
|
||||
services.xserver.enable = true;
|
||||
|
||||
# Enable the KDE Plasma Desktop Environment.
|
||||
services.xserver.displayManager.sddm.enable = true;
|
||||
services.xserver.desktopManager.plasma5.enable = true;
|
||||
services.xserver.desktopManager.plasma5.excludePackages = with pkgs.libsForQt5; [
|
||||
elisa
|
||||
gwenview
|
||||
oxygen
|
||||
khelpcenter
|
||||
plasma-browser-integration
|
||||
];
|
||||
|
||||
|
||||
# Configure keymap in X11
|
||||
services.xserver = {
|
||||
layout = "us";
|
||||
xkbVariant = "mac";
|
||||
};
|
||||
|
||||
# Enable CUPS to print documents.
|
||||
services.printing.enable = true;
|
||||
|
||||
# Enable sound with pipewire.
|
||||
sound.enable = true;
|
||||
hardware.pulseaudio.enable = false;
|
||||
security.rtkit.enable = true;
|
||||
services.pipewire = {
|
||||
enable = true;
|
||||
alsa.enable = true;
|
||||
alsa.support32Bit = true;
|
||||
pulse.enable = true;
|
||||
# If you want to use JACK applications, uncomment this
|
||||
#jack.enable = true;
|
||||
|
||||
# use the example session manager (no others are packaged yet so this is enabled by default,
|
||||
# no need to redefine it in your config for now)
|
||||
#media-session.enable = true;
|
||||
};
|
||||
|
||||
# Enable touchpad support (enabled default in most desktopManager).
|
||||
# services.xserver.libinput.enable = true;
|
||||
|
||||
# Define a user account. Don't forget to set a password with ‘passwd’.
|
||||
users.users.mrflos = {
|
||||
isNormalUser = true;
|
||||
description = "mrflos";
|
||||
extraGroups = [ "docker" "lxd" "libvirtd" "networkmanager" "wheel" ];
|
||||
shell = pkgs.zsh;
|
||||
};
|
||||
|
||||
programs.zsh = {
|
||||
enable = true;
|
||||
autosuggestions.enable = true;
|
||||
shellAliases = {
|
||||
edit = "sudo micro /etc/nixos/configuration.nix";
|
||||
update = "sudo nixos-rebuild switch";
|
||||
};
|
||||
ohMyZsh = {
|
||||
enable = true;
|
||||
plugins = [ "git" ];
|
||||
theme = "robbyrussell";
|
||||
};
|
||||
};
|
||||
|
||||
programs.dconf.enable = true;
|
||||
programs.firefox.enable = true;
|
||||
programs.starship.enable = true;
|
||||
|
||||
virtualisation.docker.enable = true;
|
||||
virtualisation.docker.rootless = {
|
||||
enable = true;
|
||||
setSocketVariable = true;
|
||||
};
|
||||
virtualisation.libvirtd.enable = true;
|
||||
virtualisation.lxd.enable = true;
|
||||
|
||||
# Allow unfree packages
|
||||
nixpkgs.config.allowUnfree = true;
|
||||
nixpkgs.config = {
|
||||
packageOverrides = pkgs: with pkgs; {
|
||||
unstable = import unstableTarball {
|
||||
config = config.nixpkgs.config;
|
||||
};
|
||||
};
|
||||
};
|
||||
# List packages installed in system profile. To search, run:
|
||||
# $ nix search wget
|
||||
environment.systemPackages = with pkgs; [
|
||||
(import (fetchTarball https://github.com/cachix/devenv/archive/v0.6.2.tar.gz)).default
|
||||
bitwarden
|
||||
bitwarden-cli
|
||||
curl
|
||||
direnv
|
||||
element-desktop
|
||||
filezilla
|
||||
inkscape-with-extensions
|
||||
inter
|
||||
jq
|
||||
gimp-with-plugins
|
||||
git
|
||||
glances
|
||||
htop
|
||||
libsForQt5.ark
|
||||
mattermost-desktop
|
||||
mc
|
||||
micro
|
||||
neofetch
|
||||
nextcloud-client
|
||||
nodejs
|
||||
php82
|
||||
php82Packages.composer
|
||||
signal-desktop
|
||||
starship
|
||||
tdesktop
|
||||
tmux
|
||||
thunderbird
|
||||
vim
|
||||
virt-manager
|
||||
vlc
|
||||
vscodium
|
||||
wget
|
||||
zola
|
||||
zsh-autosuggestions
|
||||
unstable.obsidian
|
||||
];
|
||||
|
||||
fonts.fonts = with pkgs; [
|
||||
inter
|
||||
(nerdfonts.override { fonts = [ "FiraCode" "FiraMono" ]; })
|
||||
];
|
||||
# Some programs need SUID wrappers, can be configured further or are
|
||||
# started in user sessions.
|
||||
# programs.mtr.enable = true;
|
||||
# programs.gnupg.agent = {
|
||||
# enable = true;
|
||||
# enableSSHSupport = true;
|
||||
# };
|
||||
|
||||
# List services that you want to enable:
|
||||
|
||||
# Enable the OpenSSH daemon.
|
||||
# services.openssh.enable = true;
|
||||
# services.nginx.enable = true;
|
||||
# services.mysql.enable = true;
|
||||
# services.mysql.package = pkgs.mariadb;
|
||||
programs.ssh.startAgent = true;
|
||||
|
||||
networking.firewall = {
|
||||
enable = true;
|
||||
allowedTCPPorts = [ 80 443 ];
|
||||
};
|
||||
# Open ports in the firewall.
|
||||
# networking.firewall.allowedTCPPorts = [ ... ];
|
||||
# networking.firewall.allowedUDPPorts = [ ... ];
|
||||
# Or disable the firewall altogether.
|
||||
# networking.firewall.enable = false;
|
||||
|
||||
# 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 = "22.11"; # Did you read the comment?
|
||||
|
||||
}
|
91
machines/MacBookPro12.1-configuration.nix
Normal file
91
machines/MacBookPro12.1-configuration.nix
Normal file
|
@ -0,0 +1,91 @@
|
|||
|
||||
# Edit this configuration file to define what should be installed on
|
||||
# your system. Help is available in the configuration.nix(5) man page
|
||||
# and in the NixOS manual (accessible by running ’nixos-help’).
|
||||
|
||||
{ config, pkgs, ... }:
|
||||
|
||||
{
|
||||
hardware.bluetooth.enable = true;
|
||||
|
||||
# Additional configuration from github/jeremiehuchet/nixos-macbookpro
|
||||
boot.kernelParams = [
|
||||
"hid_apple.fnmode=1"
|
||||
"hid_apple.swap_fn_leftctrl=1"
|
||||
];
|
||||
|
||||
# Bootloader.
|
||||
boot.loader.systemd-boot.enable = true;
|
||||
boot.loader.systemd-boot.consoleMode = "0";
|
||||
boot.loader.efi.canTouchEfiVariables = true;
|
||||
boot.loader.efi.efiSysMountPoint = "/boot/efi";
|
||||
|
||||
networking.hostName = "mrflos-mbp-nixos"; # Define your hostname.
|
||||
networking.extraHosts = ''
|
||||
127.0.0.1 yeswiki.test
|
||||
'';
|
||||
# networking.wireless.enable = true; # Enables wireless support via wpa_supplicant.
|
||||
|
||||
# Configure network proxy if necessary
|
||||
# networking.proxy.default = "http://user:password@proxy:port/";
|
||||
# networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain";
|
||||
|
||||
# Enable networking
|
||||
networking.networkmanager.enable = true;
|
||||
networking.firewall = {
|
||||
enable = true;
|
||||
allowedTCPPorts = [ 80 443 ];
|
||||
};
|
||||
|
||||
# Set your time zone.
|
||||
time.timeZone = "Europe/Moscow";
|
||||
|
||||
# Select internationalisation properties.
|
||||
i18n.defaultLocale = "fr_FR.UTF-8";
|
||||
|
||||
i18n.extraLocaleSettings = {
|
||||
LC_ADDRESS = "fr_FR.UTF-8";
|
||||
LC_ALL = "fr_FR.UTF-8";
|
||||
LC_IDENTIFICATION = "fr_FR.UTF-8";
|
||||
LC_MEASUREMENT = "fr_FR.UTF-8";
|
||||
LC_MESSAGES = "fr_FR.UTF-8";
|
||||
LC_MONETARY = "fr_FR.UTF-8";
|
||||
LC_NAME = "fr_FR.UTF-8";
|
||||
LC_NUMERIC = "fr_FR.UTF-8";
|
||||
LC_PAPER = "fr_FR.UTF-8";
|
||||
LC_TELEPHONE = "fr_FR.UTF-8";
|
||||
LC_TIME = "fr_FR.UTF-8";
|
||||
};
|
||||
|
||||
# Configure keymap in X11
|
||||
services.xserver = {
|
||||
layout = "us";
|
||||
xkbVariant = "mac";
|
||||
};
|
||||
|
||||
imports = [
|
||||
../modules/console.nix
|
||||
../modules/desktop.nix
|
||||
../modules/fonts.nix
|
||||
../modules/laptop.nix
|
||||
../modules/local-dev.nix
|
||||
];
|
||||
|
||||
# Define a user account. Don't forget to set a password with ’passwd’.
|
||||
users.users.mrflos = {
|
||||
isNormalUser = true;
|
||||
description = "mrflos";
|
||||
extraGroups = [ "docker" "lxd" "libvirtd" "networkmanager" "wheel" ];
|
||||
shell = pkgs.zsh;
|
||||
};
|
||||
|
||||
# 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 = "22.11"; # Did you read the comment?
|
||||
|
||||
}
|
||||
|
61
modules/console.nix
Normal file
61
modules/console.nix
Normal file
|
@ -0,0 +1,61 @@
|
|||
# cli programs should be available on servers and desktop
|
||||
{ lib, pkgs, ... }:
|
||||
|
||||
{
|
||||
programs = {
|
||||
mosh.enable = true;
|
||||
neovim = {
|
||||
enable = true;
|
||||
viAlias = true;
|
||||
vimAlias = true;
|
||||
};
|
||||
ssh.startAgent = true;
|
||||
starship.enable = true;
|
||||
zsh = {
|
||||
enable = true;
|
||||
autosuggestions.enable = true;
|
||||
shellAliases = {
|
||||
nixedit = "sudo micro /etc/nixos/configuration.nix";
|
||||
nixupdate = "sudo nixos-rebuild switch";
|
||||
nixclean = "sudo nix-env --delete-generations old --profile /nix/var/nix/profiles/system && sudo /nix/var/nix/profiles/system/bin/switch-to-configuration switch && sudo nix-store --gc";
|
||||
};
|
||||
ohMyZsh = {
|
||||
enable = true;
|
||||
plugins = [ "git" ];
|
||||
theme = "robbyrussell";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
# List packages installed in system profile. To search, run:
|
||||
# $ nix search wget
|
||||
environment.systemPackages = with pkgs; [
|
||||
bat
|
||||
bitwarden-cli
|
||||
coreutils
|
||||
curl
|
||||
dnsutils
|
||||
emacs-nox
|
||||
findutils
|
||||
gnugrep
|
||||
gnupg
|
||||
imagemagick
|
||||
jq
|
||||
git
|
||||
glances
|
||||
htop
|
||||
mc
|
||||
micro
|
||||
mosh
|
||||
neofetch
|
||||
pandoc
|
||||
starship
|
||||
tmux
|
||||
tree
|
||||
unzip
|
||||
whois
|
||||
wget
|
||||
zola
|
||||
zsh-autosuggestions
|
||||
];
|
||||
}
|
30
modules/desktop-chromium.nix
Normal file
30
modules/desktop-chromium.nix
Normal file
|
@ -0,0 +1,30 @@
|
|||
# Configure the Chromium browser with various useful things.
|
||||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
environment.systemPackages = [
|
||||
(pkgs.chromium.override {
|
||||
enableWideVine = true; # DRM support (for Кинопоиск)
|
||||
})
|
||||
];
|
||||
|
||||
programs.chromium = {
|
||||
enable = true;
|
||||
homepageLocation = "about:blank";
|
||||
|
||||
extensions = [
|
||||
"pejkokffkapolfffcgbmdmhdelanoaih" # Unsplash instant
|
||||
"cjpalhdlnbpafiamejdnhcphjbkeiagm" # uBlock Origin
|
||||
"gfapcejdoghpoidkfodoiiffaaibpaem" # Dracula theme
|
||||
];
|
||||
|
||||
extraOpts = {
|
||||
SpellcheckEnabled = true;
|
||||
SpellcheckLanguage = [
|
||||
"fr-FR"
|
||||
"en-GB"
|
||||
"ru"
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
108
modules/desktop.nix
Normal file
108
modules/desktop.nix
Normal file
|
@ -0,0 +1,108 @@
|
|||
# Window Manager and desktop programs
|
||||
{ config, lib, pkgs, ... }:
|
||||
let
|
||||
unstableTarball =
|
||||
fetchTarball
|
||||
https://github.com/NixOS/nixpkgs/archive/nixos-unstable.tar.gz;
|
||||
in
|
||||
{
|
||||
sound.enable = true;
|
||||
hardware.pulseaudio.enable = false;
|
||||
security.rtkit.enable = true;
|
||||
|
||||
services = {
|
||||
blueman.enable = true;
|
||||
pipewire = {
|
||||
enable = true;
|
||||
alsa.enable = true;
|
||||
alsa.support32Bit = true;
|
||||
pulse.enable = true;
|
||||
# If you want to use JACK applications, uncomment this
|
||||
#jack.enable = true;
|
||||
|
||||
# use the example session manager (no others are packaged yet so this is enabled by default,
|
||||
# no need to redefine it in your config for now)
|
||||
#media-session.enable = true;
|
||||
};
|
||||
printing.enable = true; # Enable CUPS to print documents.
|
||||
redshift.enable = true;
|
||||
xserver = {
|
||||
enable = true;
|
||||
layout = "us";
|
||||
displayManager.sddm.enable = true;
|
||||
desktopManager.plasma5.enable = true;
|
||||
desktopManager.plasma5.excludePackages = with pkgs.libsForQt5; [
|
||||
elisa
|
||||
gwenview
|
||||
oxygen
|
||||
khelpcenter
|
||||
plasma-browser-integration
|
||||
];
|
||||
# libinput.enable = true; # Enable touchpad support (enabled default in most desktopManager).
|
||||
};
|
||||
};
|
||||
|
||||
programs = {
|
||||
dconf.enable = true;
|
||||
firefox.enable = true;
|
||||
};
|
||||
|
||||
imports = [
|
||||
./desktop-chromium.nix
|
||||
];
|
||||
|
||||
# Allow unfree packages
|
||||
nixpkgs.config.allowUnfree = true;
|
||||
nixpkgs.config = {
|
||||
packageOverrides = pkgs: with pkgs; {
|
||||
unstable = import unstableTarball {
|
||||
config = config.nixpkgs.config;
|
||||
};
|
||||
};
|
||||
};
|
||||
# List packages installed in system profile. To search, run:
|
||||
# $ nix search wget
|
||||
environment.systemPackages = with pkgs; [
|
||||
(vscode-with-extensions.override {
|
||||
vscode = vscodium;
|
||||
vscodeExtensions = with vscode-extensions; [
|
||||
mkhl.direnv
|
||||
jnoortheen.nix-ide
|
||||
dracula-theme.theme-dracula
|
||||
ms-vscode-remote.remote-ssh
|
||||
] ++ pkgs.vscode-utils.extensionsFromVscodeMarketplace [
|
||||
{
|
||||
name = "remote-ssh-edit";
|
||||
publisher = "ms-vscode-remote";
|
||||
version = "0.47.2";
|
||||
sha256 = "1hp6gjh4xp2m1xlm1jsdzxw9d8frkiidhph6nvl24d0h8z34w49g";
|
||||
}
|
||||
];
|
||||
})
|
||||
bitwarden
|
||||
chromium
|
||||
element-desktop
|
||||
filezilla
|
||||
inkscape-with-extensions
|
||||
inter
|
||||
gimp-with-plugins
|
||||
libsForQt5.ark
|
||||
mattermost-desktop
|
||||
nextcloud-client
|
||||
signal-desktop
|
||||
tdesktop
|
||||
thunderbird
|
||||
vlc
|
||||
vscodium
|
||||
unstable.obsidian
|
||||
];
|
||||
|
||||
# Do not restart the display manager automatically
|
||||
systemd.services.display-manager.restartIfChanged = lib.mkForce false;
|
||||
|
||||
# If something needs more than 20s to stop it should probably be
|
||||
# killed.
|
||||
systemd.extraConfig = ''
|
||||
DefaultTimeoutStopSec=20s
|
||||
'';
|
||||
}
|
25
modules/fonts.nix
Normal file
25
modules/fonts.nix
Normal file
|
@ -0,0 +1,25 @@
|
|||
# Fonts and reasonable font-rendering.
|
||||
{ pkgs, ... }:
|
||||
|
||||
{
|
||||
fonts = {
|
||||
fonts = with pkgs; [
|
||||
corefonts
|
||||
dejavu_fonts
|
||||
inter
|
||||
jetbrains-mono
|
||||
(nerdfonts.override { fonts = [ "FiraCode" "FiraMono" ]; })
|
||||
noto-fonts-cjk
|
||||
noto-fonts-emoji
|
||||
];
|
||||
|
||||
fontconfig = {
|
||||
hinting.enable = true;
|
||||
subpixel.lcdfilter = "light";
|
||||
|
||||
defaultFonts = {
|
||||
monospace = [ "JetBrains Mono" ];
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
19
modules/home-config.nix
Normal file
19
modules/home-config.nix
Normal file
|
@ -0,0 +1,19 @@
|
|||
# Inject the right home-manager config for the machine.
|
||||
|
||||
{ config, depot, pkgs, ... }:
|
||||
|
||||
{
|
||||
users.users.tazjin = {
|
||||
isNormalUser = true;
|
||||
createHome = true;
|
||||
extraGroups = [ "wheel" "networkmanager" "video" "adbusers" ];
|
||||
uid = 1000;
|
||||
shell = pkgs.fish;
|
||||
initialHashedPassword = "$2b$05$1eBPdoIgan/C/L8JFqIHBuVscQyTKw1L/4VBlzlLvLBEf6CXS3EW6";
|
||||
};
|
||||
|
||||
nix.settings.trusted-users = [ "tazjin" ];
|
||||
|
||||
home-manager.useGlobalPkgs = true;
|
||||
home-manager.users.tazjin = depot.users.tazjin.home."${config.networking.hostName}";
|
||||
}
|
15
modules/laptop.nix
Normal file
15
modules/laptop.nix
Normal file
|
@ -0,0 +1,15 @@
|
|||
# Configuration specifically for laptops that move around.
|
||||
{ ... }:
|
||||
|
||||
{
|
||||
# Automatically detect location for redshift & so on ...
|
||||
services.geoclue2.enable = true;
|
||||
location.provider = "geoclue2";
|
||||
|
||||
# Enable power-saving features.
|
||||
# TODO find which one to use
|
||||
# You have set services.power-profiles-daemon.enable = true; which conflicts with services.tlp.enable = true;
|
||||
# services.tlp.enable = true;
|
||||
|
||||
programs.light.enable = true;
|
||||
}
|
22
modules/local-dev.nix
Normal file
22
modules/local-dev.nix
Normal file
|
@ -0,0 +1,22 @@
|
|||
# Local developpement
|
||||
{ lib, pkgs, ... }:
|
||||
{
|
||||
virtualisation = {
|
||||
docker.enable = true;
|
||||
docker.rootless = {
|
||||
enable = true;
|
||||
setSocketVariable = true;
|
||||
};
|
||||
libvirtd.enable = true;
|
||||
lxd.enable = true;
|
||||
};
|
||||
|
||||
# List packages installed in system profile. To search, run:
|
||||
# $ nix search wget
|
||||
environment.systemPackages = with pkgs; [
|
||||
(import (fetchTarball https://github.com/cachix/devenv/archive/v0.6.2.tar.gz)).default
|
||||
direnv
|
||||
virt-manager
|
||||
zola
|
||||
];
|
||||
}
|
Loading…
Reference in a new issue