From f2a88c1b067e0b51a1ec6bb183a57470a37ee898 Mon Sep 17 00:00:00 2001 From: Florian Schmitt Date: Fri, 14 Apr 2023 23:51:52 +0300 Subject: [PATCH] refact(config) : separate in modules --- configuration.nix | 11 + macbookpro/configuration.nix | 230 ------------------ machines/MacBookPro12.1-configuration.nix | 91 +++++++ .../MacBookPro12.1-hardware-configuration.nix | 0 modules/console.nix | 61 +++++ modules/desktop-chromium.nix | 30 +++ modules/desktop.nix | 108 ++++++++ modules/fonts.nix | 25 ++ modules/home-config.nix | 19 ++ modules/laptop.nix | 15 ++ modules/local-dev.nix | 22 ++ 11 files changed, 382 insertions(+), 230 deletions(-) create mode 100644 configuration.nix delete mode 100644 macbookpro/configuration.nix create mode 100644 machines/MacBookPro12.1-configuration.nix rename macbookpro/hardware-configuration.nix => machines/MacBookPro12.1-hardware-configuration.nix (100%) create mode 100644 modules/console.nix create mode 100644 modules/desktop-chromium.nix create mode 100644 modules/desktop.nix create mode 100644 modules/fonts.nix create mode 100644 modules/home-config.nix create mode 100644 modules/laptop.nix create mode 100644 modules/local-dev.nix diff --git a/configuration.nix b/configuration.nix new file mode 100644 index 0000000..1daab17 --- /dev/null +++ b/configuration.nix @@ -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 + ]; +} + diff --git a/macbookpro/configuration.nix b/macbookpro/configuration.nix deleted file mode 100644 index c4ce29b..0000000 --- a/macbookpro/configuration.nix +++ /dev/null @@ -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? - -} diff --git a/machines/MacBookPro12.1-configuration.nix b/machines/MacBookPro12.1-configuration.nix new file mode 100644 index 0000000..974d469 --- /dev/null +++ b/machines/MacBookPro12.1-configuration.nix @@ -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? + +} + diff --git a/macbookpro/hardware-configuration.nix b/machines/MacBookPro12.1-hardware-configuration.nix similarity index 100% rename from macbookpro/hardware-configuration.nix rename to machines/MacBookPro12.1-hardware-configuration.nix diff --git a/modules/console.nix b/modules/console.nix new file mode 100644 index 0000000..05f636c --- /dev/null +++ b/modules/console.nix @@ -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 + ]; +} diff --git a/modules/desktop-chromium.nix b/modules/desktop-chromium.nix new file mode 100644 index 0000000..a6b03be --- /dev/null +++ b/modules/desktop-chromium.nix @@ -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" + ]; + }; + }; +} diff --git a/modules/desktop.nix b/modules/desktop.nix new file mode 100644 index 0000000..fdc586b --- /dev/null +++ b/modules/desktop.nix @@ -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 + ''; +} diff --git a/modules/fonts.nix b/modules/fonts.nix new file mode 100644 index 0000000..15b9b1b --- /dev/null +++ b/modules/fonts.nix @@ -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" ]; + }; + }; + }; +} diff --git a/modules/home-config.nix b/modules/home-config.nix new file mode 100644 index 0000000..bda8f7a --- /dev/null +++ b/modules/home-config.nix @@ -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}"; +} diff --git a/modules/laptop.nix b/modules/laptop.nix new file mode 100644 index 0000000..7d7a84a --- /dev/null +++ b/modules/laptop.nix @@ -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; +} diff --git a/modules/local-dev.nix b/modules/local-dev.nix new file mode 100644 index 0000000..fd89302 --- /dev/null +++ b/modules/local-dev.nix @@ -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 + ]; +} \ No newline at end of file