From 749594165e965c455b02b283a6f5ee95bd7623f7 Mon Sep 17 00:00:00 2001 From: Stefan Ellmauthaler Date: Tue, 9 Nov 2021 14:14:56 +0100 Subject: [PATCH] NIX added type to distinguish between server and graphical systems Signed-off-by: Stefan Ellmauthaler --- configuration.nix | 287 +++++++++++++++--------------------------- default.nix | 8 +- flake.lock | 12 +- layer/graphical.nix | 50 ++++++++ layer/server.nix | 3 + users/default.nix | 5 - users/ellmau/home.nix | 2 + 7 files changed, 171 insertions(+), 196 deletions(-) create mode 100644 layer/graphical.nix create mode 100644 layer/server.nix diff --git a/configuration.nix b/configuration.nix index 71bf094..83e6ef8 100644 --- a/configuration.nix +++ b/configuration.nix @@ -1,196 +1,118 @@ -# 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’). - -{ pkgs, name, flakes, flakeOutputs, ... }: -{ config, pkgs, ...}: -{ +{ pkgs, name, type, flakes, flakeOutputs, ...}: +{ config, pkgs, lib, ...}: +{ imports = - [ # Include the results of the hardware scan. + [ # hardware-configuration result ((./machine + "/${name}") + /hardware-configuration.nix) + # machine-specific configuration (./machine + "/${name}") + # additional programs ./programs/emacs ./programs/aspell.nix + # home-manager entry-point ./users - ]; + ] ++ type; + - # Use the systemd-boot EFI boot loader. - boot.loader.systemd-boot.enable = true; - boot.loader.efi.canTouchEfiVariables = true; - boot.kernelPackages = pkgs.linuxPackages_latest; - - # networking.hostName = "nucturne"; # Define your hostname. - done in machine/current/default.nix - #networking.wireless.enable = true; # Enables wireless support via wpa_supplicant. - networking.networkmanager.enable = true; - #networking.networkmanager.unmanaged = [ "enp0s20f0u4u1u3" ]; - - # Set your time zone. time.timeZone = "Europe/Berlin"; - - # The global useDHCP flag is deprecated, therefore explicitly set to false here. - # Per-interface useDHCP will be mandatory in the future, so this generated config - # replicates the default behaviour. - networking.useDHCP = false; - # networking.interfaces.eno1.useDHCP = true; - # networking.interfaces.enp0s20f0u4u1u3.useDHCP = true; - # networking.interfaces.wlp0s20f3.useDHCP = true; - - # Configure network proxy if necessary - # networking.proxy.default = "http://user:password@proxy:port/"; - # networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain"; - - # Select internationalisation properties. i18n.defaultLocale = "en_GB.UTF-8"; - # console = { - # font = "Lat2-Terminus16"; - # keyMap = "us"; - # }; - # updates and upkeep - nix.autoOptimiseStore = true; + boot = { + loader = { + systemd-boot.enable = true; + efi.canTouchEfiVariables = true; + }; + kernelPackages = pkgs.linuxPackages_latest; + }; - # flake options - nix.extraOptions = '' + networking = { + useDHCP = false; + }; + + nix = { + autoOptimiseStore = true; + extraOptions = '' experimental-features = nix-command flakes - ''; - - nixpkgs.overlays = [ flakes.emacs-overlay.overlay flakeOutputs.overlay ]; - - # Enable the X11 windowing system. - services.xserver.enable = true; - - - # Enable i3 - services.xserver.displayManager.lightdm.enable = true; - services.xserver.windowManager.i3 = { - enable = true; - extraPackages = with pkgs; [ - rofi # launcher - polybarFull # bar - i3lock # lock screen - xss-lock - autorandr - ]; - extraSessionCommands = '' - ${pkgs.autorandr}/bin/autorandr -c ''; }; - services.gnome.gnome-keyring.enable = true; - - services.dbus = { - enable = true; - packages = with pkgs; [ gnome3.dconf ]; - }; - - services.lorri.enable = true; - - programs.dconf.enable = true; - - hardware.bluetooth.enable = true; - services.blueman.enable = true; - - - # Configure keymap in X11 - services.xserver.layout = "us"; - services.xserver.xkbOptions = "eurosign:e"; - - # Enable CUPS to print documents. - services.printing.enable = true; - - # Enable sound. - sound.enable = true; - hardware.pulseaudio.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.mutableUsers = false; - users.users.ellmau = { - isNormalUser = true; - extraGroups = [ "wheel" "networkmanager" "audio"]; - description = "Stefan Ellmauthaler"; - shell = pkgs.zsh; - home = "/home/ellmau"; - hashedPassword = "$6$JZPnaZYG$KL2c3e1it3j2avioovE1WveN/mpmq/tPsSAvHY1XRhtqKaE7TaSQkqRy69farkIR0Xs0.yTjltvKvv28kZtLO1"; - }; - - # List packages installed in system profile. To search, run: - # $ nix search wget - environment.systemPackages = with pkgs; [ - # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default. - #emacs - #aspell - emacs-all-the-icons-fonts - wget - firefox - alacritty - git - thunderbird-91 - okular - texlive.combined.scheme-full - rustup - rust-analyzer - usbutils - #gcc - clang - keepassxc - gnome.libsecret - arandr - rnix-lsp - ]; - - - #services.emacs.enable = true; - #services.emacs.defaultEditor = true; - - environment.shells = [ pkgs.zsh ]; - environment.pathsToLink = [ "/share/zsh" ]; - - programs.zsh = { - enable = true; - enableCompletion = true; - enableGlobalCompInit = true; - autosuggestions.enable = true; - syntaxHighlighting = { - enable = true; - highlighters = [ "main" "brackets" "root" "line" ]; - #styles = { cursor = "standout,underline"; }; - }; - setOptions = [ "auto_pushd" "correct" "extendedglob" "nocaseglob" "rcexpandparam" "numericglobsort" "nobeep" "appendhistory" ]; - }; - - # 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; - - # Open ports in the firewall. - # networking.firewall.allowedTCPPorts = [ ... ]; - # networking.firewall.allowedUDPPorts = [ ... ]; - # Or disable the firewall altogether. - # networking.firewall.enable = false; - - environment.sessionVariables = rec { - XDG_CACHE_HOME = "\${HOME}/.cache"; - XDG_CONFIG_HOME = "\${HOME}/.config"; - XDG_BIN_HOME = "\${HOME}/.local/bin"; - XDG_DATA_HOME = "\${HOME}/.local/share"; - - PATH = [ - "\${XDG_BIN_HOME}" + nixpkgs = { + overlays = [ flakes.emacs-overlay.overlay flakeOutputs.overlay ]; + config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [ + "zoom" + "skypeforlinux" ]; }; + services = { + dbus = { + enable = true; + packages = with pkgs; [gnome3.dconf]; + }; + + lorri.enable = true; + }; + + users = { + mutableUsers = false; + users = { + ellmau = { + isNormalUser = true; + extraGroups = [ "wheel" "networkmanager" "audio"]; + description = "Stefan Ellmauthaler"; + shell = pkgs.zsh; + home = "/home/ellmau"; + hashedPassword = "$6$JZPnaZYG$KL2c3e1it3j2avioovE1WveN/mpmq/tPsSAvHY1XRhtqKaE7TaSQkqRy69farkIR0Xs0.yTjltvKvv28kZtLO1"; + }; + }; + }; + + environment = { + shells = [ pkgs.zsh ]; + pathsToLink = [ "/share/zsh/" ]; + systemPackages = with pkgs; [ + emacs-all-the-icons-fonts + wget + git + tmux + clang + rnix-lsp + ]; + sessionVariables = rec { + XDG_CACHE_HOME = "\${HOME}/.cache"; + XDG_CONFIG_HOME = "\${HOME}/.config"; + XDG_BIN_HOME = "\${HOME}/.local/bin"; + XDG_DATA_HOME = "\${HOME}/.local/share"; + + PATH = [ + "\${XDG_BIN_HOME}" + ]; + }; + }; + + programs = { + zsh = { + enable = true; + enableCompletion = true; + enableGlobalCompInit = true; + autosuggestions.enable = true; + syntaxHighlighting = { + enable = true; + highlighters = [ "main" "brackets" "root" "line" ]; + #styles = { cursor = "standout,underline"; }; + }; + setOptions = [ "auto_pushd" "correct" "extendedglob" "nocaseglob" "rcexpandparam" "numericglobsort" "nobeep" "appendhistory" ]; + }; + + mtr.enable = true; + gnupg.agent = { + enable = true; + enableSSHSupport = true; + }; + + dconf.enable = true; + }; + fonts = { enableDefaultFonts = true; fonts = with pkgs; [ @@ -213,15 +135,14 @@ fontconfig = { enable = true; - # defaultFonts = { - # serif = [ "TeX Gyre Heros" ]; - # emoji = [ "Noto Color Emoji" ]; - # sansSerif = [ "TeX Gyre Pagella" ]; - # monospace = [ "Hasklug Nerd Font Mono" ]; - # }; + # defaultFonts = { + # serif = [ "TeX Gyre Heros" ]; + # emoji = [ "Noto Color Emoji" ]; + # sansSerif = [ "TeX Gyre Pagella" ]; + # monospace = [ "Hasklug Nerd Font Mono" ]; + # }; }; }; - # 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 @@ -229,6 +150,4 @@ # 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 = "21.05"; # Did you read the comment? - } - diff --git a/default.nix b/default.nix index 113674a..5db5d3b 100644 --- a/default.nix +++ b/default.nix @@ -6,8 +6,9 @@ system = if args ? system then args.system else "x86_64-linux"; extraModules = if args ? extraModules then args.extraModules else [ ]; extraOverlays = if args ? extraOverlays then args.extraOverlays else [ ]; + type = if args ? type then args.type else [ ./layer/graphical.nix ]; pkgs = flakes.nixpkgs; - configuration = if args ? configuration then args.configuration else import ./configuration.nix {inherit extraOverlays system pkgs name flakes flakeOutputs;} ; + configuration = if args ? configuration then args.configuration else import ./configuration.nix {inherit extraOverlays system pkgs name type flakes flakeOutputs;} ; in { inherit name; @@ -31,4 +32,9 @@ flakes.nixpkgs.lib.listToAttrs (map mkMachine [ name = "nucturne"; extraModules = [ flakes.home-manager.nixosModules.home-manager ]; } + { + name = "ellmauthaler.net"; + extraModules = [ flakes.home-manager.nixosModules.home-manager ]; + type = [ ./layer/server.nix ]; + } ]) diff --git a/flake.lock b/flake.lock index 963e5ac..2714313 100644 --- a/flake.lock +++ b/flake.lock @@ -2,11 +2,11 @@ "nodes": { "emacs-overlay": { "locked": { - "lastModified": 1636363962, - "narHash": "sha256-DyF+NBIPF7f8IZ6zI0NKbTjnfAq7tTSr74k2zVolQsw=", + "lastModified": 1636450031, + "narHash": "sha256-20fe+sqam5FHDmaxKm4ix55/FPgkWV64V8WdL8DcMQM=", "owner": "nix-community", "repo": "emacs-overlay", - "rev": "086344663fbd821023dd4cce8cb5eecc502c2769", + "rev": "afd2e166179d8ba8c8eb6dc24e23fef8d10ce3ab", "type": "github" }, "original": { @@ -54,11 +54,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1636196544, - "narHash": "sha256-15s56Yu3vF8Na4yx4HkNc3997WZltOIB2CT1sOiCKKM=", + "lastModified": 1636333654, + "narHash": "sha256-3wh9PtCzcaJQuZrgZ+ygKfhltkDNNqT6zOzGsRbjZEo=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "ce48bcdde86eef5780a60bea55b9bc9dbd8248cd", + "rev": "e74894146a42ba552ebafa19ab2d1df7ccbc1738", "type": "github" }, "original": { diff --git a/layer/graphical.nix b/layer/graphical.nix new file mode 100644 index 0000000..a656da0 --- /dev/null +++ b/layer/graphical.nix @@ -0,0 +1,50 @@ +{ config, pkgs, ... }: +{ + networking.networkmanager.enable = true; + + services = { + xserver = { + enable = true; + displayManager.lightdm.enable = true; + windowManager.i3 = { + enable = true; + extraPackages = with pkgs; [ + rofi # launcher + polybarFull # bar + i3lock # lock screen + xss-lock + autorandr + ]; + extraSessionCommands = '' + ${pkgs.autorandr}/bin/autorandr -c + ''; + }; + layout = "us"; + xkbOptions = "eurosign:e"; + }; + gnome.gnome-keyring.enable = true; + + printing.enable = true; + }; + + sound.enable = true; + + hardware = { + pulseaudio.enable = true; + bluetooth.enable = true; + }; + + services.blueman.enable = true; + + environment.systemPackages = with pkgs; [ + firefox + alacritty + thunderbird-91 + okular + texlive.combined.scheme-full + usbutils + keepassxc + gnome.libsecret + arandr + ]; +} diff --git a/layer/server.nix b/layer/server.nix new file mode 100644 index 0000000..ab9f953 --- /dev/null +++ b/layer/server.nix @@ -0,0 +1,3 @@ +{ config, pkgs, ...}: +{ +} diff --git a/users/default.nix b/users/default.nix index 51b8197..fff966f 100644 --- a/users/default.nix +++ b/users/default.nix @@ -7,9 +7,4 @@ useGlobalPkgs = true; users.ellmau = (import ./ellmau/home.nix); }; - - nixpkgs.config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [ - "zoom" - "skypeforlinux" - ]; } diff --git a/users/ellmau/home.nix b/users/ellmau/home.nix index 6e600b4..ba7d992 100644 --- a/users/ellmau/home.nix +++ b/users/ellmau/home.nix @@ -22,6 +22,8 @@ pkgs.nixpkgs-fmt pkgs.nix-prefetch-github + pkgs.gh + pkgs.neofetch pkgs.jitsi-meet-electron