commit 9a85c95dd20938e00ed3bce71a54b56f01aeda0a
parent b247659dd2b4ae207225ba8025184aa770a728df
Author: Crazazy <crazazy@tilde.cafe>
Date: Mon, 21 Feb 2022 13:51:02 +0100
unindent the mass indent fault
This also contains a change to overlays and other emacs-ng but so much
has changed that I can't split the parts of the diff properly anymore
Diffstat:
M | nixos.org | | | 453 | +++++++++++++++++++++++++++++++++++++++---------------------------------------- |
1 file changed, 223 insertions(+), 230 deletions(-)
diff --git a/nixos.org b/nixos.org
@@ -3,259 +3,252 @@
#+HTML_HEAD: <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/latex.css@1.6.0/style.min.css" integrity="sha256-Ncz7wrwMhIHPJupOT4BWvsCDbduC61SmpMasJCmvPB8=" crossorigin="anonymous">
#+HTML_HEAD:<style>body { max-width : 120ch; }</style>
#+OPTIONS: ^:nil p:t
-
-This is the nixos config. Right now it is a bit of a hack because I don't have a [[https://github.com/rasendubi/dotfiles#patch-ob-tangle][ob-tangle patch]] but that can come
-later
-
For now this is the way I'm configuring nixos. There is no flakes here, just a configuration.nix and a bunch of other
stuff
* Prefix
-The nixos config is going to consist of a bunch of "imports" which are just a bunch of configs
-in the imports part of the main configuration. Then we can put each part of said config on its own source block
-This does require a bit of a prefix, that lets us access packages, existing configuration and library functions
-#+begin_src nix :tangle configuration.nix :noweb no-export :padline no
- { config, lib, pkgs, ... }:
- let
- sources = import ./nix/sources.nix;
- nur = import sources.NUR { inherit pkgs; };
- nurModules = import sources.NUR { };
- in
- {
- imports = [
- <<nixos-config>>
- ];
- }
-#+end_src
+ The nixos config is going to consist of a bunch of "imports" which are just a bunch of configs
+ in the imports part of the main configuration. Then we can put each part of said config on its own source block
+ This does require a bit of a prefix, that lets us access packages, existing configuration and library functions
+ #+begin_src nix :tangle configuration.nix :noweb no-export :padline no
+ { config, lib, pkgs, ... }:
+ let
+ sources = import ./nix/sources.nix;
+ nur = import sources.NUR { inherit pkgs; };
+ nurModules = import sources.NUR { };
+ in
+ {
+ imports = [
+ <<nixos-config>>
+ ];
+ }
+ #+end_src
* Configuration
** Hardware
-Normal nixos installation comes with a hardware-configuration file. we are not going to add the contents of that
-file here ourself, but instead add it as an external module. This is the only place where we'll do this
-#+begin_src nix :noweb-ref nixos-config :tangle no
- ./hardware-configuration.nix
-#+end_src
+ Normal nixos installation comes with a hardware-configuration file. we are not going to add the contents of that
+ file here ourself, but instead add it as an external module. This is the only place where we'll do this
+ #+begin_src nix :noweb-ref nixos-config :tangle no
+ ./hardware-configuration.nix
+ #+end_src
** personal stuff
-First, some personal stuff, so that I can tel people my computer is mine
-#+begin_src nix :noweb-ref nixos-config :tangle no
- {
- options.mainUser = with lib; mkOption {
- type = types.str;
- default = builtins.getEnv "USER";
- };
- }
-#+end_src
+ First, some personal stuff, so that I can tel people my computer is mine
+ #+begin_src nix :noweb-ref nixos-config :tangle no
+ {
+ options.mainUser = with lib; mkOption {
+ type = types.str;
+ default = builtins.getEnv "USER";
+ };
+ }
+ #+end_src
-and then the actual info:
-#+begin_src nix :noweb-ref nixos-config :tangle no
- {
- mainUser = "erik";
- networking.hostName = "RACEMONSTER";
- time.timeZone = "Europe/Amsterdam";
- }
-#+end_src
+ and then the actual info:
+ #+begin_src nix :noweb-ref nixos-config :tangle no
+ {
+ mainUser = "erik";
+ networking.hostName = "RACEMONSTER";
+ time.timeZone = "Europe/Amsterdam";
+ }
+ #+end_src
** Main user config
-This sets up a (secret) default password for the main user and also sets some default groups
-#+begin_src nix :noweb-ref nixos-config :tangle no
- {
- users.mutableUsers = false;
- # Define a user account. Don't forget to set a password with ‘passwd’.
- users.users.${config.mainUser} = {
- initialHashedPassword = "$6$XTH/sALyqg$G.bMWemErh4KGCAjUfT16DL96QMn/4NTmxlw6Z26wUVJn.tagQG.Fzmrz7uPkdiWZbBBFWP36.YA4hw9AcL8Q1";
- isNormalUser = true;
- extraGroups = [ "video" "wheel" "NetworkManager" ]; # Enable ‘sudo’ for the user.
- # shell = pkgs.nushell;
- };
- }
-#+end_src
+ This sets up a (secret) default password for the main user and also sets some default groups
+ #+begin_src nix :noweb-ref nixos-config :tangle no
+ {
+ users.mutableUsers = false;
+ # Define a user account. Don't forget to set a password with ‘passwd’.
+ users.users.${config.mainUser} = {
+ initialHashedPassword = "$6$XTH/sALyqg$G.bMWemErh4KGCAjUfT16DL96QMn/4NTmxlw6Z26wUVJn.tagQG.Fzmrz7uPkdiWZbBBFWP36.YA4hw9AcL8Q1";
+ isNormalUser = true;
+ extraGroups = [ "video" "wheel" "NetworkManager" ]; # Enable ‘sudo’ for the user.
+ # shell = pkgs.nushell;
+ };
+ }
+ #+end_src
** Init system
-nixos is started with systemd-boot, since we don't run any other distros
-#+begin_src nix :noweb-ref nixos-config :tangle no
- {
- boot.loader.systemd-boot.enable = true;
- boot.loader.efi.canTouchEfiVariables = true;
- }
-#+end_src
+ nixos is started with systemd-boot, since we don't run any other distros
+ #+begin_src nix :noweb-ref nixos-config :tangle no
+ {
+ boot.loader.systemd-boot.enable = true;
+ boot.loader.efi.canTouchEfiVariables = true;
+ }
+ #+end_src
** nixpkgs setup
-not much info here right now. emacs itself now refers to emacsng
-#+begin_src nix :noweb-ref nixos-config :tangle no
- {
- nix.package = pkgs.nixFlakes;
- nixpkgs.config.allowUnfree = true;
- nixpkgs.overlays = [
- (final: prev: {
- emacs = (import sources.emacs-ng).outputs.defaultPackage."x86_64-linux";
- })
- ];
- }
-#+end_src
+ not much info here right now. emacs itself now refers to emacsng
+ #+begin_src nix :noweb-ref nixos-config :tangle no
+ {
+ nix.package = pkgs.nixFlakes;
+ nixpkgs.config.allowUnfree = true;
+ nixpkgs.overlays = [
+ (final: prev: {
+ emacs = (import sources.emacs-ng).outputs.defaultPackage."x86_64-linux";
+ emacsWithPackages = final.emacs.pkgs.withPackages;
+ })
+ ];
+ }
+ #+end_src
*** cachix
-Cachix and other substitute servers allow you to not have to compile things as much as you are supposed to
-We will create a small module for cachix before we put in the rest declaratively
-#+begin_src nix :noweb-ref nixos-config :tangle no
- {
- options.nix.cacheAttrs = with lib; mkOption {
- type = with types; attrsOf str;
- default = {};
+ Cachix and other substitute servers allow you to not have to compile things as much as you are supposed to
+ We will create a small module for cachix before we put in the rest declaratively
+ #+begin_src nix :noweb-ref nixos-config :tangle no
+ {
+ options.nix.cacheAttrs = with lib; mkOption {
+ type = with types; attrsOf str;
+ default = {};
- };
- config = with lib; {
- nix.binaryCaches = builtins.attrNames config.nix.cacheAttrs;
- nix.binaryCachePublicKeys = builtins.attrValues config.nix.cacheAttrs;
- };
- }
-#+end_src
-With the config in hand, we can now quickly and easily declare our substitute servers
-#+begin_src nix :noweb-ref nixos-config :tangle no
- {
- nix.cacheAttrs = {
- "https://crazazy.cachix.org" = "crazazy.cachix.org-1:3KaIHK26pkvd5palJH5A4Re1Hn2+GDV+aXYnftMYAm4=";
- "https://emacsng.cachix.org" = "emacsng.cachix.org-1:i7wOr4YpdRpWWtShI8bT6V7lOTnPeI7Ho6HaZegFWMI=";
- "https://ethancedwards8.cachix.org" = "ethancedwards8.cachix.org-1:YMasjqyFnDreRQ9GXmnPIshT3tYyFHE2lUiNhbyIxOc=";
- "https://nix-community.cachix.org" = "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=";
- "https://nrdxp.cachix.org" = "nrdxp.cachix.org-1:Fc5PSqY2Jm1TrWfm88l6cvGWwz3s93c6IOifQWnhNW4=";
- "https://rycee.cachix.org" = "rycee.cachix.org-1:TiiXyeSk0iRlzlys4c7HiXLkP3idRf20oQ/roEUAh/A=";
- };
- }
-#+end_src
+ };
+ config = with lib; {
+ nix.binaryCaches = builtins.attrNames config.nix.cacheAttrs;
+ nix.binaryCachePublicKeys = builtins.attrValues config.nix.cacheAttrs;
+ };
+ }
+ #+end_src
+ With the config in hand, we can now quickly and easily declare our substitute servers
+ #+begin_src nix :noweb-ref nixos-config :tangle no
+ {
+ nix.cacheAttrs = {
+ "https://crazazy.cachix.org" = "crazazy.cachix.org-1:3KaIHK26pkvd5palJH5A4Re1Hn2+GDV+aXYnftMYAm4=";
+ "https://emacsng.cachix.org" = "emacsng.cachix.org-1:i7wOr4YpdRpWWtShI8bT6V7lOTnPeI7Ho6HaZegFWMI=";
+ "https://ethancedwards8.cachix.org" = "ethancedwards8.cachix.org-1:YMasjqyFnDreRQ9GXmnPIshT3tYyFHE2lUiNhbyIxOc=";
+ "https://nix-community.cachix.org" = "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=";
+ "https://nrdxp.cachix.org" = "nrdxp.cachix.org-1:Fc5PSqY2Jm1TrWfm88l6cvGWwz3s93c6IOifQWnhNW4=";
+ "https://rycee.cachix.org" = "rycee.cachix.org-1:TiiXyeSk0iRlzlys4c7HiXLkP3idRf20oQ/roEUAh/A=";
+ };
+ }
+ #+end_src
** udev binds
-I have a bindmount system so that I can easily make binds to persistent directories from my home directory
-This should prevent clutter
+ I have a bindmount system so that I can easily make binds to persistent directories from my home directory
+ This should prevent clutter
*** The config
-This part is quite advanced. It makes entries for filesystems and then makes a systemd service to re-assign
-generated temporary directories to the owner of the home folder
-#+begin_src nix :noweb-ref nixos-config :tangle no
- {
- options = with lib; {
- homeBinds = mkOption {
- type = with types; listOf str;
- default = [ ];
- description = "Bind mounts in your home folder";
- };
- persistRoot = mkOption {
- type = types.str;
- default = "/nix/persist";
- };
- };
- config = with lib; mkIf (config.homeBinds != [ ]) {
- fileSystems = genAttrs (map (loc: "/home/${config.mainUser}/${loc}") config.homeBinds)
- (loc: {
- device = "${config.persistRoot}${loc}";
- fsType = "none";
- options = [ "bind" ];
- });
- systemd.services.fix-home-perms = {
- wantedBy = [ "multi-user.target" ];
- after = map (loc: "${builtins.replaceStrings ["/"] ["-"] loc}.mount") config.homeBinds;
- serviceConfig.Type = "oneshot";
- script = "chown -R ${config.mainUser} /home/${config.mainUser}";
- };
- };
- }
-#+end_src
+ This part is quite advanced. It makes entries for filesystems and then makes a systemd service to re-assign
+ generated temporary directories to the owner of the home folder
+ #+begin_src nix :noweb-ref nixos-config :tangle no
+ {
+ options = with lib; {
+ homeBinds = mkOption {
+ type = with types; listOf str;
+ default = [ ];
+ description = "Bind mounts in your home folder";
+ };
+ persistRoot = mkOption {
+ type = types.str;
+ default = "/nix/persist";
+ };
+ };
+ config = with lib; mkIf (config.homeBinds != [ ]) {
+ fileSystems = genAttrs (map (loc: "/home/${config.mainUser}/${loc}") config.homeBinds)
+ (loc: {
+ device = "${config.persistRoot}${loc}";
+ fsType = "none";
+ options = [ "bind" ];
+ });
+ systemd.services.fix-home-perms = {
+ wantedBy = [ "multi-user.target" ];
+ after = map (loc: "${builtins.replaceStrings ["/"] ["-"] loc}.mount") config.homeBinds;
+ serviceConfig.Type = "oneshot";
+ script = "chown -R ${config.mainUser} /home/${config.mainUser}";
+ };
+ };
+ }
+ #+end_src
*** The binds
-These are the binds themselves, they change frequently
-#+begin_src nix :noweb-ref nixos-config :tangle no
- {
- homeBinds = [
- ".config/keybase"
- ".local/share/Steam"
- ".local/share/keybase"
- ".mozilla/seamonkey"
- ".ssh"
- ".wine"
- "Desktop"
- "Documents"
- "Music"
- "Videos"
- ];
- }
-#+end_src
+ These are the binds themselves, they change frequently
+ #+begin_src nix :noweb-ref nixos-config :tangle no
+ {
+ homeBinds = [
+ ".config/keybase"
+ ".local/share/Steam"
+ ".local/share/keybase"
+ ".mozilla/seamonkey"
+ ".ssh"
+ ".wine"
+ "Desktop"
+ "Documents"
+ "Music"
+ "Videos"
+ ];
+ }
+ #+end_src
** Visual stuff
-I don't acutally literally live in the terminal. So we have to implement some xorg and other stuff
+ I don't acutally literally live in the terminal. So we have to implement some xorg and other stuff
*** Basics
-Enable printing, sound and a good keyboard, along with x11 itself
-#+begin_src nix :noweb-ref nixos-config :tangle no
- {
- # Enable CUPS to print documents.
- services.printing.enable = true;
+ Enable printing, sound and a good keyboard, along with x11 itself
+ #+begin_src nix :noweb-ref nixos-config :tangle no
+ {
+ # Enable CUPS to print documents.
+ services.printing.enable = true;
- # Enable sound.
- sound.enable = true;
- hardware.pulseaudio.enable = true;
+ # Enable sound.
+ sound.enable = true;
+ hardware.pulseaudio.enable = true;
- # Enable the X11 windowing system.
- services.xserver.enable = true;
- services.xserver.layout = "us";
- services.xserver.xkbVariant = "altgr-intl";
- services.xserver.xkbOptions = "eurosign:e";
- # touchpad controls
- services.xserver.libinput.enable = true;
- }
-#+end_src
+ # Enable the X11 windowing system.
+ services.xserver.enable = true;
+ services.xserver.layout = "us";
+ services.xserver.xkbVariant = "altgr-intl";
+ services.xserver.xkbOptions = "eurosign:e";
+ # touchpad controls
+ services.xserver.libinput.enable = true;
+ }
+ #+end_src
*** XFCE
-I have decided to be lazy and not install a fancy window manager or whatever into the system. Thats headache
-#+begin_src nix :noweb-ref nixos-config :tangle no
- {
- services.xserver.displayManager.lightdm.enable = true;
- services.xserver.desktopManager.xfce.enable = true;
- }
-#+end_src
+ I have decided to be lazy and not install a fancy window manager or whatever into the system. Thats headache
+ #+begin_src nix :noweb-ref nixos-config :tangle no
+ {
+ services.xserver.displayManager.lightdm.enable = true;
+ services.xserver.desktopManager.xfce.enable = true;
+ }
+ #+end_src
** Networking
-Some default network settings for my laptop
-#+begin_src nix :noweb-ref nixos-config :tangle no
- {
- networking.networkmanager.enable = true; # Enables wireless support via wpa_supplicant.
- networking.useDHCP = false;
- networking.interfaces.enp0s31f6.useDHCP = true;
- networking.interfaces.wlp1s0.useDHCP = true;
- }
-#+end_src
+ Some default network settings for my laptop
+ #+begin_src nix :noweb-ref nixos-config :tangle no
+ {
+ networking.networkmanager.enable = true; # Enables wireless support via wpa_supplicant.
+ networking.useDHCP = false;
+ networking.interfaces.enp0s31f6.useDHCP = true;
+ networking.interfaces.wlp1s0.useDHCP = true;
+ }
+ #+end_src
** packages
*** Core packages
-These are the normal packages that I use for core maintenance
-#+begin_src nix :noweb-ref nixos-config :tangle no
- {
- environment.systemPackages = with pkgs; [
- gitFull
- curl
- vim
- nur.repos.crazazy.seamonkey
- (wine.override { wineBuild = "wineWow"; })
- ];
- }
-#+end_src
+ These are the normal packages that I use for core maintenance
+ #+begin_src nix :noweb-ref nixos-config :tangle no
+ {
+ environment.systemPackages = with pkgs; [
+ gitFull
+ curl
+ vim
+ nur.repos.crazazy.seamonkey
+ (wine.override { wineBuild = "wineWow"; })
+ ];
+ }
+ #+end_src
*** Steam
-I like to play videogames sometimes, however steam also requires a little more special attention
-#+begin_src nix :noweb-ref nixos-config :tangle no
- {
- imports = [
- nurModules.repos.crazazy.modules.private.steam-config
- ];
- environment.systemPackages = with pkgs; [
- steam
- ];
- }
-#+end_src
+ I like to play videogames sometimes, however steam also requires a little more special attention
+ #+begin_src nix :noweb-ref nixos-config :tangle no
+ {
+ imports = [
+ nurModules.repos.crazazy.modules.private.steam-config
+ ];
+ environment.systemPackages = with pkgs; [
+ steam
+ ];
+ }
+ #+end_src
*** Emacs
-Emacs needs to be integrated into the rest of the system. We are going to do that via a emacs daemon
-#+begin_src nix :noweb-ref nixos-config :tangle no
- {
- services.emacs = {
- package = with pkgs; runCommand "wrapped-emacs" {} ''
- mkdir -p $out
- cp -r ${import ./emacs.nix} $out
- ${makeWrapper}/bin/wrapProgram $out/bin/emacs --set WEBKIT_FORCE_SANDBOX 0
- '';
- enable = true;
- };
- homeBinds = [
- ".config/emacs"
- ];
- }
-#+end_src
+ Emacs needs to be integrated into the rest of the system. We are going to do that via a emacs daemon
+ #+begin_src nix :noweb-ref nixos-config :tangle no
+ {
+ services.emacs = {
+ # package = import ./emacs.nix;
+ enable = true;
+ };
+ homeBinds = [
+ ".config/emacs"
+ ];
+ }
+ #+end_src
*** QEMU & frens
-I also sometimes run qemu vms. The qemu's manager will be libvirtd, but not sure if I will even use that
-#+begin_src nix :noweb-ref nixos-config :tangle no
- {
- virtualisation.libvirtd.enable = true;
- }
-#+end_src
+ I also sometimes run qemu vms. The qemu's manager will be libvirtd, but not sure if I will even use that
+ #+begin_src nix :noweb-ref nixos-config :tangle no
+ {
+ virtualisation.libvirtd.enable = true;
+ }
+ #+end_src