fix: dev vm enhacement, switch podman

This commit is contained in:
Rasyidan Akbar F. 2025-10-29 15:30:41 +07:00
commit 831f307f83
70 changed files with 2977 additions and 962 deletions

View file

@ -1,6 +1,4 @@
{ config, pkgs, lib, ... }: {
imports = [ ./oh-my-posh ];
programs.fish = {
enable = true;
interactiveShellInit = ''
@ -10,8 +8,6 @@
'';
};
programs.oh-my-posh.enableFishIntegration = lib.mkDefault true;
# Ensure fish is available for login shells on Linux hosts.
home.packages = lib.mkAfter [ pkgs.fish ];
}

View file

@ -1,6 +1,7 @@
{ config, pkgs, lib, ... }:
let
profileBin = "${config.home.profileDirectory}/bin";
# System binaries path - same on both NixOS and Darwin
systemBin = "/run/current-system/sw/bin";
defaultBin = "/nix/var/nix/profiles/default/bin";
darwinHomebrewDir = if pkgs.stdenv.hostPlatform.isAarch64 then
@ -25,50 +26,55 @@ let
formatPathList = paths:
lib.concatMapStrings (path: " \"${path}\"\n") paths;
in {
imports = [ ./oh-my-posh ];
imports = [ ./starship ];
programs.nushell.enable = lib.mkDefault true;
programs.nushell.extraConfig = ''
# Dotfiles QA validation command
def dotfiles-qa [] {
let dotfiles_dir = "${config.home.homeDirectory}/Development/dotfiles"
def dotfiles-qa [] {
let dotfiles_dir = "${config.home.homeDirectory}/Development/dotfiles"
print $"(ansi green_bold)Running dotfiles QA validation...(ansi reset)\n"
print $"(ansi green_bold)Running dotfiles QA validation...(ansi reset)\n"
# Step 1: Format check
print $"(ansi blue)1. Formatting nix files...(ansi reset)"
cd $dotfiles_dir
nix fmt .
if $env.LAST_EXIT_CODE != 0 {
print $"(ansi red_bold) Formatting failed(ansi reset)"
return
# Step 1: Format check
print $"(ansi blue)1. Formatting nix files...(ansi reset)"
cd $dotfiles_dir
nix fmt .
if $env.LAST_EXIT_CODE != 0 {
print $"(ansi red_bold) Formatting failed(ansi reset)"
return
}
print $"(ansi green) Formatting complete(ansi reset)\n"
# Step 2: Flake check
print $"(ansi blue)2. Running flake check...(ansi reset)"
nix flake check
if $env.LAST_EXIT_CODE != 0 {
print $"(ansi red_bold) Flake check failed(ansi reset)"
return
}
print $"(ansi green) Flake check passed(ansi reset)\n"
# Step 3: Build (without activation)
print $"(ansi blue)3. Building darwin configuration (no activation)...(ansi reset)"
darwin-rebuild build --flake $"($dotfiles_dir)#macbook-pro"
if $env.LAST_EXIT_CODE != 0 {
print $"(ansi yellow) Build had warnings, but may still work(ansi reset)\n"
} else {
print $"(ansi green) Build successful(ansi reset)\n"
}
print $"(ansi green_bold) Core QA checks passed!(ansi reset)"
}
print $"(ansi green) Formatting complete(ansi reset)\n"
# Step 2: Flake check
print $"(ansi blue)2. Running flake check...(ansi reset)"
nix flake check
if $env.LAST_EXIT_CODE != 0 {
print $"(ansi red_bold) Flake check failed(ansi reset)"
return
}
print $"(ansi green) Flake check passed(ansi reset)\n"
# Step 3: Build (without activation)
print $"(ansi blue)3. Building darwin configuration (no activation)...(ansi reset)"
darwin-rebuild build --flake $"($dotfiles_dir)#macbook-pro"
if $env.LAST_EXIT_CODE != 0 {
print $"(ansi yellow) Build had warnings, but may still work(ansi reset)\n"
} else {
print $"(ansi green) Build successful(ansi reset)\n"
}
print $"(ansi green_bold) Core QA checks passed!(ansi reset)"
}
'';
programs.nushell.envFile.text = ''
# Set XDG Base Directory environment variables
$env.XDG_CONFIG_HOME = "${config.xdg.configHome}"
$env.XDG_DATA_HOME = "${config.xdg.dataHome}"
$env.XDG_CACHE_HOME = "${config.xdg.cacheHome}"
let nix_paths = [
${formatPathList [ profileBin systemBin defaultBin ]} ]
@ -113,6 +119,4 @@ in {
load-secret "groq-api-key" "GROQ_API_KEY"
load-secret "firecrawl-api-key" "FIRECRAWL_API_KEY"
'';
programs.oh-my-posh.enableNushellIntegration = lib.mkDefault true;
}

View file

@ -1,86 +0,0 @@
{
"$schema": "https://raw.githubusercontent.com/JanDeDobbeleer/oh-my-posh/main/themes/schema.json",
"blocks": [
{
"alignment": "right",
"segments": [
{
"background": "#003543",
"foreground": "#ffffff",
"style": "plain",
"template": " \ue641 {{ .CurrentDate | date .Format }} ",
"type": "time"
},
{
"background": "#83769c",
"foreground": "#ffffff",
"properties": {
"always_enabled": true
},
"style": "plain",
"template": " \ueba2 {{ .FormattedMs }} ",
"type": "executiontime"
}
],
"type": "rprompt"
},
{
"alignment": "left",
"segments": [
{
"background": "#61AFEF",
"foreground": "#ffffff",
"properties": {
"display_host": false
},
"style": "diamond",
"template": "{{if .Root}} \uf0e7 {{.UserName}} {{else}} {{.UserName}} {{end}}",
"trailing_diamond": "\ue0b0",
"type": "session"
},
{
"background": "#C678DD",
"foreground": "#ffffff",
"powerline_symbol": "\ue0b0",
"properties": {
"folder_icon": "\uf115",
"folder_separator_icon": " \ue0b1 ",
"max_depth": 2,
"style": "agnoster_short"
},
"style": "powerline",
"template": " {{ .Path }} ",
"type": "path"
},
{
"background": "#95ffa4",
"foreground": "#193549",
"powerline_symbol": "\ue0b0",
"properties": {
"fetch_status": true
},
"style": "powerline",
"template": " {{ .HEAD }}{{ if .BranchStatus }} {{ .BranchStatus }}{{ end }}{{- $staged := add .Staging.Added (add .Staging.Modified (add .Staging.Deleted .Staging.Unmerged)) -}}{{ if gt $staged 0 }} ^{{$staged}}{{ end }}{{ if gt .Working.Modified 0 }} ~{{ .Working.Modified }}{{ end }}{{ if gt .Working.Deleted 0 }} -{{ .Working.Deleted }}{{ end }}{{ if gt .Working.Untracked 0 }} +{{ .Working.Untracked }}{{ end }} ",
"type": "git"
}
],
"type": "prompt"
},
{
"alignment": "left",
"newline": true,
"segments": [
{
"foreground": "#61AFEF",
"style": "plain",
"template": " ",
"type": "text"
}
],
"type": "prompt"
}
],
"console_title_template": "{{if .Root}} \u26a1 {{end}}{{.UserName}} \u2794 📁{{.Folder}}",
"final_space": true,
"version": 3
}

View file

@ -1,13 +0,0 @@
{ config, lib, ... }:
let
themeName = "capr4n.omp.json";
themeSource = ./capr4n.omp.json;
themeConfigPath = "${config.xdg.configHome}/oh-my-posh/${themeName}";
in {
programs.oh-my-posh = {
enable = lib.mkDefault true;
configFile = themeConfigPath;
};
xdg.configFile."oh-my-posh/${themeName}".source = themeSource;
}

View file

@ -0,0 +1,8 @@
{ lib, ... }: {
programs.starship = {
enable = lib.mkDefault true;
enableFishIntegration = true;
enableNushellIntegration = true;
settings = lib.importTOML ./starship.toml;
};
}

View file

@ -0,0 +1,180 @@
"$schema" = "https://starship.rs/config-schema.json"
format = """
[](color_orange)\
$os\
$username\
[](bg:color_yellow fg:color_orange)\
$directory\
[](fg:color_yellow bg:color_aqua)\
$git_branch\
$git_status\
[](fg:color_aqua bg:color_blue)\
$c\
$cpp\
$rust\
$golang\
$nodejs\
$php\
$java\
$kotlin\
$haskell\
$python\
[](fg:color_blue bg:color_bg3)\
$docker_context\
$conda\
$pixi\
[](fg:color_bg3 bg:color_bg1)\
$time\
[ ](fg:color_bg1)\
$line_break$character"""
palette = "gruvbox_dark"
[palettes.gruvbox_dark]
color_fg0 = "#fbf1c7"
color_bg1 = "#3c3836"
color_bg3 = "#665c54"
color_blue = "#458588"
color_aqua = "#689d6a"
color_green = "#98971a"
color_orange = "#d65d0e"
color_purple = "#b16286"
color_red = "#cc241d"
color_yellow = "#d79921"
[os]
disabled = false
style = "bg:color_orange fg:color_fg0"
[os.symbols]
Windows = "󰍲"
Ubuntu = "󰕈"
SUSE = ""
Raspbian = "󰐿"
Mint = "󰣭"
Macos = "󰀵"
Manjaro = ""
Linux = "󰌽"
Gentoo = "󰣨"
Fedora = "󰣛"
Alpine = ""
Amazon = ""
Android = ""
Arch = "󰣇"
Artix = "󰣇"
EndeavourOS = ""
CentOS = ""
Debian = "󰣚"
Redhat = "󱄛"
RedHatEnterprise = "󱄛"
Pop = ""
[username]
show_always = true
style_user = "bg:color_orange fg:color_fg0"
style_root = "bg:color_orange fg:color_fg0"
format = "[ $user ]($style)"
[directory]
style = "fg:color_fg0 bg:color_yellow"
format = "[ $path ]($style)"
truncation_length = 3
truncation_symbol = "…/"
[directory.substitutions]
Documents = "󰈙 "
Downloads = " "
Music = "󰝚 "
Pictures = " "
Developer = "󰲋 "
[git_branch]
symbol = ""
style = "bg:color_aqua"
format = "[[ $symbol $branch ](fg:color_fg0 bg:color_aqua)]($style)"
[git_status]
style = "bg:color_aqua"
format = "[[($all_status$ahead_behind )](fg:color_fg0 bg:color_aqua)]($style)"
[nodejs]
symbol = ""
style = "bg:color_blue"
format = "[[ $symbol( $version) ](fg:color_fg0 bg:color_blue)]($style)"
[c]
symbol = " "
style = "bg:color_blue"
format = "[[ $symbol( $version) ](fg:color_fg0 bg:color_blue)]($style)"
[cpp]
symbol = " "
style = "bg:color_blue"
format = "[[ $symbol( $version) ](fg:color_fg0 bg:color_blue)]($style)"
[rust]
symbol = ""
style = "bg:color_blue"
format = "[[ $symbol( $version) ](fg:color_fg0 bg:color_blue)]($style)"
[golang]
symbol = ""
style = "bg:color_blue"
format = "[[ $symbol( $version) ](fg:color_fg0 bg:color_blue)]($style)"
[php]
symbol = ""
style = "bg:color_blue"
format = "[[ $symbol( $version) ](fg:color_fg0 bg:color_blue)]($style)"
[java]
symbol = ""
style = "bg:color_blue"
format = "[[ $symbol( $version) ](fg:color_fg0 bg:color_blue)]($style)"
[kotlin]
symbol = ""
style = "bg:color_blue"
format = "[[ $symbol( $version) ](fg:color_fg0 bg:color_blue)]($style)"
[haskell]
symbol = ""
style = "bg:color_blue"
format = "[[ $symbol( $version) ](fg:color_fg0 bg:color_blue)]($style)"
[python]
symbol = ""
style = "bg:color_blue"
format = "[[ $symbol( $version) ](fg:color_fg0 bg:color_blue)]($style)"
[docker_context]
symbol = ""
style = "bg:color_bg3"
format = "[[ $symbol( $context) ](fg:#83a598 bg:color_bg3)]($style)"
[conda]
style = "bg:color_bg3"
format = "[[ $symbol( $environment) ](fg:#83a598 bg:color_bg3)]($style)"
[pixi]
style = "bg:color_bg3"
format = "[[ $symbol( $version)( $environment) ](fg:color_fg0 bg:color_bg3)]($style)"
[time]
disabled = false
time_format = "%R"
style = "bg:color_bg1"
format = "[[  $time ](fg:color_fg0 bg:color_bg1)]($style)"
[line_break]
disabled = false
[character]
disabled = false
success_symbol = "[](bold fg:color_green)"
error_symbol = "[](bold fg:color_red)"
vimcmd_symbol = "[](bold fg:color_green)"
vimcmd_replace_one_symbol = "[](bold fg:color_purple)"
vimcmd_replace_symbol = "[](bold fg:color_purple)"
vimcmd_visual_symbol = "[](bold fg:color_yellow)"

View file

@ -0,0 +1,181 @@
"$schema" = "https://starship.rs/config-schema.json"
format = """
[](color_orange)\
$os\
$username\
[](bg:color_yellow fg:color_orange)\
$directory\
[](fg:color_yellow bg:color_aqua)\
$git_branch\
$git_status\
[](fg:color_aqua bg:color_blue)\
$c\
$cpp\
$rust\
$golang\
$nodejs\
$php\
$java\
$kotlin\
$haskell\
$python\
[](fg:color_blue bg:color_bg3)\
$docker_context\
$conda\
$pixi\
[](fg:color_bg3 bg:color_bg1)\
$time\
[ ](fg:color_bg1)\
$line_break$character"""
palette = "gruvbox_dark"
[palettes.gruvbox_dark]
color_fg0 = "#fbf1c7"
color_bg1 = "#3c3836"
color_bg3 = "#665c54"
color_blue = "#458588"
color_aqua = "#689d6a"
color_green = "#98971a"
color_orange = "#d65d0e"
color_purple = "#b16286"
color_red = "#cc241d"
color_yellow = "#d79921"
[os]
disabled = false
style = "bg:color_orange fg:color_fg0"
[os.symbols]
Windows = "󰍲"
Ubuntu = "󰕈"
SUSE = ""
Raspbian = "󰐿"
Mint = "󰣭"
Macos = "󰀵"
Manjaro = ""
Linux = "󰌽"
Gentoo = "󰣨"
Fedora = "󰣛"
Alpine = ""
Amazon = ""
Android = ""
AOSC = ""
Arch = "󰣇"
Artix = "󰣇"
EndeavourOS = ""
CentOS = ""
Debian = "󰣚"
Redhat = "󱄛"
RedHatEnterprise = "󱄛"
Pop = ""
[username]
show_always = true
style_user = "bg:color_orange fg:color_fg0"
style_root = "bg:color_orange fg:color_fg0"
format = "[ $user ]($style)"
[directory]
style = "fg:color_fg0 bg:color_yellow"
format = "[ $path ]($style)"
truncation_length = 3
truncation_symbol = "…/"
[directory.substitutions]
Documents = "󰈙 "
Downloads = " "
Music = "󰝚 "
Pictures = " "
Developer = "󰲋 "
[git_branch]
symbol = ""
style = "bg:color_aqua"
format = "[[ $symbol $branch ](fg:color_fg0 bg:color_aqua)]($style)"
[git_status]
style = "bg:color_aqua"
format = "[[($all_status$ahead_behind )](fg:color_fg0 bg:color_aqua)]($style)"
[nodejs]
symbol = ""
style = "bg:color_blue"
format = "[[ $symbol( $version) ](fg:color_fg0 bg:color_blue)]($style)"
[c]
symbol = " "
style = "bg:color_blue"
format = "[[ $symbol( $version) ](fg:color_fg0 bg:color_blue)]($style)"
[cpp]
symbol = " "
style = "bg:color_blue"
format = "[[ $symbol( $version) ](fg:color_fg0 bg:color_blue)]($style)"
[rust]
symbol = ""
style = "bg:color_blue"
format = "[[ $symbol( $version) ](fg:color_fg0 bg:color_blue)]($style)"
[golang]
symbol = ""
style = "bg:color_blue"
format = "[[ $symbol( $version) ](fg:color_fg0 bg:color_blue)]($style)"
[php]
symbol = ""
style = "bg:color_blue"
format = "[[ $symbol( $version) ](fg:color_fg0 bg:color_blue)]($style)"
[java]
symbol = ""
style = "bg:color_blue"
format = "[[ $symbol( $version) ](fg:color_fg0 bg:color_blue)]($style)"
[kotlin]
symbol = ""
style = "bg:color_blue"
format = "[[ $symbol( $version) ](fg:color_fg0 bg:color_blue)]($style)"
[haskell]
symbol = ""
style = "bg:color_blue"
format = "[[ $symbol( $version) ](fg:color_fg0 bg:color_blue)]($style)"
[python]
symbol = ""
style = "bg:color_blue"
format = "[[ $symbol( $version) ](fg:color_fg0 bg:color_blue)]($style)"
[docker_context]
symbol = ""
style = "bg:color_bg3"
format = "[[ $symbol( $context) ](fg:#83a598 bg:color_bg3)]($style)"
[conda]
style = "bg:color_bg3"
format = "[[ $symbol( $environment) ](fg:#83a598 bg:color_bg3)]($style)"
[pixi]
style = "bg:color_bg3"
format = "[[ $symbol( $version)( $environment) ](fg:color_fg0 bg:color_bg3)]($style)"
[time]
disabled = false
time_format = "%R"
style = "bg:color_bg1"
format = "[[  $time ](fg:color_fg0 bg:color_bg1)]($style)"
[line_break]
disabled = false
[character]
disabled = false
success_symbol = "[](bold fg:color_green)"
error_symbol = "[](bold fg:color_red)"
vimcmd_symbol = "[](bold fg:color_green)"
vimcmd_replace_one_symbol = "[](bold fg:color_purple)"
vimcmd_replace_symbol = "[](bold fg:color_purple)"
vimcmd_visual_symbol = "[](bold fg:color_yellow)"

View file

@ -1,4 +1,4 @@
{ lib, pkgs, ... }: {
{ config, lib, pkgs, ... }: {
programs.tmux = {
enable = lib.mkDefault true;
clock24 = true;
@ -18,19 +18,26 @@
'';
}];
extraConfig = ''
# Terminal configuration for proper colors and features
set-option -g default-terminal "screen-256color"
set-option -ga terminal-overrides ",*256col*:Tc"
set-option -g focus-events on
set -s extended-keys on
set -as terminal-features 'xterm-ghostty:extkeys'
set-option -g status-style "bg=#282a36 fg=#f8f8f2"
set -g status-interval 5
setw -g automatic-rename on
set -g renumber-windows on
bind r source-file ~/.tmux.conf \; display-message "tmux reloaded"
bind | split-window -h
set -g status-interval 5
setw -g automatic-rename on
set -g renumber-windows on
bind r source-file ~/.tmux.conf \; display-message "tmux reloaded"
bind | split-window -h
bind - split-window -v
unbind '"'
unbind %
set -g display-panes-time 1500
bind k send-keys -R \; send-keys C-l \; clear-history
# Ensure tmux panes spawn login nu so Starship integration runs
set -g default-shell "${config.home.profileDirectory}/bin/nu"
set -g default-command "${config.home.profileDirectory}/bin/nu --login"
'';
};
}