write out chloe config, modularize stuff more

This commit is contained in:
chloe caruso 2025-05-05 23:56:54 -07:00
parent 24d8eeb413
commit c0cfb69f27
26 changed files with 488 additions and 370 deletions

2
.gitignore vendored
View file

@ -1 +1,3 @@
flake.lock
result
result-*

View file

@ -95,32 +95,18 @@
timeZone = "America/Los_Angeles";
sexuality = "bisexual";
};
users.paper_clover = rec {
#enable if you want to use a tiling wm on macos
darwinTiling = true;
username = "clo"; # username
name = "chloe caruso"; # name/identifier
email = "account@paperclover.net"; # email (used for certain configurations)
dotfilesDir = "~/config"; # absolute path of the local repo
theme = "catppuccin-mocha"; #name of theme that stylix will use
browser = "firefox"; # Default browser; must select one from ./user/app/browser/
term = "ghostty"; # Default terminal command;
font = "iosevka"; # Selected font
editor = "neovim"; # Default editor;
spawnEditor = "exec" + term + " -e " + editor;
timeZone = "America/Los_Angeles";
sexuality = "lesbian";
};
mkSystem = import ./lib/mkSystem.nix {
inherit overlays nixpkgs inputs;
};
in {
packages.aarch64-darwin.darwin-rebuild = darwin.packages.aarch64-darwin.darwin-rebuild;
formatter.x86_64-linux = nixpkgs.legacyPackages.x86_64-linux.alejandra;
formatter.aarch64-darwin = nixpkgs.legacyPackages.aarch64-darwin.alejandra;
# natalie's desktop computer
nixosConfigurations.nixos = mkSystem "nixos" {
userSettings = users.nmarks;
configDir = ./hosts/natalie/desktop;
user = "nmarks";
host = "desktop";
system = "x86_64-linux";
extraModules = [
nixos-cosmic.nixosModules.default
@ -128,21 +114,21 @@
};
# natalie's laptop
darwinConfigurations."Natalies-MacBook-Air" = mkSystem "Natalies-MacBook-Air" {
userSettings = users.nmarks;
configDir = ./hosts/natalie/laptop;
user = "nmarks";
host = "laptop";
system = "aarch64-darwin";
};
# chloe's mac studio "sandwich"
darwinConfigurations.sandwich = mkSystem "sandwich" {
userSettings = users.paper_clover;
configDir = ./hosts/chloe;
user = "chloe";
host = "sandwich";
system = "aarch64-darwin";
};
# chloe's macbook air "paperback"
darwinConfigurations.paperback = mkSystem "paperback" {
userSettings = users.paper_clover;
configDir = ./hosts/chloe;
user = "chloe";
host = "paperback";
system = "aarch64-darwin";
};
};

View file

@ -5,111 +5,147 @@
overlays,
inputs,
}: name: {
userSettings,
system,
configDir, # base host config
user, # ./users/{name}
host ? null, # ./users/{name}/{host} (optional)
system, # arch-os
extraModules ? [],
}: let
inherit (builtins) pathExists;
darwin = nixpkgs.lib.strings.hasSuffix "-darwin" system;
nixindex =
if darwin
then inputs.nix-index-database.darwinModules.nix-index
else inputs.nix-index-database.nixosModules.nix-index;
stylix =
if darwin
then inputs.stylix.darwinModules.stylix
else inputs.stylix.nixosModules.stylix;
systemModuleDir =
if darwin
then "macos"
else "nixos";
# NixOS vs nix-darwin functions
systemFunc =
getInputModule = a: b:
inputs.${
a
}.${
if darwin
then inputs.darwin.lib.darwinSystem
else nixpkgs.lib.nixosSystem;
then "darwinModules"
else "nixosModules"
}.${
b
};
# NixOS vs nix-darwin functions
systemFunc =
if darwin
then inputs.darwin.lib.darwinSystem
else nixpkgs.lib.nixosSystem;
# The config files for this system.
hostConfig = configDir + "/configuration.nix";
homeConfig = configDir + "/home.nix";
userDir = ../users + "/${user}";
userConfig = import (userDir + "/user.nix");
hostDir = userDir + "/${host}";
hmModules =
if darwin
then inputs.home-manager.darwinModules
else inputs.home-manager.nixosModules;
hostConfigPath = hostDir + "/configuration.nix";
userConfigPath = userDir + "/configuration.nix";
hostHomePath = hostDir + "/home.nix";
userHomePath = userDir + "/home.nix";
# Arguments passed to all module files
args = {
inherit inputs;
currentSystem = system;
# Details about the host machine
host = {
inherit darwin;
};
user = ({
# This acts as formal documentation for what is allowed in user.nix
username, # unix username
name, # your display name
email, # for identity in programs such as git
dotfilesDir, # location to `../.`
timeZone ? "America/Los_Angeles",
# Stylix/Theming
theme ? null, # theme name for stylix
sexuality ? null, # pride flag for hyfetch
term, # preferred $TERM
editor, # preferred $EDITOR
browser ? null, # preferred $BROWSER
}@user: user) userConfig;
};
systemSettings = rec {
inherit darwin;
homeDir =
homeDir = "/${
if darwin
then "/Users/" + userSettings.username + "/"
else "/home/" + userSettings.username + "/";
then "Users"
else "home"
}/${userConfig.username}";
};
in
systemFunc {
inherit system;
systemFunc {
inherit system;
# TODO: gross and ugly hack do NOT like
specialArgs = {
inherit (userSettings) darwinTiling;
};
modules =
builtins.filter (f: f != null)
[
# Apply our overlays. Overlays are keyed by system type so we have
# to go through and apply our system type. We do this first so
# the overlays are available globally.
{nixpkgs.overlays = overlays;}
modules =
[
# Apply our overlays. Overlays are keyed by system type so we have
# to go through and apply our system type. We do this first so
# the overlays are available globally.
{nixpkgs.overlays = overlays;}
# Modules shared between nix-darwin and NixOS
../modules/shared
# Modules for the specific OS
(
if darwin
then ../modules/macos
else ../modules/nixos
)
# Shared modules
../modules/shared
# The user-wide configuration.nix
(
if pathExists userConfigPath
then userConfigPath
else null
)
# The host-wide configuration.nix
(
if host != null && pathExists hostConfigPath
then hostConfigPath
else null
)
# System specific modules
../modules/${systemModuleDir}
# Set up nix-index and enable comma for easy one-shot command use
# https://github.com/nix-community/comma
(getInputModule "nix-index-database" "nix-index")
{programs.nix-index-database.comma.enable = true;}
# Link to configuration.nix
hostConfig
# Themes for all programs
(getInputModule "stylix" "stylix")
# Set up nix-index and enable comma for easy one-shot command use
# https://github.com/nix-community/comma
nixindex
{programs.nix-index-database.comma.enable = true;}
# Home manager
(getInputModule "home-manager" "home-manager")
{
home-manager = {
useGlobalPkgs = true;
useUserPackages = true;
backupFileExtension = "hm-backup";
# Arguments passed to all module files
extraSpecialArgs =
args
// {
mainHomeImports = builtins.filter (f: f != null) [
(
if pathExists userHomePath
then userHomePath
else null
)
(
if host != null && pathExists hostHomePath
then hostHomePath
else null
)
];
};
# can't find how to make this an array without the param
users.${userConfig.username} = ../modules/home-manager.nix;
};
users.users.${userConfig.username}.home = systemSettings.homeDir;
}
# Themes for all programs
stylix
hmModules.home-manager
{
home-manager = {
useGlobalPkgs = true;
useUserPackages = true;
backupFileExtension = "hm-backup";
extraSpecialArgs = {inherit inputs userSettings systemSettings;};
users.${userSettings.username} = homeConfig;
};
users.users.${userSettings.username}.home = systemSettings.homeDir;
}
# We expose some extra arguments so that our modules can parameterize
# better based on these values.
{
config._module.args = {
currentSystem = system;
# currentSystemName = name;
# currentSystemUser = userSettings.username;
inherit inputs userSettings systemSettings;
};
}
]
# Add extra modules specified from config
++ extraModules;
}
# Arguments passed to all module files
{config._module.args = args;}
]
# Add extra modules specified from config
++ extraModules;
}

