literate-config

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

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:
Mnixos.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