summaryrefslogtreecommitdiff
path: root/nixos.org
diff options
context:
space:
mode:
authorCrazazy2022-01-30 23:18:58 +0100
committerCrazazy2022-02-10 16:13:33 +0100
commita8d5bbab5312593b875bf2390d442b6a5ead00b0 (patch)
tree6d4ac90326341b33aede77eae915f93938203d55 /nixos.org
parent8ca9ddc9d433c7cf76959f997541c7276932d3ae (diff)
add initial full configs
Diffstat (limited to 'nixos.org')
-rw-r--r--nixos.org248
1 files changed, 248 insertions, 0 deletions
diff --git a/nixos.org b/nixos.org
index e69de29..ac4ad81 100644
--- a/nixos.org
+++ b/nixos.org
@@ -0,0 +1,248 @@
+#+TITLE:Nixos Config
+#+AUTHOR: Crazazy
+
+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
+ { config, lib, pkgs, ... }:
+ let
+ sources = import ./nix/sources.nix;
+ nur = import sources.nur { inherit pkgs; };
+ nurModules = import sources.nur { };
+ in
+ {
+ imports = [
+ #+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 :tangle configuration.nix
+ ./hardware-configuration.nix
+ #+end_src
+** personal stuff
+ First, some personal stuff, so that I can tel people my computer is mine
+ #+begin_src nix :tangle configuration.nix
+ {
+ options.mainUser = with lib; mkOption {
+ type = types.str;
+ default = builtins.getEnv "USER";
+ };
+ }
+ #+end_src
+
+ and then the actual info:
+ #+begin_src nix :tangle configuration.nix
+ {
+ mainUser = "erik";
+ networking.hostName = "RACEMONSTER";
+ time.timeZone = "Europe/Amsterdam";
+ }
+ #+end_src
+** Init system
+ nixos is started with systemd-boot, since we don't run any other distros
+ #+begin_src nix
+ {
+ boot.loader.systemd-boot.enable = true;
+ boot.loader.efi.canTouchEfiVariables = true;
+ }
+ #+end_src
+** Networking
+ Some default network settings for my laptop
+ #+begin_src nix
+ {
+ 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
+** nixpkgs setup
+ not much info here right now. emacs itself now refers to emacsng
+ #+begin_src nix :tangle configuration.nix
+ {
+ nix.package = pkgs.nixFlakes;
+ nixpkgs.config.allowUnfree = true;
+ nixpkgs.overlays = [
+ (final: prev: {
+ emacs = 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 :tangle configuration.nix
+ {
+ 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 :tangle configuration.nix
+ {
+ 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
+*** 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 :tangle configuration.nix
+ {
+ 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 :tangle configuration.nix
+ {
+ homeBinds = [
+ ".config/keybase"
+ ".local/share/Steam"
+ ".local/share/keybase"
+ ".mozilla/seamonkey"
+ ".ssh"
+ ".wine"
+ "Desktop"
+ "Documents"
+ "Music"
+ "Videos"
+ "workbench/browsing"
+ "workbench/EMACS"
+ ];
+ }
+ #+end_src
+** packages
+*** Core packages
+ These are the normal packages that I use for core maintenance
+ #+begin_src nix :tangle configuration.nix
+ 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 :tangle configuration.nix
+ {
+ imports = [
+ nurModules.repos.crazazy.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 :tangle configuration.nix
+ {
+ services.emacs = {
+ package = import ./emacsconfig.nix;
+ enable = true;
+ };
+ }
+ #+end_src
+*** qemu & frens
+ I also sometimes run qemu vms. The qemu's
+** Main user config
+ This sets up a (secret) default password for the main user and also sets some default groups
+ #+begin_src nix :tangle configuration.nix
+ {
+ 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
+** Visual 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 :tangle configuration.nix
+ {
+ # Enable CUPS to print documents.
+ services.printing.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
+*** XFCE
+ I have decided to be lazy and not install a fancy window manager or whatever into the system. Thats headache
+ #+begin_src nix :tangle configration.nix
+ {
+ services.xserver.displayManager.lightdm.enable = true;
+ services.xserver.desktopManager.xfce.enable = true;
+ }
+ #+end_src
+* Postfix
+ We need to remember to close our main module that we started off with
+ #+begin_src nix :tangle configuration.nix
+ ];
+ }
+ #+end_src