81
modules/home-manager.nix Normal file
View file

@ -0,0 +1,81 @@
# This contains default configurations for set of programs
# and configuration, but does not enable many things on it's own.
{
pkgs,
lib,
config,
user,
host,
mainHomeImports,
...
}: let
cfg = config.programs;
in {
imports = mainHomeImports;
programs = {
home-manager.enable = true;
nix-index.enable = true;
direnv = {
enableZshIntegration = true;
nix-direnv.enable = config.programs.direnv.enable;
};
git = {
enable = true;
userName = lib.mkDefault user.name;
userEmail = lib.mkDefault user.email;
ignores = [
(lib.mkIf host.darwin ".DS_Store") # When using Finder
(lib.mkIf host.darwin "._*") # When using non-APFS drives
# ViM and Neovim
".*.swp"
".nvimlog"
];
};
atuin = {
enableBashIntegration = true;
enableFishIntegration = true;
daemon.enable = cfg.atuin.enable;
};
bat = {
extraPackages = with pkgs.bat-extras; [batdiff batman batgrep batwatch batpipe prettybat];
};
hyfetch = {
settings = {
backend = "fastfetch";
preset = user.sexuality;
mode = "rgb";
light_dark = "dark";
lightness = {
};
color_align = {
mode = "horizontal";
};
};
};
fastfetch.enable = cfg.hyfetch.enable;
fish = {
plugins = [
{
name = "tide";
inherit (pkgs.fishPlugins.tide) src;
}
{
name = "!!";
inherit (pkgs.fishPlugins.bang-bang) src;
}
];
shellAliases =
{ } // lib.optionalAttrs (!host.darwin) {
reboot-windows = "sudo efibootmgr --bootnext 0000; sudo reboot -h now";
};
shellInit = ''
batman --export-env | source
'';
##test -r '/Users/${user.username}/.opam/opam-init/init.fish' && source '/Users/${user.username}/.opam/opam-init/init.fish' > /dev/null 2> /dev/null; or true
};
};
}

