From e97e91be5df086c7b6b86d4ab395b824d6bd960e Mon Sep 17 00:00:00 2001 From: Leonora Tindall Date: Fri, 11 Feb 2022 12:28:29 -0600 Subject: [PATCH] Use home-manager to build home packages and configs --- .gitmodules | 9 ++++++ .ignore | 1 + common/common.nix | 28 +++++++++++++++++ common/default.nix | 17 ++--------- common/home_manager/common.nix | 20 ++++++++++++ common/home_manager/communication.nix | 15 +++++++++ common/home_manager/desktop.nix | 10 ++++++ common/home_manager/graphical.nix | 16 ++++++++++ common/home_manager/python.nix | 8 +++++ common/home_manager/rust.nix | 9 ++++++ common/home_manager/terminal.nix | 20 ++++++++++++ common/packagesets/desktop.nix | 6 ++++ common/packagesets/packages.nix | 44 +++++++++++++++++++++++++++ common/users/default.nix | 3 +- external/home-manager | 1 + external/nixos-hardware | 1 + external/nixpkgs | 1 + hosts/calembel/configuration.nix | 13 +------- hosts/calembel/home.nix | 12 ++++++++ ops/home/network.nix | 6 +++- 20 files changed, 211 insertions(+), 29 deletions(-) create mode 100644 .gitmodules create mode 100644 .ignore create mode 100644 common/common.nix create mode 100644 common/home_manager/common.nix create mode 100644 common/home_manager/communication.nix create mode 100644 common/home_manager/desktop.nix create mode 100644 common/home_manager/graphical.nix create mode 100644 common/home_manager/python.nix create mode 100644 common/home_manager/rust.nix create mode 100644 common/home_manager/terminal.nix create mode 100644 common/packagesets/desktop.nix create mode 100644 common/packagesets/packages.nix create mode 160000 external/home-manager create mode 160000 external/nixos-hardware create mode 160000 external/nixpkgs create mode 100644 hosts/calembel/home.nix diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..29c23eb --- /dev/null +++ b/.gitmodules @@ -0,0 +1,9 @@ +[submodule "external/nixos-hardware"] + path = external/nixos-hardware + url = git@github.com:NixOS/nixos-hardware.git +[submodule "external/nixpkgs"] + path = external/nixpkgs + url = git@github.com:NixOS/nixpkgs.git +[submodule "external/home-manager"] + path = external/home-manager + url = git@github.com:nix-community/home-manager.git diff --git a/.ignore b/.ignore new file mode 100644 index 0000000..6f10439 --- /dev/null +++ b/.ignore @@ -0,0 +1 @@ +external/ diff --git a/common/common.nix b/common/common.nix new file mode 100644 index 0000000..d7414e1 --- /dev/null +++ b/common/common.nix @@ -0,0 +1,28 @@ +# Common options for all hosts. + +{ config, pkgs, ... }: +{ + imports = [ + ./users + ]; + + boot.cleanTmpDir = true; + + nix.autoOptimiseStore = true; + + nixpkgs.config.allowUnfree = true; + + services.journald.extraConfig = '' + SystemMaxUse=100M + MaxFileSec=7day + ''; + + fonts.fonts = with pkgs; [ + noto-fonts + noto-fonts-cjk + noto-fonts-emoji + (nerdfonts.override { fonts = ["FiraCode" "DroidSansMono"]; }) + ]; + + i18n.defaultLocale = "en_US.UTF-8"; +} diff --git a/common/default.nix b/common/default.nix index 31d2b13..a72032f 100644 --- a/common/default.nix +++ b/common/default.nix @@ -4,20 +4,7 @@ { imports = [ - ./users + ./common.nix + ../external/home-manager/nixos ]; - - boot.cleanTmpDir = true; - - # Automatically optimize the Nix store to save space - # by hard-linking identical files together. - # These savings add up. - nix.autoOptimiseStore = true; - - # Limit the systemd journal to 100 MB of disk or the - # last 7 days of logs, whichever happens first. - services.journald.extraConfig = '' - SystemMaxUse=100M - MaxFileSec=7day - ''; } diff --git a/common/home_manager/common.nix b/common/home_manager/common.nix new file mode 100644 index 0000000..916a66b --- /dev/null +++ b/common/home_manager/common.nix @@ -0,0 +1,20 @@ +{ pkgs, ... }: +{ + home-manager.useGlobalPkgs = true; + home-manager.users.nora = { + home.username = "nora"; + home.homeDirectory = "/home/nora"; + home.stateVersion = "22.05"; + + programs = { + home-manager.enable = true; + git = { + enable = true; + userName = "Leonora Tindall"; + userEmail = "nora@nora.codes"; + }; + }; + + services = {}; + }; +} diff --git a/common/home_manager/communication.nix b/common/home_manager/communication.nix new file mode 100644 index 0000000..7cb17d6 --- /dev/null +++ b/common/home_manager/communication.nix @@ -0,0 +1,15 @@ +{ pkgs, ...}: +{ + home-manager.users.nora = { + home.packages = with pkgs; [ + element-desktop + discord + tdesktop + mumble + + # TTS for mumble + speechd + arcan.espeak + ]; + }; +} diff --git a/common/home_manager/desktop.nix b/common/home_manager/desktop.nix new file mode 100644 index 0000000..c9123e5 --- /dev/null +++ b/common/home_manager/desktop.nix @@ -0,0 +1,10 @@ +# Packages that make sense only for desktop-class machines + +{ pkgs, ...}: +{ + home-manager.users.nora = { + home.packages = with pkgs; [ + wally-cli # flash my ergodox + ]; + }; +} diff --git a/common/home_manager/graphical.nix b/common/home_manager/graphical.nix new file mode 100644 index 0000000..30bfcf9 --- /dev/null +++ b/common/home_manager/graphical.nix @@ -0,0 +1,16 @@ +{ pkgs, ...}: +{ + home-manager.users.nora = { + home.packages = with pkgs; [ + firefox + vlc + pavucontrol + kcharselect + glimpse + libreoffice + qrencode + xorg.xkill + xorg.xev + ]; + }; +} diff --git a/common/home_manager/python.nix b/common/home_manager/python.nix new file mode 100644 index 0000000..a80640c --- /dev/null +++ b/common/home_manager/python.nix @@ -0,0 +1,8 @@ +{pkgs, ...}: +{ + home-manager.users.nora = { + home.packages = with pkgs; [ + (python39.withPackages (ps: with ps; [ pylint pyflakes flake8 pygments ])) + ]; + }; +} diff --git a/common/home_manager/rust.nix b/common/home_manager/rust.nix new file mode 100644 index 0000000..8b05461 --- /dev/null +++ b/common/home_manager/rust.nix @@ -0,0 +1,9 @@ +{pkgs, ...}: +{ + home-manager.users.nora = { + home.packages = with pkgs; [ + rustup + evcxr + ]; + }; +} diff --git a/common/home_manager/terminal.nix b/common/home_manager/terminal.nix new file mode 100644 index 0000000..a570212 --- /dev/null +++ b/common/home_manager/terminal.nix @@ -0,0 +1,20 @@ +{ pkgs, ...}: +{ + home-manager.users.nora = { + home.packages = with pkgs; [ + vim + curl + wget + dfc + htop + ripgrep + ncdu # disk usage analyzer + tldr # community man pages + jq + fd # replace find + rcm # manage dotfiles + killall + tree + ]; + }; +} diff --git a/common/packagesets/desktop.nix b/common/packagesets/desktop.nix new file mode 100644 index 0000000..8ccc013 --- /dev/null +++ b/common/packagesets/desktop.nix @@ -0,0 +1,6 @@ +{ pkgs, ...}: +{ + users.nora.packages = with pkgs; [ + wally-cli # flash my ergodox + ]; +} diff --git a/common/packagesets/packages.nix b/common/packagesets/packages.nix new file mode 100644 index 0000000..a845214 --- /dev/null +++ b/common/packagesets/packages.nix @@ -0,0 +1,44 @@ +{ pkgs, ...}: +{ + packageOverrides = pkgs: with pkgs; rec { + + # Machines + Calembel = pkgs.buildEnv { + name = "calembel"; + paths = [ Terminal X Graphical Audio Rust ]; + }; + + X = pkgs.buildEnv { + name = "x-tools"; + paths = [ + xorg.xkill + xorg.xev + ]; + }; + + Graphical = pkgs.buildEnv { + name = "graphical"; + paths = [ + element-desktop + discord + tdesktop + mumble + ]; + }; + + Audio = pkgs.buildEnv { + name = "audio"; + paths = [ pulseeffects-pw pulsemixer audacity picard ]; + }; + + Rust = pkgs.buildEnv { + name = "rust"; + paths = [ evcxr rustup ]; + }; + + # Bugged; "found a set where a list was expected", whatever that means. + Python = pkgs.buildEnv { + name = "python"; + paths = (python39.withPackages (ps: with ps; [ pylint pyflakes flake8 pygments ])); + }; +};} diff --git a/common/users/default.nix b/common/users/default.nix index c19d59f..fb7b649 100644 --- a/common/users/default.nix +++ b/common/users/default.nix @@ -5,8 +5,9 @@ isNormalUser = true; shell = pkgs.zsh; openssh.authorizedKeys.keys = [ - "SHA256:Me7hh7eJUYBRJ5NZIxPa+LOC3A4tBhD19v6KrCJFd7s" + "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDQ1d8l650uqbw8qzOkf//sjmGFHBUP0edWCgyOThRc8ml46Mh0Dhge57dGrnMgrk1TYYh+RfQDscdioyAB98VocveNMCd0qkOkC9cwBfomwiQqXDuxs7hOjy06Q492ESjCQdLBf+pR3XsA6biQZmKa67VS3JEUyqo3u/HCZvlLM4NuIS61UAI3FcGqMINUEI+9IBYT/H5bYU6w/YWhpUegyySGcEsAH5d64O2O2vPgAnx4eI5Yph9Ed/D5V2+lhx/gIFrYA4N0cSEidpyOOOJiAKPC9ujnukUj6EOipoFmK96TzS17kVQQ74Th6SjdSIvAU33KsHfZ1yOpttbykUMOwrxTQDyQNWtH3dMd2e0RSJgLZ3fruslDV6zkHcJPVnf3d66hjobjfJP8J12oSGEdKPdsmp3VjZrG6FyOskcJaoIdRjX8S1AhRV/CuZ+r7p98CPgtu2I+xw4fsPSoziN7dhLzRUT2Vaw+Iaq73/hHaci4cXuT/2Y7c9bKt7c22oF0p7tNjoBhVB7y+CwIibWwLr2G2ySMQLyDa9/iNbRa4TiXVyyaAHINcW6Us05+h+7RLeYbcY1bETGMXB+f/1jtGVNpS4tHOI7a1kAdBTE7FoIVyFGUt9K9GdErOc48bhRpx7TTxIl8XgxNN3XQ+Byu0QtFErsBl8HW0w0DKYzw3Q== nora@nora.codes" ]; + extraGroups = [ "wheel" ]; }; users.users.root.openssh.authorizedKeys.keys = diff --git a/external/home-manager b/external/home-manager new file mode 160000 index 0000000..6d9d929 --- /dev/null +++ b/external/home-manager @@ -0,0 +1 @@ +Subproject commit 6d9d9294d09b5e88df65f8c6651efb8a4d7d2476 diff --git a/external/nixos-hardware b/external/nixos-hardware new file mode 160000 index 0000000..9886a06 --- /dev/null +++ b/external/nixos-hardware @@ -0,0 +1 @@ +Subproject commit 9886a06e4745edb31587d0e9481ad82d35f0d593 diff --git a/external/nixpkgs b/external/nixpkgs new file mode 160000 index 0000000..cca9ad7 --- /dev/null +++ b/external/nixpkgs @@ -0,0 +1 @@ +Subproject commit cca9ad741a2d0314f52603ffa457fb48f1ced422 diff --git a/hosts/calembel/configuration.nix b/hosts/calembel/configuration.nix index 39d2dcf..a2da1d3 100644 --- a/hosts/calembel/configuration.nix +++ b/hosts/calembel/configuration.nix @@ -31,8 +31,7 @@ # networking.proxy.default = "http://user:password@proxy:port/"; # networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain"; - networking.wireguard.enable = true; - + networking.wireguard.enable = true; # Select internationalisation properties. # i18n.defaultLocale = "en_US.UTF-8"; @@ -62,16 +61,6 @@ # 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.users.nora = { - isNormalUser = true; - extraGroups = [ "wheel" ]; # Enable ‘sudo’ for the user. - }; - - nixpkgs.config = { - allowUnfree = true; - }; - # List packages installed in system profile. To search, run: # $ nix search wget environment.systemPackages = with pkgs; [ diff --git a/hosts/calembel/home.nix b/hosts/calembel/home.nix new file mode 100644 index 0000000..bf0605b --- /dev/null +++ b/hosts/calembel/home.nix @@ -0,0 +1,12 @@ +{ pkgs, ...}: +{ + imports = [ + ../../common/home_manager/common.nix + ../../common/home_manager/desktop.nix + ../../common/home_manager/terminal.nix + ../../common/home_manager/graphical.nix + ../../common/home_manager/communication.nix + ../../common/home_manager/rust.nix + ../../common/home_manager/python.nix + ]; +} diff --git a/ops/home/network.nix b/ops/home/network.nix index fc6b1b8..e579fdc 100644 --- a/ops/home/network.nix +++ b/ops/home/network.nix @@ -4,7 +4,11 @@ }; "calembel" = { config, pkgs, lib, ... }: { - imports = [ ../../common ../../hosts/calembel/configuration.nix ]; + imports = [ + ../../common/default.nix + ../../hosts/calembel/configuration.nix + ../../hosts/calembel/home.nix + ]; deployment.targetUser = "root"; deployment.targetHost = "127.0.0.1"; };