feasible config for the beginning

This commit is contained in:
MFlossmann 2024-03-27 23:45:23 +01:00
parent b4c2ba8174
commit 25d5980e6c
13 changed files with 563 additions and 203 deletions

View file

@ -0,0 +1,54 @@
{
pkgs,
config,
lib,
inputs,
...
}: {
imports = [];
nixpkgs.config = {
allowUnfree = true;
experimental-features = "nix-command flakes";
};
programs.home-manager.enable = true;
home.packages = with pkgs; [
# nix
nil
nh
git
lazygit
tree-sitter
# file-management
ranger
pistol
file
p7zip
unzip
zip
# tools
killall
fzf
eza # ls-replacement
fd
zoxide
bat
dust
ripgrep
fastfetch
wget
];
home.sessionVariables = {
EDITOR = "nvim";
};
programs.neovim.enable = true;
programs.neovim.defaultEditor = true;
}

View file

@ -0,0 +1,24 @@
{
pkgs,
config,
lib,
inputs,
...
}: {
imports = [];
home.packages = with pkgs; [
thunderbird
signal-desktop
keepassxc
];
programs.firefox = {
enable = true;
};
# TODO: fill this out (and move it in a service, probably)
# services.syncthing = {
# enable = true
# };
}

View file

@ -0,0 +1,15 @@
{
pkgs,
config,
lib,
inputs,
...
}: {
imports = [];
home.packages = with pkgs; [
freecad
prusa-slicer
printrun
];
}

47
modules/home/default.nix Normal file
View file

@ -0,0 +1,47 @@
{
pkgs,
system,
inputs,
config,
lib,
helperLib,
...
}: let
cfg = config.myHomeManager;
# # Taking all modules in ./features and adding enables to them
# features =
# helperLib.extendModules
# (name: {
# extraOptions = {
# myHomeManager.${name}.enable = lib.mkEnableOption "enable my ${name} configuration";
# };
#
# configExtension = config: (lib.mkIf cfg.${name}.enable config);
# })
# (helperLib.filesIn ./features);
#
# Taking all module bundles in ./bundles and adding bundle.enables to them
bundles =
helperLib.extendModules
(name: {
extraOptions = {
myHomeManager.bundles.${name}.enable = lib.mkEnableOption "enable ${name} module bundle";
};
configExtension = config: (lib.mkIf cfg.bundles.${name}.enable config);
})
(helperLib.filesIn ./bundles);
in {
imports = [
]
# ++ features
++ bundles
;
config = {
myHomeManager = {
bundles.core.enable = lib.mkDefault true;
};
};
}

View file

@ -0,0 +1,58 @@
{
pkgs,
lib,
...
}: {
boot.kernel.sysctl = {
"kernel.sysrq" = 502; # enables "REISUB"
};
services.xserver.xkb = lib.mkDefault {
layout = "de";
variant = "neo";
};
console.keyMap = lib.mkDefault "neo";
services.xserver.enable = true;
services.xserver.displayManager.sddm.enable = lib.mkDefault true;
services.desktopManager.plasma6.enable = lib.mkDefault true;
services.printing.enable = true;
# For touchscreen/pad support (supposedly)
services.xserver.libinput.enable = true;
# sound
sound.enable = true;
hardware.pulseaudio.enable = false;
security.rtkit.enable = true;
services.pipewire = {
enable = true;
alsa.enable = true;
alsa.support32Bit = true;
pulse.enable = true;
jack.enable = lib.mkDefault true;
# use the example session manager (no others are packaged yet so this is enabled by default,
# no need to redefine it in your config for now)
#media-session.enable = true;
};
fonts.packages = with pkgs; [
nerdfonts
(pkgs.nerdfonts.override {fonts = ["JetBrainsMono" "Iosevka" "FiraCode"];})
cm_unicode
corefonts
];
fonts.enableDefaultPackages = true;
fonts.fontconfig = {
defaultFonts = {
monospace = ["JetBrainsMono Nerd Font Mono"];
sansSerif = ["JetBrainsMono Nerd Font"];
serif = ["JetBrainsMono Nerd Font"];
};
};
}

View file