View file

@ -1,13 +1,13 @@
{
pkgs,
lib,
darwinTiling,
...
}: {
imports =
[
./homebrew.nix
./system.nix
]
++ lib.optionals darwinTiling [./tiling];
imports = [
# sort-lines: start
./mac-app-store.nix
./system.nix
./icons.nix
# sort-lines: end
];
}

View file

@ -1,31 +0,0 @@
_: {
# Use homebrew to install casks and Mac App Store apps
homebrew = {
enable = true;
onActivation = {
autoUpdate = true;
cleanup = "none";
upgrade = true;
};
brews = [
"imagemagick"
"opam"
];
casks = [
"battle-net"
"stremio"
"alt-tab"
"legcord"
"zulip"
"zen-browser"
"supertuxkart"
];
masApps = {
"wireguard" = 1451685025;
};
};
}

View file

@ -0,0 +1,44 @@
{
config,
lib,
pkgs,
...
}: let
types = lib.types;
# Mapping of Mac App Store applications.
# Add new entries to this list via the App Store's share button
# https://apps.apple.com/us/app/logic-pro/id634148309?mt=12
# --------- ID HERE
allMasApps = {
# sort-lines:start
adguard = 1440147259;
final-cut-pro = 424389933;
logic-pro = 634148309;
magnet = 441258766;
motion = 434290957;
wireguard = 1451685025;
# sort-lines:end
};
# the resolved configuration from the user
masApps = config.shared.darwin.macAppStoreApps;
in {
options = {
# Installs Mac Applications via name using homebrew.
shared.darwin.macAppStoreApps = lib.mkOption {
type = types.listOf types.str;
default = [];
};
};
config = lib.mkIf (builtins.length masApps > 0) {
homebrew.enable = true;
homebrew.masApps = builtins.listToAttrs (
builtins.map (name: {
inherit name;
value = allMasApps.${name};
})
masApps
);
};
}

View file

