literate-config

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

commit f019892c99b5a172ff4af4f340e345e63277b135
parent 791966fa1c08b7184f63205f5899862467761f85
Author: Crazazy <crazazy@tilde.cafe>
Date:   Wed, 16 Feb 2022 15:53:41 +0100

massive indentation reformat

Diffstat:
Mnixos.org | 448++++++++++++++++++++++++++++++++++++++++---------------------------------------
1 file changed, 226 insertions(+), 222 deletions(-)

diff --git a/nixos.org b/nixos.org @@ -10,248 +10,252 @@ 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"; + }) + ]; + } +#+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 = import ./emacs.nix; - 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 = 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 *** 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