@ -0,0 +1,60 @@
{
lib,
config,
inputs,
outputs,
helperLib,
pkgs,
...
}: let
cfg = config.myNixOS;
in {
options.myNixOS.home-users = lib.mkOption {
type = lib.types.attrsOf ( lib.types.submodule {
options = {
userConfig = lib.mkOption {
example = "home.nix";
};
userSettings = lib.mkOption {
default = {};
example = "{}";
};
};
});
default = {};
};
config = {
programs.zsh.enable = true;
home-manager = {
useGlobalPkgs = true;
useUserPackages = true;
extraSpecialArgs = {
inherit inputs;
inherit helperLib;
outputs = inputs.self.outputs;
};
users =
builtins.mapAttrs (name: user: {...}: {
imports = [
(import user.userConfig)
outputs.homeManagerModules.default
];
})
(config.myNixOS.home-users);
};
users.users = builtins.mapAttrs (
name: user:
{
isNormalUser = true;
shell = pkgs.zsh;
extraGroups = ["libvirtd" "networkmanager"];
}
// user.userSettings
) (config.myNixOS.home-users);
};
}

89
modules/nixOS/default.nix Normal file
View file

@ -0,0 +1,89 @@
{
pkgs,
config,
lib,
inputs,
outputs,
helperLib,
...
}: let
cfg = config.myNixOS;
# Taking all modules in ./features and adding enables to them
features =
helperLib.extendModules
(name: {
extraOptions = {
myNixOS.${name}.enable = lib.mkEnableOption "enable my ${name} configuration";
};
configExtension = config: (lib.mkIf cfg.${name}.enable config);
})
(helperLib.filesIn ./features);
# taking all module bundles in ./bundles and adding bundle.enables to them
bundles =
helperLib.extendModules
(name: {
extraOptions = {
myNixOS.bundles.${name}.enable = lib.mkEnableOption "enable ${name} module bundle";
};
configExtension = config: (lib.mkIf cfg.bundles.${name}.enable config);
})
(helperLib.filesIn ./bundles);
# taking all module services in ./services and adding service.enables to them
# services =
# helperLib.extendModules
# (name: {
# extraOptions = {
# myNixOS.services.${name}.enable = lib.mkEnableOption "enable ${name} module service";
# };
#
# configExtension = config: (lib.mkIf cfg.services.${name}.enable config);
# })
# (helperLib.filesIn ./services);
in {
imports =
[
inputs.home-manager.nixosModules.home-manager
]
++ features
++ bundles
# ++ services
;
options.myNixOS = {
sharedSettings = {
# put settings here that are shared between homemanager and nixos, e.g.
# hyprland.enable = lib.mkEnableOption "enable hyprland";
};
};
config = {
nix.settings.experimental-features = ["nix-command" "flakes"];
programs.nix-ld.enable = true;
nixpkgs.config.allowUnfree = lib.mkDefault true;
myNixOS = {
defaultLocale.enable = lib.mkDefault true;
bundles.users.enable = lib.mkDefault true;
};
};
}
# imports = [
# ./neo.nix
# ./locale.nix
# ./pipewire.nix
# ];
#
# locale.enable = lib.mkDefault true;
# neo.enable = lib.mkDefault true;
#
# pipewire.enable = lib.mkDefault true;
# pipewire.useJack = lib.mkDefault false;
# }

View file

@ -0,0 +1,19 @@
{ pkgs, lib, config, ...}: {
config = {
time.timeZone = lib.mkDefault "Europe/Berlin";
i18n.defaultLocale = lib.mkDefault "en_US.UTF-8";
i18n.extraLocaleSettings = lib.mkDefault {
LC_ADDRESS = "de_DE.UTF-8";
LC_IDENTIFICATION = "de_DE.UTF-8";
LC_MEASUREMENT = "de_DE.UTF-8";
LC_MONETARY = "de_DE.UTF-8";
LC_NAME = "de_DE.UTF-8";
LC_NUMERIC = "de_DE.UTF-8";
LC_PAPER = "de_DE.UTF-8";
LC_TELEPHONE = "de_DE.UTF-8";
LC_TIME = "de_DE.UTF-8";
};
};
}