@ -1,21 +1,23 @@
{
config,
pkgs,
userSettings,
lib,
...
}: {
#Use touchid or watch to activate sudo
# Use touchid or watch to activate sudo
security.pam.services.sudo_local = {
enable = true;
reattach = true;
touchIdAuth = true;
};
# set some OSX preferences that I always end up hunting down and changing.
# Set some OSX preferences that I always end up hunting down and changing.
system = {
# Used for backwards compatibility, please read the changelog before changing.
# $ darwin-rebuild changelog
stateVersion = 6;
defaults = {
defaults = lib.mkDefault {
# Turn quarantine off
LaunchServices = {
LSQuarantine = false;
@ -50,13 +52,13 @@
AppleICUForce24HourTime = true;
#Autohide menu bar
_HIHideMenuBar = userSettings.darwinTiling;
#_HIHideMenuBar = config.shared.darwin.tiling;
};
# minimal dock
dock = {
autohide = true;
#instant hide and show
autohide-time-modifier = 0.0;
autohide-time-modifier = 0.0; # make animation instant
autohide-delay = 0.0; # remove delay when touching bottom of screen
show-process-indicators = true;
expose-group-apps = true;
@ -76,13 +78,12 @@
AppleShowAllExtensions = true;
ShowPathbar = true;
FXEnableExtensionChangeWarning = false;
# TODO: default to list view and not saving .DS_Store
};
CustomSystemPreferences = {
"com.apple.universalaccess" = {
closeViewTrackpadGestureZoomEnabled = 1;
};
"com.apple.symbolichotkeys" = {
AppleSymbolicHotKeys = {
"64" = {
@ -92,7 +93,6 @@
};
};
};
# Bind caps to escape for better normal mode stuff
keyboard = {
enableKeyMapping = true;

View file

@ -1,6 +1,2 @@
{pkgs, ...}: {
imports = [
./aerospace.nix
./sketchybar.nix
];
}

View file

@ -1,6 +1,9 @@
# shared is used by nixos-rebuild and darwin-rebuild
{pkgs, ...}: {
imports = [
./extras.nix
# sort-lines:start
./user-system-settings.nix
./nix.nix
# sort-lines:end
];
}

View file

@ -1,51 +0,0 @@
{
pkgs,
userSettings,
...
}: {
services.tailscale.enable = true;
networking = {
};
fonts.packages = with pkgs; [
nerd-fonts.fira-code
nerd-fonts.iosevka
iosevka
nerd-fonts.symbols-only
nerd-fonts.iosevka
];
# Set your time zone.
time.timeZone = userSettings.timeZone;
home-manager.users.${userSettings.username}.home.sessionVariables = {
EDITOR = userSettings.editor;
VISUAL = userSettings.editor;
TERMINAL = userSettings.term;
BROWSER = userSettings.browser;
};
stylix = {
enable = true;
base16Scheme = "${pkgs.base16-schemes}/share/themes/${userSettings.theme}.yaml";
fonts = {
serif = {
package = pkgs.nerd-fonts.${userSettings.font};
name = "${userSettings.font} Nerd Font";
};
sansSerif = {
package = pkgs.nerd-fonts.${userSettings.font};
name = "${userSettings.font} Nerd Font";
};
monospace = {
package = pkgs.nerd-fonts.${userSettings.font};
name = "${userSettings.font} Nerd Font";
};
emoji = {
package = pkgs.twemoji-color-font;
name = "Twemoji Color";
};
};
};
}

View file

@ -1,67 +0,0 @@
{
pkgs,
lib,
userSettings,
systemSettings,
...
}: {
nix-index.enable = true;
atuin = {
enable = true;
enableBashIntegration = true;
enableFishIntegration = true;
daemon.enable = true;
};
direnv = {
enable = true;
enableZshIntegration = true;
nix-direnv.enable = true;
};
bat = {
enable = true;
extraPackages = with pkgs.bat-extras; [batdiff batman batgrep batwatch batpipe prettybat];
};
hyfetch = {
enable = true;
settings = {
backend = "fastfetch";
preset = userSettings.sexuality;
mode = "rgb";
light_dark = "dark";
lightness = {
};
color_align = {
mode = "horizontal";
};
};
};
fish = {
enable = true;
plugins = [
{
name = "tide";
inherit (pkgs.fishPlugins.tide) src;
}
{
name = "!!";
inherit (pkgs.fishPlugins.bang-bang) src;
}
];
shellAliases =
{
}
// lib.optionalAttrs (!systemSettings.darwin) {
reboot-windows = "sudo efibootmgr --bootnext 0000; sudo reboot -h now";
};
shellInit = ''
batman --export-env | source
'';
##test -r '/Users/${userSettings.username}/.opam/opam-init/init.fish' && source '/Users/${userSettings.username}/.opam/opam-init/init.fish' > /dev/null 2> /dev/null; or true
};
home-manager.enable = true;
}

View file

@ -0,0 +1,36 @@
# applies user settings for the system
{ pkgs, user, lib, ... }: {
# Set your time zone.
time.timeZone = user.timeZone;
home-manager.users.${user.username}.home.sessionVariables = {
EDITOR = user.editor;
TERMINAL = user.term;
} // lib.optionalAttrs (user ? "browser") {
BROWSER = user.browser;
};
stylix = {
enable = false;
base16Scheme = "${pkgs.base16-schemes}/share/themes/${user.theme}.yaml";
fonts = {
serif = {
package = pkgs.nerd-fonts.${user.font};
name = "${user.font} Nerd Font";
};
sansSerif = {
package = pkgs.nerd-fonts.${user.font};
name = "${user.font} Nerd Font";
};
monospace = {
package = pkgs.nerd-fonts.${user.font};
name = "${user.font} Nerd Font";
};
emoji = {
package = pkgs.twemoji-color-font;
name = "Twemoji Color";
};
};
};
}

View file

@ -1,47 +0,0 @@
{
description = "My first flake!";
inputs = {
nixpkgs.url = "nixpkgs/nixos-23.11";
home-manager = {
url = "github:nix-community/home-manager/release-23.11";
inputs.nixpkgs.follows = "nixpkgs";
};
# nix-flatpak.url = "github:gmodena/nix-flatpak/?ref=<0.2.0>";
# hyprland.url = "github:hyprwm/Hyprland";
# hyprland-plugins = {
# url = "github:hyprwm/hyprland-plugins";
# inputs.hyprland.follows = "hyprland";
# };
# use the following for unstable:
# nixpkgs.url = "nixpkgs/nixos-unstable";
# or any branch you want:
# nixpkgs.url = "nixpkgs/{BRANCH-NAME}"
};
outputs = {
self,
home-manager,
nixpkgs,
...
}: let
system = "x86_64-linux";
lib = nixpkgs.lib;
pkgs = nixpkgs.legacyPackages.${system};
in {
nixosConfigurations = {
nmarks = lib.nixosSystem {
inherit system;
modules = [./configuration.nix];
};
};
homeConfigurations = {
nmarks = home-manager.lib.homeManagerConfiguration {
inherit pkgs;
modules = [./home.nix];
};
};
};
}

40
readme.md Normal file
View file

@ -0,0 +1,40 @@
# nix config
meow.
## macOS installation instructions
Install Nix using the upstream nix (Pick "no" then "yes):
```
curl --proto '=https' --tlsv1.2 -sSf -L https://install.determinate.systems/nix | \
sh -s -- install
```
Open a new shell and clone the repository:
```
# Install git + other command tools. (Used by many programs)
xcode-select --install
# Clone via HTTPs
git clone https://git.paperclover.net/clo/config.git
# With SSH Authentication
git clone git@git.paperclover.net:clo/config
```
Setup `nix-darwin`
```
# Tell nix-darwin where the flake is at.
sudo mkdir /etc/nix-darwin
sudo ln -s $(realpath flake.nix) /etc/nix-darwin/
# Enable configuration.
nix run .#darwin-rebuild switch
```
Additionally, it may be helpful to disable the unsigned app popup.
```
sudo spctl --master-disable
# then, go to System Settings -> Privacy to allow unsigned apps.
```

12
switch Executable file
View file

@ -0,0 +1,12 @@
#!/bin/sh
nh_subcommand="os"
fallback_command="nixos-rebuild"
if [ "$(uname -o)" ]; then
nh_subcommand="darwin"
fallback_command="nix run .#darwin-rebuild"
fi;
if command -v nh > /dev/null; then
nh $nh_subcommand switch .
else
$fallback_command switch
fi

View file

@ -1,3 +1,4 @@
# Configuration applied to all of chloe's machines
{
pkgs,
userSettings,
@ -5,24 +6,23 @@
}: {
environment.systemPackages = with pkgs; [
neovim
pinentry_mac
signal-desktop-bin
];
# Create /etc/zshrc that loads the nix-darwin environment.
programs = {
gnupg.agent.enable = true;
zsh.enable = true; # default shell on catalina
shared.darwin = {
macAppStoreApps = [
"adguard"
"magnet"
];
};
# When opening an interactive shell that isnt fish move into fish
programs.zsh = {
interactiveShellInit = ''
if [[ $(${pkgs.procps}/bin/ps -p $PPID -o comm) != "fish" && -z ''${ZSH_EXUCTION_STRING} ]]
then
[[ -o login ]] && LOGIN_OPTION='--login' || LOGIN_OPTION=""
exec ${pkgs.fish}/bin/fish $LOGIN_OPTION
fi
'';
system.defaults = {
NSGlobalDomain = {
KeyRepeat = 1;
InitialKeyRepeat = 10;
};
CustomUserPreferences = {
NSGlobalDomain = {
# TODO: how to change system accent color
AppleHighlightColor = "1.000000 0.874510 0.701961 Orange";
};
};
};
}

View file

@ -1,29 +1,24 @@
{
inputs,
config,
pkgs,
lib,
userSettings,
systemSettings,
...
}: {
imports = [
inputs.nixvim.homeManagerModules.nixvim
#set up nixvim
# ../../modules/nixvim
];
programs = import ../../modules/shared/homeManagerPrograms.nix {inherit inputs config pkgs lib userSettings systemSettings;};
home = {
inherit (userSettings) username;
# homeDirectory = systemSettings.homeConfig;
# shell = pkgs.fish;
stateVersion = "23.05"; # Please read the comment before changing.
packages = pkgs.callPackage ../../modules/shared/packages.nix {inherit systemSettings;};
sessionPath = [
"$HOME/.emacs.d/bin"
packages = [
pkgs.neovim
pkgs.nh
pkgs.ffmpeg
];
};
programs = {
# sort-lines:start
hyfetch.enable = true;
zsh.enable = true;
# sort-lines:end
# use a git-specific email
git.userEmail = "git@paperclover.net";
};
}

View file

@ -0,0 +1,14 @@
# Configuration applied to all of chloe's machines
{pkgs, ...}: {
environment.systemPackages = with pkgs; [
ffmpeg
ripgrep
];
shared.darwin = {
macAppStoreApps = [
"final-cut-pro"
"logic-pro"
"motion"
];
};
}

18
users/chloe/user.nix Normal file
View file

@ -0,0 +1,18 @@
# This definition is used by modules to customize as needed.
{
username = "clo"; # username
name = "chloe caruso";
email = "account@paperclover.net";
timeZone = "America/Los_Angeles";
dotfilesDir = "~/config"; # absolute path of the local repo
# Stylix/Theming
theme = "catppuccin-mocha";
#font
sexuality = "lesbian"; # hyfetch
# Default terminal command. NOTE: ghostty is not installed for you
term = "ghostty"; # preferred $TERMINAL
editor = "nvim"; # preferred $EDITOR
}

View file

@ -0,0 +1 @@
services.tailscale.enable = true;

19
users/natalie/home.nix Normal file
View file

@ -0,0 +1,19 @@
{
pkgs,
lib,
}: {
# sort-lines:start
atuin.enable = true;
bat.enable = true;
hyfetch.enable = true;
direnv.enable = true;
# sort-lines:end
fonts.packages = with pkgs; [
nerd-fonts.fira-code
nerd-fonts.iosevka
iosevka
nerd-fonts.symbols-only
nerd-fonts.iosevka
];
}

View file

@ -9,6 +9,12 @@
signal-desktop-bin
];
# Custom configuration modules in "modules" are shared between users,
# and can be configured in this "shared" namespace
shared.darwin = {
macAppStoreApps = ["wireguard"];
};
# Create /etc/zshrc that loads the nix-darwin environment.
programs = {
gnupg.agent.enable = true;
@ -25,4 +31,30 @@
fi
'';
};
# Use homebrew to install casks
homebrew = {
enable = true;
onActivation = {
autoUpdate = true;
cleanup = "none";
upgrade = true;
};
brews = [
"imagemagick"
"opam"
];
casks = [
"battle-net"
"stremio"
"alt-tab"
"legcord"
"zulip"
"zen-browser"
"supertuxkart"
];
};
}

View file

@ -6,17 +6,16 @@
userSettings,
systemSettings,
...
}: {
} @ args: {
imports = [
inputs.nixvim.homeManagerModules.nixvim
#set up nixvim
# ../../modules/nixvim
];
programs = import ../../modules/shared/homeManagerPrograms.nix {inherit inputs config pkgs lib userSettings systemSettings;};
programs = import ./home-programs.nix args;
home = {
inherit (userSettings) username;
# homeDirectory = systemSettings.homeConfig;
# shell = pkgs.fish;
stateVersion = "23.05"; # Please read the comment before changing.