From e2e390efdfe26168cc73ef47f5abea6fa757fb1b Mon Sep 17 00:00:00 2001 From: muon Date: Mon, 3 Jun 2024 13:09:49 +0000 Subject: [PATCH] Add home --- flake.nix | 17 +++---- hosts/muon/configuration.nix | 13 ++++- hosts/muon/home.nix | 79 +++--------------------------- modules/home/default.nix | 8 +++ modules/home/terminal/default.nix | 11 +++++ modules/home/terminal/emulator.nix | 9 ++++ modules/home/terminal/shell.nix | 26 ++++++++++ modules/nixos/core/user.nix | 3 ++ modules/nixos/desktop/default.nix | 2 +- modules/nixos/system/programs.nix | 4 ++ utils.nix | 24 +++------ 11 files changed, 96 insertions(+), 100 deletions(-) create mode 100644 modules/home/default.nix create mode 100644 modules/home/terminal/default.nix create mode 100644 modules/home/terminal/emulator.nix create mode 100644 modules/home/terminal/shell.nix diff --git a/flake.nix b/flake.nix index 16e0561..c3b7efa 100644 --- a/flake.nix +++ b/flake.nix @@ -1,13 +1,12 @@ { inputs = { nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; - home-manager = { - url = "github:nix-community/home-manager"; - inputs.nixpkgs.follows = "nixpkgs"; - }; + + home-manager.url = "github:nix-community/home-manager"; + home-manager.inputs.nixpkgs.follows = "nixpkgs"; }; - outputs = { nixpkgs, home-manager, ... }@inputs: + outputs = inputs@{ nixpkgs, home-manager, ... }: let system = "x86_64-linux"; @@ -16,13 +15,11 @@ }; utils = import ./utils.nix { inherit pkgs inputs system; }; - in with utils; { + in { nixosConfigurations = { - muon = mkHost ./hosts/muon/configuration.nix; + muon = utils.mkHost ./hosts/muon/configuration.nix; }; - homeConfigurations = { - muon = mkHome ./hosts/muon/home.nix; - }; + homeManagerModules.default = ./modules/home; }; } diff --git a/hosts/muon/configuration.nix b/hosts/muon/configuration.nix index e8cf4af..e7934f0 100644 --- a/hosts/muon/configuration.nix +++ b/hosts/muon/configuration.nix @@ -1,4 +1,4 @@ -{ config, lib, pkgs, ... }: +{ config, lib, pkgs, inputs, system, ... }: let cfg = config.mods; in { @@ -11,6 +11,17 @@ in { mods.user.name = "muon"; networking.hostName = cfg.user.name; + # Home + home-manager = { + extraSpecialArgs = { inherit system pkgs inputs; }; + users."${cfg.user.name}" = { + imports = [ + ./home.nix + inputs.self.outputs.homeManagerModules.default + ]; + }; + }; + # Modules mods.desktop.enable = true; services.xserver.windowManager.qtile.enable = true; diff --git a/hosts/muon/home.nix b/hosts/muon/home.nix index 555dbf1..cd02f65 100644 --- a/hosts/muon/home.nix +++ b/hosts/muon/home.nix @@ -1,77 +1,12 @@ -{ config, pkgs, ... }: -let - cfg = config.mods; -in { - # Home Manager needs a bit of information about you and the paths it should - # manage. +{ pkgs, lib, osConfig,... }: +let cfg = osConfig.mods; in { + # Home home.username = cfg.user.name; home.homeDirectory = "/home/${cfg.user.name}"; - # This value determines the Home Manager release that your configuration is - # compatible with. This helps avoid breakage when a new Home Manager release - # introduces backwards incompatible changes. - # - # You should not change this value, even if you update Home Manager. If you do - # want to update the value, then make sure to first check the Home Manager - # release notes. - home.stateVersion = "23.05"; # Please read the comment before changing. + # Modules + # mods.module.enable = true; - # The home.packages option allows you to install Nix packages into your - # environment. - home.packages = [ - # # Adds the 'hello' command to your environment. It prints a friendly - # # "Hello, world!" when run. - # pkgs.hello - - # # It is sometimes useful to fine-tune packages, for example, by applying - # # overrides. You can do that directly here, just don't forget the - # # parentheses. Maybe you want to install Nerd Fonts with a limited number of - # # fonts? - # (pkgs.nerdfonts.override { fonts = [ "FantasqueSansMono" ]; }) - - # # You can also create simple shell scripts directly inside your - # # configuration. For example, this adds a command 'my-hello' to your - # # environment: - # (pkgs.writeShellScriptBin "my-hello" '' - # echo "Hello, ${config.home.username}!" - # '') - ]; - - # Home Manager is pretty good at managing dotfiles. The primary way to manage - # plain files is through 'home.file'. - home.file = { - # # Building this configuration will create a copy of 'dotfiles/screenrc' in - # # the Nix store. Activating the configuration will then make '~/.screenrc' a - # # symlink to the Nix store copy. - # ".screenrc".source = dotfiles/screenrc; - - # # You can also set the file content immediately. - # ".gradle/gradle.properties".text = '' - # org.gradle.console=verbose - # org.gradle.daemon.idletimeout=3600000 - # ''; - }; - - # Home Manager can also manage your environment variables through - # 'home.sessionVariables'. These will be explicitly sourced when using a - # shell provided by Home Manager. If you don't want to manage your shell - # through Home Manager then you have to manually source 'hm-session-vars.sh' - # located at either - # - # ~/.nix-profile/etc/profile.d/hm-session-vars.sh - # - # or - # - # ~/.local/state/nix/profiles/profile/etc/profile.d/hm-session-vars.sh - # - # or - # - # /etc/profiles/per-user/muon/etc/profile.d/hm-session-vars.sh - # - home.sessionVariables = { - # EDITOR = "emacs"; - }; - - # Let Home Manager install and manage itself. - programs.home-manager.enable = true; + # Version of first install + home.stateVersion = "23.05"; } diff --git a/modules/home/default.nix b/modules/home/default.nix new file mode 100644 index 0000000..8b54869 --- /dev/null +++ b/modules/home/default.nix @@ -0,0 +1,8 @@ +{ pkgs, lib, ... }: { + imports = [ + ./terminal + ]; + + # Let Home Manager install and manage itself + programs.home-manager.enable = true; +} diff --git a/modules/home/terminal/default.nix b/modules/home/terminal/default.nix new file mode 100644 index 0000000..1d9f6f6 --- /dev/null +++ b/modules/home/terminal/default.nix @@ -0,0 +1,11 @@ +{ pkgs, lib, osConfig, ... }: { + imports = [ + ./shell.nix + ./emulator.nix + # ./tools.nix + ]; + + config = lib.mkIf osConfig.mods.desktop.enable { + mods.terminal.emulator.enable = lib.mkDefault true; + }; +} diff --git a/modules/home/terminal/emulator.nix b/modules/home/terminal/emulator.nix new file mode 100644 index 0000000..f1ddb7f --- /dev/null +++ b/modules/home/terminal/emulator.nix @@ -0,0 +1,9 @@ +{ pkgs, lib, config, ... }: { + options = { + mods.terminal.emulator.enable = lib.mkEnableOption "enables terminal emulator"; + }; + + config = lib.mkIf config.mods.terminal.emulator.enable { + programs.alacritty.enable = true; + }; +} diff --git a/modules/home/terminal/shell.nix b/modules/home/terminal/shell.nix new file mode 100644 index 0000000..629fd5f --- /dev/null +++ b/modules/home/terminal/shell.nix @@ -0,0 +1,26 @@ +{ pkgs, lib, config, osConfig, ... }: { + programs.zsh = { + enable = true; + enableCompletion = true; + autosuggestion.enable = true; + syntaxHighlighting.enable = true; + + history = { + save = 2097152; + size = 2097152; + expireDuplicatesFirst = true; + ignoreDups = true; + ignoreSpace = true; + path = "${config.xdg.dataHome}/zsh/history"; + }; + + zplug = { + enable = true; + plugins = [ + { name = "jeffreytse/zsh-vi-mode"; } + ]; + }; + }; + + programs.starship.enable = true; +} diff --git a/modules/nixos/core/user.nix b/modules/nixos/core/user.nix index 94952d0..abd742a 100644 --- a/modules/nixos/core/user.nix +++ b/modules/nixos/core/user.nix @@ -11,6 +11,9 @@ isNormalUser = true; extraGroups = [ "wheel" ]; initialPassword = "changeme"; + shell = if config.programs.zsh.enable + then pkgs.zsh + else pkgs.bash; }; }; } diff --git a/modules/nixos/desktop/default.nix b/modules/nixos/desktop/default.nix index 9cba61f..d8566d1 100644 --- a/modules/nixos/desktop/default.nix +++ b/modules/nixos/desktop/default.nix @@ -5,7 +5,7 @@ ]; options = { - mods.desktop.enable = lib.mkEnableOption "enables sound"; + mods.desktop.enable = lib.mkEnableOption "enables graphical desktop environment"; }; config = lib.mkIf config.mods.desktop.enable { diff --git a/modules/nixos/system/programs.nix b/modules/nixos/system/programs.nix index 0999f11..0029f56 100644 --- a/modules/nixos/system/programs.nix +++ b/modules/nixos/system/programs.nix @@ -1,11 +1,15 @@ { pkgs, lib, ... }: { + # Default programs environment.systemPackages = with pkgs; [ vim wget + git ]; programs.gnupg.agent = { enable = true; enableSSHSupport = true; }; + + programs.zsh.enable = true; } diff --git a/utils.nix b/utils.nix index 625e94c..e214044 100644 --- a/utils.nix +++ b/utils.nix @@ -1,19 +1,11 @@ { pkgs, inputs, system, ... }: { - mkHost = host: inputs.nixpkgs.lib.nixosSystem { - specialArgs = { inherit inputs system pkgs; }; + mkHost = host: inputs.nixpkgs.lib.nixosSystem { + specialArgs = { inherit inputs system pkgs; }; - modules = [ - host - ./modules/nixos - ]; - }; - - mkHome = host: inputs.home-manager.lib.homeMangerConfiguration { - inherit pkgs; - - modules = [ - host - ./modules/home - ]; - }; + modules = [ + host + ./modules/nixos + inputs.home-manager.nixosModules.default + ]; + }; }