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:
145
profiles/base/cli-tools/bat.nix
Normal file
145
profiles/base/cli-tools/bat.nix
Normal file
@@ -0,0 +1,145 @@
|
||||
# Bat — cat replacement with nix-colors syntax highlighting theme.
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
with lib; let
|
||||
cfg = config.base.cliTools.bat;
|
||||
palette = config.colorScheme.palette;
|
||||
in {
|
||||
# Enabled by default — base modules are always-on.
|
||||
options.base.cliTools.bat.enable = (mkEnableOption "enable bat with nix-colors theme") // {default = true;};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
programs.bat = {
|
||||
enable = true;
|
||||
config = {theme = "universal";};
|
||||
themes = {
|
||||
universal = {
|
||||
src = pkgs.writeText "universal.tmTheme" ''
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Universal (nix-colors)</string>
|
||||
<key>settings</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>background</key>
|
||||
<string>#${palette.base00}</string>
|
||||
<key>foreground</key>
|
||||
<string>#${palette.base05}</string>
|
||||
<key>caret</key>
|
||||
<string>#${palette.base05}</string>
|
||||
<key>selection</key>
|
||||
<string>#${palette.base02}</string>
|
||||
<key>selectionForeground</key>
|
||||
<string>#${palette.base05}</string>
|
||||
<key>lineHighlight</key>
|
||||
<string>#${palette.base01}</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Comment</string>
|
||||
<key>scope</key>
|
||||
<string>comment</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#${palette.base03}</string>
|
||||
<key>fontStyle</key>
|
||||
<string>italic</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>String</string>
|
||||
<key>scope</key>
|
||||
<string>string</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#${palette.base0A}</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Number</string>
|
||||
<key>scope</key>
|
||||
<string>constant.numeric</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#${palette.base0E}</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Keyword</string>
|
||||
<key>scope</key>
|
||||
<string>keyword</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#${palette.base08}</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Function</string>
|
||||
<key>scope</key>
|
||||
<string>entity.name.function</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#${palette.base0B}</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Type</string>
|
||||
<key>scope</key>
|
||||
<string>entity.name.type, storage.type</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#${palette.base0D}</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Variable</string>
|
||||
<key>scope</key>
|
||||
<string>variable</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#${palette.base05}</string>
|
||||
</dict>
|
||||
</dict>
|
||||
<dict>
|
||||
<key>name</key>
|
||||
<string>Constant</string>
|
||||
<key>scope</key>
|
||||
<string>constant</string>
|
||||
<key>settings</key>
|
||||
<dict>
|
||||
<key>foreground</key>
|
||||
<string>#${palette.base0E}</string>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
||||
'';
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
21
profiles/base/cli-tools/carapace.nix
Normal file
21
profiles/base/cli-tools/carapace.nix
Normal file
@@ -0,0 +1,21 @@
|
||||
# Carapace — multi-shell completion engine with Fish, Nushell, and Bash integration.
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
with lib; let
|
||||
cfg = config.base.cliTools.carapace;
|
||||
in {
|
||||
# Enabled by default — base modules are always-on.
|
||||
options.base.cliTools.carapace.enable = (mkEnableOption "enable carapace completion engine") // {default = true;};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
programs.carapace = {
|
||||
enable = true;
|
||||
enableFishIntegration = true;
|
||||
enableNushellIntegration = true;
|
||||
enableBashIntegration = true;
|
||||
};
|
||||
};
|
||||
}
|
||||
17
profiles/base/cli-tools/default.nix
Normal file
17
profiles/base/cli-tools/default.nix
Normal file
@@ -0,0 +1,17 @@
|
||||
# CLI tools aggregator — imports all base command-line utilities.
|
||||
{...}: {
|
||||
imports = [
|
||||
./bat.nix
|
||||
./carapace.nix
|
||||
./direnv.nix
|
||||
./eza.nix
|
||||
./fzf.nix
|
||||
./lf.nix
|
||||
./nitch.nix
|
||||
./packages.nix
|
||||
./television.nix
|
||||
./zellij.nix
|
||||
./zellij-ps.nix
|
||||
./zoxide.nix
|
||||
];
|
||||
}
|
||||
20
profiles/base/cli-tools/direnv.nix
Normal file
20
profiles/base/cli-tools/direnv.nix
Normal file
@@ -0,0 +1,20 @@
|
||||
# Direnv — automatic environment loading with nix-direnv integration.
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
with lib; let
|
||||
cfg = config.base.cliTools.direnv;
|
||||
in {
|
||||
# Enabled by default — base modules are always-on.
|
||||
options.base.cliTools.direnv.enable = (mkEnableOption "enable direnv with nix-direnv") // {default = true;};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
programs.direnv = {
|
||||
enable = true;
|
||||
enableNushellIntegration = true;
|
||||
nix-direnv.enable = true;
|
||||
};
|
||||
};
|
||||
}
|
||||
21
profiles/base/cli-tools/eza.nix
Normal file
21
profiles/base/cli-tools/eza.nix
Normal file
@@ -0,0 +1,21 @@
|
||||
# Eza — modern ls replacement with icons, git status, and long format by default.
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
with lib; let
|
||||
cfg = config.base.cliTools.eza;
|
||||
in {
|
||||
# Enabled by default — base modules are always-on.
|
||||
options.base.cliTools.eza.enable = (mkEnableOption "enable eza modern ls replacement") // {default = true;};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
programs.eza = {
|
||||
enable = true;
|
||||
enableFishIntegration = true;
|
||||
enableBashIntegration = true;
|
||||
extraOptions = ["-l" "--icons" "--git" "-a"];
|
||||
};
|
||||
};
|
||||
}
|
||||
41
profiles/base/cli-tools/fzf.nix
Normal file
41
profiles/base/cli-tools/fzf.nix
Normal file
@@ -0,0 +1,41 @@
|
||||
# Fuzzy finder with nix-colors palette and Wayland clipboard integration.
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
with lib; let
|
||||
cfg = config.base.cliTools.fzf;
|
||||
in {
|
||||
# Enabled by default — base modules are always-on.
|
||||
options.base.cliTools.fzf.enable = (mkEnableOption "enable fuzzy finder") // {default = true;};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
programs.fzf = {
|
||||
enable = true;
|
||||
enableFishIntegration = true;
|
||||
colors = {
|
||||
"fg" = "#${config.colorScheme.palette.base05}";
|
||||
"bg" = "#${config.colorScheme.palette.base00}";
|
||||
"hl" = "#${config.colorScheme.palette.base0E}";
|
||||
"fg+" = "#${config.colorScheme.palette.base05}";
|
||||
"bg+" = "#${config.colorScheme.palette.base02}";
|
||||
"hl+" = "#${config.colorScheme.palette.base0E}";
|
||||
"info" = "#${config.colorScheme.palette.base09}";
|
||||
"prompt" = "#${config.colorScheme.palette.base0B}";
|
||||
"pointer" = "#${config.colorScheme.palette.base08}";
|
||||
"marker" = "#${config.colorScheme.palette.base08}";
|
||||
"spinner" = "#${config.colorScheme.palette.base09}";
|
||||
"header" = "#${config.colorScheme.palette.base03}";
|
||||
};
|
||||
defaultOptions = [
|
||||
"--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'"
|
||||
];
|
||||
defaultCommand = "fd --type f --exclude .git --follow --hidden";
|
||||
changeDirWidgetCommand = "fd --type d --exclude .git --follow --hidden";
|
||||
};
|
||||
};
|
||||
}
|
||||
28
profiles/base/cli-tools/lf.nix
Normal file
28
profiles/base/cli-tools/lf.nix
Normal file
@@ -0,0 +1,28 @@
|
||||
# Lf — terminal file manager with bat preview and Dracula theme.
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
with lib; let
|
||||
cfg = config.base.cliTools.lf;
|
||||
in {
|
||||
# Enabled by default — base modules are always-on.
|
||||
options.base.cliTools.lf.enable = (mkEnableOption "enable lf terminal file manager") // {default = true;};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
home.packages = [pkgs.lf];
|
||||
|
||||
programs.lf = {
|
||||
enable = true;
|
||||
settings = {
|
||||
preview = true;
|
||||
drawbox = true;
|
||||
hidden = true;
|
||||
icons = true;
|
||||
previewer = "bat";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
17
profiles/base/cli-tools/nitch.nix
Normal file
17
profiles/base/cli-tools/nitch.nix
Normal file
@@ -0,0 +1,17 @@
|
||||
# Nitch — minimal system information display tool.
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
with lib; let
|
||||
cfg = config.base.cliTools.nitch;
|
||||
in {
|
||||
# Enabled by default — base modules are always-on.
|
||||
options.base.cliTools.nitch.enable = (mkEnableOption "enable nitch") // {default = true;};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
home.packages = [pkgs.nitch];
|
||||
};
|
||||
}
|
||||
62
profiles/base/cli-tools/packages.nix
Normal file
62
profiles/base/cli-tools/packages.nix
Normal file
@@ -0,0 +1,62 @@
|
||||
# Essential CLI packages — core utilities always available on every host.
|
||||
# NOTE: `lazylib` does not exist in nixpkgs. `lazygit` is the correct package
|
||||
# (Git TUI) and is intentionally used here instead.
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
with lib; let
|
||||
cfg = config.base.cliTools.essentials;
|
||||
in {
|
||||
# Enabled by default — base modules are always-on.
|
||||
options.base.cliTools.essentials.enable = (mkEnableOption "enable essential CLI packages") // {default = true;};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
home.packages = with pkgs; [
|
||||
# Core utilities
|
||||
coreutils
|
||||
fd
|
||||
htop
|
||||
jq
|
||||
ripgrep
|
||||
|
||||
# Nix
|
||||
alejandra
|
||||
comma
|
||||
nixd
|
||||
nix-diff
|
||||
nix-index
|
||||
nix-update
|
||||
|
||||
# Dev tools
|
||||
bc
|
||||
cmake
|
||||
devenv
|
||||
gcc
|
||||
gnumake
|
||||
go
|
||||
httpie
|
||||
just
|
||||
lazygit
|
||||
progress
|
||||
sqlite
|
||||
sqlite-vec
|
||||
tldr
|
||||
|
||||
# AI tools
|
||||
fabric-ai
|
||||
llm
|
||||
|
||||
# Misc
|
||||
basecamp
|
||||
hyprpaper-random
|
||||
libnotify
|
||||
trash-cli
|
||||
unzip
|
||||
yazi
|
||||
zip
|
||||
];
|
||||
};
|
||||
}
|
||||
60
profiles/base/cli-tools/television.nix
Normal file
60
profiles/base/cli-tools/television.nix
Normal file
@@ -0,0 +1,60 @@
|
||||
# Television — fuzzy finder with custom channels for tldr, git-diff, and git-log.
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
with lib; let
|
||||
cfg = config.base.cliTools.television;
|
||||
in {
|
||||
# Enabled by default — base modules are always-on.
|
||||
options.base.cliTools.television.enable = (mkEnableOption "enable television") // {default = true;};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
programs.television = {
|
||||
enable = true;
|
||||
channels = {
|
||||
tldr = {
|
||||
metadata = {
|
||||
description = "Browse TLDR pages";
|
||||
name = "tldr";
|
||||
requirements = ["tldr"];
|
||||
};
|
||||
preview = {
|
||||
command = "tldr '{}'";
|
||||
};
|
||||
source = {
|
||||
command = "tldr --list";
|
||||
};
|
||||
};
|
||||
git-diff = {
|
||||
metadata = {
|
||||
description = "A channel to select files from git diff commands";
|
||||
name = "git-diff";
|
||||
requirements = ["git"];
|
||||
};
|
||||
preview = {
|
||||
command = "git diff HEAD --color=always -- '{}'";
|
||||
};
|
||||
source = {
|
||||
command = "git diff --name-only HEAD";
|
||||
};
|
||||
};
|
||||
git-log = {
|
||||
metadata = {
|
||||
description = "A channel to select from git log entries";
|
||||
name = "git-log";
|
||||
requirements = ["git"];
|
||||
};
|
||||
preview = {
|
||||
command = "git show -p --stat --pretty=fuller --color=always '{0}'";
|
||||
};
|
||||
source = {
|
||||
command = "git log --oneline --date=short --pretty=\"format:%h %s %an %cd\" \"$@\"";
|
||||
output = "{split: :0}";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
30
profiles/base/cli-tools/zellij-ps.nix
Normal file
30
profiles/base/cli-tools/zellij-ps.nix
Normal file
@@ -0,0 +1,30 @@
|
||||
# Zellij-ps — project-aware Zellij session manager from m3ta-nixpkgs.
|
||||
# Delegates to `cli.zellij-ps` — the home-manager module namespace provided by
|
||||
# m3ta-nixpkgs (inputs.m3ta-nixpkgs.nixosModules.default). This is intentional;
|
||||
# `cli.*` is the convention used by m3ta-nixpkgs home-manager modules.
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
with lib; let
|
||||
cfg = config.base.cliTools.zellijPs;
|
||||
in {
|
||||
options.base.cliTools.zellijPs = {
|
||||
# Enabled by default — base modules are always-on.
|
||||
enable = (mkEnableOption "enable zellij-ps project session manager") // {default = true;};
|
||||
|
||||
projectFolders = mkOption {
|
||||
type = types.listOf types.path;
|
||||
description = "Project root folders scanned by zellij-ps.";
|
||||
default = ["${config.home.homeDirectory}/p"];
|
||||
};
|
||||
};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
cli.zellij-ps = {
|
||||
enable = true;
|
||||
projectFolders = cfg.projectFolders;
|
||||
};
|
||||
};
|
||||
}
|
||||
34
profiles/base/cli-tools/zellij.nix
Normal file
34
profiles/base/cli-tools/zellij.nix
Normal file
@@ -0,0 +1,34 @@
|
||||
# Zellij terminal multiplexer with nix-colors theming.
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
with lib; let
|
||||
cfg = config.base.cliTools.zellij;
|
||||
in {
|
||||
# Enabled by default — base modules are always-on.
|
||||
options.base.cliTools.zellij.enable = (mkEnableOption "enable zellij multiplexer") // {default = true;};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
programs.zellij = {
|
||||
enable = true;
|
||||
settings = {
|
||||
theme = "universal";
|
||||
themes.universal = {
|
||||
bg = "#${config.colorScheme.palette.base00}";
|
||||
fg = "#${config.colorScheme.palette.base05}";
|
||||
black = "#${config.colorScheme.palette.base01}";
|
||||
red = "#${config.colorScheme.palette.base08}";
|
||||
green = "#${config.colorScheme.palette.base0B}";
|
||||
yellow = "#${config.colorScheme.palette.base0A}";
|
||||
blue = "#${config.colorScheme.palette.base0D}";
|
||||
magenta = "#${config.colorScheme.palette.base0E}";
|
||||
cyan = "#${config.colorScheme.palette.base0C}";
|
||||
white = "#${config.colorScheme.palette.base07}";
|
||||
orange = "#${config.colorScheme.palette.base09}";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
20
profiles/base/cli-tools/zoxide.nix
Normal file
20
profiles/base/cli-tools/zoxide.nix
Normal file
@@ -0,0 +1,20 @@
|
||||
# Zoxide — smarter cd with Fish and Nushell integration.
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
...
|
||||
}:
|
||||
with lib; let
|
||||
cfg = config.base.cliTools.zoxide;
|
||||
in {
|
||||
# Enabled by default — base modules are always-on.
|
||||
options.base.cliTools.zoxide.enable = (mkEnableOption "enable zoxide smarter cd") // {default = true;};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
programs.zoxide = {
|
||||
enable = true;
|
||||
enableFishIntegration = true;
|
||||
enableNushellIntegration = true;
|
||||
};
|
||||
};
|
||||
}
|
||||
68
profiles/base/default.nix
Normal file
68
profiles/base/default.nix
Normal file
@@ -0,0 +1,68 @@
|
||||
# profiles/base/default.nix — Always loaded on every host.
|
||||
#
|
||||
# Provides:
|
||||
# - nixpkgs overlays and config (unfree, nix-colors, m3ta-nixpkgs)
|
||||
# - Shell (nushell, fish, starship) with enable options
|
||||
# - CLI tools (bat, carapace, direnv, eza, fzf, lf, nitch, television, zellij, zoxide)
|
||||
# - Secrets management (pass-wayland)
|
||||
# - Base packages (libgtop)
|
||||
{
|
||||
inputs,
|
||||
lib,
|
||||
outputs,
|
||||
pkgs,
|
||||
system,
|
||||
...
|
||||
}: {
|
||||
imports = [
|
||||
inputs.nix-colors.homeManagerModules.default
|
||||
inputs.m3ta-nixpkgs.homeManagerModules.default
|
||||
|
||||
./shell
|
||||
./cli-tools
|
||||
./secrets
|
||||
];
|
||||
|
||||
# ── nixpkgs configuration ──
|
||||
nixpkgs = {
|
||||
overlays = [
|
||||
outputs.overlays.temp-packages
|
||||
outputs.overlays.stable-packages
|
||||
outputs.overlays.locked-packages
|
||||
outputs.overlays.pinned-packages
|
||||
outputs.overlays.master-packages
|
||||
|
||||
inputs.nur.overlays.default
|
||||
inputs.m3ta-nixpkgs.overlays.default
|
||||
inputs.m3ta-nixpkgs.overlays.modifications
|
||||
(outputs.lib.mkLlmAgentsOverlay system)
|
||||
];
|
||||
config = {
|
||||
allowUnfree = true;
|
||||
allowUnfreePredicate = _: true;
|
||||
};
|
||||
};
|
||||
|
||||
# ── Nix settings ──
|
||||
nix = {
|
||||
package = lib.mkDefault pkgs.nix;
|
||||
settings = {
|
||||
experimental-features = ["nix-command" "flakes"];
|
||||
warn-dirty = false;
|
||||
};
|
||||
};
|
||||
|
||||
# ── Color scheme ──
|
||||
colorScheme = inputs.nix-colors.colorSchemes.dracula;
|
||||
|
||||
# ── Base packages ──
|
||||
home.packages = with pkgs; [
|
||||
libgtop
|
||||
];
|
||||
|
||||
# ── Home Manager self-management ──
|
||||
programs.home-manager.enable = true;
|
||||
|
||||
# ── Default home state version ──
|
||||
home.stateVersion = lib.mkDefault "26.05";
|
||||
}
|
||||
24
profiles/base/secrets/secrets.nix
Normal file
24
profiles/base/secrets/secrets.nix
Normal file
@@ -0,0 +1,24 @@
|
||||
# Password store and secrets management via pass-wayland with OTP and import extensions.
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}:
|
||||
with lib; let
|
||||
cfg = config.base.secrets;
|
||||
in {
|
||||
# Enabled by default — base modules are always-on.
|
||||
options.base.secrets.enable = (mkEnableOption "enable secrets management") // {default = true;};
|
||||
|
||||
config = mkIf cfg.enable {
|
||||
programs.password-store = {
|
||||
enable = true;
|
||||
package =
|
||||
pkgs.pass-wayland.withExtensions
|
||||
(exts: [exts.pass-otp exts.pass-import]);
|
||||
settings = {PASSWORD_STORE_DIR = "$XDG_DATA_HOME/password-store";};
|
||||
};
|
||||
home.packages = [pkgs.pinentry-gnome3];
|
||||
};
|
||||
}
|
||||
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