Add initial installer
This commit is contained in:
9
home-manager/configs/castle.nix
Normal file
9
home-manager/configs/castle.nix
Normal file
@@ -0,0 +1,9 @@
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
# So home-manager will inject the sourcing of ~/.nix-profile/etc/profile.d/nix.sh
|
||||
targets.genericLinux.enable = true;
|
||||
|
||||
programs = {
|
||||
kakoune.enable = true;
|
||||
};
|
||||
}
|
51
home-manager/default.nix
Normal file
51
home-manager/default.nix
Normal file
@@ -0,0 +1,51 @@
|
||||
{ lib, hmFlakes, inputs, pkgs', modules }:
|
||||
let
|
||||
inherit (builtins) removeAttrs mapAttrs;
|
||||
inherit (lib) flatten optional recursiveUpdate;
|
||||
inherit (lib.my) homeStateVersion;
|
||||
|
||||
mkHome = name: {
|
||||
system,
|
||||
nixpkgs ? "unstable",
|
||||
home-manager ? nixpkgs,
|
||||
config,
|
||||
...
|
||||
}@args:
|
||||
let
|
||||
rest = removeAttrs args [ "nixpkgs" "home-manager" "config" ];
|
||||
in
|
||||
# homeManagerConfiguration doesn't allow us to set lib directly (inherits from passed pkgs)
|
||||
hmFlakes.${home-manager}.lib.homeManagerConfiguration (recursiveUpdate rest {
|
||||
configuration = config;
|
||||
# Passing pkgs here doesn't set the global pkgs, just where it'll be imported from (and where the global lib is
|
||||
# derived from). We want home-manager to import pkgs itself so it'll apply config and overlays modularly. Any config
|
||||
# and overlays previously applied will be passed on by `homeManagerConfiguration` though.
|
||||
pkgs = pkgs'.${nixpkgs}.${system};
|
||||
extraModules = modules ++ [
|
||||
{
|
||||
warnings = flatten [
|
||||
(optional (nixpkgs != home-manager)
|
||||
''
|
||||
Using nixpkgs ${nixpkgs} with home-manager ${home-manager} may cause issues.
|
||||
'')
|
||||
];
|
||||
|
||||
_module.args = {
|
||||
inherit inputs;
|
||||
pkgs' = mapAttrs (_: p: p.${system}) pkgs';
|
||||
};
|
||||
}
|
||||
(homeStateVersion home-manager)
|
||||
];
|
||||
});
|
||||
in
|
||||
mapAttrs mkHome {
|
||||
"dev@castle" = {
|
||||
system = "x86_64-linux";
|
||||
nixpkgs = "unstable";
|
||||
config = configs/castle.nix;
|
||||
|
||||
homeDirectory = "/home/dev";
|
||||
username = "dev";
|
||||
};
|
||||
}
|
130
home-manager/modules/common.nix
Normal file
130
home-manager/modules/common.nix
Normal file
@@ -0,0 +1,130 @@
|
||||
{ lib, pkgs, pkgs', inputs, config, ... }@args:
|
||||
let
|
||||
inherit (lib) optionalAttrs versionAtLeast mkMerge mkIf mkDefault mkOption;
|
||||
inherit (lib.my) mkOpt' dummyOption;
|
||||
in
|
||||
{
|
||||
options = with lib.types; {
|
||||
my = {
|
||||
isStandalone = mkOption {
|
||||
type = bool;
|
||||
internal = true;
|
||||
description = "Whether home-manager is running inside a NixOS system or not.";
|
||||
};
|
||||
};
|
||||
|
||||
# Only present in >=22.05, so forward declare
|
||||
nix.registry = dummyOption;
|
||||
};
|
||||
config = mkMerge [
|
||||
(mkIf (versionAtLeast config.home.stateVersion "22.05") {
|
||||
nix.registry = {
|
||||
pkgs = {
|
||||
to = {
|
||||
type = "path";
|
||||
path = toString pkgs.path;
|
||||
};
|
||||
exact = true;
|
||||
};
|
||||
};
|
||||
})
|
||||
{
|
||||
my.isStandalone = !(args ? osConfig);
|
||||
|
||||
programs = {
|
||||
# Even when enabled this will only be actually installed in standalone mode
|
||||
# Note: `home-manager.path` is for telling home-manager is installed and setting it in NIX_PATH, which we should
|
||||
# never care about.
|
||||
home-manager.enable = true;
|
||||
|
||||
lsd = {
|
||||
enable = mkDefault true;
|
||||
enableAliases = mkDefault true;
|
||||
};
|
||||
|
||||
starship = {
|
||||
enable = mkDefault true;
|
||||
settings = {
|
||||
aws.disabled = true;
|
||||
};
|
||||
};
|
||||
|
||||
bash = {
|
||||
# This not only installs bash but has home-manager control .bashrc and friends
|
||||
enable = mkDefault true;
|
||||
initExtra =
|
||||
''
|
||||
flake-src() {
|
||||
cd "$(nix eval "''${@:2}" --impure --raw --expr "builtins.getFlake \"$1\"")"
|
||||
}
|
||||
'';
|
||||
};
|
||||
|
||||
direnv = {
|
||||
enable = mkDefault true;
|
||||
nix-direnv.enable = true;
|
||||
stdlib =
|
||||
''
|
||||
# addition to nix-direnv's use_nix that registers outputs as gc roots (as well as the .drv)
|
||||
use_nix_outputs() {
|
||||
local layout_dir drv deps
|
||||
layout_dir="$(direnv_layout_dir)"
|
||||
drv="$layout_dir/drv"
|
||||
deps="$layout_dir/deps"
|
||||
|
||||
if [ ! -e "$deps" ] || (( "$(stat --format=%Z "$drv")" > "$(stat --format=%Z "$deps")" )); then
|
||||
rm -rf "$deps"
|
||||
mkdir -p "$deps"
|
||||
nix-store --indirect --add-root "$deps/out" --realise $(nix-store --query --references "$drv") > /dev/null
|
||||
log_status renewed outputs gc roots
|
||||
fi
|
||||
}
|
||||
'';
|
||||
};
|
||||
|
||||
htop = {
|
||||
enable = true;
|
||||
settings = {};
|
||||
};
|
||||
};
|
||||
|
||||
home = {
|
||||
packages = with pkgs; [
|
||||
tree
|
||||
iperf3
|
||||
];
|
||||
|
||||
sessionVariables = {
|
||||
EDITOR = "vim";
|
||||
};
|
||||
shellAliases = {
|
||||
hm = "home-manager";
|
||||
};
|
||||
|
||||
language.base = mkDefault "en_IE.UTF-8";
|
||||
};
|
||||
}
|
||||
(mkIf (config.my.isStandalone || !args.osConfig.home-manager.useGlobalPkgs) {
|
||||
# Note: If globalPkgs mode is on, then these will be overridden by the NixOS equivalents of these options
|
||||
nixpkgs = {
|
||||
overlays = [
|
||||
(final: prev: { nix = inputs.nix.defaultPackage.${config.nixpkgs.system}; })
|
||||
# TODO: Wait for https://github.com/NixOS/nixpkgs/pull/159074 to arrive to nixos-unstable
|
||||
(final: prev: { remarshal = pkgs'.master.remarshal; })
|
||||
];
|
||||
config = {
|
||||
allowUnfree = true;
|
||||
};
|
||||
};
|
||||
})
|
||||
(mkIf config.my.isStandalone {
|
||||
fonts.fontconfig.enable = true;
|
||||
|
||||
home = {
|
||||
packages = with pkgs; [
|
||||
nix
|
||||
];
|
||||
};
|
||||
})
|
||||
];
|
||||
}
|
24
home-manager/modules/gui.nix
Normal file
24
home-manager/modules/gui.nix
Normal file
@@ -0,0 +1,24 @@
|
||||
{ lib, pkgs, config, ... }:
|
||||
let
|
||||
inherit (lib) mkIf mkDefault mkMerge;
|
||||
inherit (lib.my) mkBoolOpt';
|
||||
|
||||
cfg = config.my.gui;
|
||||
in
|
||||
{
|
||||
options.my.gui = {
|
||||
enable = mkBoolOpt' true "Enable settings and packages meant for graphical systems";
|
||||
};
|
||||
|
||||
config = mkMerge [
|
||||
(mkIf cfg.enable {
|
||||
home = {
|
||||
packages = with pkgs; [
|
||||
(nerdfonts.override {
|
||||
fonts = [ "DroidSansMono" "SourceCodePro" ];
|
||||
})
|
||||
];
|
||||
};
|
||||
})
|
||||
];
|
||||
}
|
Reference in New Issue
Block a user