feat: initial m3ta-home structure
- flake.nix with nixpkgs, home-manager, nix-colors, m3ta-nixpkgs, agenix, NUR inputs - lib/mkHome.nix: compose HM config from user + identity + context + sets - profiles/base: shell, cli-tools, secrets (always loaded) - profiles/contexts/desktop: WM, apps, theme, ghostty - profiles/contexts/server: minimal headless - profiles/sets/coding: core (git, direnv, jq, rg), editor, lsp, languages, agents - profiles/sets/gaming: steam, gamescope, gpu - profiles/sets/media: obs, ffmpeg, kdenlive, handbrake, yt-dlp - users/m3tam3re/identities: private.nix, work.nix (git, jj, ssh per identity) - users/m3tam3re/preferences: cliphist, difftastic, base packages
This commit is contained in:
8
profiles/base/shell/default.nix
Normal file
8
profiles/base/shell/default.nix
Normal file
@@ -0,0 +1,8 @@
|
||||
# Shell aggregator — imports Nushell (primary), Fish, and Starship prompt.
|
||||
{...}: {
|
||||
imports = [
|
||||
./nushell.nix
|
||||
./fish.nix
|
||||
./starship.nix
|
||||
];
|
||||
}
|
||||
118
profiles/base/shell/fish.nix
Normal file
118
profiles/base/shell/fish.nix
Normal file
@@ -0,0 +1,118 @@
|
||||
# Fish shell configuration exposed under the new base namespace.
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
with lib; let
|
||||
cfg = config.base.shell.fish;
|
||||
in {
|
||||
# Enabled by default — base modules are always-on.
|
||||
options.base.shell.fish.enable = (mkEnableOption "enable fish shell") // {default = true;};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
programs.fish = {
|
||||
enable = true;
|
||||
interactiveShellInit = ''
|
||||
# Fish colors using universal nix-colors palette
|
||||
# Text colors
|
||||
set -g fish_color_normal ${config.colorScheme.palette.base05} # text
|
||||
set -g fish_color_param ${config.colorScheme.palette.base05} # text
|
||||
set -g fish_color_comment ${config.colorScheme.palette.base03} # muted
|
||||
set -g fish_color_autosuggestion ${config.colorScheme.palette.base03} # muted
|
||||
|
||||
# Command colors
|
||||
set -g fish_color_command ${config.colorScheme.palette.base0D} # accent6 (blue)
|
||||
set -g fish_color_quote ${config.colorScheme.palette.base0A} # accent3 (yellow)
|
||||
set -g fish_color_redirection ${config.colorScheme.palette.base0E} # accent7 (purple)
|
||||
set -g fish_color_end ${config.colorScheme.palette.base08} # accent1 (red)
|
||||
set -g fish_color_error ${config.colorScheme.palette.base08} # accent1 (red)
|
||||
set -g fish_color_operator ${config.colorScheme.palette.base0C} # accent5 (cyan)
|
||||
set -g fish_color_escape ${config.colorScheme.palette.base09} # accent2 (orange)
|
||||
|
||||
# Path colors
|
||||
set -g fish_color_cwd ${config.colorScheme.palette.base0B} # accent4 (green)
|
||||
set -g fish_color_cwd_root ${config.colorScheme.palette.base08} # accent1 (red)
|
||||
set -g fish_color_valid_path --underline
|
||||
|
||||
# Interactive colors
|
||||
set -g fish_color_match ${config.colorScheme.palette.base0B} # accent4 (green)
|
||||
set -g fish_color_selection --background=${config.colorScheme.palette.base02} # overlay
|
||||
set -g fish_color_search_match --background=${config.colorScheme.palette.base02} # overlay
|
||||
set -g fish_color_history_current --bold
|
||||
set -g fish_color_user ${config.colorScheme.palette.base0B} # accent4 (green)
|
||||
set -g fish_color_host ${config.colorScheme.palette.base0D} # accent6 (blue)
|
||||
set -g fish_color_cancel -r
|
||||
|
||||
# Pager colors
|
||||
set -g fish_pager_color_completion normal
|
||||
set -g fish_pager_color_description ${config.colorScheme.palette.base03} # muted
|
||||
set -g fish_pager_color_prefix ${config.colorScheme.palette.base0E} # accent7 (purple)
|
||||
set -g fish_pager_color_progress ${config.colorScheme.palette.base0B} # accent4 (green)
|
||||
'';
|
||||
loginShellInit = ''
|
||||
set -x NIX_PATH nixpkgs=channel:nixos-unstable
|
||||
set -x NIX_LOG info
|
||||
set -x WEBKIT_DISABLE_COMPOSITING_MODE 1
|
||||
set -x TERMINAL ghostty
|
||||
set -x EDITOR nvim
|
||||
set -x VISUAL zed
|
||||
set -x XDG_DATA_HOME $HOME/.local/share
|
||||
set -x FZF_CTRL_R_OPTS "
|
||||
--preview='bat --color=always -n {}'
|
||||
--preview-window up:3:hidden:wrap
|
||||
--bind 'ctrl-/:toggle-preview'
|
||||
--bind 'ctrl-y:execute-silent(echo -n {2..} | wl-copy)+abort'
|
||||
--color header:bold
|
||||
--header 'Press CTRL-Y to copy command into clipboard'"
|
||||
set -x FZF_DEFAULT_COMMAND fd --type f --exclude .git --follow --hidden
|
||||
set -x FZF_CTRL_T_COMMAND "$FZF_DEFAULT_COMMAND"
|
||||
set -x FLAKE $HOME/p/nixos/nixos-config
|
||||
source /run/agenix/${config.home.username}-secrets
|
||||
|
||||
if test (tty) = "/dev/tty1"
|
||||
exec uwsm start -F /run/current-system/sw/bin/Hyprland
|
||||
end
|
||||
if test (tty) = "/dev/tty2"
|
||||
exec gamescope -O HDMI-A-1 -W 1920 -H 1080 --adaptive-sync --hdr-enabled --rt --steam -- steam -pipewire-dmabuf -tenfoot
|
||||
end
|
||||
'';
|
||||
shellAbbrs = {
|
||||
".." = "cd ..";
|
||||
"..." = "cd ../..";
|
||||
b = "yazi";
|
||||
ls = "eza";
|
||||
l = "eza -l --icons --git -a";
|
||||
lt = "eza --tree --level=2 --long --icons --git";
|
||||
grep = "rg";
|
||||
ps = "procs";
|
||||
just = "just --unstable";
|
||||
node = "bun";
|
||||
npx = "bunx";
|
||||
fs = "du -ah . | sort -hr | head -n 10";
|
||||
|
||||
n = "nix";
|
||||
nd = "nix develop -c $SHELL";
|
||||
ns = "nix shell";
|
||||
nsn = "nix shell nixpkgs#";
|
||||
nb = "nix build";
|
||||
nbn = "nix build nixpkgs#";
|
||||
nf = "nix flake";
|
||||
|
||||
nr = "sudo nixos-rebuild --flake .";
|
||||
nrs = "sudo nixos-rebuild switch --flake .#(uname -n)";
|
||||
snr = "sudo nixos-rebuild --flake .";
|
||||
snrs = "sudo nixos-rebuild --flake . switch";
|
||||
hm = "home-manager --flake .";
|
||||
hms = "home-manager --flake . switch";
|
||||
hmr = "cd ~/projects/nix-configurations; nix flake lock --update-input dotfiles; home-manager --flake .#(whoami)@(hostname) switch";
|
||||
|
||||
tsu = "sudo tailscale up";
|
||||
tsd = "sudo tailscale down";
|
||||
|
||||
vi = "nvim";
|
||||
vim = "nvim";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
86
profiles/base/shell/nushell.nix
Normal file
86
profiles/base/shell/nushell.nix
Normal file
@@ -0,0 +1,86 @@
|
||||
# Primary shell configuration — Nushell with environment, aliases, and integrations.
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
with lib; let
|
||||
cfg = config.base.shell.nushell;
|
||||
in {
|
||||
# Enabled by default — base modules are always-on.
|
||||
options.base.shell.nushell.enable = (mkEnableOption "enable nushell") // {default = true;};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
programs.nushell = {
|
||||
enable = true;
|
||||
envFile.text = ''
|
||||
$env.config.show_banner = false
|
||||
$env.NIX_PATH = "nixpkgs=channel:nixos-unstable"
|
||||
$env.NIX_LOG = "iunfo"
|
||||
$env.WEBKIT_DISABLE_COMPOSITING_MODE = "1"
|
||||
$env.TERMINAL = "ghostty"
|
||||
$env.EDITOR = "nvim"
|
||||
$env.VISUAL = "zeditor"
|
||||
$env.FZF_DEFAULT_COMMAND = "fd --type f --exclude .git --follow --hidden"
|
||||
$env.FZF_DEFAULT_OPTS = "--preview='bat --color=always -n {}' --bind 'ctrl-/:toggle-preview' --header 'Press CTRL-Y to copy command into clipboard' --bind 'ctrl-y:execute-silent(echo -n {2..} | wl-copy)+abort' --color bg:#282a36,bg+:#44475a,fg:#f8f8f2,fg+:#f8f8f2,header:#6272a4,hl:#bd93f9,hl+:#bd93f9,info:#ffb86c,marker:#ff79c6,pointer:#ff79c6,prompt:#50fa7b,spinner:#ffb86c"
|
||||
$env.XDG_DATA_HOME = $"($env.HOME)/.local/share"
|
||||
$env.SSH_AUTH_SOCK = "/run/user/1000/gnupg/S.gpg-agent.ssh"
|
||||
$env.PATH = ($env.PATH | split row (char esep) | append $"($env.HOME)/.cache/.bun/bin" | append $"($env.HOME)/.npm-global/bin" | uniq)
|
||||
$env.NPM_CONFIG_PREFIX = $"($env.HOME)/.npm-global"
|
||||
$env.FLAKE = $"($env.HOME)/p/NIX/nixos-config"
|
||||
|
||||
# Load kestractl-env from agenix
|
||||
if ("/run/agenix/kestractl-env" | path exists) {
|
||||
open /run/agenix/kestractl-env
|
||||
| lines
|
||||
| where {($in | str trim | str length) > 0}
|
||||
| parse "{key}={value}"
|
||||
| update value {str trim -c '"'}
|
||||
| transpose -r -d
|
||||
| load-env
|
||||
}
|
||||
'';
|
||||
|
||||
configFile.text = ''
|
||||
# Aliases
|
||||
alias .. = cd ..
|
||||
alias ... = cd ...
|
||||
alias h = cd $env.HOME
|
||||
alias b = yazi
|
||||
alias lt = eza --tree --level=2 --long --icons --git
|
||||
alias grep = rg
|
||||
alias just = just --unstable
|
||||
|
||||
alias node = bun
|
||||
alias npx = bunx
|
||||
|
||||
alias n = nix
|
||||
alias nd = nix develop -c $nu.current-shell
|
||||
alias ns = nix shell
|
||||
alias nsn = nix shell nixpkgs#
|
||||
alias nb = nix build
|
||||
alias nbn = nix build nixpkgs#
|
||||
alias nf = nix flake
|
||||
|
||||
alias nr = sudo nixos-rebuild --flake .
|
||||
alias nrs = sudo nixos-rebuild switch --flake .#(sys host | get hostname)
|
||||
alias snr = sudo nixos-rebuild --flake .
|
||||
alias snrs = sudo nixos-rebuild --flake . switch
|
||||
alias hm = home-manager --flake .
|
||||
alias hms = home-manager --flake . switch
|
||||
alias hmr = do { cd ~/projects/nix-configurations; nix flake lock --update-input dotfiles; home-manager --flake .#(whoami)@(hostname) switch }
|
||||
|
||||
alias tsu = sudo tailscale up
|
||||
alias tsd = sudo tailscale down
|
||||
|
||||
alias vi = nvim
|
||||
alias vim = nvim
|
||||
|
||||
if (which tv | is-not-empty) {
|
||||
mkdir ($nu.data-dir | path join "vendor/autoload")
|
||||
tv init nu | save -f ($nu.data-dir | path join "vendor/autoload/tv.nu")
|
||||
}
|
||||
'';
|
||||
};
|
||||
};
|
||||
}
|
||||
70
profiles/base/shell/starship.nix
Normal file
70
profiles/base/shell/starship.nix
Normal file
@@ -0,0 +1,70 @@
|
||||
# Starship cross-shell prompt with nix-colors theming.
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
with lib; let
|
||||
cfg = config.base.shell.starship;
|
||||
in {
|
||||
# Enabled by default — base modules are always-on.
|
||||
options.base.shell.starship.enable = (mkEnableOption "enable starship prompt") // {default = true;};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
programs.starship = {
|
||||
enable = true;
|
||||
enableFishIntegration = true;
|
||||
enableNushellIntegration = true;
|
||||
settings = {
|
||||
format = "$all$character";
|
||||
palette = "universal";
|
||||
|
||||
palettes.universal = {
|
||||
background = "#${config.colorScheme.palette.base00}";
|
||||
surface = "#${config.colorScheme.palette.base01}";
|
||||
muted = "#${config.colorScheme.palette.base03}";
|
||||
text = "#${config.colorScheme.palette.base05}";
|
||||
bright = "#${config.colorScheme.palette.base07}";
|
||||
accent1 = "#${config.colorScheme.palette.base08}";
|
||||
accent2 = "#${config.colorScheme.palette.base09}";
|
||||
accent3 = "#${config.colorScheme.palette.base0A}";
|
||||
accent4 = "#${config.colorScheme.palette.base0B}";
|
||||
accent5 = "#${config.colorScheme.palette.base0C}";
|
||||
accent6 = "#${config.colorScheme.palette.base0D}";
|
||||
accent7 = "#${config.colorScheme.palette.base0E}";
|
||||
};
|
||||
|
||||
character = {
|
||||
success_symbol = "[❯](accent7)";
|
||||
error_symbol = "[❯](accent1)";
|
||||
};
|
||||
|
||||
directory = {
|
||||
style = "accent6";
|
||||
truncation_length = 3;
|
||||
truncate_to_repo = false;
|
||||
};
|
||||
|
||||
git_branch = {
|
||||
style = "accent7";
|
||||
};
|
||||
|
||||
git_status = {
|
||||
style = "accent5";
|
||||
};
|
||||
|
||||
cmd_duration = {
|
||||
style = "accent3";
|
||||
};
|
||||
|
||||
hostname = {
|
||||
style = "accent4";
|
||||
};
|
||||
|
||||
username = {
|
||||
style_user = "accent2";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user