P645LV5SK5MU3JH6C735QAVRISGZ4T3GGVZBOB5Y4CEJYMB3LYXAC
{
config,
pkgs,
inputs,
...
}:
{
programs.zsh = {
autosuggestion = {
enable = true;
highlight = "fg=#800000,bg=#fafad2,bold";
strategy = [
"history"
]; # "history" or "completion" or "match_prev_cmd"
};
enable = true;
history = {
expireDuplicatesFirst = true; # disabled when using "match_prev_cmd" strategy
extended = true;
ignoreAllDups = true; # disabled when using "match_prev_cmd" strategy
ignoreDups = true;
ignorePatterns = [
"ls"
"ll"
"la"
"l"
"history"
"exit"
"rm"
"cp"
"mv"
];
save = 10000;
size = 10000;
};
# plugins = [
# {
# name = "powerlevel10k";
# src = pkgs.zsh-powerlevel10k;
# file = "share/zsh-powerlevel10k/powerlevel10k.zsh-theme";
# }
# {
# name = "powerlevel10k-config";
# src = ./p10k-config;
# file = "p10k.zsh";
# }
# ];
# shellAliases = {
# la="eza -lahF --icons=always --hyperlink";
# lD="eza -ld .* --icons=always --hyperlink";
# ll="eza -lhF --icons=always --hyperlink";
# ls="eza";
# lS="eza -l -ssize --icons=always --hyperlink";
# lSn="eza -l -snewest --icons=always --hyperlink";
# lT="eza -T";
# };
syntaxHighlighting.enable = true;
oh-my-zsh = {
enable = true;
plugins = [ "git" ];
theme = "intheloop";
};
# zprof.enable = true; # Enable zprof for profiling load times
};
}
{
config,
pkgs,
inputs,
lib,
...
}:
{
programs.zoxide = {
enable = true;
enableBashIntegration = true;
enableZshIntegration = true;
};
}
{ config, pkgs, ... }:
{
pam.yubico.authorizedYubiKeys = {
ids = [
"cccccbnfijvi" # Cuba
"cccccblhtitl" # Bolivia
];
path = ".yubico/authorized_yubikeys";
};
# services.yubikey-agent.enable = true; # TODO figure out whether to setup yubikey agent
}
{
config,
pkgs,
lib,
inputs,
...
}:
{
programs.vscode.profiles.vue.extensions =
with pkgs.vscode-extensions;
[
mikestead.dotenv
editorconfig.editorconfig
dbaeumer.vscode-eslint
github.copilot
github.copilot-chat
donjayamanne.githistory
gitlab.gitlab-workflow
yzhang.markdown-all-in-one
bbenoist.nix
esbenp.prettier-vscode
gruntfuggly.todo-tree
vue.volar
vscode-icons-team.vscode-icons
]
++ pkgs.vscode-utils.extensionsFromVscodeMarketplace [
{
name = "vscode-conventional-commits";
publisher = "vivaxy";
version = "1.26.0";
sha256 = "1n414wwd6my4xjmh55b6l0s8bqadnq35ya1isxvdi6yabapbwg9f";
}
{
name = "jest-snippets";
publisher = "andys8";
version = "1.9.1";
sha256 = "00rjij5khj7l9k2f15p8b6lhfvp9v7v07phn7cf3953kyadf3j09";
}
{
name = "suitecloud-vscode-extension";
publisher = "oracle";
version = "2.0.1";
sha256 = "1chbfn2vqv3ygd97lv9gjs5rvvfb5qgazz912b47219qglc634cc";
}
{
name = "vue-volar-extention-pack";
publisher = "misterj";
version = "2.0.8";
sha256 = "03sb9gyvgsac0psw4d9z9vbgmi4nny0cl2zqp094880aihjc3wf0";
}
{
name = "vue";
publisher = "wscats";
version = "1.0.26";
sha256 = "1qg59i61j1rn4dgcq4981mpvbi5pdcj40yi1z7hjz8n9g8vhcycn";
}
{
name = "vue-peek";
publisher = "dariofuzinato";
version = "1.0.2";
sha256 = "1dvjva289kwvf6ijhz4am4bpp3961r7f9x2a9ng66m76icwab7jl";
}
{
name = "vue-vscode-snippets";
publisher = "sdras";
version = "3.2.0";
sha256 = "05bcpc4f1c1nmx0mav69snbap1ayjvgnijnl9w86c83jidhgaa0s";
}
{
name = "npm-intellisense";
publisher = "christian-kohler";
version = "1.4.5";
sha256 = "1av0iwym6j5l2a522ikyjkrsyp4q3sws1d7y9brm3gdgghd8aawn";
}
{
name = "vetur";
publisher = "octref";
version = "0.37.3";
sha256 = "110wn2cfmdd64ry34234d3z27ph2chlgd0c9d8c918vdwqnba66y";
}
{
name = "path-intellisense";
publisher = "christian-kohler";
version = "2.10.0";
sha256 = "06x9ksl4bghfpxh4n65d1d7dr11spl140p9ch4mc01nrdibgckbc";
}
];
}
{
config,
pkgs,
lib,
inputs,
...
}:
{
programs.vscode.profiles.laravel.extensions =
with pkgs.vscode-extensions;
[
mikestead.dotenv
editorconfig.editorconfig
dbaeumer.vscode-eslint
github.copilot
github.copilot-chat
donjayamanne.githistory
gitlab.gitlab-workflow
yzhang.markdown-all-in-one
bbenoist.nix
esbenp.prettier-vscode
gruntfuggly.todo-tree
vue.volar
vscode-icons-team.vscode-icons
]
++ pkgs.vscode-utils.extensionsFromVscodeMarketplace [
{
name = "vscode-conventional-commits";
publisher = "vivaxy";
version = "1.26.0";
sha256 = "1n414wwd6my4xjmh55b6l0s8bqadnq35ya1isxvdi6yabapbwg9f";
}
{
name = "handlebars-formatter";
publisher = "mfeckies";
version = "1.1.0";
sha256 = "1vb76gg3qf8v112c3zqs3s8vkk79j8drn6xi808k757532wadjf7";
}
{
name = "vue-volar-extention-pack";
publisher = "misterj";
version = "2.0.8";
sha256 = "03sb9gyvgsac0psw4d9z9vbgmi4nny0cl2zqp094880aihjc3wf0";
}
{
name = "vue";
publisher = "wscats";
version = "1.0.26";
sha256 = "1qg59i61j1rn4dgcq4981mpvbi5pdcj40yi1z7hjz8n9g8vhcycn";
}
{
name = "laravel-jump-controller";
publisher = "pgl";
version = "0.0.33";
sha256 = "1dj111qzvwr21jj2hs1j1cs0lm04mgdrr1lwzhba4vbxdr3g4zqw";
}
{
name = "vue-peek";
publisher = "dariofuzinato";
version = "1.0.2";
sha256 = "1dvjva289kwvf6ijhz4am4bpp3961r7f9x2a9ng66m76icwab7jl";
}
{
name = "laravel-create-view";
publisher = "glitchbl";
version = "0.0.6";
sha256 = "08j2yvfvrwlsbgyym70871cxbay9lgy3fynhq0lps9ky23kyk08h";
}
{
name = "laravel-blade-wrapper";
publisher = "ihunte";
version = "1.0.2";
sha256 = "1mc4rmr7nirqc61sj4lx4ap9l54f2yl0f8j3kwbhaaxaikcyqh52";
}
{
name = "laravel-goto-components";
publisher = "naoray";
version = "1.2.0";
sha256 = "0srzp32qyza9mn56c7gabwdgbv8b1pn9r2fvwb2bqxlznyy00fyh";
}
{
name = "laravel-extension-pack";
publisher = "onecentlin";
version = "1.3.0";
sha256 = "0m3q2524pps84c3n4lpq57mhf6hsvm49p83488f9dr9aji4mybg3";
}
{
name = "vscode-blade-formatter";
publisher = "shufo";
version = "0.24.4";
sha256 = "09md5ma824vrnl8wlhgvd1pch4gbdcgrinp45pmfd56xvw1ycncb";
}
{
name = "laravel-goto-view";
publisher = "codingyu";
version = "1.3.11";
sha256 = "09m67l37rfjnah68ck366plpjjjbd7lf6qgd41knhz14hrz94pqk";
}
{
name = "laravel-extra-intellisense";
publisher = "amiralizadeh9480";
version = "0.7.0";
sha256 = "0acmb8ivd0iq5yd5hq6gcj934a6dni9h643xvj04mhkm239f91yf";
}
{
name = "laravel-artisan";
publisher = "ryannaddy";
version = "0.0.31";
sha256 = "1i1mhvw6flc0cbh6gx6a98rmak22jykhp70jf12j81hsxlg9ayvy";
}
{
name = "laravel5-snippets";
publisher = "onecentlin";
version = "1.18.0";
sha256 = "1x9zv22firyg6yb6admr18w6w33j3273ibfxgxzd4jw90d3ns3rx";
}
{
name = "sass-indented";
publisher = "syler";
version = "1.8.31";
sha256 = "0566hpzcmjz91ss8m0w06cywx0nbyg0lw8x2709r3f3c6aj4yr2f";
}
{
name = "vue-vscode-snippets";
publisher = "sdras";
version = "3.2.0";
sha256 = "05bcpc4f1c1nmx0mav69snbap1ayjvgnijnl9w86c83jidhgaa0s";
}
{
name = "laravel-blade";
publisher = "onecentlin";
version = "1.36.1";
sha256 = "1jqj5p4s47rkz5g92f2w0k4qc720nxzgxnyzwyrx81h1vanx9s6c";
}
{
name = "npm-intellisense";
publisher = "christian-kohler";
version = "1.4.5";
sha256 = "1av0iwym6j5l2a522ikyjkrsyp4q3sws1d7y9brm3gdgghd8aawn";
}
{
name = "vscode-intelephense-client";
publisher = "bmewburn";
version = "1.13.1";
sha256 = "16969y5ci8d97kz2ka7saxryjw88jxvdj1v455is9xcaqp3vhnbr";
}
{
name = "auto-close-tag";
publisher = "formulahendry";
version = "0.5.15";
sha256 = "0h6nb9paw45v0shzih4486dgin64bsn889cgj9k1hjmvcqs5sm7j";
}
{
name = "vetur";
publisher = "octref";
version = "0.37.3";
sha256 = "110wn2cfmdd64ry34234d3z27ph2chlgd0c9d8c918vdwqnba66y";
}
{
name = "path-intellisense";
publisher = "christian-kohler";
version = "2.10.0";
sha256 = "06x9ksl4bghfpxh4n65d1d7dr11spl140p9ch4mc01nrdibgckbc";
}
];
}
{
config,
pkgs,
lib,
inputs,
secrets,
...
}:
{
# imports = [
# ./laravel.nix
# ./vue.nix
# ]; # TODO need to figure out profiles and resolve the following error
# > error: collision between `/nix/store/flx928cbjq5jzmzrkdrbp8cvgaf6shr0-vscode-extension-oracle-suitecloud-vscode-extension-2.0.1/share/vscode/extensions/oracle.suitecloud-vscode-extension/node_modules/tslib/tslib.es6.js' and `/nix/store/2jqds7f6ib39kzh4liy3h2r8x7i3lv4v-vscode-extension-oracle-suitecloud-vscode-extension-3.0.0/share/vscode/extensions/oracle.suitecloud-vscode-extension/node_modules/tslib/tslib.es6.js'
# pkgs.config.allowUnfree = true; # TODO is this required since it's going to be deprecated? Otherwise how is it supposed to be set now in home manager
programs.bash.initExtra = ''
export ALIBABA_API_KEY="$(cat ${secrets.alibaba-api-key.path})"
'';
programs.zsh.initContent = ''
export ALIBABA_API_KEY="$(cat ${secrets.alibaba-api-key.path})"
'';
programs.vscode = {
enable = true;
package = (
pkgs.vscode.overrideAttrs (oldAttrs: rec {
version = "1.97.2";
src = builtins.fetchTarball {
url = "https://update.code.visualstudio.com/${version}/linux-x64/stable";
sha256 = "1py55zixqac7cckzwfq4clz483vjr7krm1lycfnpnmk10nhhjcv8"; # From nix-prefetch-url
};
})
); # Use the latest version of Visual Studio Code
profiles.default = {
enableExtensionUpdateCheck = true;
enableUpdateCheck = true;
extensions =
with pkgs.vscode-extensions;
[
arrterian.nix-env-selector
dbaeumer.vscode-eslint
donjayamanne.githistory
editorconfig.editorconfig
esbenp.prettier-vscode
gitlab.gitlab-workflow
gruntfuggly.todo-tree
jnoortheen.nix-ide
mikestead.dotenv
mkhl.direnv
vscode-icons-team.vscode-icons
yzhang.markdown-all-in-one
]
++ pkgs.vscode-utils.extensionsFromVscodeMarketplace [
{
name = "vscode-conventional-commits";
publisher = "vivaxy";
version = "1.26.0";
sha256 = "1n414wwd6my4xjmh55b6l0s8bqadnq35ya1isxvdi6yabapbwg9f";
}
{
name = "jest-snippets";
publisher = "andys8";
version = "1.9.1";
sha256 = "00rjij5khj7l9k2f15p8b6lhfvp9v7v07phn7cf3953kyadf3j09";
}
{
name = "roo-cline";
publisher = "rooveterinaryinc";
version = "3.11.2";
sha256 = "sha256-7F94p5ebaLrcbqGhvEgaSmnffi1KbG1LNmBMSp2H69Q=";
}
{
name = "ai-commit";
publisher = "sitoi";
version = "0.1.1";
sha256 = "sha256-r1q+55b5v2Awr1sQ3+6qUI3bL3sLUCpZdJU27iVFzjY=";
}
{
name = "suitecloud-vscode-extension";
publisher = "oracle";
version = "3.0.0";
sha256 = "sha256-yMo92IHmvYLoSc9nTIszyO66GkDl5lhb7TUvboMW36I=";
}
];
keybindings = [
{
"key" = "ctrl+k ctrl+space";
"command" = "editor.foldAll";
"when" = "editorTextFocus && foldingEnabled";
}
{
"key" = "ctrl+k ctrl+0";
"command" = "-editor.foldAll";
"when" = "editorTextFocus && foldingEnabled";
}
{
"key" = "ctrl+k space";
"command" = "editor.unfoldAll";
"when" = "editorTextFocus && foldingEnabled";
}
{
"key" = "ctrl+k ctrl+j";
"command" = "-editor.unfoldAll";
"when" = "editorTextFocus && foldingEnabled";
}
];
userSettings = {
"[handlebars]" = {
"editor.defaultFormatter" = "esbenp.prettier-vscode";
};
"[javascript]" = {
"editor.defaultFormatter" = "dbaeumer.vscode-eslint";
};
"[json]" = {
"editor.defaultFormatter" = "esbenp.prettier-vscode";
};
"[jsonc]" = {
"editor.defaultFormatter" = "esbenp.prettier-vscode";
};
"[nix]" = {
"editor.defaultFormatter" = "jnoortheen.nix-ide";
};
"[scss]" = {
"editor.defaultFormatter" = "esbenp.prettier-vscode";
};
"[typescript]" = {
"editor.defaultFormatter" = "vscode.typescript-language-features";
};
"[vue]" = {
"editor.defaultFormatter" = "dbaeumer.vscode-eslint";
};
"ai-commit.AI_COMMIT_SYSTEM_PROMPT" =
"You are an expert software engineer specializing in conventional commit standards. Generate a polished Git commit message following these comprehensive guidelines: ### Commit Message Format **Structure**: \\`<type>(<scope>): <gitmoji> <subject>\\` - **Type** (Required): Choose precisely from: - \\`feat\\`: New feature - \\`fix\\`: Bug resolution - \\`docs\\`: Documentation changes - \\`style\\`: Visual/formatting tweaks - \\`refactor\\`: Code restructuring - \\`test\\`: Testing-related - \\`chore\\`: Maintenance tasks - **Scope** (Contextual): Specify affected component/module (e.g., \\`auth\\`, \\`database\\`, \\`UI\\`). Omit if unclear. - **Gitmoji** (Optional): Add relevant emoji prefix (e.g., :sparkles: for features, :bug: for fixes) - **Subject** (Imperative mood): Clear summary under 100 chars. Start with action verb (Add, Fix, Improve) **Body** (When needed): - Bullet points (─) for key technical details - Explain WHY before WHAT when non-obvious - Keep lines under 100 characters - Separate from subject with blank line **Footer** (Special cases only): - Breaking changes: \\`BREAKING CHANGE: <description>\\` - Reference issues: \\`Addresses #123\\` ### Constraints ❗ **Strict Requirements**: - Character limits: - Subject line ≤ 100 chars - Body lines ≤ 100 chars - No JIRA/Bug references (e.g., \"Closes #123\") - No markdown formatting - Professional technical tone - Empty line between subject/body ### Quality Assurance Checklist ✅ Subject clearly communicates change purpose ✅ Scope properly contextualizes impact area ✅ Body provides essential implementation context ✅ Breaking changes explicitly declared ✅ Emojis enhance (but don't replace) meaning ### Exemplar feat(auth): :sparkles: implement OAuth2 integration - Add Google/Facebook authentication providers - Configure token expiration policies - Update user schema for social logins BREAKING CHANGE: Removes legacy API key support Generate ONLY the commit message for the provided code diff. No commentary.";
"ai-commit.AI_PROVIDER" = "openai";
"ai-commit.OPENAI_BASE_URL" = "https://dashscope-intl.aliyuncs.com/compatible-mode/v1";
"ai-commit.OPENAI_MODEL" = "qwen-plus";
"conventionalCommits.lineBreak" = "\\n";
"conventionalCommits.promptScopes" = false;
"conventionalCommits.showEditor" = true;
"css.validate" = false;
"debug.javascript.terminalOptions" = { };
"diffEditor.hideUnchangedRegions.enabled" = true;
"diffEditor.ignoreTrimWhitespace" = true;
"editor.formatOnSave" = true;
"editor.minimap.enabled" = false;
"eslint.format.enable" = true;
"explorer.confirmDelete" = false;
"files.associations" = {
"*.md" = "markdown";
"*.ss" = "javascript";
"*.tpl" = "handlebars";
"*.vue" = "vue";
"*.nix" = "nix";
};
"files.eol" = "\n";
"git.autofetch" = true;
"git.branchProtection" = [
"production"
"main"
];
"git.confirmSync" = false;
"git.defaultBranchName" = "production";
"git.enableCommitSigning" = true;
# "github.copilot.chat.localeOverride" = "en";
# "github.copilot.chat.generateTests.codeLens" = true;
"github.gitProtocol" = "ssh";
"gitlab.duoChat.enabled" = true;
"gitlab.duo.enabledWithoutGitlabProject" = true;
"gitlab.duoCodeSuggestions.enabled" = true;
"gitlab.duoCodeSuggestions.openTabsContext" = true;
"gitlab.keybindingHints.enabled" = true;
"gitlab.showPipelineUpdateNotifications" = true;
"html.format.indentHandlebars" = true;
"jest.shell" = "zsh";
"less.validate" = false;
"roo-cline.allowedCommands" = [
"npm test"
"npm install"
"tsc"
"git log"
"git diff"
"git show"
];
"scss.validate" = false;
"stylelint.snippet" = [
"css"
"postcss"
"scss"
];
"stylelint.validate" = [
"css"
"postcss"
"scss"
];
"telemetry.telemetryLevel" = "off";
"terminal.explorerKind" = "external";
"terminal.external.linuxExec" = "alacritty";
"terminal.integrated.defaultProfile.linux" = "zsh";
"terminal.integrated.fontFamily" = "\"MesloLGS NF\", monospace";
"terminal.integrated.profiles.linux" = {
"bash" = {
"args" = [
"-l"
];
"icon" = "terminal-bash";
"path" = "/home/marvin/.nix-profile/bin/bash";
};
"zsh" = {
"args" = [
"-l"
];
"path" = "/home/marvin/.nix-profile/bin/zsh";
};
};
"terminal.integrated.sendKeybindingsToShell" = true;
"todo-tree.general.tags" = [
"BUG"
"HACK"
"FIXME"
"TODO"
"TEST"
"XXX"
"[ ]"
"[x]"
"REVIEW"
];
"update.mode" = "none";
"window.customTitleBarVisibility" = "auto";
"window.newWindowProfile" = "Default";
"workbench.colorTheme" = "Visual Studio Dark";
"workbench.editor.enablePreview" = false;
"workbench.iconTheme" = "vscode-icons";
};
};
};
}
{ config, pkgs, ... }:
{
services.podman = {
enable = true;
containers."neo4jllm" = {
autoStart = true;
description = "Neo4j Database for LLM vectorstore";
environment = {
NEO4J_AUTH = "none";
# NEO4J_AUTH = "neovectors/neo4jllmpassword"; # change to secret after testing
};
# environmentFile = []; TODO when moving to secrets use an environment file
image = "neo4j:5.26"; # https://hub.docker.com/_/neo4j
ports = [
"7474:7474"
"7687:7687"
];
volumes = [
"/var/lib/neo4j/data:/data"
];
};
};
}
{
config,
lib,
pkgs,
hostName,
...
}:
{
programs.ssh = {
enable = true;
matchBlocks = {
"gitlab.com" = {
user = "git";
identityFile = "/home/marvin/.ssh/gitlab_rsa";
};
"github.com" = {
user = "git";
identityFile = "/home/marvin/.ssh/gitlab_rsa";
};
"192.168.0.249" = lib.mkIf (hostName == "toaster") {
user = "marvin";
identityFile = "/home/marvin/.ssh/toaster_ed25519";
extraOptions = {
StrictHostKeyChecking = "accept-new";
UserKnownHostsFile = "~/.ssh/known_hosts.d/baker";
};
};
"baker" = lib.mkIf (hostName == "toaster") {
user = "marvin";
hostname = "192.168.0.249";
identityFile = "/home/marvin/.ssh/toaster_ed25519";
};
};
};
}
# Generated by Powerlevel10k configuration wizard on 2024-12-28 at 23:31 CST.
# Based on romkatv/powerlevel10k/config/p10k-rainbow.zsh.
# Wizard options: nerdfont-v3 + powerline, large icons, rainbow, unicode, 12h time,
# angled separators, blurred heads, flat tails, 2 lines, dotted, right frame,
# darkest-ornaments, compact, many icons, fluent, transient_prompt,
# instant_prompt=verbose.
# Type `p10k configure` to generate another config.
#
# Config for Powerlevel10k with powerline prompt style with colorful background.
# Type `p10k configure` to generate your own config based on it.
#
# Tip: Looking for a nice color? Here's a one-liner to print colormap.
#
# for i in {0..255}; do print -Pn "%K{$i} %k%F{$i}${(l:3::0:)i}%f " ${${(M)$((i%6)):#3}:+$'\n'}; done
# Temporarily change options.
'builtin' 'local' '-a' 'p10k_config_opts'
[[ ! -o 'aliases' ]] || p10k_config_opts+=('aliases')
[[ ! -o 'sh_glob' ]] || p10k_config_opts+=('sh_glob')
[[ ! -o 'no_brace_expand' ]] || p10k_config_opts+=('no_brace_expand')
'builtin' 'setopt' 'no_aliases' 'no_sh_glob' 'brace_expand'
() {
emulate -L zsh -o extended_glob
# Unset all configuration options. This allows you to apply configuration changes without
# restarting zsh. Edit ~/.p10k.zsh and type `source ~/.p10k.zsh`.
unset -m '(POWERLEVEL9K_*|DEFAULT_USER)~POWERLEVEL9K_GITSTATUS_DIR'
# Zsh >= 5.1 is required.
[[ $ZSH_VERSION == (5.<1->*|<6->.*) ]] || return
# The list of segments shown on the left. Fill it with the most important segments.
typeset -g POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=(
# =========================[ Line #1 ]=========================
os_icon # os identifier
dir # current directory
vcs # git status
# =========================[ Line #2 ]=========================
newline # \n
prompt_char # prompt symbol
)
# The list of segments shown on the right. Fill it with less important segments.
# Right prompt on the last prompt line (where you are typing your commands) gets
# automatically hidden when the input line reaches it. Right prompt above the
# last prompt line gets hidden if it would overlap with left prompt.
typeset -g POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(
# =========================[ Line #1 ]=========================
status # exit code of the last command
command_execution_time # duration of the last command
background_jobs # presence of background jobs
direnv # direnv status (https://direnv.net/)
asdf # asdf version manager (https://github.com/asdf-vm/asdf)
virtualenv # python virtual environment (https://docs.python.org/3/library/venv.html)
anaconda # conda environment (https://conda.io/)
pyenv # python environment (https://github.com/pyenv/pyenv)
goenv # go environment (https://github.com/syndbg/goenv)
nodenv # node.js version from nodenv (https://github.com/nodenv/nodenv)
nvm # node.js version from nvm (https://github.com/nvm-sh/nvm)
nodeenv # node.js environment (https://github.com/ekalinin/nodeenv)
# node_version # node.js version
# go_version # go version (https://golang.org)
# rust_version # rustc version (https://www.rust-lang.org)
# dotnet_version # .NET version (https://dotnet.microsoft.com)
# php_version # php version (https://www.php.net/)
# laravel_version # laravel php framework version (https://laravel.com/)
# java_version # java version (https://www.java.com/)
# package # name@version from package.json (https://docs.npmjs.com/files/package.json)
rbenv # ruby version from rbenv (https://github.com/rbenv/rbenv)
rvm # ruby version from rvm (https://rvm.io)
fvm # flutter version management (https://github.com/leoafarias/fvm)
luaenv # lua version from luaenv (https://github.com/cehoffman/luaenv)
jenv # java version from jenv (https://github.com/jenv/jenv)
plenv # perl version from plenv (https://github.com/tokuhirom/plenv)
perlbrew # perl version from perlbrew (https://github.com/gugod/App-perlbrew)
phpenv # php version from phpenv (https://github.com/phpenv/phpenv)
scalaenv # scala version from scalaenv (https://github.com/scalaenv/scalaenv)
haskell_stack # haskell version from stack (https://haskellstack.org/)
kubecontext # current kubernetes context (https://kubernetes.io/)
terraform # terraform workspace (https://www.terraform.io)
# terraform_version # terraform version (https://www.terraform.io)
aws # aws profile (https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html)
aws_eb_env # aws elastic beanstalk environment (https://aws.amazon.com/elasticbeanstalk/)
azure # azure account name (https://docs.microsoft.com/en-us/cli/azure)
gcloud # google cloud cli account and project (https://cloud.google.com/)
google_app_cred # google application credentials (https://cloud.google.com/docs/authentication/production)
toolbox # toolbox name (https://github.com/containers/toolbox)
context # user@hostname
nordvpn # nordvpn connection status, linux only (https://nordvpn.com/)
ranger # ranger shell (https://github.com/ranger/ranger)
nnn # nnn shell (https://github.com/jarun/nnn)
lf # lf shell (https://github.com/gokcehan/lf)
xplr # xplr shell (https://github.com/sayanarijit/xplr)
vim_shell # vim shell indicator (:sh)
midnight_commander # midnight commander shell (https://midnight-commander.org/)
nix_shell # nix shell (https://nixos.org/nixos/nix-pills/developing-with-nix-shell.html)
chezmoi_shell # chezmoi shell (https://www.chezmoi.io/)
# vi_mode # vi mode (you don't need this if you've enabled prompt_char)
# vpn_ip # virtual private network indicator
# load # CPU load
# disk_usage # disk usage
# ram # free RAM
# swap # used swap
todo # todo items (https://github.com/todotxt/todo.txt-cli)
timewarrior # timewarrior tracking status (https://timewarrior.net/)
taskwarrior # taskwarrior task count (https://taskwarrior.org/)
per_directory_history # Oh My Zsh per-directory-history local/global indicator
# cpu_arch # CPU architecture
time # current time
# =========================[ Line #2 ]=========================
newline
# ip # ip address and bandwidth usage for a specified network interface
# public_ip # public IP address
# proxy # system-wide http/https/ftp proxy
# battery # internal battery
# wifi # wifi speed
# example # example user-defined segment (see prompt_example function below)
)
# Defines character set used by powerlevel10k. It's best to let `p10k configure` set it for you.
typeset -g POWERLEVEL9K_MODE=nerdfont-v3
# When set to `moderate`, some icons will have an extra space after them. This is meant to avoid
# icon overlap when using non-monospace fonts. When set to `none`, spaces are not added.
typeset -g POWERLEVEL9K_ICON_PADDING=moderate
# When set to true, icons appear before content on both sides of the prompt. When set
# to false, icons go after content. If empty or not set, icons go before content in the left
# prompt and after content in the right prompt.
#
# You can also override it for a specific segment:
#
# POWERLEVEL9K_STATUS_ICON_BEFORE_CONTENT=false
#
# Or for a specific segment in specific state:
#
# POWERLEVEL9K_DIR_NOT_WRITABLE_ICON_BEFORE_CONTENT=false
typeset -g POWERLEVEL9K_ICON_BEFORE_CONTENT=
# Add an empty line before each prompt.
typeset -g POWERLEVEL9K_PROMPT_ADD_NEWLINE=false
# Connect left prompt lines with these symbols. You'll probably want to use the same color
# as POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_FOREGROUND below.
typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_PREFIX=
typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_PREFIX=
typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_PREFIX=
# Connect right prompt lines with these symbols.
typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_SUFFIX='%238F─╮'
typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_SUFFIX='%238F─┤'
typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_SUFFIX='%238F─╯'
# Filler between left and right prompt on the first prompt line. You can set it to ' ', '·' or
# '─'. The last two make it easier to see the alignment between left and right prompt and to
# separate prompt from command output. You might want to set POWERLEVEL9K_PROMPT_ADD_NEWLINE=false
# for more compact prompt if using this option.
typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR='·'
typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_BACKGROUND=
typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_GAP_BACKGROUND=
if [[ $POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR != ' ' ]]; then
# The color of the filler. You'll probably want to match the color of POWERLEVEL9K_MULTILINE
# ornaments defined above.
typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_FOREGROUND=238
# Start filler from the edge of the screen if there are no left segments on the first line.
typeset -g POWERLEVEL9K_EMPTY_LINE_LEFT_PROMPT_FIRST_SEGMENT_END_SYMBOL='%{%}'
# End filler on the edge of the screen if there are no right segments on the first line.
typeset -g POWERLEVEL9K_EMPTY_LINE_RIGHT_PROMPT_FIRST_SEGMENT_START_SYMBOL='%{%}'
fi
# Separator between same-color segments on the left.
typeset -g POWERLEVEL9K_LEFT_SUBSEGMENT_SEPARATOR='\uE0B1'
# Separator between same-color segments on the right.
typeset -g POWERLEVEL9K_RIGHT_SUBSEGMENT_SEPARATOR='\uE0B3'
# Separator between different-color segments on the left.
typeset -g POWERLEVEL9K_LEFT_SEGMENT_SEPARATOR='\uE0B0'
# Separator between different-color segments on the right.
typeset -g POWERLEVEL9K_RIGHT_SEGMENT_SEPARATOR='\uE0B2'
# To remove a separator between two segments, add "_joined" to the second segment name.
# For example: POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=(os_icon context_joined)
# The right end of left prompt.
typeset -g POWERLEVEL9K_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL='▓▒░'
# The left end of right prompt.
typeset -g POWERLEVEL9K_RIGHT_PROMPT_FIRST_SEGMENT_START_SYMBOL='░▒▓'
# The left end of left prompt.
typeset -g POWERLEVEL9K_LEFT_PROMPT_FIRST_SEGMENT_START_SYMBOL=''
# The right end of right prompt.
typeset -g POWERLEVEL9K_RIGHT_PROMPT_LAST_SEGMENT_END_SYMBOL=''
# Left prompt terminator for lines without any segments.
typeset -g POWERLEVEL9K_EMPTY_LINE_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL=
#################################[ os_icon: os identifier ]##################################
# OS identifier color.
typeset -g POWERLEVEL9K_OS_ICON_FOREGROUND=232
typeset -g POWERLEVEL9K_OS_ICON_BACKGROUND=7
# Custom icon.
# typeset -g POWERLEVEL9K_OS_ICON_CONTENT_EXPANSION='⭐'
################################[ prompt_char: prompt symbol ]################################
# Transparent background.
typeset -g POWERLEVEL9K_PROMPT_CHAR_BACKGROUND=
# Green prompt symbol if the last command succeeded.
typeset -g POWERLEVEL9K_PROMPT_CHAR_OK_{VIINS,VICMD,VIVIS,VIOWR}_FOREGROUND=76
# Red prompt symbol if the last command failed.
typeset -g POWERLEVEL9K_PROMPT_CHAR_ERROR_{VIINS,VICMD,VIVIS,VIOWR}_FOREGROUND=196
# Default prompt symbol.
typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIINS_CONTENT_EXPANSION='❯'
# Prompt symbol in command vi mode.
typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VICMD_CONTENT_EXPANSION='❮'
# Prompt symbol in visual vi mode.
typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIVIS_CONTENT_EXPANSION='V'
# Prompt symbol in overwrite vi mode.
typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIOWR_CONTENT_EXPANSION='▶'
typeset -g POWERLEVEL9K_PROMPT_CHAR_OVERWRITE_STATE=true
# No line terminator if prompt_char is the last segment.
typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL=
# No line introducer if prompt_char is the first segment.
typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_PROMPT_FIRST_SEGMENT_START_SYMBOL=
# No surrounding whitespace.
typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_{LEFT,RIGHT}_WHITESPACE=
##################################[ dir: current directory ]##################################
# Current directory background color.
typeset -g POWERLEVEL9K_DIR_BACKGROUND=4
# Default current directory foreground color.
typeset -g POWERLEVEL9K_DIR_FOREGROUND=254
# If directory is too long, shorten some of its segments to the shortest possible unique
# prefix. The shortened directory can be tab-completed to the original.
typeset -g POWERLEVEL9K_SHORTEN_STRATEGY=truncate_to_unique
# Replace removed segment suffixes with this symbol.
typeset -g POWERLEVEL9K_SHORTEN_DELIMITER=
# Color of the shortened directory segments.
typeset -g POWERLEVEL9K_DIR_SHORTENED_FOREGROUND=250
# Color of the anchor directory segments. Anchor segments are never shortened. The first
# segment is always an anchor.
typeset -g POWERLEVEL9K_DIR_ANCHOR_FOREGROUND=255
# Display anchor directory segments in bold.
typeset -g POWERLEVEL9K_DIR_ANCHOR_BOLD=true
# Don't shorten directories that contain any of these files. They are anchors.
local anchor_files=(
.bzr
.citc
.git
.hg
.node-version
.python-version
.go-version
.ruby-version
.lua-version
.java-version
.perl-version
.php-version
.tool-versions
.shorten_folder_marker
.svn
.terraform
CVS
Cargo.toml
composer.json
go.mod
package.json
stack.yaml
)
typeset -g POWERLEVEL9K_SHORTEN_FOLDER_MARKER="(${(j:|:)anchor_files})"
# If set to "first" ("last"), remove everything before the first (last) subdirectory that contains
# files matching $POWERLEVEL9K_SHORTEN_FOLDER_MARKER. For example, when the current directory is
# /foo/bar/git_repo/nested_git_repo/baz, prompt will display git_repo/nested_git_repo/baz (first)
# or nested_git_repo/baz (last). This assumes that git_repo and nested_git_repo contain markers
# and other directories don't.
#
# Optionally, "first" and "last" can be followed by ":<offset>" where <offset> is an integer.
# This moves the truncation point to the right (positive offset) or to the left (negative offset)
# relative to the marker. Plain "first" and "last" are equivalent to "first:0" and "last:0"
# respectively.
typeset -g POWERLEVEL9K_DIR_TRUNCATE_BEFORE_MARKER=false
# Don't shorten this many last directory segments. They are anchors.
typeset -g POWERLEVEL9K_SHORTEN_DIR_LENGTH=1
# Shorten directory if it's longer than this even if there is space for it. The value can
# be either absolute (e.g., '80') or a percentage of terminal width (e.g, '50%'). If empty,
# directory will be shortened only when prompt doesn't fit or when other parameters demand it
# (see POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS and POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT below).
# If set to `0`, directory will always be shortened to its minimum length.
typeset -g POWERLEVEL9K_DIR_MAX_LENGTH=80
# When `dir` segment is on the last prompt line, try to shorten it enough to leave at least this
# many columns for typing commands.
typeset -g POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS=40
# When `dir` segment is on the last prompt line, try to shorten it enough to leave at least
# COLUMNS * POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT * 0.01 columns for typing commands.
typeset -g POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT=50
# If set to true, embed a hyperlink into the directory. Useful for quickly
# opening a directory in the file manager simply by clicking the link.
# Can also be handy when the directory is shortened, as it allows you to see
# the full directory that was used in previous commands.
typeset -g POWERLEVEL9K_DIR_HYPERLINK=false
# Enable special styling for non-writable and non-existent directories. See POWERLEVEL9K_LOCK_ICON
# and POWERLEVEL9K_DIR_CLASSES below.
typeset -g POWERLEVEL9K_DIR_SHOW_WRITABLE=v3
# The default icon shown next to non-writable and non-existent directories when
# POWERLEVEL9K_DIR_SHOW_WRITABLE is set to v3.
# typeset -g POWERLEVEL9K_LOCK_ICON='⭐'
# POWERLEVEL9K_DIR_CLASSES allows you to specify custom icons and colors for different
# directories. It must be an array with 3 * N elements. Each triplet consists of:
#
# 1. A pattern against which the current directory ($PWD) is matched. Matching is done with
# extended_glob option enabled.
# 2. Directory class for the purpose of styling.
# 3. An empty string.
#
# Triplets are tried in order. The first triplet whose pattern matches $PWD wins.
#
# If POWERLEVEL9K_DIR_SHOW_WRITABLE is set to v3, non-writable and non-existent directories
# acquire class suffix _NOT_WRITABLE and NON_EXISTENT respectively.
#
# For example, given these settings:
#
# typeset -g POWERLEVEL9K_DIR_CLASSES=(
# '~/work(|/*)' WORK ''
# '~(|/*)' HOME ''
# '*' DEFAULT '')
#
# Whenever the current directory is ~/work or a subdirectory of ~/work, it gets styled with one
# of the following classes depending on its writability and existence: WORK, WORK_NOT_WRITABLE or
# WORK_NON_EXISTENT.
#
# Simply assigning classes to directories doesn't have any visible effects. It merely gives you an
# option to define custom colors and icons for different directory classes.
#
# # Styling for WORK.
# typeset -g POWERLEVEL9K_DIR_WORK_VISUAL_IDENTIFIER_EXPANSION='⭐'
# typeset -g POWERLEVEL9K_DIR_WORK_BACKGROUND=4
# typeset -g POWERLEVEL9K_DIR_WORK_FOREGROUND=254
# typeset -g POWERLEVEL9K_DIR_WORK_SHORTENED_FOREGROUND=250
# typeset -g POWERLEVEL9K_DIR_WORK_ANCHOR_FOREGROUND=255
#
# # Styling for WORK_NOT_WRITABLE.
# typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_VISUAL_IDENTIFIER_EXPANSION='⭐'
# typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_BACKGROUND=4
# typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_FOREGROUND=254
# typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_SHORTENED_FOREGROUND=250
# typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_ANCHOR_FOREGROUND=255
#
# # Styling for WORK_NON_EXISTENT.
# typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_VISUAL_IDENTIFIER_EXPANSION='⭐'
# typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_BACKGROUND=4
# typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_FOREGROUND=254
# typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_SHORTENED_FOREGROUND=250
# typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_ANCHOR_FOREGROUND=255
#
# If a styling parameter isn't explicitly defined for some class, it falls back to the classless
# parameter. For example, if POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_FOREGROUND is not set, it falls
# back to POWERLEVEL9K_DIR_FOREGROUND.
#
# typeset -g POWERLEVEL9K_DIR_CLASSES=()
# Custom prefix.
# typeset -g POWERLEVEL9K_DIR_PREFIX='in '
#####################################[ vcs: git status ]######################################
# Version control background colors.
typeset -g POWERLEVEL9K_VCS_CLEAN_BACKGROUND=2
typeset -g POWERLEVEL9K_VCS_MODIFIED_BACKGROUND=3
typeset -g POWERLEVEL9K_VCS_UNTRACKED_BACKGROUND=2
typeset -g POWERLEVEL9K_VCS_CONFLICTED_BACKGROUND=3
typeset -g POWERLEVEL9K_VCS_LOADING_BACKGROUND=8
# Branch icon. Set this parameter to '\UE0A0 ' for the popular Powerline branch icon.
typeset -g POWERLEVEL9K_VCS_BRANCH_ICON='\uF126 '
# Untracked files icon. It's really a question mark, your font isn't broken.
# Change the value of this parameter to show a different icon.
typeset -g POWERLEVEL9K_VCS_UNTRACKED_ICON='?'
# Formatter for Git status.
#
# Example output: master wip ⇣42⇡42 *42 merge ~42 +42 !42 ?42.
#
# You can edit the function to customize how Git status looks.
#
# VCS_STATUS_* parameters are set by gitstatus plugin. See reference:
# https://github.com/romkatv/gitstatus/blob/master/gitstatus.plugin.zsh.
function my_git_formatter() {
emulate -L zsh
if [[ -n $P9K_CONTENT ]]; then
# If P9K_CONTENT is not empty, use it. It's either "loading" or from vcs_info (not from
# gitstatus plugin). VCS_STATUS_* parameters are not available in this case.
typeset -g my_git_format=$P9K_CONTENT
return
fi
# Styling for different parts of Git status.
local meta='%7F' # white foreground
local clean='%0F' # black foreground
local modified='%0F' # black foreground
local untracked='%0F' # black foreground
local conflicted='%1F' # red foreground
local res
if [[ -n $VCS_STATUS_LOCAL_BRANCH ]]; then
local branch=${(V)VCS_STATUS_LOCAL_BRANCH}
# If local branch name is at most 32 characters long, show it in full.
# Otherwise show the first 12 … the last 12.
# Tip: To always show local branch name in full without truncation, delete the next line.
(( $#branch > 32 )) && branch[13,-13]="…" # <-- this line
res+="${clean}${(g::)POWERLEVEL9K_VCS_BRANCH_ICON}${branch//\%/%%}"
fi
if [[ -n $VCS_STATUS_TAG
# Show tag only if not on a branch.
# Tip: To always show tag, delete the next line.
&& -z $VCS_STATUS_LOCAL_BRANCH # <-- this line
]]; then
local tag=${(V)VCS_STATUS_TAG}
# If tag name is at most 32 characters long, show it in full.
# Otherwise show the first 12 … the last 12.
# Tip: To always show tag name in full without truncation, delete the next line.
(( $#tag > 32 )) && tag[13,-13]="…" # <-- this line
res+="${meta}#${clean}${tag//\%/%%}"
fi
# Display the current Git commit if there is no branch and no tag.
# Tip: To always display the current Git commit, delete the next line.
[[ -z $VCS_STATUS_LOCAL_BRANCH && -z $VCS_STATUS_TAG ]] && # <-- this line
res+="${meta}@${clean}${VCS_STATUS_COMMIT[1,8]}"
# Show tracking branch name if it differs from local branch.
if [[ -n ${VCS_STATUS_REMOTE_BRANCH:#$VCS_STATUS_LOCAL_BRANCH} ]]; then
res+="${meta}:${clean}${(V)VCS_STATUS_REMOTE_BRANCH//\%/%%}"
fi
# Display "wip" if the latest commit's summary contains "wip" or "WIP".
if [[ $VCS_STATUS_COMMIT_SUMMARY == (|*[^[:alnum:]])(wip|WIP)(|[^[:alnum:]]*) ]]; then
res+=" ${modified}wip"
fi
if (( VCS_STATUS_COMMITS_AHEAD || VCS_STATUS_COMMITS_BEHIND )); then
# ⇣42 if behind the remote.
(( VCS_STATUS_COMMITS_BEHIND )) && res+=" ${clean}⇣${VCS_STATUS_COMMITS_BEHIND}"
# ⇡42 if ahead of the remote; no leading space if also behind the remote: ⇣42⇡42.
(( VCS_STATUS_COMMITS_AHEAD && !VCS_STATUS_COMMITS_BEHIND )) && res+=" "
(( VCS_STATUS_COMMITS_AHEAD )) && res+="${clean}⇡${VCS_STATUS_COMMITS_AHEAD}"
elif [[ -n $VCS_STATUS_REMOTE_BRANCH ]]; then
# Tip: Uncomment the next line to display '=' if up to date with the remote.
# res+=" ${clean}="
fi
# ⇠42 if behind the push remote.
(( VCS_STATUS_PUSH_COMMITS_BEHIND )) && res+=" ${clean}⇠${VCS_STATUS_PUSH_COMMITS_BEHIND}"
(( VCS_STATUS_PUSH_COMMITS_AHEAD && !VCS_STATUS_PUSH_COMMITS_BEHIND )) && res+=" "
# ⇢42 if ahead of the push remote; no leading space if also behind: ⇠42⇢42.
(( VCS_STATUS_PUSH_COMMITS_AHEAD )) && res+="${clean}⇢${VCS_STATUS_PUSH_COMMITS_AHEAD}"
# *42 if have stashes.
(( VCS_STATUS_STASHES )) && res+=" ${clean}*${VCS_STATUS_STASHES}"
# 'merge' if the repo is in an unusual state.
[[ -n $VCS_STATUS_ACTION ]] && res+=" ${conflicted}${VCS_STATUS_ACTION}"
# ~42 if have merge conflicts.
(( VCS_STATUS_NUM_CONFLICTED )) && res+=" ${conflicted}~${VCS_STATUS_NUM_CONFLICTED}"
# +42 if have staged changes.
(( VCS_STATUS_NUM_STAGED )) && res+=" ${modified}+${VCS_STATUS_NUM_STAGED}"
# !42 if have unstaged changes.
(( VCS_STATUS_NUM_UNSTAGED )) && res+=" ${modified}!${VCS_STATUS_NUM_UNSTAGED}"
# ?42 if have untracked files. It's really a question mark, your font isn't broken.
# See POWERLEVEL9K_VCS_UNTRACKED_ICON above if you want to use a different icon.
# Remove the next line if you don't want to see untracked files at all.
(( VCS_STATUS_NUM_UNTRACKED )) && res+=" ${untracked}${(g::)POWERLEVEL9K_VCS_UNTRACKED_ICON}${VCS_STATUS_NUM_UNTRACKED}"
# "─" if the number of unstaged files is unknown. This can happen due to
# POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY (see below) being set to a non-negative number lower
# than the number of files in the Git index, or due to bash.showDirtyState being set to false
# in the repository config. The number of staged and untracked files may also be unknown
# in this case.
(( VCS_STATUS_HAS_UNSTAGED == -1 )) && res+=" ${modified}─"
typeset -g my_git_format=$res
}
functions -M my_git_formatter 2>/dev/null
# Don't count the number of unstaged, untracked and conflicted files in Git repositories with
# more than this many files in the index. Negative value means infinity.
#
# If you are working in Git repositories with tens of millions of files and seeing performance
# sagging, try setting POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY to a number lower than the output
# of `git ls-files | wc -l`. Alternatively, add `bash.showDirtyState = false` to the repository's
# config: `git config bash.showDirtyState false`.
typeset -g POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY=-1
# Don't show Git status in prompt for repositories whose workdir matches this pattern.
# For example, if set to '~', the Git repository at $HOME/.git will be ignored.
# Multiple patterns can be combined with '|': '~(|/foo)|/bar/baz/*'.
typeset -g POWERLEVEL9K_VCS_DISABLED_WORKDIR_PATTERN='~'
# Disable the default Git status formatting.
typeset -g POWERLEVEL9K_VCS_DISABLE_GITSTATUS_FORMATTING=true
# Install our own Git status formatter.
typeset -g POWERLEVEL9K_VCS_CONTENT_EXPANSION='${$((my_git_formatter()))+${my_git_format}}'
# Enable counters for staged, unstaged, etc.
typeset -g POWERLEVEL9K_VCS_{STAGED,UNSTAGED,UNTRACKED,CONFLICTED,COMMITS_AHEAD,COMMITS_BEHIND}_MAX_NUM=-1
# Custom icon.
# typeset -g POWERLEVEL9K_VCS_VISUAL_IDENTIFIER_EXPANSION='⭐'
# Custom prefix.
typeset -g POWERLEVEL9K_VCS_PREFIX='on '
# Show status of repositories of these types. You can add svn and/or hg if you are
# using them. If you do, your prompt may become slow even when your current directory
# isn't in an svn or hg repository.
typeset -g POWERLEVEL9K_VCS_BACKENDS=(git)
##########################[ status: exit code of the last command ]###########################
# Enable OK_PIPE, ERROR_PIPE and ERROR_SIGNAL status states to allow us to enable, disable and
# style them independently from the regular OK and ERROR state.
typeset -g POWERLEVEL9K_STATUS_EXTENDED_STATES=true
# Status on success. No content, just an icon. No need to show it if prompt_char is enabled as
# it will signify success by turning green.
typeset -g POWERLEVEL9K_STATUS_OK=false
typeset -g POWERLEVEL9K_STATUS_OK_VISUAL_IDENTIFIER_EXPANSION='✔'
typeset -g POWERLEVEL9K_STATUS_OK_FOREGROUND=2
typeset -g POWERLEVEL9K_STATUS_OK_BACKGROUND=0
# Status when some part of a pipe command fails but the overall exit status is zero. It may look
# like this: 1|0.
typeset -g POWERLEVEL9K_STATUS_OK_PIPE=true
typeset -g POWERLEVEL9K_STATUS_OK_PIPE_VISUAL_IDENTIFIER_EXPANSION='✔'
typeset -g POWERLEVEL9K_STATUS_OK_PIPE_FOREGROUND=2
typeset -g POWERLEVEL9K_STATUS_OK_PIPE_BACKGROUND=0
# Status when it's just an error code (e.g., '1'). No need to show it if prompt_char is enabled as
# it will signify error by turning red.
typeset -g POWERLEVEL9K_STATUS_ERROR=false
typeset -g POWERLEVEL9K_STATUS_ERROR_VISUAL_IDENTIFIER_EXPANSION='✘'
typeset -g POWERLEVEL9K_STATUS_ERROR_FOREGROUND=3
typeset -g POWERLEVEL9K_STATUS_ERROR_BACKGROUND=1
# Status when the last command was terminated by a signal.
typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL=true
# Use terse signal names: "INT" instead of "SIGINT(2)".
typeset -g POWERLEVEL9K_STATUS_VERBOSE_SIGNAME=false
typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_VISUAL_IDENTIFIER_EXPANSION='✘'
typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_FOREGROUND=3
typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_BACKGROUND=1
# Status when some part of a pipe command fails and the overall exit status is also non-zero.
# It may look like this: 1|0.
typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE=true
typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_VISUAL_IDENTIFIER_EXPANSION='✘'
typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_FOREGROUND=3
typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_BACKGROUND=1
###################[ command_execution_time: duration of the last command ]###################
# Execution time color.
typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FOREGROUND=0
typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_BACKGROUND=3
# Show duration of the last command if takes at least this many seconds.
typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD=3
# Show this many fractional digits. Zero means round to seconds.
typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION=0
# Duration format: 1d 2h 3m 4s.
typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FORMAT='d h m s'
# Custom icon.
# typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_VISUAL_IDENTIFIER_EXPANSION='⭐'
# Custom prefix.
typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PREFIX='took '
#######################[ background_jobs: presence of background jobs ]#######################
# Background jobs color.
typeset -g POWERLEVEL9K_BACKGROUND_JOBS_FOREGROUND=6
typeset -g POWERLEVEL9K_BACKGROUND_JOBS_BACKGROUND=0
# Don't show the number of background jobs.
typeset -g POWERLEVEL9K_BACKGROUND_JOBS_VERBOSE=false
# Custom icon.
# typeset -g POWERLEVEL9K_BACKGROUND_JOBS_VISUAL_IDENTIFIER_EXPANSION='⭐'
#######################[ direnv: direnv status (https://direnv.net/) ]########################
# Direnv color.
typeset -g POWERLEVEL9K_DIRENV_FOREGROUND=3
typeset -g POWERLEVEL9K_DIRENV_BACKGROUND=0
# Custom icon.
# typeset -g POWERLEVEL9K_DIRENV_VISUAL_IDENTIFIER_EXPANSION='⭐'
###############[ asdf: asdf version manager (https://github.com/asdf-vm/asdf) ]###############
# Default asdf color. Only used to display tools for which there is no color override (see below).
# Tip: Override these parameters for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_FOREGROUND and
# POWERLEVEL9K_ASDF_${TOOL}_BACKGROUND.
typeset -g POWERLEVEL9K_ASDF_FOREGROUND=0
typeset -g POWERLEVEL9K_ASDF_BACKGROUND=7
# There are four parameters that can be used to hide asdf tools. Each parameter describes
# conditions under which a tool gets hidden. Parameters can hide tools but not unhide them. If at
# least one parameter decides to hide a tool, that tool gets hidden. If no parameter decides to
# hide a tool, it gets shown.
#
# Special note on the difference between POWERLEVEL9K_ASDF_SOURCES and
# POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW. Consider the effect of the following commands:
#
# asdf local python 3.8.1
# asdf global python 3.8.1
#
# After running both commands the current python version is 3.8.1 and its source is "local" as
# it takes precedence over "global". If POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW is set to false,
# it'll hide python version in this case because 3.8.1 is the same as the global version.
# POWERLEVEL9K_ASDF_SOURCES will hide python version only if the value of this parameter doesn't
# contain "local".
# Hide tool versions that don't come from one of these sources.
#
# Available sources:
#
# - shell `asdf current` says "set by ASDF_${TOOL}_VERSION environment variable"
# - local `asdf current` says "set by /some/not/home/directory/file"
# - global `asdf current` says "set by /home/username/file"
#
# Note: If this parameter is set to (shell local global), it won't hide tools.
# Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SOURCES.
typeset -g POWERLEVEL9K_ASDF_SOURCES=(shell local global)
# If set to false, hide tool versions that are the same as global.
#
# Note: The name of this parameter doesn't reflect its meaning at all.
# Note: If this parameter is set to true, it won't hide tools.
# Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_PROMPT_ALWAYS_SHOW.
typeset -g POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW=false
# If set to false, hide tool versions that are equal to "system".
#
# Note: If this parameter is set to true, it won't hide tools.
# Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SHOW_SYSTEM.
typeset -g POWERLEVEL9K_ASDF_SHOW_SYSTEM=true
# If set to non-empty value, hide tools unless there is a file matching the specified file pattern
# in the current directory, or its parent directory, or its grandparent directory, and so on.
#
# Note: If this parameter is set to empty value, it won't hide tools.
# Note: SHOW_ON_UPGLOB isn't specific to asdf. It works with all prompt segments.
# Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SHOW_ON_UPGLOB.
#
# Example: Hide nodejs version when there is no package.json and no *.js files in the current
# directory, in `..`, in `../..` and so on.
#
# typeset -g POWERLEVEL9K_ASDF_NODEJS_SHOW_ON_UPGLOB='*.js|package.json'
typeset -g POWERLEVEL9K_ASDF_SHOW_ON_UPGLOB=
# Ruby version from asdf.
typeset -g POWERLEVEL9K_ASDF_RUBY_FOREGROUND=0
typeset -g POWERLEVEL9K_ASDF_RUBY_BACKGROUND=1
# typeset -g POWERLEVEL9K_ASDF_RUBY_VISUAL_IDENTIFIER_EXPANSION='⭐'
# typeset -g POWERLEVEL9K_ASDF_RUBY_SHOW_ON_UPGLOB='*.foo|*.bar'
# Python version from asdf.
typeset -g POWERLEVEL9K_ASDF_PYTHON_FOREGROUND=0
typeset -g POWERLEVEL9K_ASDF_PYTHON_BACKGROUND=4
# typeset -g POWERLEVEL9K_ASDF_PYTHON_VISUAL_IDENTIFIER_EXPANSION='⭐'
# typeset -g POWERLEVEL9K_ASDF_PYTHON_SHOW_ON_UPGLOB='*.foo|*.bar'
# Go version from asdf.
typeset -g POWERLEVEL9K_ASDF_GOLANG_FOREGROUND=0
typeset -g POWERLEVEL9K_ASDF_GOLANG_BACKGROUND=4
# typeset -g POWERLEVEL9K_ASDF_GOLANG_VISUAL_IDENTIFIER_EXPANSION='⭐'
# typeset -g POWERLEVEL9K_ASDF_GOLANG_SHOW_ON_UPGLOB='*.foo|*.bar'
# Node.js version from asdf.
typeset -g POWERLEVEL9K_ASDF_NODEJS_FOREGROUND=0
typeset -g POWERLEVEL9K_ASDF_NODEJS_BACKGROUND=2
# typeset -g POWERLEVEL9K_ASDF_NODEJS_VISUAL_IDENTIFIER_EXPANSION='⭐'
# typeset -g POWERLEVEL9K_ASDF_NODEJS_SHOW_ON_UPGLOB='*.foo|*.bar'
# Rust version from asdf.
typeset -g POWERLEVEL9K_ASDF_RUST_FOREGROUND=0
typeset -g POWERLEVEL9K_ASDF_RUST_BACKGROUND=208
# typeset -g POWERLEVEL9K_ASDF_RUST_VISUAL_IDENTIFIER_EXPANSION='⭐'
# typeset -g POWERLEVEL9K_ASDF_RUST_SHOW_ON_UPGLOB='*.foo|*.bar'
# .NET Core version from asdf.
typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_FOREGROUND=0
typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_BACKGROUND=5
# typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_VISUAL_IDENTIFIER_EXPANSION='⭐'
# typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_SHOW_ON_UPGLOB='*.foo|*.bar'
# Flutter version from asdf.
typeset -g POWERLEVEL9K_ASDF_FLUTTER_FOREGROUND=0
typeset -g POWERLEVEL9K_ASDF_FLUTTER_BACKGROUND=4
# typeset -g POWERLEVEL9K_ASDF_FLUTTER_VISUAL_IDENTIFIER_EXPANSION='⭐'
# typeset -g POWERLEVEL9K_ASDF_FLUTTER_SHOW_ON_UPGLOB='*.foo|*.bar'
# Lua version from asdf.
typeset -g POWERLEVEL9K_ASDF_LUA_FOREGROUND=0
typeset -g POWERLEVEL9K_ASDF_LUA_BACKGROUND=4
# typeset -g POWERLEVEL9K_ASDF_LUA_VISUAL_IDENTIFIER_EXPANSION='⭐'
# typeset -g POWERLEVEL9K_ASDF_LUA_SHOW_ON_UPGLOB='*.foo|*.bar'
# Java version from asdf.
typeset -g POWERLEVEL9K_ASDF_JAVA_FOREGROUND=1
typeset -g POWERLEVEL9K_ASDF_JAVA_BACKGROUND=7
# typeset -g POWERLEVEL9K_ASDF_JAVA_VISUAL_IDENTIFIER_EXPANSION='⭐'
# typeset -g POWERLEVEL9K_ASDF_JAVA_SHOW_ON_UPGLOB='*.foo|*.bar'
# Perl version from asdf.
typeset -g POWERLEVEL9K_ASDF_PERL_FOREGROUND=0
typeset -g POWERLEVEL9K_ASDF_PERL_BACKGROUND=4
# typeset -g POWERLEVEL9K_ASDF_PERL_VISUAL_IDENTIFIER_EXPANSION='⭐'
# typeset -g POWERLEVEL9K_ASDF_PERL_SHOW_ON_UPGLOB='*.foo|*.bar'
# Erlang version from asdf.
typeset -g POWERLEVEL9K_ASDF_ERLANG_FOREGROUND=0
typeset -g POWERLEVEL9K_ASDF_ERLANG_BACKGROUND=1
# typeset -g POWERLEVEL9K_ASDF_ERLANG_VISUAL_IDENTIFIER_EXPANSION='⭐'
# typeset -g POWERLEVEL9K_ASDF_ERLANG_SHOW_ON_UPGLOB='*.foo|*.bar'
# Elixir version from asdf.
typeset -g POWERLEVEL9K_ASDF_ELIXIR_FOREGROUND=0
typeset -g POWERLEVEL9K_ASDF_ELIXIR_BACKGROUND=5
# typeset -g POWERLEVEL9K_ASDF_ELIXIR_VISUAL_IDENTIFIER_EXPANSION='⭐'
# typeset -g POWERLEVEL9K_ASDF_ELIXIR_SHOW_ON_UPGLOB='*.foo|*.bar'
# Postgres version from asdf.
typeset -g POWERLEVEL9K_ASDF_POSTGRES_FOREGROUND=0
typeset -g POWERLEVEL9K_ASDF_POSTGRES_BACKGROUND=6
# typeset -g POWERLEVEL9K_ASDF_POSTGRES_VISUAL_IDENTIFIER_EXPANSION='⭐'
# typeset -g POWERLEVEL9K_ASDF_POSTGRES_SHOW_ON_UPGLOB='*.foo|*.bar'
# PHP version from asdf.
typeset -g POWERLEVEL9K_ASDF_PHP_FOREGROUND=0
typeset -g POWERLEVEL9K_ASDF_PHP_BACKGROUND=5
# typeset -g POWERLEVEL9K_ASDF_PHP_VISUAL_IDENTIFIER_EXPANSION='⭐'
# typeset -g POWERLEVEL9K_ASDF_PHP_SHOW_ON_UPGLOB='*.foo|*.bar'
# Haskell version from asdf.
typeset -g POWERLEVEL9K_ASDF_HASKELL_FOREGROUND=0
typeset -g POWERLEVEL9K_ASDF_HASKELL_BACKGROUND=3
# typeset -g POWERLEVEL9K_ASDF_HASKELL_VISUAL_IDENTIFIER_EXPANSION='⭐'
# typeset -g POWERLEVEL9K_ASDF_HASKELL_SHOW_ON_UPGLOB='*.foo|*.bar'
# Julia version from asdf.
typeset -g POWERLEVEL9K_ASDF_JULIA_FOREGROUND=0
typeset -g POWERLEVEL9K_ASDF_JULIA_BACKGROUND=2
# typeset -g POWERLEVEL9K_ASDF_JULIA_VISUAL_IDENTIFIER_EXPANSION='⭐'
# typeset -g POWERLEVEL9K_ASDF_JULIA_SHOW_ON_UPGLOB='*.foo|*.bar'
##########[ nordvpn: nordvpn connection status, linux only (https://nordvpn.com/) ]###########
# NordVPN connection indicator color.
typeset -g POWERLEVEL9K_NORDVPN_FOREGROUND=7
typeset -g POWERLEVEL9K_NORDVPN_BACKGROUND=4
# Hide NordVPN connection indicator when not connected.
typeset -g POWERLEVEL9K_NORDVPN_{DISCONNECTED,CONNECTING,DISCONNECTING}_CONTENT_EXPANSION=
typeset -g POWERLEVEL9K_NORDVPN_{DISCONNECTED,CONNECTING,DISCONNECTING}_VISUAL_IDENTIFIER_EXPANSION=
# Custom icon.
# typeset -g POWERLEVEL9K_NORDVPN_VISUAL_IDENTIFIER_EXPANSION='⭐'
#################[ ranger: ranger shell (https://github.com/ranger/ranger) ]##################
# Ranger shell color.
typeset -g POWERLEVEL9K_RANGER_FOREGROUND=3
typeset -g POWERLEVEL9K_RANGER_BACKGROUND=0
# Custom icon.
# typeset -g POWERLEVEL9K_RANGER_VISUAL_IDENTIFIER_EXPANSION='⭐'
######################[ nnn: nnn shell (https://github.com/jarun/nnn) ]#######################
# Nnn shell color.
typeset -g POWERLEVEL9K_NNN_FOREGROUND=0
typeset -g POWERLEVEL9K_NNN_BACKGROUND=6
# Custom icon.
# typeset -g POWERLEVEL9K_NNN_VISUAL_IDENTIFIER_EXPANSION='⭐'
######################[ lf: lf shell (https://github.com/gokcehan/lf) ]#######################
# lf shell color.
typeset -g POWERLEVEL9K_LF_FOREGROUND=0
typeset -g POWERLEVEL9K_LF_BACKGROUND=6
# Custom icon.
# typeset -g POWERLEVEL9K_LF_VISUAL_IDENTIFIER_EXPANSION='⭐'
##################[ xplr: xplr shell (https://github.com/sayanarijit/xplr) ]##################
# xplr shell color.
typeset -g POWERLEVEL9K_XPLR_FOREGROUND=0
typeset -g POWERLEVEL9K_XPLR_BACKGROUND=6
# Custom icon.
# typeset -g POWERLEVEL9K_XPLR_VISUAL_IDENTIFIER_EXPANSION='⭐'
###########################[ vim_shell: vim shell indicator (:sh) ]###########################
# Vim shell indicator color.
typeset -g POWERLEVEL9K_VIM_SHELL_FOREGROUND=0
typeset -g POWERLEVEL9K_VIM_SHELL_BACKGROUND=2
# Custom icon.
# typeset -g POWERLEVEL9K_VIM_SHELL_VISUAL_IDENTIFIER_EXPANSION='⭐'
######[ midnight_commander: midnight commander shell (https://midnight-commander.org/) ]######
# Midnight Commander shell color.
typeset -g POWERLEVEL9K_MIDNIGHT_COMMANDER_FOREGROUND=3
typeset -g POWERLEVEL9K_MIDNIGHT_COMMANDER_BACKGROUND=0
# Custom icon.
# typeset -g POWERLEVEL9K_MIDNIGHT_COMMANDER_VISUAL_IDENTIFIER_EXPANSION='⭐'
#[ nix_shell: nix shell (https://nixos.org/nixos/nix-pills/developing-with-nix-shell.html) ]##
# Nix shell color.
typeset -g POWERLEVEL9K_NIX_SHELL_FOREGROUND=0
typeset -g POWERLEVEL9K_NIX_SHELL_BACKGROUND=4
# Display the icon of nix_shell if PATH contains a subdirectory of /nix/store.
# typeset -g POWERLEVEL9K_NIX_SHELL_INFER_FROM_PATH=false
# Tip: If you want to see just the icon without "pure" and "impure", uncomment the next line.
# typeset -g POWERLEVEL9K_NIX_SHELL_CONTENT_EXPANSION=
# Custom icon.
# typeset -g POWERLEVEL9K_NIX_SHELL_VISUAL_IDENTIFIER_EXPANSION='⭐'
##################[ chezmoi_shell: chezmoi shell (https://www.chezmoi.io/) ]##################
# chezmoi shell color.
typeset -g POWERLEVEL9K_CHEZMOI_SHELL_FOREGROUND=0
typeset -g POWERLEVEL9K_CHEZMOI_SHELL_BACKGROUND=4
# Custom icon.
# typeset -g POWERLEVEL9K_CHEZMOI_SHELL_VISUAL_IDENTIFIER_EXPANSION='⭐'
##################################[ disk_usage: disk usage ]##################################
# Colors for different levels of disk usage.
typeset -g POWERLEVEL9K_DISK_USAGE_NORMAL_FOREGROUND=3
typeset -g POWERLEVEL9K_DISK_USAGE_NORMAL_BACKGROUND=0
typeset -g POWERLEVEL9K_DISK_USAGE_WARNING_FOREGROUND=0
typeset -g POWERLEVEL9K_DISK_USAGE_WARNING_BACKGROUND=3
typeset -g POWERLEVEL9K_DISK_USAGE_CRITICAL_FOREGROUND=7
typeset -g POWERLEVEL9K_DISK_USAGE_CRITICAL_BACKGROUND=1
# Thresholds for different levels of disk usage (percentage points).
typeset -g POWERLEVEL9K_DISK_USAGE_WARNING_LEVEL=90
typeset -g POWERLEVEL9K_DISK_USAGE_CRITICAL_LEVEL=95
# If set to true, hide disk usage when below $POWERLEVEL9K_DISK_USAGE_WARNING_LEVEL percent.
typeset -g POWERLEVEL9K_DISK_USAGE_ONLY_WARNING=false
# Custom icon.
# typeset -g POWERLEVEL9K_DISK_USAGE_VISUAL_IDENTIFIER_EXPANSION='⭐'
###########[ vi_mode: vi mode (you don't need this if you've enabled prompt_char) ]###########
# Foreground color.
typeset -g POWERLEVEL9K_VI_MODE_FOREGROUND=0
# Text and color for normal (a.k.a. command) vi mode.
typeset -g POWERLEVEL9K_VI_COMMAND_MODE_STRING=NORMAL
typeset -g POWERLEVEL9K_VI_MODE_NORMAL_BACKGROUND=2
# Text and color for visual vi mode.
typeset -g POWERLEVEL9K_VI_VISUAL_MODE_STRING=VISUAL
typeset -g POWERLEVEL9K_VI_MODE_VISUAL_BACKGROUND=4
# Text and color for overtype (a.k.a. overwrite and replace) vi mode.
typeset -g POWERLEVEL9K_VI_OVERWRITE_MODE_STRING=OVERTYPE
typeset -g POWERLEVEL9K_VI_MODE_OVERWRITE_BACKGROUND=3
# Text and color for insert vi mode.
typeset -g POWERLEVEL9K_VI_INSERT_MODE_STRING=
typeset -g POWERLEVEL9K_VI_MODE_INSERT_FOREGROUND=8
######################################[ ram: free RAM ]#######################################
# RAM color.
typeset -g POWERLEVEL9K_RAM_FOREGROUND=0
typeset -g POWERLEVEL9K_RAM_BACKGROUND=3
# Custom icon.
# typeset -g POWERLEVEL9K_RAM_VISUAL_IDENTIFIER_EXPANSION='⭐'
#####################################[ swap: used swap ]######################################
# Swap color.
typeset -g POWERLEVEL9K_SWAP_FOREGROUND=0
typeset -g POWERLEVEL9K_SWAP_BACKGROUND=3
# Custom icon.
# typeset -g POWERLEVEL9K_SWAP_VISUAL_IDENTIFIER_EXPANSION='⭐'
######################################[ load: CPU load ]######################################
# Show average CPU load over this many last minutes. Valid values are 1, 5 and 15.
typeset -g POWERLEVEL9K_LOAD_WHICH=5
# Load color when load is under 50%.
typeset -g POWERLEVEL9K_LOAD_NORMAL_FOREGROUND=0
typeset -g POWERLEVEL9K_LOAD_NORMAL_BACKGROUND=2
# Load color when load is between 50% and 70%.
typeset -g POWERLEVEL9K_LOAD_WARNING_FOREGROUND=0
typeset -g POWERLEVEL9K_LOAD_WARNING_BACKGROUND=3
# Load color when load is over 70%.
typeset -g POWERLEVEL9K_LOAD_CRITICAL_FOREGROUND=0
typeset -g POWERLEVEL9K_LOAD_CRITICAL_BACKGROUND=1
# Custom icon.
# typeset -g POWERLEVEL9K_LOAD_VISUAL_IDENTIFIER_EXPANSION='⭐'
################[ todo: todo items (https://github.com/todotxt/todo.txt-cli) ]################
# Todo color.
typeset -g POWERLEVEL9K_TODO_FOREGROUND=0
typeset -g POWERLEVEL9K_TODO_BACKGROUND=8
# Hide todo when the total number of tasks is zero.
typeset -g POWERLEVEL9K_TODO_HIDE_ZERO_TOTAL=true
# Hide todo when the number of tasks after filtering is zero.
typeset -g POWERLEVEL9K_TODO_HIDE_ZERO_FILTERED=false
# Todo format. The following parameters are available within the expansion.
#
# - P9K_TODO_TOTAL_TASK_COUNT The total number of tasks.
# - P9K_TODO_FILTERED_TASK_COUNT The number of tasks after filtering.
#
# These variables correspond to the last line of the output of `todo.sh -p ls`:
#
# TODO: 24 of 42 tasks shown
#
# Here 24 is P9K_TODO_FILTERED_TASK_COUNT and 42 is P9K_TODO_TOTAL_TASK_COUNT.
#
# typeset -g POWERLEVEL9K_TODO_CONTENT_EXPANSION='$P9K_TODO_FILTERED_TASK_COUNT'
# Custom icon.
# typeset -g POWERLEVEL9K_TODO_VISUAL_IDENTIFIER_EXPANSION='⭐'
###########[ timewarrior: timewarrior tracking status (https://timewarrior.net/) ]############
# Timewarrior color.
typeset -g POWERLEVEL9K_TIMEWARRIOR_FOREGROUND=255
typeset -g POWERLEVEL9K_TIMEWARRIOR_BACKGROUND=8
# If the tracked task is longer than 24 characters, truncate and append "…".
# Tip: To always display tasks without truncation, delete the following parameter.
# Tip: To hide task names and display just the icon when time tracking is enabled, set the
# value of the following parameter to "".
typeset -g POWERLEVEL9K_TIMEWARRIOR_CONTENT_EXPANSION='${P9K_CONTENT:0:24}${${P9K_CONTENT:24}:+…}'
# Custom icon.
# typeset -g POWERLEVEL9K_TIMEWARRIOR_VISUAL_IDENTIFIER_EXPANSION='⭐'
##############[ taskwarrior: taskwarrior task count (https://taskwarrior.org/) ]##############
# Taskwarrior color.
typeset -g POWERLEVEL9K_TASKWARRIOR_FOREGROUND=0
typeset -g POWERLEVEL9K_TASKWARRIOR_BACKGROUND=6
# Taskwarrior segment format. The following parameters are available within the expansion.
#
# - P9K_TASKWARRIOR_PENDING_COUNT The number of pending tasks: `task +PENDING count`.
# - P9K_TASKWARRIOR_OVERDUE_COUNT The number of overdue tasks: `task +OVERDUE count`.
#
# Zero values are represented as empty parameters.
#
# The default format:
#
# '${P9K_TASKWARRIOR_OVERDUE_COUNT:+"!$P9K_TASKWARRIOR_OVERDUE_COUNT/"}$P9K_TASKWARRIOR_PENDING_COUNT'
#
# typeset -g POWERLEVEL9K_TASKWARRIOR_CONTENT_EXPANSION='$P9K_TASKWARRIOR_PENDING_COUNT'
# Custom icon.
# typeset -g POWERLEVEL9K_TASKWARRIOR_VISUAL_IDENTIFIER_EXPANSION='⭐'
######[ per_directory_history: Oh My Zsh per-directory-history local/global indicator ]#######
# Color when using local/global history.
typeset -g POWERLEVEL9K_PER_DIRECTORY_HISTORY_LOCAL_FOREGROUND=0
typeset -g POWERLEVEL9K_PER_DIRECTORY_HISTORY_LOCAL_BACKGROUND=5
typeset -g POWERLEVEL9K_PER_DIRECTORY_HISTORY_GLOBAL_FOREGROUND=0
typeset -g POWERLEVEL9K_PER_DIRECTORY_HISTORY_GLOBAL_BACKGROUND=3
# Tip: Uncomment the next two lines to hide "local"/"global" text and leave just the icon.
# typeset -g POWERLEVEL9K_PER_DIRECTORY_HISTORY_LOCAL_CONTENT_EXPANSION=''
# typeset -g POWERLEVEL9K_PER_DIRECTORY_HISTORY_GLOBAL_CONTENT_EXPANSION=''
# Custom icon.
# typeset -g POWERLEVEL9K_PER_DIRECTORY_HISTORY_LOCAL_VISUAL_IDENTIFIER_EXPANSION='⭐'
# typeset -g POWERLEVEL9K_PER_DIRECTORY_HISTORY_GLOBAL_VISUAL_IDENTIFIER_EXPANSION='⭐'
################################[ cpu_arch: CPU architecture ]################################
# CPU architecture color.
typeset -g POWERLEVEL9K_CPU_ARCH_FOREGROUND=0
typeset -g POWERLEVEL9K_CPU_ARCH_BACKGROUND=3
# Hide the segment when on a specific CPU architecture.
# typeset -g POWERLEVEL9K_CPU_ARCH_X86_64_CONTENT_EXPANSION=
# typeset -g POWERLEVEL9K_CPU_ARCH_X86_64_VISUAL_IDENTIFIER_EXPANSION=
# Custom icon.
# typeset -g POWERLEVEL9K_CPU_ARCH_VISUAL_IDENTIFIER_EXPANSION='⭐'
##################################[ context: user@hostname ]##################################
# Context color when running with privileges.
typeset -g POWERLEVEL9K_CONTEXT_ROOT_FOREGROUND=1
typeset -g POWERLEVEL9K_CONTEXT_ROOT_BACKGROUND=0
# Context color in SSH without privileges.
typeset -g POWERLEVEL9K_CONTEXT_{REMOTE,REMOTE_SUDO}_FOREGROUND=3
typeset -g POWERLEVEL9K_CONTEXT_{REMOTE,REMOTE_SUDO}_BACKGROUND=0
# Default context color (no privileges, no SSH).
typeset -g POWERLEVEL9K_CONTEXT_FOREGROUND=3
typeset -g POWERLEVEL9K_CONTEXT_BACKGROUND=0
# Context format when running with privileges: user@hostname.
typeset -g POWERLEVEL9K_CONTEXT_ROOT_TEMPLATE='%n@%m'
# Context format when in SSH without privileges: user@hostname.
typeset -g POWERLEVEL9K_CONTEXT_{REMOTE,REMOTE_SUDO}_TEMPLATE='%n@%m'
# Default context format (no privileges, no SSH): user@hostname.
typeset -g POWERLEVEL9K_CONTEXT_TEMPLATE='%n@%m'
# Don't show context unless running with privileges or in SSH.
# Tip: Remove the next line to always show context.
typeset -g POWERLEVEL9K_CONTEXT_{DEFAULT,SUDO}_{CONTENT,VISUAL_IDENTIFIER}_EXPANSION=
# Custom icon.
# typeset -g POWERLEVEL9K_CONTEXT_VISUAL_IDENTIFIER_EXPANSION='⭐'
# Custom prefix.
typeset -g POWERLEVEL9K_CONTEXT_PREFIX='with '
###[ virtualenv: python virtual environment (https://docs.python.org/3/library/venv.html) ]###
# Python virtual environment color.
typeset -g POWERLEVEL9K_VIRTUALENV_FOREGROUND=0
typeset -g POWERLEVEL9K_VIRTUALENV_BACKGROUND=4
# Don't show Python version next to the virtual environment name.
typeset -g POWERLEVEL9K_VIRTUALENV_SHOW_PYTHON_VERSION=false
# If set to "false", won't show virtualenv if pyenv is already shown.
# If set to "if-different", won't show virtualenv if it's the same as pyenv.
typeset -g POWERLEVEL9K_VIRTUALENV_SHOW_WITH_PYENV=false
# Separate environment name from Python version only with a space.
typeset -g POWERLEVEL9K_VIRTUALENV_{LEFT,RIGHT}_DELIMITER=
# Custom icon.
# typeset -g POWERLEVEL9K_VIRTUALENV_VISUAL_IDENTIFIER_EXPANSION='⭐'
#####################[ anaconda: conda environment (https://conda.io/) ]######################
# Anaconda environment color.
typeset -g POWERLEVEL9K_ANACONDA_FOREGROUND=0
typeset -g POWERLEVEL9K_ANACONDA_BACKGROUND=4
# Anaconda segment format. The following parameters are available within the expansion.
#
# - CONDA_PREFIX Absolute path to the active Anaconda/Miniconda environment.
# - CONDA_DEFAULT_ENV Name of the active Anaconda/Miniconda environment.
# - CONDA_PROMPT_MODIFIER Configurable prompt modifier (see below).
# - P9K_ANACONDA_PYTHON_VERSION Current python version (python --version).
#
# CONDA_PROMPT_MODIFIER can be configured with the following command:
#
# conda config --set env_prompt '({default_env}) '
#
# The last argument is a Python format string that can use the following variables:
#
# - prefix The same as CONDA_PREFIX.
# - default_env The same as CONDA_DEFAULT_ENV.
# - name The last segment of CONDA_PREFIX.
# - stacked_env Comma-separated list of names in the environment stack. The first element is
# always the same as default_env.
#
# Note: '({default_env}) ' is the default value of env_prompt.
#
# The default value of POWERLEVEL9K_ANACONDA_CONTENT_EXPANSION expands to $CONDA_PROMPT_MODIFIER
# without the surrounding parentheses, or to the last path component of CONDA_PREFIX if the former
# is empty.
typeset -g POWERLEVEL9K_ANACONDA_CONTENT_EXPANSION='${${${${CONDA_PROMPT_MODIFIER#\(}% }%\)}:-${CONDA_PREFIX:t}}'
# Custom icon.
# typeset -g POWERLEVEL9K_ANACONDA_VISUAL_IDENTIFIER_EXPANSION='⭐'
################[ pyenv: python environment (https://github.com/pyenv/pyenv) ]################
# Pyenv color.
typeset -g POWERLEVEL9K_PYENV_FOREGROUND=0
typeset -g POWERLEVEL9K_PYENV_BACKGROUND=4
# Hide python version if it doesn't come from one of these sources.
typeset -g POWERLEVEL9K_PYENV_SOURCES=(shell local global)
# If set to false, hide python version if it's the same as global:
# $(pyenv version-name) == $(pyenv global).
typeset -g POWERLEVEL9K_PYENV_PROMPT_ALWAYS_SHOW=false
# If set to false, hide python version if it's equal to "system".
typeset -g POWERLEVEL9K_PYENV_SHOW_SYSTEM=true
# Pyenv segment format. The following parameters are available within the expansion.
#
# - P9K_CONTENT Current pyenv environment (pyenv version-name).
# - P9K_PYENV_PYTHON_VERSION Current python version (python --version).
#
# The default format has the following logic:
#
# 1. Display just "$P9K_CONTENT" if it's equal to "$P9K_PYENV_PYTHON_VERSION" or
# starts with "$P9K_PYENV_PYTHON_VERSION/".
# 2. Otherwise display "$P9K_CONTENT $P9K_PYENV_PYTHON_VERSION".
typeset -g POWERLEVEL9K_PYENV_CONTENT_EXPANSION='${P9K_CONTENT}${${P9K_CONTENT:#$P9K_PYENV_PYTHON_VERSION(|/*)}:+ $P9K_PYENV_PYTHON_VERSION}'
# Custom icon.
# typeset -g POWERLEVEL9K_PYENV_VISUAL_IDENTIFIER_EXPANSION='⭐'
################[ goenv: go environment (https://github.com/syndbg/goenv) ]################
# Goenv color.
typeset -g POWERLEVEL9K_GOENV_FOREGROUND=0
typeset -g POWERLEVEL9K_GOENV_BACKGROUND=4
# Hide go version if it doesn't come from one of these sources.
typeset -g POWERLEVEL9K_GOENV_SOURCES=(shell local global)
# If set to false, hide go version if it's the same as global:
# $(goenv version-name) == $(goenv global).
typeset -g POWERLEVEL9K_GOENV_PROMPT_ALWAYS_SHOW=false
# If set to false, hide go version if it's equal to "system".
typeset -g POWERLEVEL9K_GOENV_SHOW_SYSTEM=true
# Custom icon.
# typeset -g POWERLEVEL9K_GOENV_VISUAL_IDENTIFIER_EXPANSION='⭐'
##########[ nodenv: node.js version from nodenv (https://github.com/nodenv/nodenv) ]##########
# Nodenv color.
typeset -g POWERLEVEL9K_NODENV_FOREGROUND=2
typeset -g POWERLEVEL9K_NODENV_BACKGROUND=0
# Hide node version if it doesn't come from one of these sources.
typeset -g POWERLEVEL9K_NODENV_SOURCES=(shell local global)
# If set to false, hide node version if it's the same as global:
# $(nodenv version-name) == $(nodenv global).
typeset -g POWERLEVEL9K_NODENV_PROMPT_ALWAYS_SHOW=false
# If set to false, hide node version if it's equal to "system".
typeset -g POWERLEVEL9K_NODENV_SHOW_SYSTEM=true
# Custom icon.
# typeset -g POWERLEVEL9K_NODENV_VISUAL_IDENTIFIER_EXPANSION='⭐'
##############[ nvm: node.js version from nvm (https://github.com/nvm-sh/nvm) ]###############
# Nvm color.
typeset -g POWERLEVEL9K_NVM_FOREGROUND=0
typeset -g POWERLEVEL9K_NVM_BACKGROUND=5
# If set to false, hide node version if it's the same as default:
# $(nvm version current) == $(nvm version default).
typeset -g POWERLEVEL9K_NVM_PROMPT_ALWAYS_SHOW=false
# If set to false, hide node version if it's equal to "system".
typeset -g POWERLEVEL9K_NVM_SHOW_SYSTEM=true
# Custom icon.
# typeset -g POWERLEVEL9K_NVM_VISUAL_IDENTIFIER_EXPANSION='⭐'
############[ nodeenv: node.js environment (https://github.com/ekalinin/nodeenv) ]############
# Nodeenv color.
typeset -g POWERLEVEL9K_NODEENV_FOREGROUND=2
typeset -g POWERLEVEL9K_NODEENV_BACKGROUND=0
# Don't show Node version next to the environment name.
typeset -g POWERLEVEL9K_NODEENV_SHOW_NODE_VERSION=false
# Separate environment name from Node version only with a space.
typeset -g POWERLEVEL9K_NODEENV_{LEFT,RIGHT}_DELIMITER=
# Custom icon.
# typeset -g POWERLEVEL9K_NODEENV_VISUAL_IDENTIFIER_EXPANSION='⭐'
##############################[ node_version: node.js version ]###############################
# Node version color.
typeset -g POWERLEVEL9K_NODE_VERSION_FOREGROUND=7
typeset -g POWERLEVEL9K_NODE_VERSION_BACKGROUND=2
# Show node version only when in a directory tree containing package.json.
typeset -g POWERLEVEL9K_NODE_VERSION_PROJECT_ONLY=true
# Custom icon.
# typeset -g POWERLEVEL9K_NODE_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐'
#######################[ go_version: go version (https://golang.org) ]########################
# Go version color.
typeset -g POWERLEVEL9K_GO_VERSION_FOREGROUND=255
typeset -g POWERLEVEL9K_GO_VERSION_BACKGROUND=2
# Show go version only when in a go project subdirectory.
typeset -g POWERLEVEL9K_GO_VERSION_PROJECT_ONLY=true
# Custom icon.
# typeset -g POWERLEVEL9K_GO_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐'
#################[ rust_version: rustc version (https://www.rust-lang.org) ]##################
# Rust version color.
typeset -g POWERLEVEL9K_RUST_VERSION_FOREGROUND=0
typeset -g POWERLEVEL9K_RUST_VERSION_BACKGROUND=208
# Show rust version only when in a rust project subdirectory.
typeset -g POWERLEVEL9K_RUST_VERSION_PROJECT_ONLY=true
# Custom icon.
# typeset -g POWERLEVEL9K_RUST_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐'
###############[ dotnet_version: .NET version (https://dotnet.microsoft.com) ]################
# .NET version color.
typeset -g POWERLEVEL9K_DOTNET_VERSION_FOREGROUND=7
typeset -g POWERLEVEL9K_DOTNET_VERSION_BACKGROUND=5
# Show .NET version only when in a .NET project subdirectory.
typeset -g POWERLEVEL9K_DOTNET_VERSION_PROJECT_ONLY=true
# Custom icon.
# typeset -g POWERLEVEL9K_DOTNET_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐'
#####################[ php_version: php version (https://www.php.net/) ]######################
# PHP version color.
typeset -g POWERLEVEL9K_PHP_VERSION_FOREGROUND=0
typeset -g POWERLEVEL9K_PHP_VERSION_BACKGROUND=5
# Show PHP version only when in a PHP project subdirectory.
typeset -g POWERLEVEL9K_PHP_VERSION_PROJECT_ONLY=true
# Custom icon.
# typeset -g POWERLEVEL9K_PHP_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐'
##########[ laravel_version: laravel php framework version (https://laravel.com/) ]###########
# Laravel version color.
typeset -g POWERLEVEL9K_LARAVEL_VERSION_FOREGROUND=1
typeset -g POWERLEVEL9K_LARAVEL_VERSION_BACKGROUND=7
# Custom icon.
# typeset -g POWERLEVEL9K_LARAVEL_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐'
#############[ rbenv: ruby version from rbenv (https://github.com/rbenv/rbenv) ]##############
# Rbenv color.
typeset -g POWERLEVEL9K_RBENV_FOREGROUND=0
typeset -g POWERLEVEL9K_RBENV_BACKGROUND=1
# Hide ruby version if it doesn't come from one of these sources.
typeset -g POWERLEVEL9K_RBENV_SOURCES=(shell local global)
# If set to false, hide ruby version if it's the same as global:
# $(rbenv version-name) == $(rbenv global).
typeset -g POWERLEVEL9K_RBENV_PROMPT_ALWAYS_SHOW=false
# If set to false, hide ruby version if it's equal to "system".
typeset -g POWERLEVEL9K_RBENV_SHOW_SYSTEM=true
# Custom icon.
# typeset -g POWERLEVEL9K_RBENV_VISUAL_IDENTIFIER_EXPANSION='⭐'
####################[ java_version: java version (https://www.java.com/) ]####################
# Java version color.
typeset -g POWERLEVEL9K_JAVA_VERSION_FOREGROUND=1
typeset -g POWERLEVEL9K_JAVA_VERSION_BACKGROUND=7
# Show java version only when in a java project subdirectory.
typeset -g POWERLEVEL9K_JAVA_VERSION_PROJECT_ONLY=true
# Show brief version.
typeset -g POWERLEVEL9K_JAVA_VERSION_FULL=false
# Custom icon.
# typeset -g POWERLEVEL9K_JAVA_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐'
###[ package: name@version from package.json (https://docs.npmjs.com/files/package.json) ]####
# Package color.
typeset -g POWERLEVEL9K_PACKAGE_FOREGROUND=0
typeset -g POWERLEVEL9K_PACKAGE_BACKGROUND=6
# Package format. The following parameters are available within the expansion.
#
# - P9K_PACKAGE_NAME The value of `name` field in package.json.
# - P9K_PACKAGE_VERSION The value of `version` field in package.json.
#
# typeset -g POWERLEVEL9K_PACKAGE_CONTENT_EXPANSION='${P9K_PACKAGE_NAME//\%/%%}@${P9K_PACKAGE_VERSION//\%/%%}'
# Custom icon.
# typeset -g POWERLEVEL9K_PACKAGE_VISUAL_IDENTIFIER_EXPANSION='⭐'
#######################[ rvm: ruby version from rvm (https://rvm.io) ]########################
# Rvm color.
typeset -g POWERLEVEL9K_RVM_FOREGROUND=0
typeset -g POWERLEVEL9K_RVM_BACKGROUND=240
# Don't show @gemset at the end.
typeset -g POWERLEVEL9K_RVM_SHOW_GEMSET=false
# Don't show ruby- at the front.
typeset -g POWERLEVEL9K_RVM_SHOW_PREFIX=false
# Custom icon.
# typeset -g POWERLEVEL9K_RVM_VISUAL_IDENTIFIER_EXPANSION='⭐'
###########[ fvm: flutter version management (https://github.com/leoafarias/fvm) ]############
# Fvm color.
typeset -g POWERLEVEL9K_FVM_FOREGROUND=0
typeset -g POWERLEVEL9K_FVM_BACKGROUND=4
# Custom icon.
# typeset -g POWERLEVEL9K_FVM_VISUAL_IDENTIFIER_EXPANSION='⭐'
##########[ luaenv: lua version from luaenv (https://github.com/cehoffman/luaenv) ]###########
# Lua color.
typeset -g POWERLEVEL9K_LUAENV_FOREGROUND=0
typeset -g POWERLEVEL9K_LUAENV_BACKGROUND=4
# Hide lua version if it doesn't come from one of these sources.
typeset -g POWERLEVEL9K_LUAENV_SOURCES=(shell local global)
# If set to false, hide lua version if it's the same as global:
# $(luaenv version-name) == $(luaenv global).
typeset -g POWERLEVEL9K_LUAENV_PROMPT_ALWAYS_SHOW=false
# If set to false, hide lua version if it's equal to "system".
typeset -g POWERLEVEL9K_LUAENV_SHOW_SYSTEM=true
# Custom icon.
# typeset -g POWERLEVEL9K_LUAENV_VISUAL_IDENTIFIER_EXPANSION='⭐'
###############[ jenv: java version from jenv (https://github.com/jenv/jenv) ]################
# Java color.
typeset -g POWERLEVEL9K_JENV_FOREGROUND=1
typeset -g POWERLEVEL9K_JENV_BACKGROUND=7
# Hide java version if it doesn't come from one of these sources.
typeset -g POWERLEVEL9K_JENV_SOURCES=(shell local global)
# If set to false, hide java version if it's the same as global:
# $(jenv version-name) == $(jenv global).
typeset -g POWERLEVEL9K_JENV_PROMPT_ALWAYS_SHOW=false
# If set to false, hide java version if it's equal to "system".
typeset -g POWERLEVEL9K_JENV_SHOW_SYSTEM=true
# Custom icon.
# typeset -g POWERLEVEL9K_JENV_VISUAL_IDENTIFIER_EXPANSION='⭐'
###########[ plenv: perl version from plenv (https://github.com/tokuhirom/plenv) ]############
# Perl color.
typeset -g POWERLEVEL9K_PLENV_FOREGROUND=0
typeset -g POWERLEVEL9K_PLENV_BACKGROUND=4
# Hide perl version if it doesn't come from one of these sources.
typeset -g POWERLEVEL9K_PLENV_SOURCES=(shell local global)
# If set to false, hide perl version if it's the same as global:
# $(plenv version-name) == $(plenv global).
typeset -g POWERLEVEL9K_PLENV_PROMPT_ALWAYS_SHOW=false
# If set to false, hide perl version if it's equal to "system".
typeset -g POWERLEVEL9K_PLENV_SHOW_SYSTEM=true
# Custom icon.
# typeset -g POWERLEVEL9K_PLENV_VISUAL_IDENTIFIER_EXPANSION='⭐'
###########[ perlbrew: perl version from perlbrew (https://github.com/gugod/App-perlbrew) ]############
# Perlbrew color.
typeset -g POWERLEVEL9K_PERLBREW_FOREGROUND=67
# Show perlbrew version only when in a perl project subdirectory.
typeset -g POWERLEVEL9K_PERLBREW_PROJECT_ONLY=true
# Don't show "perl-" at the front.
typeset -g POWERLEVEL9K_PERLBREW_SHOW_PREFIX=false
# Custom icon.
# typeset -g POWERLEVEL9K_PERLBREW_VISUAL_IDENTIFIER_EXPANSION='⭐'
############[ phpenv: php version from phpenv (https://github.com/phpenv/phpenv) ]############
# PHP color.
typeset -g POWERLEVEL9K_PHPENV_FOREGROUND=0
typeset -g POWERLEVEL9K_PHPENV_BACKGROUND=5
# Hide php version if it doesn't come from one of these sources.
typeset -g POWERLEVEL9K_PHPENV_SOURCES=(shell local global)
# If set to false, hide php version if it's the same as global:
# $(phpenv version-name) == $(phpenv global).
typeset -g POWERLEVEL9K_PHPENV_PROMPT_ALWAYS_SHOW=false
# If set to false, hide PHP version if it's equal to "system".
typeset -g POWERLEVEL9K_PHPENV_SHOW_SYSTEM=true
# Custom icon.
# typeset -g POWERLEVEL9K_PHPENV_VISUAL_IDENTIFIER_EXPANSION='⭐'
#######[ scalaenv: scala version from scalaenv (https://github.com/scalaenv/scalaenv) ]#######
# Scala color.
typeset -g POWERLEVEL9K_SCALAENV_FOREGROUND=0
typeset -g POWERLEVEL9K_SCALAENV_BACKGROUND=1
# Hide scala version if it doesn't come from one of these sources.
typeset -g POWERLEVEL9K_SCALAENV_SOURCES=(shell local global)
# If set to false, hide scala version if it's the same as global:
# $(scalaenv version-name) == $(scalaenv global).
typeset -g POWERLEVEL9K_SCALAENV_PROMPT_ALWAYS_SHOW=false
# If set to false, hide scala version if it's equal to "system".
typeset -g POWERLEVEL9K_SCALAENV_SHOW_SYSTEM=true
# Custom icon.
# typeset -g POWERLEVEL9K_SCALAENV_VISUAL_IDENTIFIER_EXPANSION='⭐'
##########[ haskell_stack: haskell version from stack (https://haskellstack.org/) ]###########
# Haskell color.
typeset -g POWERLEVEL9K_HASKELL_STACK_FOREGROUND=0
typeset -g POWERLEVEL9K_HASKELL_STACK_BACKGROUND=3
# Hide haskell version if it doesn't come from one of these sources.
#
# shell: version is set by STACK_YAML
# local: version is set by stack.yaml up the directory tree
# global: version is set by the implicit global project (~/.stack/global-project/stack.yaml)
typeset -g POWERLEVEL9K_HASKELL_STACK_SOURCES=(shell local)
# If set to false, hide haskell version if it's the same as in the implicit global project.
typeset -g POWERLEVEL9K_HASKELL_STACK_ALWAYS_SHOW=true
# Custom icon.
# typeset -g POWERLEVEL9K_HASKELL_STACK_VISUAL_IDENTIFIER_EXPANSION='⭐'
################[ terraform: terraform workspace (https://www.terraform.io) ]#################
# Don't show terraform workspace if it's literally "default".
typeset -g POWERLEVEL9K_TERRAFORM_SHOW_DEFAULT=false
# POWERLEVEL9K_TERRAFORM_CLASSES is an array with even number of elements. The first element
# in each pair defines a pattern against which the current terraform workspace gets matched.
# More specifically, it's P9K_CONTENT prior to the application of context expansion (see below)
# that gets matched. If you unset all POWERLEVEL9K_TERRAFORM_*CONTENT_EXPANSION parameters,
# you'll see this value in your prompt. The second element of each pair in
# POWERLEVEL9K_TERRAFORM_CLASSES defines the workspace class. Patterns are tried in order. The
# first match wins.
#
# For example, given these settings:
#
# typeset -g POWERLEVEL9K_TERRAFORM_CLASSES=(
# '*prod*' PROD
# '*test*' TEST
# '*' OTHER)
#
# If your current terraform workspace is "project_test", its class is TEST because "project_test"
# doesn't match the pattern '*prod*' but does match '*test*'.
#
# You can define different colors, icons and content expansions for different classes:
#
# typeset -g POWERLEVEL9K_TERRAFORM_TEST_FOREGROUND=2
# typeset -g POWERLEVEL9K_TERRAFORM_TEST_BACKGROUND=0
# typeset -g POWERLEVEL9K_TERRAFORM_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐'
# typeset -g POWERLEVEL9K_TERRAFORM_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <'
typeset -g POWERLEVEL9K_TERRAFORM_CLASSES=(
# '*prod*' PROD # These values are examples that are unlikely
# '*test*' TEST # to match your needs. Customize them as needed.
'*' OTHER)
typeset -g POWERLEVEL9K_TERRAFORM_OTHER_FOREGROUND=4
typeset -g POWERLEVEL9K_TERRAFORM_OTHER_BACKGROUND=0
# typeset -g POWERLEVEL9K_TERRAFORM_OTHER_VISUAL_IDENTIFIER_EXPANSION='⭐'
#############[ terraform_version: terraform version (https://www.terraform.io) ]##############
# Terraform version color.
typeset -g POWERLEVEL9K_TERRAFORM_VERSION_FOREGROUND=4
typeset -g POWERLEVEL9K_TERRAFORM_VERSION_BACKGROUND=0
# Custom icon.
# typeset -g POWERLEVEL9K_TERRAFORM_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐'
################[ terraform_version: It shows active terraform version (https://www.terraform.io) ]#################
typeset -g POWERLEVEL9K_TERRAFORM_VERSION_SHOW_ON_COMMAND='terraform|tf'
#############[ kubecontext: current kubernetes context (https://kubernetes.io/) ]#############
# Show kubecontext only when the command you are typing invokes one of these tools.
# Tip: Remove the next line to always show kubecontext.
typeset -g POWERLEVEL9K_KUBECONTEXT_SHOW_ON_COMMAND='kubectl|helm|kubens|kubectx|oc|istioctl|kogito|k9s|helmfile|flux|fluxctl|stern|kubeseal|skaffold|kubent|kubecolor|cmctl|sparkctl'
# Kubernetes context classes for the purpose of using different colors, icons and expansions with
# different contexts.
#
# POWERLEVEL9K_KUBECONTEXT_CLASSES is an array with even number of elements. The first element
# in each pair defines a pattern against which the current kubernetes context gets matched.
# More specifically, it's P9K_CONTENT prior to the application of context expansion (see below)
# that gets matched. If you unset all POWERLEVEL9K_KUBECONTEXT_*CONTENT_EXPANSION parameters,
# you'll see this value in your prompt. The second element of each pair in
# POWERLEVEL9K_KUBECONTEXT_CLASSES defines the context class. Patterns are tried in order. The
# first match wins.
#
# For example, given these settings:
#
# typeset -g POWERLEVEL9K_KUBECONTEXT_CLASSES=(
# '*prod*' PROD
# '*test*' TEST
# '*' DEFAULT)
#
# If your current kubernetes context is "deathray-testing/default", its class is TEST
# because "deathray-testing/default" doesn't match the pattern '*prod*' but does match '*test*'.
#
# You can define different colors, icons and content expansions for different classes:
#
# typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_FOREGROUND=0
# typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_BACKGROUND=2
# typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐'
# typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <'
typeset -g POWERLEVEL9K_KUBECONTEXT_CLASSES=(
# '*prod*' PROD # These values are examples that are unlikely
# '*test*' TEST # to match your needs. Customize them as needed.
'*' DEFAULT)
typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_FOREGROUND=7
typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_BACKGROUND=5
# typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐'
# Use POWERLEVEL9K_KUBECONTEXT_CONTENT_EXPANSION to specify the content displayed by kubecontext
# segment. Parameter expansions are very flexible and fast, too. See reference:
# http://zsh.sourceforge.net/Doc/Release/Expansion.html#Parameter-Expansion.
#
# Within the expansion the following parameters are always available:
#
# - P9K_CONTENT The content that would've been displayed if there was no content
# expansion defined.
# - P9K_KUBECONTEXT_NAME The current context's name. Corresponds to column NAME in the
# output of `kubectl config get-contexts`.
# - P9K_KUBECONTEXT_CLUSTER The current context's cluster. Corresponds to column CLUSTER in the
# output of `kubectl config get-contexts`.
# - P9K_KUBECONTEXT_NAMESPACE The current context's namespace. Corresponds to column NAMESPACE
# in the output of `kubectl config get-contexts`. If there is no
# namespace, the parameter is set to "default".
# - P9K_KUBECONTEXT_USER The current context's user. Corresponds to column AUTHINFO in the
# output of `kubectl config get-contexts`.
#
# If the context points to Google Kubernetes Engine (GKE) or Elastic Kubernetes Service (EKS),
# the following extra parameters are available:
#
# - P9K_KUBECONTEXT_CLOUD_NAME Either "gke" or "eks".
# - P9K_KUBECONTEXT_CLOUD_ACCOUNT Account/project ID.
# - P9K_KUBECONTEXT_CLOUD_ZONE Availability zone.
# - P9K_KUBECONTEXT_CLOUD_CLUSTER Cluster.
#
# P9K_KUBECONTEXT_CLOUD_* parameters are derived from P9K_KUBECONTEXT_CLUSTER. For example,
# if P9K_KUBECONTEXT_CLUSTER is "gke_my-account_us-east1-a_my-cluster-01":
#
# - P9K_KUBECONTEXT_CLOUD_NAME=gke
# - P9K_KUBECONTEXT_CLOUD_ACCOUNT=my-account
# - P9K_KUBECONTEXT_CLOUD_ZONE=us-east1-a
# - P9K_KUBECONTEXT_CLOUD_CLUSTER=my-cluster-01
#
# If P9K_KUBECONTEXT_CLUSTER is "arn:aws:eks:us-east-1:123456789012:cluster/my-cluster-01":
#
# - P9K_KUBECONTEXT_CLOUD_NAME=eks
# - P9K_KUBECONTEXT_CLOUD_ACCOUNT=123456789012
# - P9K_KUBECONTEXT_CLOUD_ZONE=us-east-1
# - P9K_KUBECONTEXT_CLOUD_CLUSTER=my-cluster-01
typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION=
# Show P9K_KUBECONTEXT_CLOUD_CLUSTER if it's not empty and fall back to P9K_KUBECONTEXT_NAME.
POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION+='${P9K_KUBECONTEXT_CLOUD_CLUSTER:-${P9K_KUBECONTEXT_NAME}}'
# Append the current context's namespace if it's not "default".
POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION+='${${:-/$P9K_KUBECONTEXT_NAMESPACE}:#/default}'
# Custom prefix.
typeset -g POWERLEVEL9K_KUBECONTEXT_PREFIX='at '
#[ aws: aws profile (https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html) ]#
# Show aws only when the command you are typing invokes one of these tools.
# Tip: Remove the next line to always show aws.
typeset -g POWERLEVEL9K_AWS_SHOW_ON_COMMAND='aws|awless|cdk|terraform|pulumi|terragrunt'
# POWERLEVEL9K_AWS_CLASSES is an array with even number of elements. The first element
# in each pair defines a pattern against which the current AWS profile gets matched.
# More specifically, it's P9K_CONTENT prior to the application of context expansion (see below)
# that gets matched. If you unset all POWERLEVEL9K_AWS_*CONTENT_EXPANSION parameters,
# you'll see this value in your prompt. The second element of each pair in
# POWERLEVEL9K_AWS_CLASSES defines the profile class. Patterns are tried in order. The
# first match wins.
#
# For example, given these settings:
#
# typeset -g POWERLEVEL9K_AWS_CLASSES=(
# '*prod*' PROD
# '*test*' TEST
# '*' DEFAULT)
#
# If your current AWS profile is "company_test", its class is TEST
# because "company_test" doesn't match the pattern '*prod*' but does match '*test*'.
#
# You can define different colors, icons and content expansions for different classes:
#
# typeset -g POWERLEVEL9K_AWS_TEST_FOREGROUND=28
# typeset -g POWERLEVEL9K_AWS_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐'
# typeset -g POWERLEVEL9K_AWS_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <'
typeset -g POWERLEVEL9K_AWS_CLASSES=(
# '*prod*' PROD # These values are examples that are unlikely
# '*test*' TEST # to match your needs. Customize them as needed.
'*' DEFAULT)
typeset -g POWERLEVEL9K_AWS_DEFAULT_FOREGROUND=7
typeset -g POWERLEVEL9K_AWS_DEFAULT_BACKGROUND=1
# typeset -g POWERLEVEL9K_AWS_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐'
# AWS segment format. The following parameters are available within the expansion.
#
# - P9K_AWS_PROFILE The name of the current AWS profile.
# - P9K_AWS_REGION The region associated with the current AWS profile.
typeset -g POWERLEVEL9K_AWS_CONTENT_EXPANSION='${P9K_AWS_PROFILE//\%/%%}${P9K_AWS_REGION:+ ${P9K_AWS_REGION//\%/%%}}'
#[ aws_eb_env: aws elastic beanstalk environment (https://aws.amazon.com/elasticbeanstalk/) ]#
# AWS Elastic Beanstalk environment color.
typeset -g POWERLEVEL9K_AWS_EB_ENV_FOREGROUND=2
typeset -g POWERLEVEL9K_AWS_EB_ENV_BACKGROUND=0
# Custom icon.
# typeset -g POWERLEVEL9K_AWS_EB_ENV_VISUAL_IDENTIFIER_EXPANSION='⭐'
##########[ azure: azure account name (https://docs.microsoft.com/en-us/cli/azure) ]##########
# Show azure only when the command you are typing invokes one of these tools.
# Tip: Remove the next line to always show azure.
typeset -g POWERLEVEL9K_AZURE_SHOW_ON_COMMAND='az|terraform|pulumi|terragrunt'
# POWERLEVEL9K_AZURE_CLASSES is an array with even number of elements. The first element
# in each pair defines a pattern against which the current azure account name gets matched.
# More specifically, it's P9K_CONTENT prior to the application of context expansion (see below)
# that gets matched. If you unset all POWERLEVEL9K_AZURE_*CONTENT_EXPANSION parameters,
# you'll see this value in your prompt. The second element of each pair in
# POWERLEVEL9K_AZURE_CLASSES defines the account class. Patterns are tried in order. The
# first match wins.
#
# For example, given these settings:
#
# typeset -g POWERLEVEL9K_AZURE_CLASSES=(
# '*prod*' PROD
# '*test*' TEST
# '*' OTHER)
#
# If your current azure account is "company_test", its class is TEST because "company_test"
# doesn't match the pattern '*prod*' but does match '*test*'.
#
# You can define different colors, icons and content expansions for different classes:
#
# typeset -g POWERLEVEL9K_AZURE_TEST_FOREGROUND=2
# typeset -g POWERLEVEL9K_AZURE_TEST_BACKGROUND=0
# typeset -g POWERLEVEL9K_AZURE_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐'
# typeset -g POWERLEVEL9K_AZURE_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <'
typeset -g POWERLEVEL9K_AZURE_CLASSES=(
# '*prod*' PROD # These values are examples that are unlikely
# '*test*' TEST # to match your needs. Customize them as needed.
'*' OTHER)
# Azure account name color.
typeset -g POWERLEVEL9K_AZURE_OTHER_FOREGROUND=7
typeset -g POWERLEVEL9K_AZURE_OTHER_BACKGROUND=4
# Custom icon.
# typeset -g POWERLEVEL9K_AZURE_OTHER_VISUAL_IDENTIFIER_EXPANSION='⭐'
##########[ gcloud: google cloud account and project (https://cloud.google.com/) ]###########
# Show gcloud only when the command you are typing invokes one of these tools.
# Tip: Remove the next line to always show gcloud.
typeset -g POWERLEVEL9K_GCLOUD_SHOW_ON_COMMAND='gcloud|gcs|gsutil'
# Google cloud color.
typeset -g POWERLEVEL9K_GCLOUD_FOREGROUND=7
typeset -g POWERLEVEL9K_GCLOUD_BACKGROUND=4
# Google cloud format. Change the value of POWERLEVEL9K_GCLOUD_PARTIAL_CONTENT_EXPANSION and/or
# POWERLEVEL9K_GCLOUD_COMPLETE_CONTENT_EXPANSION if the default is too verbose or not informative
# enough. You can use the following parameters in the expansions. Each of them corresponds to the
# output of `gcloud` tool.
#
# Parameter | Source
# -------------------------|--------------------------------------------------------------------
# P9K_GCLOUD_CONFIGURATION | gcloud config configurations list --format='value(name)'
# P9K_GCLOUD_ACCOUNT | gcloud config get-value account
# P9K_GCLOUD_PROJECT_ID | gcloud config get-value project
# P9K_GCLOUD_PROJECT_NAME | gcloud projects describe $P9K_GCLOUD_PROJECT_ID --format='value(name)'
#
# Note: ${VARIABLE//\%/%%} expands to ${VARIABLE} with all occurrences of '%' replaced with '%%'.
#
# Obtaining project name requires sending a request to Google servers. This can take a long time
# and even fail. When project name is unknown, P9K_GCLOUD_PROJECT_NAME is not set and gcloud
# prompt segment is in state PARTIAL. When project name gets known, P9K_GCLOUD_PROJECT_NAME gets
# set and gcloud prompt segment transitions to state COMPLETE.
#
# You can customize the format, icon and colors of gcloud segment separately for states PARTIAL
# and COMPLETE. You can also hide gcloud in state PARTIAL by setting
# POWERLEVEL9K_GCLOUD_PARTIAL_VISUAL_IDENTIFIER_EXPANSION and
# POWERLEVEL9K_GCLOUD_PARTIAL_CONTENT_EXPANSION to empty.
typeset -g POWERLEVEL9K_GCLOUD_PARTIAL_CONTENT_EXPANSION='${P9K_GCLOUD_PROJECT_ID//\%/%%}'
typeset -g POWERLEVEL9K_GCLOUD_COMPLETE_CONTENT_EXPANSION='${P9K_GCLOUD_PROJECT_NAME//\%/%%}'
# Send a request to Google (by means of `gcloud projects describe ...`) to obtain project name
# this often. Negative value disables periodic polling. In this mode project name is retrieved
# only when the current configuration, account or project id changes.
typeset -g POWERLEVEL9K_GCLOUD_REFRESH_PROJECT_NAME_SECONDS=60
# Custom icon.
# typeset -g POWERLEVEL9K_GCLOUD_VISUAL_IDENTIFIER_EXPANSION='⭐'
#[ google_app_cred: google application credentials (https://cloud.google.com/docs/authentication/production) ]#
# Show google_app_cred only when the command you are typing invokes one of these tools.
# Tip: Remove the next line to always show google_app_cred.
typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_SHOW_ON_COMMAND='terraform|pulumi|terragrunt'
# Google application credentials classes for the purpose of using different colors, icons and
# expansions with different credentials.
#
# POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES is an array with even number of elements. The first
# element in each pair defines a pattern against which the current kubernetes context gets
# matched. More specifically, it's P9K_CONTENT prior to the application of context expansion
# (see below) that gets matched. If you unset all POWERLEVEL9K_GOOGLE_APP_CRED_*CONTENT_EXPANSION
# parameters, you'll see this value in your prompt. The second element of each pair in
# POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES defines the context class. Patterns are tried in order.
# The first match wins.
#
# For example, given these settings:
#
# typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES=(
# '*:*prod*:*' PROD
# '*:*test*:*' TEST
# '*' DEFAULT)
#
# If your current Google application credentials is "service_account deathray-testing x@y.com",
# its class is TEST because it doesn't match the pattern '* *prod* *' but does match '* *test* *'.
#
# You can define different colors, icons and content expansions for different classes:
#
# typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_FOREGROUND=28
# typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐'
# typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_CONTENT_EXPANSION='$P9K_GOOGLE_APP_CRED_PROJECT_ID'
typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES=(
# '*:*prod*:*' PROD # These values are examples that are unlikely
# '*:*test*:*' TEST # to match your needs. Customize them as needed.
'*' DEFAULT)
typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_FOREGROUND=7
typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_BACKGROUND=4
# typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐'
# Use POWERLEVEL9K_GOOGLE_APP_CRED_CONTENT_EXPANSION to specify the content displayed by
# google_app_cred segment. Parameter expansions are very flexible and fast, too. See reference:
# http://zsh.sourceforge.net/Doc/Release/Expansion.html#Parameter-Expansion.
#
# You can use the following parameters in the expansion. Each of them corresponds to one of the
# fields in the JSON file pointed to by GOOGLE_APPLICATION_CREDENTIALS.
#
# Parameter | JSON key file field
# ---------------------------------+---------------
# P9K_GOOGLE_APP_CRED_TYPE | type
# P9K_GOOGLE_APP_CRED_PROJECT_ID | project_id
# P9K_GOOGLE_APP_CRED_CLIENT_EMAIL | client_email
#
# Note: ${VARIABLE//\%/%%} expands to ${VARIABLE} with all occurrences of '%' replaced by '%%'.
typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_CONTENT_EXPANSION='${P9K_GOOGLE_APP_CRED_PROJECT_ID//\%/%%}'
##############[ toolbox: toolbox name (https://github.com/containers/toolbox) ]###############
# Toolbox color.
typeset -g POWERLEVEL9K_TOOLBOX_FOREGROUND=0
typeset -g POWERLEVEL9K_TOOLBOX_BACKGROUND=3
# Don't display the name of the toolbox if it matches fedora-toolbox-*.
typeset -g POWERLEVEL9K_TOOLBOX_CONTENT_EXPANSION='${P9K_TOOLBOX_NAME:#fedora-toolbox-*}'
# Custom icon.
# typeset -g POWERLEVEL9K_TOOLBOX_VISUAL_IDENTIFIER_EXPANSION='⭐'
# Custom prefix.
typeset -g POWERLEVEL9K_TOOLBOX_PREFIX='in '
###############################[ public_ip: public IP address ]###############################
# Public IP color.
typeset -g POWERLEVEL9K_PUBLIC_IP_FOREGROUND=7
typeset -g POWERLEVEL9K_PUBLIC_IP_BACKGROUND=0
# Custom icon.
# typeset -g POWERLEVEL9K_PUBLIC_IP_VISUAL_IDENTIFIER_EXPANSION='⭐'
########################[ vpn_ip: virtual private network indicator ]#########################
# VPN IP color.
typeset -g POWERLEVEL9K_VPN_IP_FOREGROUND=0
typeset -g POWERLEVEL9K_VPN_IP_BACKGROUND=6
# When on VPN, show just an icon without the IP address.
# Tip: To display the private IP address when on VPN, remove the next line.
typeset -g POWERLEVEL9K_VPN_IP_CONTENT_EXPANSION=
# Regular expression for the VPN network interface. Run `ifconfig` or `ip -4 a show` while on VPN
# to see the name of the interface.
typeset -g POWERLEVEL9K_VPN_IP_INTERFACE='(gpd|wg|(.*tun)|tailscale)[0-9]*|(zt.*)'
# If set to true, show one segment per matching network interface. If set to false, show only
# one segment corresponding to the first matching network interface.
# Tip: If you set it to true, you'll probably want to unset POWERLEVEL9K_VPN_IP_CONTENT_EXPANSION.
typeset -g POWERLEVEL9K_VPN_IP_SHOW_ALL=false
# Custom icon.
# typeset -g POWERLEVEL9K_VPN_IP_VISUAL_IDENTIFIER_EXPANSION='⭐'
###########[ ip: ip address and bandwidth usage for a specified network interface ]###########
# IP color.
typeset -g POWERLEVEL9K_IP_BACKGROUND=4
typeset -g POWERLEVEL9K_IP_FOREGROUND=0
# The following parameters are accessible within the expansion:
#
# Parameter | Meaning
# ----------------------+-------------------------------------------
# P9K_IP_IP | IP address
# P9K_IP_INTERFACE | network interface
# P9K_IP_RX_BYTES | total number of bytes received
# P9K_IP_TX_BYTES | total number of bytes sent
# P9K_IP_RX_BYTES_DELTA | number of bytes received since last prompt
# P9K_IP_TX_BYTES_DELTA | number of bytes sent since last prompt
# P9K_IP_RX_RATE | receive rate (since last prompt)
# P9K_IP_TX_RATE | send rate (since last prompt)
typeset -g POWERLEVEL9K_IP_CONTENT_EXPANSION='${P9K_IP_RX_RATE:+⇣$P9K_IP_RX_RATE }${P9K_IP_TX_RATE:+⇡$P9K_IP_TX_RATE }$P9K_IP_IP'
# Show information for the first network interface whose name matches this regular expression.
# Run `ifconfig` or `ip -4 a show` to see the names of all network interfaces.
typeset -g POWERLEVEL9K_IP_INTERFACE='[ew].*'
# Custom icon.
# typeset -g POWERLEVEL9K_IP_VISUAL_IDENTIFIER_EXPANSION='⭐'
#########################[ proxy: system-wide http/https/ftp proxy ]##########################
# Proxy color.
typeset -g POWERLEVEL9K_PROXY_FOREGROUND=4
typeset -g POWERLEVEL9K_PROXY_BACKGROUND=0
# Custom icon.
# typeset -g POWERLEVEL9K_PROXY_VISUAL_IDENTIFIER_EXPANSION='⭐'
################################[ battery: internal battery ]#################################
# Show battery in red when it's below this level and not connected to power supply.
typeset -g POWERLEVEL9K_BATTERY_LOW_THRESHOLD=20
typeset -g POWERLEVEL9K_BATTERY_LOW_FOREGROUND=1
# Show battery in green when it's charging or fully charged.
typeset -g POWERLEVEL9K_BATTERY_{CHARGING,CHARGED}_FOREGROUND=2
# Show battery in yellow when it's discharging.
typeset -g POWERLEVEL9K_BATTERY_DISCONNECTED_FOREGROUND=3
# Battery pictograms going from low to high level of charge.
typeset -g POWERLEVEL9K_BATTERY_STAGES='\UF008E\UF007A\UF007B\UF007C\UF007D\UF007E\UF007F\UF0080\UF0081\UF0082\UF0079'
# Don't show the remaining time to charge/discharge.
typeset -g POWERLEVEL9K_BATTERY_VERBOSE=false
typeset -g POWERLEVEL9K_BATTERY_BACKGROUND=0
#####################################[ wifi: wifi speed ]#####################################
# WiFi color.
typeset -g POWERLEVEL9K_WIFI_FOREGROUND=0
typeset -g POWERLEVEL9K_WIFI_BACKGROUND=4
# Custom icon.
# typeset -g POWERLEVEL9K_WIFI_VISUAL_IDENTIFIER_EXPANSION='⭐'
# Use different colors and icons depending on signal strength ($P9K_WIFI_BARS).
#
# # Wifi colors and icons for different signal strength levels (low to high).
# typeset -g my_wifi_fg=(0 0 0 0 0) # <-- change these values
# typeset -g my_wifi_icon=('WiFi' 'WiFi' 'WiFi' 'WiFi' 'WiFi') # <-- change these values
#
# typeset -g POWERLEVEL9K_WIFI_CONTENT_EXPANSION='%F{${my_wifi_fg[P9K_WIFI_BARS+1]}}$P9K_WIFI_LAST_TX_RATE Mbps'
# typeset -g POWERLEVEL9K_WIFI_VISUAL_IDENTIFIER_EXPANSION='%F{${my_wifi_fg[P9K_WIFI_BARS+1]}}${my_wifi_icon[P9K_WIFI_BARS+1]}'
#
# The following parameters are accessible within the expansions:
#
# Parameter | Meaning
# ----------------------+---------------
# P9K_WIFI_SSID | service set identifier, a.k.a. network name
# P9K_WIFI_LINK_AUTH | authentication protocol such as "wpa2-psk" or "none"; empty if unknown
# P9K_WIFI_LAST_TX_RATE | wireless transmit rate in megabits per second
# P9K_WIFI_RSSI | signal strength in dBm, from -120 to 0
# P9K_WIFI_NOISE | noise in dBm, from -120 to 0
# P9K_WIFI_BARS | signal strength in bars, from 0 to 4 (derived from P9K_WIFI_RSSI and P9K_WIFI_NOISE)
####################################[ time: current time ]####################################
# Current time color.
typeset -g POWERLEVEL9K_TIME_FOREGROUND=0
typeset -g POWERLEVEL9K_TIME_BACKGROUND=7
# Format for the current time: 09:51:02. See `man 3 strftime`.
typeset -g POWERLEVEL9K_TIME_FORMAT='%D{%I:%M:%S %p}'
# If set to true, time will update when you hit enter. This way prompts for the past
# commands will contain the start times of their commands as opposed to the default
# behavior where they contain the end times of their preceding commands.
typeset -g POWERLEVEL9K_TIME_UPDATE_ON_COMMAND=false
# Custom icon.
# typeset -g POWERLEVEL9K_TIME_VISUAL_IDENTIFIER_EXPANSION='⭐'
# Custom prefix.
typeset -g POWERLEVEL9K_TIME_PREFIX='at '
# Example of a user-defined prompt segment. Function prompt_example will be called on every
# prompt if `example` prompt segment is added to POWERLEVEL9K_LEFT_PROMPT_ELEMENTS or
# POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS. It displays an icon and yellow text on red background
# greeting the user.
#
# Type `p10k help segment` for documentation and a more sophisticated example.
function prompt_example() {
p10k segment -b 1 -f 3 -i '⭐' -t 'hello, %n'
}
# User-defined prompt segments may optionally provide an instant_prompt_* function. Its job
# is to generate the prompt segment for display in instant prompt. See
# https://github.com/romkatv/powerlevel10k/blob/master/README.md#instant-prompt.
#
# Powerlevel10k will call instant_prompt_* at the same time as the regular prompt_* function
# and will record all `p10k segment` calls it makes. When displaying instant prompt, Powerlevel10k
# will replay these calls without actually calling instant_prompt_*. It is imperative that
# instant_prompt_* always makes the same `p10k segment` calls regardless of environment. If this
# rule is not observed, the content of instant prompt will be incorrect.
#
# Usually, you should either not define instant_prompt_* or simply call prompt_* from it. If
# instant_prompt_* is not defined for a segment, the segment won't be shown in instant prompt.
function instant_prompt_example() {
# Since prompt_example always makes the same `p10k segment` calls, we can call it from
# instant_prompt_example. This will give us the same `example` prompt segment in the instant
# and regular prompts.
prompt_example
}
# User-defined prompt segments can be customized the same way as built-in segments.
typeset -g POWERLEVEL9K_EXAMPLE_FOREGROUND=3
typeset -g POWERLEVEL9K_EXAMPLE_BACKGROUND=1
# typeset -g POWERLEVEL9K_EXAMPLE_VISUAL_IDENTIFIER_EXPANSION='⭐'
# Transient prompt works similarly to the builtin transient_rprompt option. It trims down prompt
# when accepting a command line. Supported values:
#
# - off: Don't change prompt when accepting a command line.
# - always: Trim down prompt when accepting a command line.
# - same-dir: Trim down prompt when accepting a command line unless this is the first command
# typed after changing current working directory.
typeset -g POWERLEVEL9K_TRANSIENT_PROMPT=always
# Instant prompt mode.
#
# - off: Disable instant prompt. Choose this if you've tried instant prompt and found
# it incompatible with your zsh configuration files.
# - quiet: Enable instant prompt and don't print warnings when detecting console output
# during zsh initialization. Choose this if you've read and understood
# https://github.com/romkatv/powerlevel10k/blob/master/README.md#instant-prompt.
# - verbose: Enable instant prompt and print a warning when detecting console output during
# zsh initialization. Choose this if you've never tried instant prompt, haven't
# seen the warning, or if you are unsure what this all means.
typeset -g POWERLEVEL9K_INSTANT_PROMPT=verbose
# Hot reload allows you to change POWERLEVEL9K options after Powerlevel10k has been initialized.
# For example, you can type POWERLEVEL9K_BACKGROUND=red and see your prompt turn red. Hot reload
# can slow down prompt by 1-2 milliseconds, so it's better to keep it turned off unless you
# really need it.
typeset -g POWERLEVEL9K_DISABLE_HOT_RELOAD=true
# If p10k is already loaded, reload configuration.
# This works even with POWERLEVEL9K_DISABLE_HOT_RELOAD=true.
(( ! $+functions[p10k] )) || p10k reload
}
# Tell `p10k configure` which file it should overwrite.
typeset -g POWERLEVEL9K_CONFIG_FILE=${${(%):-%x}:a}
(( ${#p10k_config_opts} )) && setopt ${p10k_config_opts[@]}
'builtin' 'unset' 'p10k_config_opts'
{
config,
pkgs,
inputs,
...
}:
{
programs.obs-studio = {
enable = true;
package = pkgs.obs-studio;
plugins = with pkgs; [
obs-studio-plugins.input-overlay
obs-studio-plugins.obs-pipewire-audio-capture
# obs-studio-plugins.obs-vkcapture
obs-studio-plugins.wlrobs
];
};
}
{
config,
pkgs,
inputs,
...
}:
{
# users.user.marvin.packages = with pkgs; [
# eslint_d
# ];
programs.nvf = {
enable = true;
# your settings need to go into the settings attribute set
# most settings are documented in the appendix
settings.vim = {
viAlias = true;
vimAlias = true;
debugMode = {
enable = false;
level = 16;
logFile = "/tmp/nvim.log";
};
spellcheck = {
enable = true;
};
lsp = {
formatOnSave = true;
lspkind.enable = false;
lightbulb.enable = true;
lspsaga.enable = false;
trouble.enable = true;
lspSignature.enable = true;
otter-nvim.enable = true;
lsplines.enable = true;
nvim-docs-view.enable = true;
};
debugger = {
nvim-dap = {
enable = true;
ui.enable = true;
};
};
# This section does not include a comprehensive list of available language modules.
# To list all available language module options, please visit the nvf manual.
languages = {
enableLSP = true;
enableFormat = true;
enableTreesitter = true;
enableExtraDiagnostics = true;
# Languages that will be supported in default and maximal configurations.
nix.enable = true;
markdown.enable = true;
# Languages that are enabled in the maximal configuration.
bash.enable = true;
clang.enable = false;
css.enable = true;
html.enable = true;
sql.enable = false;
java.enable = false;
kotlin.enable = false;
ts.enable = true;
go.enable = false;
lua.enable = true;
zig.enable = false;
python.enable = true;
typst.enable = false;
rust = {
enable = false;
crates.enable = false;
};
# Language modules that are not as common.
assembly.enable = false;
astro.enable = false;
nu.enable = false;
csharp.enable = false;
julia.enable = false;
vala.enable = false;
scala.enable = false;
r.enable = false;
gleam.enable = false;
dart.enable = false;
ocaml.enable = false;
elixir.enable = false;
haskell.enable = false;
ruby.enable = false;
tailwind.enable = false;
svelte.enable = false;
# Nim LSP is broken on Darwin and therefore
# should be disabled by default. Users may still enable
# `vim.languages.vim` to enable it, this does not restrict
# that.
# See: <https://github.com/PMunch/nimlsp/issues/178#issue-2128106096>
nim.enable = false;
};
visuals = {
nvim-scrollbar.enable = true;
nvim-web-devicons.enable = true;
nvim-cursorline.enable = true;
cinnamon-nvim.enable = true;
fidget-nvim.enable = true;
highlight-undo.enable = true;
indent-blankline.enable = true;
# Fun
cellular-automaton.enable = false;
};
statusline = {
lualine = {
enable = true;
theme = "catppuccin";
};
};
theme = {
enable = true;
name = "catppuccin";
style = "mocha";
transparent = false;
};
autopairs.nvim-autopairs.enable = true;
autocomplete.nvim-cmp.enable = true;
snippets.luasnip.enable = true;
filetree = {
neo-tree = {
enable = true;
};
};
tabline = {
nvimBufferline.enable = true;
};
treesitter.context.enable = true;
binds = {
whichKey.enable = true;
cheatsheet.enable = true;
};
telescope.enable = true;
git = {
enable = true;
gitsigns.enable = true;
gitsigns.codeActions.enable = false; # throws an annoying debug message
};
minimap = {
minimap-vim.enable = false;
codewindow.enable = true; # lighter, faster, and uses lua for configuration
};
dashboard = {
dashboard-nvim.enable = false;
alpha.enable = true;
};
notify = {
nvim-notify.enable = true;
};
projects = {
project-nvim.enable = true;
};
utility = {
ccc.enable = false;
vim-wakatime.enable = false;
diffview-nvim.enable = true;
yanky-nvim.enable = false;
icon-picker.enable = true;
surround.enable = true;
leetcode-nvim.enable = true;
multicursors.enable = true;
motion = {
hop.enable = true;
leap.enable = true;
precognition.enable = true;
};
images = {
image-nvim.enable = false;
};
};
notes = {
obsidian.enable = false; # FIXME: neovim fails to build if obsidian is enabled
neorg.enable = false;
orgmode.enable = false;
mind-nvim.enable = true;
todo-comments.enable = true;
};
terminal = {
toggleterm = {
enable = true;
lazygit.enable = true;
};
};
ui = {
borders.enable = true;
noice.enable = true;
colorizer.enable = true;
modes-nvim.enable = false; # the theme looks terrible with catppuccin
illuminate.enable = true;
breadcrumbs = {
enable = true;
navbuddy.enable = true;
};
smartcolumn = {
enable = true;
setupOpts.custom_colorcolumn = {
# this is a freeform module, it's `buftype = int;` for configuring column position
nix = "110";
ruby = "120";
java = "130";
go = [
"90"
"130"
];
};
};
fastaction.enable = true;
};
assistant = {
chatgpt.enable = false;
copilot = {
enable = false;
cmp.enable = true;
};
codecompanion-nvim.enable = false;
};
session = {
nvim-session-manager.enable = false;
};
gestures = {
gesture-nvim.enable = false;
};
comments = {
comment-nvim.enable = true;
};
presence = {
neocord.enable = false;
};
};
};
}
{
config,
pkgs,
inputs,
...
}:
{
programs.jujutsu = {
enable = true;
settings = {
git.sign-on-push = true;
ui = {
default-command = "log";
editor = "nano";
pager = ":builtin";
};
user = {
name = "Marvin Roman";
email = "marvin@colab.coop";
};
signing = {
backend = "ssh";
behavior = "own";
key = "~/.ssh/id_ed25519.pub";
};
};
};
}
{
config,
pkgs,
inputs,
...
}:
{
home.pointerCursor.hyprcursor = {
enable = true;
size = 32;
};
programs.kitty.enable = true; # required for the default Hyprland config
services.hyprpaper = {
enable = true;
# settings = {
# ipc = "on";
# splash = false;
# splash_offset = 2.0;
# preload = [ "/share/wallpapers/buttons.png" "/share/wallpapers/cat_pacman.png" ];
# wallpaper = [
# "DP-3,/share/wallpapers/buttons.png"
# "DP-1,/share/wallpapers/cat_pacman.png"
# ];
# };
};
wayland.windowManager.hyprland = {
enable = true; # enable the hyprland wayland window manager
# extraConfig = ''
# # extra configuration for the hyprland wayland window manager
# # window resize
# bind = $mod, S, submap, resize
# submap = resize
# binde = , right, resizeactive, 10 0
# binde = , left, resizeactive, -10 0
# binde = , up, resizeactive, 0 -10
# binde = , down, resizeactive, 0 10
# bind = , escape, submap, reset
# submap = reset
# '';
# settings = {
# "$mod" = "SUPER";
# bind =
# [
# "$mod, F, exec, firefox"
# ", Print, exec, grimblast copy area"
# ]
# ++ (
# # workspaces
# # binds $mod + [shift +] {1..9} to [move to] workspace {1..9}
# builtins.concatLists (builtins.genList (i:
# let ws = i + 1;
# in [
# "$mod, code:1${toString i}, workspace, ${toString ws}"
# "$mod SHIFT, code:1${toString i}, movetoworkspace, ${toString ws}"
# ]
# )
# 9)
# );
# };
# systemd = {
# enable = true;
# enableXdgAutostartc = true;
# };
};
}
{
config,
pkgs,
inputs,
...
}:
{
programs.git = {
enable = true;
extraConfig = {
init.defaultbranch = "production";
push.autosetupremote = true;
pull.rebase = false;
};
lfs.enable = true;
userEmail = "marvin@colab.coop";
userName = "Marvin Roman";
signing = {
key = "3F64A2F33C09BBD5";
signByDefault = true;
};
};
}
{
config,
pkgs,
inputs,
...
}:
{
programs.firefox = {
enable = true;
# enableGnomeExtensions = false;
# languagePacks = [ "en-US" ];
# profiles.default = {
# containers = {
# ai = {
# color = "pink";
# id = 1;
# icon = "chill";
# name = "AI";
# };
# cafb = {
# color = "green";
# id = 2;
# icon = "cart";
# name = "CAFB";
# };
# colab = {
# color = "turquoise";
# id = 3;
# icon = "circle";
# name = "Colab";
# };
# personal = {
# color = "turquoise";
# id = 4;
# icon = "fingerprint";
# name = "Personal";
# };
# work = {
# color = "blue";
# id = 5;
# icon = "briefcase";
# name = "Work";
# };
# };
# containersForce = true;
# isDefault = true;
# search = {
# default = "DuckDuckGo";
# engines = {
# "My Nixos" = {
# urls = [{
# template = "https://mynixos.com/search";
# params = [{ name = "q"; value = "{searchTerms}"; }];
# }];
# icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
# definedAliases = [ "@mn" ];
# };
# "Nix Packages" = {
# urls = [{
# template = "https://search.nixos.org/packages";
# params = [
# { name = "type"; value = "packages"; }
# { name = "query"; value = "{searchTerms}"; }
# ];
# }];
# icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
# definedAliases = [ "@np" ];
# };
# "NixOS Wiki" = {
# urls = [{
# template = "https://wiki.nixos.org/w/index.php";
# params = [
# { name = "fulltext"; value = "1"; }
# { name = "search"; value = "{searchTerms}"; }
# ];
# }];
# icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
# definedAliases = [ "@nw" ];
# };
# "Amazon.com".metaData.hidden = true; # hide the Amazon search engine
# "eBay".metaData.hidden = true; # hide the eBay search engine
# "Bing".metaData.hidden = true; # hide the Bing search engine
# "Google".metaData.alias = "@g"; # builtin engines only support specifying one additional alias
# };
# privateDefault = "DuckDuckGo";
# force = true;
# };
# settings = {
# "browser.search.region" = "US"; # Set the search region to the US
# "browser.search.isUS" = true; # Set the search region to the US
# "media.videocontrols.picture-in-picture.enabled" = true;
# "media.videocontrols.picture-in-picture.enable-when-switching-tabs.enabled" = true;
# "browser.startup.homepage" = "about:blank"; # Set the homepage to a blank page
# "datareporting.healthreport.service.enabled" = false; # Disable the health report
# "datareporting.healthreport.uploadEnabled" = false; # Disable the health report upload
# "datareporting.policy.dataSubmissionEnabled" = false; # Disable data submission
# "toolkit.telemetry.enabled" = false; # Disable telemetry
# "browser.ml.chat.sidebar" = true; # Enable the chat sidebar
# "browser.ml.chat.enabled" = true; # Enable chat
# "browser.ml.chat.provider" = "https://gemini.google.com"; # Set the chat provider
# "privacy.donottrackheader.enabled" = true; # Send a "Do Not Track" header with your browsing traffic
# "privacy.globalprivacycontrol.enabled" = true; # Enable Global Privacy Control
# "privacy.sanitize.sanitizeOnShutdown" = true; # Clear history when Firefox closes
# "privacy.sanitize.pending" = "[{\"id\":\"shutdown\",\"itemsToClear\":[\"cache\",\"cookiesAndStorage\"],\"options\":{}}]"; # Clear history when Firefox closes
# };
# };
};
}
{
config,
pkgs,
inputs,
lib,
...
}:
{
programs.eza = {
colors = "always";
enable = true;
enableBashIntegration = true;
enableZshIntegration = true;
extraOptions = [
"--group-directories-first"
"--header"
"--hyperlink"
];
git = true;
icons = "always";
};
}
{
config,
pkgs,
inputs,
lib,
...
}:
{
programs.bash = {
enable = true;
enableCompletion = true;
historyIgnore = [
"ls"
"cd"
"pwd"
"exit"
"clear"
"history"
"eza"
];
};
}
{
config,
pkgs,
inputs,
lib,
...
}:
{
programs.alacritty = {
enable = true;
settings = {
font = {
normal = {
family = "MesloLGS NF";
style = "Normal";
};
size = 12;
};
selection = {
save_to_clipboard = true;
};
window = {
blur = false;
decorations = "Full";
opacity = 0.85;
decorations_theme_variant = "Dark";
};
};
};
}
{
config,
pkgs,
inputs,
...
}:
let
pinnedZoomPkgs =
import
(builtins.fetchTarball {
url = "https://github.com/NixOS/nixpkgs/archive/3f316d2a50699a78afe5e77ca486ad553169061e.tar.gz";
sha256 = "1gfnjl8zjai1cjqhx96jjnnq7zjdn0ajd14xmb09jrgnjs0dw1im";
})
{
system = "x86_64-linux";
config.allowUnfree = true;
};
pinnedZoom = pinnedZoomPkgs.zoom-us;
in
{
# Define a user account. Don't forget to set a password with ‘passwd’.
users = {
defaultUserShell = pkgs.zsh;
users.marvin = {
isNormalUser = true;
description = "Marvin";
extraGroups = [
"networkmanager"
"wheel"
];
packages = with pkgs; [
google-chrome
keepassxc
libreoffice
nextcloud-client
nixfmt-rfc-style
obsidian
oh-my-zsh
pinnedZoom
rclone
signal-desktop
slack
spotify
vlc
zsh-nix-shell
];
};
};
}
{
config,
pkgs,
inputs,
...
}:
{
users.users.marvin.packages = with pkgs; [
discord
easyeffects
eslint_d
lazygit
# obs-studio
];
}
module.exports = {
"branches": ["main"],
"plugins": [
[
"@semantic-release/commit-analyzer"
, {
preset: "angular"
, releaseRules: [
{type: "config", release: "patch"} // Treat config changes as a patch
, {type: "feat", release: "minor"} // Features trigger a minor release
, {type: "fix", release: "patch"} // Bug fixes trigger a patch release
, {type: "perf", release: "patch"} // Performance improvements as patches
, {type: "refactor", release: "patch"} // Refactors treated as patches
],
"parserOpts": {
"noteKeywords": ["BREAKING CHANGE", "BREAKING CHANGES"]
}
}
] // Analyzes commit messages to determine version bumps
, [
"@semantic-release/release-notes-generator"
, {
preset: "conventionalcommits"
, presetConfig: {
types: [
{type: "config", section: "Configuration Updates"} // Categorizes config updates
, {type: "feat", section: "Features"} // Features section
, {type: "fix", section: "Bug Fixes"} // Bug fixes section
, {type: "perf", section: "Performance Improvements"} // Performance improvements section
, {type: "chore", hidden: true} // Hide chore commits from release notes
, {type: "docs", hidden: true} // Hide documentation changes
, {type: "refactor", section: "Code Refactoring"} // Refactoring section
, {type: "style", hidden: true} // Hide style changes
, {type: "test", hidden: true} // Hide test changes
]
}
, parserOpts: {
noteKeywords: ["BREAKING CHANGE", "BREAKING CHANGES"] // Identify breaking changes in release notes
}
}
], // Generates release notes from commit history
"@semantic-release/changelog",
[
"@semantic-release/git"
, {
assets: ["CHANGELOG.md"]
}
], // Commits only changelog
"@semantic-release/gitlab"
]
}
{
lib,
python310,
fetchFromGitHub,
fetchPypi,
}:
let
python = python310;
pythonPackages = python.pkgs;
# Define custom packages that aren't in nixpkgs or need special handling
browsergym = pythonPackages.buildPythonPackage rec {
pname = "browsergym";
version = "0.13.3";
format = "pyproject"; # Use pyproject format instead of setuptools
src = fetchPypi {
inherit pname version;
sha256 = "sha256-w+4qxBz3oTq+ceD5xjwos3/uNI3MZPoabSteUT+ZKeA="; # Replace with actual hash
};
nativeBuildInputs = with pythonPackages; [
setuptools
wheel
];
# Add dependencies as needed
propagatedBuildInputs = with pythonPackages; [
gymnasium
playwright
];
doCheck = false;
};
browser-use = pythonPackages.buildPythonPackage rec {
pname = "browser-use";
version = "0.1.40";
format = "pyproject"; # Use pyproject format instead of setuptools
src = fetchFromGitHub {
owner = "browser-use";
repo = "browser-use";
rev = "${version}"; # Adjust if the tag format is different
sha256 = "sha256-C/HT0AxL52iO/JWrjQFGrosYxY3TWNBQfVNnbFrGfEw="; # Replace with actual hash
};
nativeBuildInputs = with pythonPackages; [
setuptools
wheel
];
# Add dependencies as needed
propagatedBuildInputs = with pythonPackages; [
browsergym
];
doCheck = false;
};
googlesearch-python = pythonPackages.buildPythonPackage rec {
pname = "googlesearch-python";
version = "1.3.0";
format = "pyproject"; # Use pyproject format instead of setuptools
src = fetchFromGitHub {
owner = "Nv7-GitHub";
repo = "googlesearch";
rev = "v${version}"; # Adjust if the tag format is different
sha256 = "sha256-b0nh9FZ1M/q21W1i22YRjXdPC1lY+55u+XkJj5PYa74="; # Replace with actual hash
};
nativeBuildInputs = with pythonPackages; [
setuptools
wheel
];
doCheck = false;
};
baidusearch = pythonPackages.buildPythonPackage rec {
pname = "baidusearch";
version = "1.0.3";
format = "pyproject"; # Use pyproject format instead of setuptools
src = fetchPypi {
inherit pname version;
sha256 = "sha256-s0ZI3TNwqVPPDuX5qRZBVNRsJJBRjkRA00n/d/+HoHs="; # Replace with actual hash
};
nativeBuildInputs = with pythonPackages; [
setuptools
wheel
];
doCheck = false;
};
duckduckgo_search = pythonPackages.buildPythonPackage rec {
pname = "duckduckgo_search";
version = "7.5.1";
format = "pyproject"; # Use pyproject format instead of setuptools
src = fetchPypi {
inherit pname version;
sha256 = "sha256-VNGL/Np1xIUjKoaFUr6hzHxS2CRypz8Md5FhPpjTITc="; # Replace with actual hash
};
nativeBuildInputs = with pythonPackages; [
setuptools
wheel
];
doCheck = false;
};
in
pythonPackages.buildPythonApplication rec {
pname = "openmanus";
version = "0.1.0";
src = fetchFromGitHub {
owner = "mannaandpoem";
repo = "OpenManus";
rev = "main"; # You might want to pin this to a specific commit or tag later
sha256 = "sha256-hsUTQ7a56QgHHbP8Ji/Pp6HXkvW9Gi6EHqTqLCSy71o="; # Replace this with the actual hash after first attempt
};
format = "setuptools";
propagatedBuildInputs = with pythonPackages; [
# Standard packages from nixpkgs
pydantic
openai
tenacity
pyyaml
loguru
numpy
datasets
html2text
gymnasium
pillow
uvicorn
unidiff
aiofiles
pydantic-core
colorama
fastapi
tiktoken
playwright
# Custom packages defined above
browsergym
browser-use
googlesearch-python
baidusearch
duckduckgo_search
];
# Override Python version requirement
postPatch = ''
substituteInPlace setup.py --replace "python_requires=\">=3.12\"" "python_requires=\">=3.10\""
'';
preBuild = ''
# Ensure the config directory exists
mkdir -p $out/config
# Copy the example config to the output
cp -r config/config.example.toml $out/config/
'';
postInstall = ''
# Create a wrapped executable that sets up the environment correctly
mkdir -p $out/bin
cat > $out/bin/openmanus <<EOF
#!/bin/sh
cd \$(mktemp -d)
cp -r $out/config .
exec python $out/lib/python3.10/site-packages/main.py "\$@"
EOF
chmod +x $out/bin/openmanus
'';
# Skip tests as they might require network or specific API keys
doCheck = false;
meta = with lib; {
description = "A versatile agent that can solve various tasks using multiple tools";
homepage = "https://github.com/mannaandpoem/OpenManus";
license = licenses.mit;
maintainers = [ maintainers.yourusername ]; # Replace with your maintainer name if applicable
platforms = platforms.all;
};
}
{
lib,
stdenv,
callPackage,
...
}:
let
pname = "lmstudio";
version = "0.3.14";
sha = "O9MuyAied70ab7P0HX3WlbF9WKkSIzmdEgw2n4A5bQc=";
rev = "1";
meta = {
description = "LM Studio is an easy to use desktop app for experimenting with local and open-source Large Language Models (LLMs)";
homepage = "https://lmstudio.ai/";
license = lib.licenses.unfree;
mainProgram = "lmstudio";
maintainers = with lib.maintainers; [
cig0
eeedean
crertel
];
platforms = [
"x86_64-linux"
"aarch64-darwin"
];
sourceProvenance = with lib.sourceTypes; [ binaryNativeCode ];
};
in
if stdenv.hostPlatform.isDarwin then
callPackage ./darwin.nix {
inherit
pname
version
rev
sha
meta
;
}
else
callPackage ./linux.nix {
inherit
pname
version
rev
sha
meta
;
}
{
appimageTools,
fetchurl,
version,
rev,
sha,
pname,
meta,
}:
let
src = fetchurl {
url = "https://installers.lmstudio.ai/linux/x64/${version}-${rev}/LM-Studio-${version}-${rev}-x64.AppImage";
hash = "sha256-${sha}";
};
appimageContents = appimageTools.extractType2 { inherit pname version src; };
in
appimageTools.wrapType2 {
inherit
meta
pname
version
src
;
extraPkgs = pkgs: [ pkgs.ocl-icd ];
extraInstallCommands = ''
mkdir -p $out/share/applications
cp -r ${appimageContents}/usr/share/icons $out/share
install -m 444 -D ${appimageContents}/lm-studio.desktop -t $out/share/applications
substituteInPlace $out/share/applications/lm-studio.desktop \
--replace-fail 'Exec=AppRun --no-sandbox %U' 'Exec=lmstudio'
'';
}
{
stdenv,
fetchurl,
undmg,
meta,
pname,
version,
rev,
}:
stdenv.mkDerivation {
inherit meta pname version;
src = fetchurl {
url = "https://installers.lmstudio.ai/darwin/arm64/${version}-${rev}/LM-Studio-${version}-${rev}-arm64.dmg";
hash = "sha256-x4IRT1PjBz9eafmwNRyLVq+4/Rkptz6RVWDFdRrGnGY=";
};
nativeBuildInputs = [ undmg ];
sourceRoot = ".";
installPhase = ''
runHook preInstall
mkdir -p $out/Applications
cp -r *.app $out/Applications
runHook postInstall
'';
# LM Studio ships Scripts inside the App Bundle, which may be messed up by standard fixups
dontFixup = true;
# undmg doesn't support APFS and 7zz does break the xattr. Took that approach from https://github.com/NixOS/nixpkgs/blob/a3c6ed7ad2649c1a55ffd94f7747e3176053b833/pkgs/by-name/in/insomnia/package.nix#L52
unpackCmd = ''
echo "Creating temp directory"
mnt=$(TMPDIR=/tmp mktemp -d -t nix-XXXXXXXXXX)
function finish {
echo "Ejecting temp directory"
/usr/bin/hdiutil detach $mnt -force
rm -rf $mnt
}
# Detach volume when receiving SIG "0"
trap finish EXIT
# Mount DMG file
echo "Mounting DMG file into \"$mnt\""
/usr/bin/hdiutil attach -nobrowse -mountpoint $mnt $curSrc
# Copy content to local dir for later use
echo 'Copying extracted content into "sourceRoot"'
cp -a $mnt/LM\ Studio.app $PWD/
'';
}
{ config, pkgs, ... }:
{
environment.systemPackages = with pkgs; [
age-plugin-yubikey
yubikey-agent
yubikey-touch-detector
];
programs.yubikey-touch-detector = {
enable = true;
libnotify = true;
};
security.pam.yubico = {
enable = true;
debug = false;
mode = "challenge-response";
id = [
"28604663" # Cuba
"27711450" # Bolivia
];
};
services.udev = {
# extraRules = ''
# ACTION=="remove",\
# ENV{ID_BUS}=="usb",\
# ENV{ID_MODEL_ID}=="0407",\
# ENV{ID_VENDOR_ID}=="1050",\
# ENV{ID_VENDOR}=="Yubico",\
# RUN+="${pkgs.systemd}/bin/loginctl lock-sessions"
# ''; # TODO find fix so it doesn't cycle through sleeping
packages = with pkgs; [ yubikey-personalization ];
};
}
{ config, pkgs, ... }:
{
environment.systemPackages = with pkgs; [
podman
podman-compose
];
virtualisation = {
oci-containers.backend = "podman";
podman = {
autoPrune = {
dates = "weekly";
enable = true;
flags = [ "--all" ];
};
enable = true;
# Create a `docker` alias for podman, to use it as a drop-in replacement
dockerCompat = !config.virtualisation.docker.enable;
# Required for containers under podman-compose to be able to talk to each other.
defaultNetwork.settings.dns_enabled = true;
};
};
networking.firewall.trustedInterfaces = [ "podman1" ];
# For rootless Podman (adjust for your user):
systemd.services.podman-network-lm-network = {
serviceConfig.Type = "oneshot";
wantedBy = [ "podman-chromadb.service" ];
script = "${config.virtualisation.podman.package}/bin/podman network create lm-network || true";
};
}
{ config, pkgs, ... }:
{
environment.systemPackages = with pkgs; [
docker
];
users.users.marvin.extraGroups = [ "docker" ];
virtualisation.docker = {
autoPrune = {
dates = "weekly";
enable = true;
flags = [ "--all" ];
};
enable = true;
logDriver = "json-file";
# rootless = {
# enable = true;
# setSocketVariable = true;
# };
};
}
{ config, pkgs, ... }:
{
environment.systemPackages = with pkgs; [ pijul ];
}
{ config, pkgs, ... }:
{
environment.systemPackages = with pkgs; [ jujutsu ];
}
{
config,
pkgs,
inputs,
...
}:
{
# Enable KDE Wallet (KWallet) for secret management
security.pam.services.login.kwallet.enable = config.services.displayManager.sddm.enable;
programs.bash.shellInit = ''
export SUITECLOUD_CI_PASSKEY="$(cat ${config.age.secrets."sdk-ci-passkey".path})"
'';
programs.zsh.shellInit = ''
export SUITECLOUD_CI_PASSKEY="$(cat ${config.age.secrets."sdk-ci-passkey".path})"
'';
# Install necessary tools and libraries
environment = {
sessionVariables = {
SECRETSERVICE_BACKEND = "kwallet";
SUITECLOUD_CI = 1;
};
systemPackages =
with pkgs;
[
libsecret # Library for secrets (used by apps like Git, Chrome)
jdk21_headless
# nodejs_22 # migrated to modules/node/default.nix
]
++ (
if config.services.displayManager.sddm.enable then
[
pkgs.kwalletcli # CLI tool for KWallet (optional)
pkgs.kdePackages.kwalletmanager # GUI to manage KWallet (optional)
pkgs.kdePackages.kwallet-pam
]
else
[ ]
);
};
}
{
config,
pkgs,
inputs,
lib,
...
}:
{
# Install necessary tools and libraries
environment = {
sessionVariables = {
RCLONE_CONFIG = config.age.secrets."rclone.conf".path;
};
};
### Add "rclone" to your packages first
# RClone Google Drive service
systemd.services.mnt-gdrive-mount = {
# Ensure the service starts after the network is up
wantedBy = [ "multi-user.target" ];
after = [ "network-online.target" ];
requires = [ "network-online.target" ];
# Service configuration
serviceConfig = {
Type = "simple";
ExecStartPre = "/run/current-system/sw/bin/mkdir -p /mnt/gdrive"; # Creates folder if didn't exist
ExecStart = "${pkgs.rclone}/bin/rclone mount gdrive:Documents /mnt/gdrive --vfs-cache-mode=full --uid=1000 --gid=100"; # Mounts
ExecStop = "/run/current-system/sw/bin/fusermount -u /mnt/gdrive"; # Dismounts
Restart = "on-failure";
RestartSec = "10s";
User = "marvin";
Group = "users";
Environment = [
"RCLONE_CONFIG=${config.age.secrets."rclone.conf".path}" # RClone configuration file
"PATH=/run/wrappers/bin/:$PATH"
]; # Required environments
};
};
}
{
config,
pkgs,
inputs,
lib,
...
}:
{
environment.systemPackages = with pkgs; [ clamav ];
services.clamav = {
daemon = {
enable = config.networking.hostName == "baker";
settings = {
MaxThreads = if config.networking.hostName == "baker" then 8 else 2;
ExcludePath = "/home/marvin/.local/share/containers";
};
};
scanner = {
enable = config.networking.hostName == "baker";
interval = if config.networking.hostName == "baker" then "*-*-* 15:00:00" else "Mon *-*-* 15:00:00";
scanDirectories = [
"/home"
"/var/lib"
"/tmp"
"/etc"
"/var/tmp"
];
};
updater = {
enable = true;
interval = "*-*-* 14:00:00";
settings = {
DatabaseMirror = [
"db.tw.clamav.net"
"db.cn.clamav.net"
"database.clamav.net"
];
};
};
};
}
{
config,
pkgs,
inputs,
lib,
...
}:
{
hardware = {
bluetooth = {
enable = true;
powerOnBoot = true;
settings = {
General = {
Enable = "Source,Sink,Media,Socket";
Experimental = true;
};
};
};
};
services = {
pipewire = {
enable = true;
alsa.enable = true;
alsa.support32Bit = true;
pulse.enable = true;
# Enable sound with pipewire.
# If you want to use JACK applications, uncomment this
jack.enable = 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;
};
pulseaudio.enable = false;
};
}
{
config,
pkgs,
...
}:
{
environment.systemPackages = with pkgs.nodePackages; [
nodejs # currently 22.14.0
pnpm # currently 10.6.5
];
}
{ config, pkgs, ... }:
{
nix = {
buildMachines = [
{
hostName = "192.168.0.249";
maxJobs = 7;
speedFactor = 10;
sshKey = "/home/marvin/.ssh/toaster_ed25519";
sshUser = "marvin";
system = "x86_64-linux";
publicHostKey = "c3NoLWVkMjU1MTkgQUFBQUMzTnphQzFsWkRJMU5URTVBQUFBSU5qUGlXb1k3WEsvR2tnZzlSNVZvYWYxYS9Wd01BMTFacjI5bVVyMXpHNGsgcm9vdEBiYWtlcgo=";
}
];
daemonCPUSchedPolicy = "idle";
distributedBuilds = true;
extraOptions = ''
trusted-users = root marvin
extra-substituters = https://devenv.cachix.org
extra-trusted-public-keys = devenv.cachix.org-1:w1cLUi8dv3hnoSPGAuibQv+f9TZLr6cv/Hm9XgU50cw=
'';
settings = {
substituters = [
"http://baker.local"
];
trusted-public-keys = [
"192.168.0.249:TlJOYj17rUmBmqjeACdSucdwbh6jEjjwdD9xpRy1nAc="
"baker.local:TlJOYj17rUmBmqjeACdSucdwbh6jEjjwdD9xpRy1nAc="
];
};
};
networking = {
extraHosts = ''
192.168.0.249 baker.local
'';
};
}
{
config,
pkgs,
inputs,
...
}:
{
age.secrets."binary-cache-key.age" = {
# Used in modules/nixos/nix-serve-builder.nix
file = "${inputs.mysecrets}/binary-cache-key.age";
owner = "nix-serve";
mode = "400";
};
networking.firewall.allowedTCPPorts = [
22
80
];
nix = {
daemonCPUSchedPolicy = "idle";
settings = {
allowed-users = [
"@builders"
"@wheel"
"marvin"
"root"
];
trusted-users = [
"@wheel"
"marvin"
"root"
];
};
sshServe = {
enable = true;
keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMxuAo4v9CUjlhUEq+biSwhjeXqevtI9M934f/in3dyh marvin@toaster"
];
write = true;
};
};
services = {
nginx = {
enable = true;
recommendedProxySettings = true;
virtualHosts = {
"baker.local" = {
locations."/".proxyPass =
"http://${config.services.nix-serve.bindAddress}:${toString config.services.nix-serve.port}";
};
};
};
nix-serve = {
bindAddress = "127.0.0.1";
enable = true;
package = pkgs.nix-serve-ng;
port = 5000;
secretKeyFile = config.age.secrets."binary-cache-key.age".path;
};
openssh.enable = true;
};
users.users.marvin.openssh.authorizedKeys.keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMxuAo4v9CUjlhUEq+biSwhjeXqevtI9M934f/in3dyh marvin@toaster"
];
}
{
config,
pkgs,
inputs,
...
}:
{
nix = {
channel.enable = false; # remove nix-channel related tools & configs, we use flakes instead.
gc = {
automatic = true;
dates = "Sat *-*-* 00:00:00";
options =
if config.networking.hostName == "baker" then
"--delete-older-than 30d"
else
"--delete-older-than 7d";
persistent = true;
};
optimise = {
automatic = true;
dates = [ "Mon *-*-* 00:00:00" ];
};
# make `nix run nixpkgs#nixpkgs` use the same nixpkgs as the one used by this flake.
# registry.nixpkgs.flake = nixpkgs;
settings = {
experimental-features = [
"nix-command"
"flakes"
];
# https://github.com/NixOS/nix/issues/9574
# nix-path = lib.mkForce "nixpkgs=/etc/nix/inputs/nixpkgs";
};
};
system.autoUpgrade = {
allowReboot = true;
flake = "git+https://gitlab.com/marvinroman/nixos-configuration";
flags = [
"--update-input"
"agenix"
"--update-input"
"mysecrets"
"--update-input"
"zen-browser"
"--commit-lock-file"
];
dates = if config.networking.hostName == "baker" then "*-*-* 00:00:00" else "*-*-* 00:15:00";
enable = true;
};
}
{
config,
pkgs,
inputs,
...
}:
{
networking = {
# Open ports in the firewall.
# networking.firewall.allowedTCPPorts = [ ... ];
# networking.firewall.allowedUDPPorts = [ ... ];
# Or disable the firewall altogether.
# networking.firewall.enable = false;
firewall = {
enable = true;
allowedTCPPorts = [ ];
allowedUDPPorts = [ ];
};
# resolvconf.dnsExtensionMechanism = false; # Will disable edns extended dns helpful if when traveling there is issues with dns resolution (requires a restart)
# wireless.enable = true; # Enables wireless support via wpa_supplicant.
# Configure network proxy if necessary
# proxy.default = "http://user:password@proxy:port/";
# proxy.noProxy = "127.0.0.1,localhost,internal.domain";
# Enable networking
networkmanager.enable = true;
extraHosts = ''
127.0.0.1 platform.test
'';
};
}
{ config, pkgs, ... }:
{
environment.systemPackages = with pkgs; [
# neo4j
neo4j-desktop
];
# services.neo4j = {
# bolt.enable = true;
# defaultListenAddress = "127.0.0.1";
# enable = true;
# extraServerConfig = ''
# '';
# http.enable = true;
# readOnly = false;
# };
}
{ config, pkgs, ... }:
{
services.elasticsearch = {
enable = false;
extraCmdLineOptions = [ ];
extraConf = '''';
};
}
{ config, pkgs, ... }:
{
virtualisation.oci-containers.containers = {
chromadb = {
autoStart = true;
environment = {
ALLOW_RESET = "true";
IS_PERSISTENT = "true";
CHROMA_SERVER_CORS_ALLOW_ORIGINS = "[\"*\"]";
};
extraOptions = [
"--network=lm-network" # Use `=` to combine flag and value <button class="citation-flag" data-index="3"><button class="citation-flag" data-index="7">
];
hostname = "chromadb";
image = "chromadb/chroma";
ports = [
"127.0.0.1:8001:8000"
];
# pull = "newer"; TODO upgrade once the option becomes available
volumes = [
"chroma_data:/chroma/chroma_data"
];
};
};
}
{ config, pkgs, ... }:
{
virtualisation.oci-containers.containers = {
"open-webui" = {
autoStart = true;
environment = {
ENABLE_OLLAMA_API = "false";
ENABLE_OPENAI_API = "true";
VECTOR_DB = "chroma";
RAG_EMBEDDING_ENGINE = "openai";
RAG_TOP_K = "10";
CHROMA_HTTP_HOST = "chromadb";
CHROMA_HTTP_PORT = "8000";
CHROMA_HTTP_SSL = "false";
ENABLE_RAG_WEB_SEARCH = "true";
RAG_WEB_SEARCH_RESULT_COUNT = "4";
RAG_WEB_SEARCH_ENGINE = "duckduckgo"; # duckduckgo, brave, tavily, jina
};
extraOptions = [
"--network=lm-network"
"--dns=8.8.8.8"
"--add-host=lmstudiolmstudio.marvinroman.me:192.168.0.249"
];
environmentFiles = [
config.age.secrets."open-webui-env".path # variables with API's and Keys
];
image = "ghcr.io/open-webui/open-webui:main";
ports = [
"0.0.0.0:8080:8080"
];
serviceName = "openwebui";
volumes = [
"open-webui:/app/backend/data"
];
};
};
networking.firewall.allowedTCPPorts = [ 8080 ];
}
{
config,
pkgs,
inputs,
...
}:
{
services.ollama = {
acceleration = "rocm";
enable = true;
# environmentVariables = {
# };
host = "127.0.0.1";
loadModels = [
"deepseek-r1:1.5b"
"deepseek-r1:7b"
"deepseek-r1:8b"
"deepseek-r1:14b"
# "deepseek-r1:32b"
];
openFirewall = false;
port = 11434;
};
}
{
config,
lib,
pkgs,
inputs,
...
}:
let
domains = {
"lmstudio.marvinroman.me" = {
proxyPass = "http://127.0.0.1:1234";
};
"openwebui.marvinroman.me" = {
proxyPass = "http://127.0.0.1:8080";
};
};
email = "webmaster@marvinroman.me";
# Paths to secrets managed by agenix
gceEnvFile = pkgs.writeText "gcloud-credentials.txt" ''
GCE_PROJECT="magemonkey-dns"
GCE_SERVICE_ACCOUNT_FILE="${config.age.secrets."gcloud-svc-account".path}"
'';
in
{
age.secrets."gcloud-svc-account" = {
# Used in modules/llm/nginx-proxies.nix
file = "${inputs.mysecrets}/gcloud-svc-account.age";
owner = "acme";
mode = "400";
};
services.nginx = {
enable = true;
virtualHosts = lib.mapAttrs (name: cfg: {
enableACME = true;
forceSSL = true;
listen = [
{
addr = "192.168.0.249";
port = 443;
ssl = true;
}
];
locations."/" = {
proxyPass = cfg.proxyPass;
proxyWebsockets = true;
};
}) domains;
};
security.acme = {
acceptTerms = true;
defaults.email = email;
certs = lib.mapAttrs (name: _: {
domain = name;
dnsProvider = "gcloud";
credentialsFile = gceEnvFile;
dnsPropagationCheck = true;
webroot = null;
}) domains;
};
# Open firewall for HTTPS
networking = {
extraHosts = ''
192.168.0.249 lmstudio.marvinroman.me
192.168.0.249 openwebui.marvinroman.me
'';
firewall.allowedTCPPorts = [
80
443
];
};
}
{
config,
pkgs,
inputs,
...
}:
{
environment.systemPackages = with pkgs; [
steam
];
programs.steam = {
enable = true;
remotePlay.openFirewall = true; # Open ports in the firewall for Steam Remote Play
dedicatedServer.openFirewall = true; # Open ports in the firewall for Source Dedicated Server
};
}
{
config,
lib,
pkgs,
...
}:
{
environment.systemPackages = with pkgs; [
direnv
nix-direnv
];
programs.direnv = {
enable = true;
enableZshIntegration = true;
loadInNixShell = true;
nix-direnv = {
enable = true;
};
};
}
{ config, pkgs, ... }:
{
environment.systemPackages = [
pkgs.devpod
pkgs.devpod-desktop
];
}
{ config, pkgs, ... }:
{
environment.systemPackages = [ pkgs.devenv ];
}
{ config, pkgs, ... }:
{
environment.systemPackages = with pkgs; [
kdePackages.krdc
];
services.xrdp = {
enable = true;
defaultWindowManager = "startplasma-x11";
openFirewall = true;
};
}
{
config,
pkgs,
inputs,
...
}:
{
imports = [
./rdp/default.nix
];
environment.systemPackages = with pkgs; [
kdePackages.filelight
kdePackages.gwenview
kdePackages.kaccounts-integration
kdePackages.kaccounts-providers
kdePackages.kcalc
kdePackages.kcalendarcore
kdePackages.okular
];
services = {
# Enable the KDE Plasma Desktop Environment.
displayManager.sddm.enable = true;
desktopManager.plasma6.enable = true;
};
}
{
inputs,
config,
pkgs,
...
}:
{
nix.settings = {
substituters = [ "https://hyprland.cachix.org" ];
trusted-public-keys = [ "hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc=" ];
};
programs.hyprland = {
enable = true;
package = inputs.hyprland.packages.${pkgs.system}.hyprland;
xwayland.enable = true;
};
services = {
greetd = {
enable = true;
settings = {
default_session = {
command = "${pkgs.greetd.tuigreet}/bin/tuigreet --time --cmd Hyprland";
user = "greeter";
};
};
};
xserver = {
enable = true;
layout = "us";
xkbVariant = "";
excludePackages = [ pkgs.xterm ];
libinput.enable = true;
displayManager.gdm = {
enable = true;
wayland = true;
};
};
};
environment = {
sessionVariables = {
WLR_NO_HARDWARE_CURSORS = "1";
NIXOS_OZONE_WL = "1";
};
systemPackages = with pkgs; [
dunst # notification daemon
gnome-icon-theme
hyprcursor # cursor theme
hyprpaper # wallpaper
hyprpicker # color picker
hyprpolkitagent # is a polkit authentication daemon. It is required for GUI applications to be able to request elevated privileges
hyprsunset # blue light filter
kitty # terminal
libnotify # notification daemon
# mpvpaper # wallpaper
rofi-wayland # app launcher
# swaybg # wallpaper
# swww # wallpaper
(pkgs.waybar.overrideAttrs (oldAttrs: {
mesonFlags = oldAttrs.mesonFlags ++ [ "-Dexperimental=true" ];
}))
# wofi # app launcher
# wpaperd # wallpaper
];
};
hardware = {
opengl.enable = true;
};
sound.enable = true;
xdg.portal = {
enable = true;
extraPortals = [ pkgs.xdg-desktop-portal-gtk ];
};
}
{
inputs,
config,
pkgs,
...
}:
{
services.xserver = {
displayManager.gdm.enable = true;
desktopManager.gnome.enable = true;
layout = "us";
xkbVariant = "";
};
}
{
config,
lib,
pkgs,
...
}:
{
environment.systemPackages = with pkgs; [
# bees
btrfs-progs
snapper
];
services = {
btrfs.autoScrub = {
enable = true;
fileSystems = [ "/mnt/data" ];
interval = "weekly";
};
beesd = {
filesystems.data = {
hashTableSizeMB = 1024;
spec = "/mnt/data";
verbosity = "debug";
};
};
};
services.snapper = {
cleanupInterval = "1d";
persistentTimer = true;
snapshotInterval = "hourly";
};
}
{
config,
pkgs,
inputs,
...
}:
{
i18n = {
# Select internationalisation properties.
defaultLocale = "en_US.UTF-8";
extraLocaleSettings = {
LANG = "en_US.UTF-8";
LANGUAGE = "en_US.UTF-8";
LC_ADDRESS = "en_US.UTF-8";
LC_IDENTIFICATION = "en_US.UTF-8";
LC_MEASUREMENT = "en_US.UTF-8";
LC_MONETARY = "en_US.UTF-8";
LC_NAME = "en_US.UTF-8";
LC_NUMERIC = "en_US.UTF-8";
LC_PAPER = "en_US.UTF-8";
LC_TELEPHONE = "en_US.UTF-8";
LC_TIME = "en_US.UTF-8";
};
inputMethod = {
# enabled = "fcitx5";
enable = true;
type = "fcitx5";
fcitx5 = {
waylandFrontend = true;
addons =
with pkgs;
[
fcitx5-chinese-addons
fcitx5-chewing
# fcitx5-gtk
# fcitx5-nord
fcitx5-material-color
# fcitx5-pinyin-zhwiki
# fcitx5-rime
# fcitx5-table-extra
]
++ (
if config.services.displayManager.sddm.enable then
[
pkgs.kdePackages.fcitx5-qt
]
else
[ ]
);
};
};
supportedLocales = [
"en_US.UTF-8/UTF-8"
"zh_CN.UTF-8/UTF-8"
"zh_TW.UTF-8/UTF-8"
];
};
}
{
config,
pkgs,
inputs,
...
}:
{
programs.gnupg.agent = {
enable = true;
# enableSSHSupport = true;
settings.default-cache-ttl = 86400;
};
}
{
config,
pkgs,
inputs,
...
}:
{
programs.bash = {
# blesh.enable = true;
completion.enable = true;
enableLsColors = true;
undistractMe = {
enable = true;
playSound = true;
};
};
}
{
config,
pkgs,
inputs,
...
}:
{
# List packages installed in system profile. To search, run:
# $ nix search wget
environment = {
systemPackages = with pkgs; [
inputs.agenix.packages.${system}.default
];
};
home-manager.extraSpecialArgs.secrets = config.age.secrets;
age = {
identityPaths = [ "/etc/ssh/ssh_host_ed25519_key" ];
secrets = {
"alibaba-api-key" = {
# Used in users/modules/vscode/default.nix
file = "${inputs.mysecrets}/alibaba-api-key.age";
owner = "marvin";
mode = "400";
};
"open-webui-env" = {
# Used in modules/llm/open-webui.nix
file = "${inputs.mysecrets}/open-webui-env.age";
owner = "root";
mode = "400";
};
"rclone.conf" = {
# Used in modules/llm/rclone.nix
file = "${inputs.mysecrets}/rclone-conf.age";
owner = "marvin";
mode = "400";
};
"sdk-ci-passkey" = {
# Used in modules/llm/sdk-ci.nix
file = "${inputs.mysecrets}/sdk-ci-passkey.age";
owner = "marvin";
mode = "400";
};
"colab-kubectl-config" = {
file = "${inputs.mysecrets}/colab-kubectl.age";
path = "/home/marvin/.kube/config";
owner = "marvin";
mode = "400";
};
};
};
}
{
config,
pkgs,
inputs,
...
}:
{
imports = [
../common/home.nix
../../users/modules/jujutsu.nix
# ../../users/modules/hyprland.nix
# ../../users/modules/neovim.nix
# ../../users/modules/virtualisation/neo4j-podman.nix
# ../../users/modules/vscode/laravel.nix
# ../../users/modules/vscode/vue.nix
];
}
# Do not modify this file! It was generated by ‘nixos-generate-config’
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{
config,
lib,
pkgs,
modulesPath,
...
}:
{
imports = [
(modulesPath + "/installer/scan/not-detected.nix")
];
boot.initrd.availableKernelModules = [
"xhci_pci"
"thunderbolt"
"nvme"
"usb_storage"
"sd_mod"
"sdhci_pci"
];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-intel" ];
boot.extraModulePackages = [ ];
boot.initrd.luks.devices = {
"root" = {
device = "/dev/disk/by-uuid/0ebf98cc-f764-418a-807c-3cbe4e0d5381";
};
"data" = {
device = "/dev/disk/by-uuid/2a0c907a-a642-462d-b535-114316af2461";
keyFile = "/dev/mapper/root";
};
"data2" = {
device = "/dev/disk/by-uuid/495532fa-92bb-43ac-a17f-0f17f772214b";
keyFile = "/dev/mapper/root";
};
};
fileSystems."/" = {
device = "/dev/disk/by-uuid/4990c37e-f18a-498f-a672-3f472adffaa5";
fsType = "ext4";
};
services.snapper.configs = {
home = {
SUBVOLUME = "/home/marvin";
ALLOW_USERS = [ "marvin" ];
TIMELINE_CREATE = true;
TIMELINE_CLEANUP = true;
SPACE_LIMIT = "0.5";
SYNC_ACL = "yes";
};
repos = {
SUBVOLUME = "/mnt/repos";
ALLOW_USERS = [ "marvin" ];
TIMELINE_CREATE = true;
TIMELINE_CLEANUP = true;
SPACE_LIMIT = "0.5";
SYNC_ACL = "yes";
};
};
fileSystems."/mnt/data" = {
device = "/dev/mapper/data";
fsType = "btrfs";
options = [ "compress=zstd" ];
};
fileSystems."/mnt/repos" = {
device = "/dev/mapper/data";
fsType = "btrfs";
options = [
"subvol=repos"
"compress=zstd"
];
};
fileSystems."/home/marvin" = {
device = "/dev/mapper/data";
fsType = "btrfs";
options = [
"subvol=home"
"compress=zstd"
];
};
fileSystems."/mnt/nix" = {
device = "/dev/mapper/data";
fsType = "btrfs";
options = [
"subvol=nix"
"compress=zstd"
];
};
fileSystems."/boot" = {
device = "/dev/disk/by-uuid/BA59-4A07";
fsType = "vfat";
options = [
"fmask=0077"
"dmask=0077"
];
};
swapDevices = [
{
device = "/var/lib/swapfile";
size = 16 * 1024;
}
];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's
# still possible to use this option, but it's recommended to use it in conjunction
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
networking.useDHCP = lib.mkDefault true;
# networking.interfaces.wlp0s20f3.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
}
# Edit this configuration file to define what should be installed on
# your system. Help is available in the configuration.nix(5) man page
# and in the NixOS manual (accessible by running ‘nixos-help’).
{
config,
pkgs,
inputs,
lib,
...
}:
{
imports = [
../common/core.nix
./hardware.nix
# ../../modules/desktop/hyprland.nix
../../modules/desktop/plasma.nix
# ../../modules/llm/nginx-proxies.nix
# ../../modules/llm/open-webui.nix
../../modules/nixos/nix-serve-client.nix
# ../../modules/vectorstore/chromadb.nix
../../modules/versioncontrol/jujutsu.nix
../../modules/versioncontrol/pijul.nix
../../modules/virtualisation/docker.nix
];
boot = {
initrd.systemd.enable = true;
loader = {
# Bootloader.
systemd-boot.enable = true;
efi.canTouchEfiVariables = true;
};
};
networking = {
extraHosts = ''
192.168.0.249 openwebui.marvinroman.me
192.168.0.249 lmstudio.marvinroman.me
'';
hostName = "toaster"; # Define your hostname.
};
}
{
config,
pkgs,
inputs,
...
}:
{
imports = [
../../users/modules/alacritty.nix
../../users/modules/bash.nix
../../users/modules/eza.nix
../../users/modules/firefox.nix
../../users/modules/git.nix
../../users/modules/ssh.nix
../../users/modules/vscode/default.nix
../../users/modules/yubikey.nix
../../users/modules/zoxide.nix
../../users/modules/zsh.nix
inputs.nvf.homeManagerModules.default
];
home = {
username = "marvin";
homeDirectory = "/home/marvin";
stateVersion = "24.11"; # Did you read the comment?
};
}
# Edit this configuration file to define what should be installed on
# your system. Help is available in the configuration.nix(5) man page
# and in the NixOS manual (accessible by running ‘nixos-help’).
{
config,
pkgs,
inputs,
lib,
system,
...
}:
{
imports = [
../../modules/agenix/default.nix
../../modules/applications/bash.nix
../../modules/applications/gpg.nix
../../modules/applications/language.nix
../../modules/btrfs/default.nix
../../modules/development/devenv.nix
../../modules/development/devpod.nix
../../modules/development/direnv.nix
../../modules/gaming/default.nix
../../modules/networking/default.nix
../../modules/nixos/default.nix
../../modules/node/default.nix
../../modules/services/audio.nix
../../modules/services/clamav.nix
../../modules/services/gdrive.nix
../../modules/suitecloud-sdk/default.nix
../../modules/virtualisation/podman.nix
../../modules/yubikey/default.nix
../../users/marvin/default.nix
];
boot.kernelPackages = pkgs.linuxPackages_6_14;
# List packages installed in system profile. To search, run:
# $ nix search wget
environment = {
systemPackages = with pkgs; [
bat
curl
eza
# gcc
git
gnupg
fd
fzf
ripgrep
usbutils
wget
wl-clipboard
inputs.zen-browser.packages.${system}.default # artifacts are downloaded from this repository to guarantee reproducibility
zoxide
];
};
fonts = {
packages = with pkgs; [
liberation_ttf
meslo-lgs-nf
# nerdfonts #TODO upate to new packages
noto-fonts
noto-fonts-cjk-sans
];
};
# Allow unfree packages
nixpkgs.config.allowUnfree = true;
# nixpkgs.config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [
# "discord"
# "google-chrome"
# "obsidian"
# "slack"
# "spotify"
# "vscode"
# "vscode-with-extensions"
# ];
programs = {
fzf = {
fuzzyCompletion = true;
# keybindings = true;
};
lazygit = {
enable = true;
};
partition-manager.enable = true;
ssh.startAgent = true;
zsh.enable = true;
};
security.rtkit.enable = true;
services = {
cron.enable = true;
# Enable CUPS to print documents.
printing.enable = false;
# Enable the X11 windowing system.
# You can disable this if you're only using the Wayland session.
xserver.enable = true;
};
# This value determines the NixOS release from which the default
# settings for stateful data, like file locations and database versions
# on your system were taken. It‘s perfectly fine and recommended to leave
# this value at the release version of the first install of this system.
# Before changing this value read the documentation for this option
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
system.stateVersion = "24.05"; # Did you read the comment?
# Set your time zone.
time.timeZone = "Asia/Taipei";
}
{
config,
pkgs,
inputs,
...
}:
{
imports = [
../common/home.nix
# ../../users/modules/hyprland.nix
# ../../users/modules/neovim.nix
# ../../users/modules/virtualisation/neo4j-podman.nix
# ../../users/modules/vscode/laravel.nix
# ../../users/modules/vscode/vue.nix
../../users/modules/obs-studio.nix
];
}
# Do not modify this file! It was generated by ‘nixos-generate-config’
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{
config,
lib,
pkgs,
modulesPath,
...
}:
let
defragmentServiceBin = pkgs.writeScriptBin "defragment" ''
# Defragment directories
btrfs filesystem defragment -r -czstd /mnt/data/lmstudio_models
btrfs filesystem defragment -r -czstd /mnt/data/NextCloud
btrfs filesystem defragment -r -czstd /mnt/data/repos
btrfs filesystem defragment -r -czstd /mnt/data/Steam
btrfs filesystem defragment -r -czstd /mnt/data/VMs
'';
in
{
imports = [
(modulesPath + "/installer/scan/not-detected.nix")
];
boot.initrd.availableKernelModules = [
"nvme"
"xhci_pci"
"ahci"
"usbhid"
"sd_mod"
];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-amd" ];
boot.extraModulePackages = [ ];
fileSystems."/" = {
device = "/dev/disk/by-uuid/1987b9a1-1444-404c-9775-b9cbedda0204";
fsType = "ext4";
};
fileSystems."/boot" = {
device = "/dev/disk/by-uuid/1668-AA41";
fsType = "vfat";
options = [
"fmask=0077"
"dmask=0077"
];
};
fileSystems."/mnt/data" = {
device = "/dev/disk/by-uuid/dc60967d-4625-4840-9e56-9a1d9049dc02";
fsType = "btrfs";
options = [ "compress=zstd" ];
};
fileSystems."/mnt/NextCloud" = {
device = "/dev/disk/by-uuid/dc60967d-4625-4840-9e56-9a1d9049dc02";
fsType = "btrfs";
options = [
"subvol=NextCloud"
"compress=zstd"
];
};
fileSystems."/mnt/repos" = {
device = "/dev/disk/by-uuid/dc60967d-4625-4840-9e56-9a1d9049dc02";
fsType = "btrfs";
options = [
"subvol=repos"
"compress=zstd"
];
};
fileSystems."/mnt/Steam" = {
device = "/dev/disk/by-uuid/dc60967d-4625-4840-9e56-9a1d9049dc02";
fsType = "btrfs";
options = [
"subvol=Steam"
"compress=zstd"
];
};
fileSystems."/mnt/VMs" = {
device = "/dev/disk/by-uuid/dc60967d-4625-4840-9e56-9a1d9049dc02";
fsType = "btrfs";
options = [
"subvol=VMs"
"compress=zstd"
];
};
fileSystems."/home/marvin/.lmstudio/models" = {
device = "/dev/disk/by-uuid/dc60967d-4625-4840-9e56-9a1d9049dc02";
fsType = "btrfs";
options = [
"subvol=lmstudio_models"
"compress=zstd"
];
};
# store isn't available across subvolumes so removing
# fileSystems."/mnt/pnpm" = {
# device = "/dev/disk/by-uuid/dc60967d-4625-4840-9e56-9a1d9049dc02";
# fsType = "btrfs";
# options = [
# "subvol=pnpm"
# "compress=zstd"
# ];
# };
services.snapper.configs = {
# lmstudio_models = {
# SUBVOLUME = "/home/marvin/.lmstudio/models";
# ALLOW_USERS = [ "marvin" ];
# TIMELINE_CREATE = true;
# TIMELINE_CLEANUP = true;
# TIMELINE_LIMIT_DAILY = 3;
# TIMELINE_LIMIT_HOURLY = 4;
# TIMELINE_LIMIT_MONTHLY = 2;
# TIMELINE_LIMIT_QUARTERLY = 1;
# TIMELINE_LIMIT_WEEKLY = 1;
# TIMELINE_LIMIT_YEARLY = 1;
# SPACE_LIMIT = "0.5";
# SYNC_ACL = "yes";
# };
NextCloud = {
SUBVOLUME = "/mnt/NextCloud";
ALLOW_USERS = [ "marvin" ];
TIMELINE_CREATE = true;
TIMELINE_CLEANUP = true;
TIMELINE_LIMIT_DAILY = 14;
TIMELINE_LIMIT_HOURLY = 24;
TIMELINE_LIMIT_MONTHLY = 12;
TIMELINE_LIMIT_QUARTERLY = 1;
TIMELINE_LIMIT_WEEKLY = 5;
TIMELINE_LIMIT_YEARLY = 2;
SPACE_LIMIT = "0.5";
SYNC_ACL = "yes";
};
repos = {
SUBVOLUME = "/mnt/repos";
ALLOW_USERS = [ "marvin" ];
TIMELINE_CREATE = true;
TIMELINE_CLEANUP = true;
TIMELINE_LIMIT_DAILY = 14;
TIMELINE_LIMIT_HOURLY = 24;
TIMELINE_LIMIT_MONTHLY = 12;
TIMELINE_LIMIT_QUARTERLY = 1;
TIMELINE_LIMIT_WEEKLY = 5;
TIMELINE_LIMIT_YEARLY = 2;
SPACE_LIMIT = "0.5";
SYNC_ACL = "yes";
};
# Steam = {
# SUBVOLUME = "/mnt/Steam";
# ALLOW_USERS = [ "marvin" ];
# TIMELINE_CREATE = true;
# TIMELINE_CLEANUP = true;
# SPACE_LIMIT = "0.5";
# SYNC_ACL = "yes";
# };
# VMs = {
# SUBVOLUME = "/mnt/VMs";
# ALLOW_USERS = [ "marvin" ];
# TIMELINE_CREATE = true;
# TIMELINE_CLEANUP = true;
# TIMELINE_LIMIT_DAILY = 4;
# TIMELINE_LIMIT_HOURLY = 4;
# TIMELINE_LIMIT_MONTHLY = 2;
# TIMELINE_LIMIT_QUARTERLY = 1;
# TIMELINE_LIMIT_WEEKLY = 1;
# TIMELINE_LIMIT_YEARLY = 1;
# SPACE_LIMIT = "0.5";
# SYNC_ACL = "yes";
# };
};
systemd = {
timers = {
"defragment" = {
enable = true;
name = "defragment.timer";
timerConfig = {
OnCalendar = "*-*-01 00:00:00";
Persistent = "true";
Unit = "defragment.service";
};
};
};
services = {
"defragment" = {
script = "${defragmentServiceBin}/bin/defragment";
name = "defragment.service";
path = [ pkgs.btrfs-progs ];
restartIfChanged = false;
};
};
};
# services.beesd.filesystems.data.hashTableSizeMB = lib.mkForce 512;
swapDevices = [
{ device = "/dev/disk/by-uuid/c7459b6e-e621-4041-a12c-52a8209a0a7a"; }
];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's
# still possible to use this option, but it's recommended to use it in conjunction
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
networking.useDHCP = lib.mkDefault true;
# networking.interfaces.enp40s0.useDHCP = lib.mkDefault true;
# networking.interfaces.enp42s0.useDHCP = lib.mkDefault true;
# networking.interfaces.wlp39s0.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
}
# Edit this configuration file to define what should be installed on
# your system. Help is available in the configuration.nix(5) man page
# and in the NixOS manual (accessible by running ‘nixos-help’).
{
config,
pkgs,
inputs,
lib,
...
}:
let
openmanus = pkgs.callPackage ../../pkgs/open-manus.nix { };
in
{
imports = [
../common/core.nix
./hardware.nix
../../modules/desktop/plasma.nix
../../modules/llm/nginx-proxies.nix
# ../../modules/llm/ollama.nix
../../modules/llm/open-webui.nix
../../modules/llm/vectorstore/chromadb.nix
# ../../modules/llm/vectorstore/elasticstore.nix
# ../../modules/llm/vectorstore/neo4j.nix
../../modules/nixos/nix-serve-builder.nix
../../modules/virtualisation/docker.nix
# ../../modules/virtualisation/podman.nix # moved to common
../../users/marvin/baker.nix
];
boot = {
initrd.systemd.enable = true;
loader = {
# Bootloader.
systemd-boot.enable = true;
efi.canTouchEfiVariables = true;
};
};
# List packages installed in system profile. To search, run:
# $ nix search wget
environment.systemPackages = with pkgs; [
# duplicacy TODO implement backups
(pkgs.callPackage ../../pkgs/lmstudio/package.nix { })
ollama
openssh
# openmanus
];
networking.hostName = "baker"; # Define your hostname.
# time.timeZone = lib.mkForce "America/New_York"; # TODO "Asia/Taipei";
}
{
description = "A simple NixOS flake";
inputs = {
# Primary package source - stable channel for system stability
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
# Home Manager - pinned to release-24.11 for compatibility
home-manager = {
url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs";
};
agenix.url = "github:ryantm/agenix";
zen-browser.url = "github:0xc000022070/zen-browser-flake";
# my private secrets, it's a private repository, you need to replace it with your own.
# use ssh protocol to authenticate via ssh-agent/ssh-key, and shallow clone to save time
mysecrets = {
url = "git+ssh://git@gitlab.com/marvinroman/my-nixos-secrets?ref=main&shallow=1";
flake = false;
};
# Optional, if you intend to follow nvf's obsidian-nvim input
# you must also add it as a flake input.
# obsidian-nvim.url = "github:epwalsh/obsidian.nvim";
# obsidian-nvim.flake = false;
# Required, nvf works best and only directly supports flakes
nvf = {
url = "github:notashelf/nvf";
# You can override the input nixpkgs to follow your system's
# instance of nixpkgs. This is safe to do as nvf does not depend
# on a binary cache.
inputs.nixpkgs.follows = "nixpkgs";
# Optionally, you can also override individual plugins
# for example:
# inputs.obsidian-nvim.follows = "obsidian-nvim"; # <- this will use the obsidian-nvim from your inputs
};
};
outputs =
inputs@{
self,
nixpkgs,
agenix,
home-manager,
...
}:
{
# Please replace toaster with your hostname
nixosConfigurations = {
toaster = nixpkgs.lib.nixosSystem rec {
system = "x86_64-linux";
modules = [
# Import the previous configuration.nix we used,
# so the old configuration file still takes effect
./hosts/toaster/default.nix
home-manager.nixosModules.default
{
home-manager = {
useUserPackages = true;
useGlobalPkgs = true;
users = {
"marvin" = import ./hosts/toaster/home.nix;
};
# Pass shared arguments to Home Manager modules
extraSpecialArgs = {
inherit inputs;
hostName = "toaster";
};
};
}
agenix.nixosModules.default
{
# Set all inputs parameters as special arguments for all submodules,
# so you can directly use all dependencies in inputs in submodules
_module.args = {
inherit inputs;
inherit system;
};
}
];
};
baker = nixpkgs.lib.nixosSystem rec {
system = "x86_64-linux";
modules = [
# Import the previous configuration.nix we used,
# so the old configuration file still takes effect
./hosts/baker/default.nix
home-manager.nixosModules.default
{
home-manager = {
useUserPackages = true;
useGlobalPkgs = true;
users = {
"marvin" = import ./hosts/baker/home.nix;
};
# Pass shared arguments to Home Manager modules
extraSpecialArgs = {
inherit inputs;
hostName = "baker";
};
};
}
agenix.nixosModules.default
{
# Set all inputs parameters as special arguments for all submodules,
# so you can directly use all dependencies in inputs in submodules
_module.args = {
inherit inputs;
inherit system;
};
}
];
};
};
};
}
{
"nodes": {
"agenix": {
"inputs": {
"darwin": "darwin",
"home-manager": "home-manager",
"nixpkgs": "nixpkgs",
"systems": "systems"
},
"locked": {
"lastModified": 1745630506,
"narHash": "sha256-bHCFgGeu8XjWlVuaWzi3QONjDW3coZDqSHvnd4l7xus=",
"owner": "ryantm",
"repo": "agenix",
"rev": "96e078c646b711aee04b82ba01aefbff87004ded",
"type": "github"
},
"original": {
"owner": "ryantm",
"repo": "agenix",
"type": "github"
}
},
"darwin": {
"inputs": {
"nixpkgs": [
"agenix",
"nixpkgs"
]
},
"locked": {
"lastModified": 1744478979,
"narHash": "sha256-dyN+teG9G82G+m+PX/aSAagkC+vUv0SgUw3XkPhQodQ=",
"owner": "lnl7",
"repo": "nix-darwin",
"rev": "43975d782b418ebf4969e9ccba82466728c2851b",
"type": "github"
},
"original": {
"owner": "lnl7",
"ref": "master",
"repo": "nix-darwin",
"type": "github"
}
},
"flake-parts": {
"inputs": {
"nixpkgs-lib": "nixpkgs-lib"
},
"locked": {
"lastModified": 1743550720,
"narHash": "sha256-hIshGgKZCgWh6AYJpJmRgFdR3WUbkY04o82X05xqQiY=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "c621e8422220273271f52058f618c94e405bb0f5",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "flake-parts",
"type": "github"
}
},
"flake-utils": {
"inputs": {
"systems": "systems_2"
},
"locked": {
"lastModified": 1731533236,
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"home-manager": {
"inputs": {
"nixpkgs": [
"agenix",
"nixpkgs"
]
},
"locked": {
"lastModified": 1745494811,
"narHash": "sha256-YZCh2o9Ua1n9uCvrvi5pRxtuVNml8X2a03qIFfRKpFs=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "abfad3d2958c9e6300a883bd443512c55dfeb1be",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "home-manager",
"type": "github"
}
},
"home-manager_2": {
"inputs": {
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1745987135,
"narHash": "sha256-8Up4QPuMZEJBU0eefAY+nUe7DYKQQzvaHnMpNdwRgKA=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "d2b3e6c83d457aa0e7f9344c61c3fed32bad0f7e",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "home-manager",
"type": "github"
}
},
"home-manager_3": {
"inputs": {
"nixpkgs": [
"zen-browser",
"nixpkgs"
]
},
"locked": {
"lastModified": 1743604125,
"narHash": "sha256-ZD61DNbsBt1mQbinAaaEqKaJk2RFo9R/j+eYWeGMx7A=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "180fd43eea296e62ae68e079fcf56aba268b9a1a",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "home-manager",
"type": "github"
}
},
"mnw": {
"locked": {
"lastModified": 1744597985,
"narHash": "sha256-lLYB9/tQ0OAKonL0Ku963nqOm0aE1TmLavrzmXAr5Zc=",
"owner": "Gerg-L",
"repo": "mnw",
"rev": "cbdcbb5f8eb24e25b932bbc87e29299a72e34b64",
"type": "github"
},
"original": {
"owner": "Gerg-L",
"repo": "mnw",
"type": "github"
}
},
"mysecrets": {
"flake": false,
"locked": {
"lastModified": 1745844171,
"narHash": "sha256-J+DRkMVfhWU93EDZ6vdhAFk+OVK0lZ6OSkSBBDsTMJE=",
"ref": "main",
"rev": "967b9d90ffc4018177cb3662bd5f9551468482de",
"shallow": true,
"type": "git",
"url": "ssh://git@gitlab.com/marvinroman/my-nixos-secrets"
},
"original": {
"ref": "main",
"shallow": true,
"type": "git",
"url": "ssh://git@gitlab.com/marvinroman/my-nixos-secrets"
}
},
"nil": {
"inputs": {
"flake-utils": [
"nvf",
"flake-utils"
],
"nixpkgs": [
"nvf",
"nixpkgs"
],
"rust-overlay": "rust-overlay"
},
"locked": {
"lastModified": 1741118843,
"narHash": "sha256-ggXU3RHv6NgWw+vc+HO4/9n0GPufhTIUjVuLci8Za8c=",
"owner": "oxalica",
"repo": "nil",
"rev": "577d160da311cc7f5042038456a0713e9863d09e",
"type": "github"
},
"original": {
"owner": "oxalica",
"repo": "nil",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1745391562,
"narHash": "sha256-sPwcCYuiEopaafePqlG826tBhctuJsLx/mhKKM5Fmjo=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "8a2f738d9d1f1d986b5a4cd2fd2061a7127237d7",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs-lib": {
"locked": {
"lastModified": 1743296961,
"narHash": "sha256-b1EdN3cULCqtorQ4QeWgLMrd5ZGOjLSLemfa00heasc=",
"owner": "nix-community",
"repo": "nixpkgs.lib",
"rev": "e4822aea2a6d1cdd36653c134cacfd64c97ff4fa",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "nixpkgs.lib",
"type": "github"
}
},
"nixpkgs_2": {
"locked": {
"lastModified": 1745930157,
"narHash": "sha256-y3h3NLnzRSiUkYpnfvnS669zWZLoqqI6NprtLQ+5dck=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "46e634be05ce9dc6d4db8e664515ba10b78151ae",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_3": {
"locked": {
"lastModified": 1743448293,
"narHash": "sha256-bmEPmSjJakAp/JojZRrUvNcDX2R5/nuX6bm+seVaGhs=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "77b584d61ff80b4cef9245829a6f1dfad5afdfa3",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nvf": {
"inputs": {
"flake-parts": "flake-parts",
"flake-utils": "flake-utils",
"mnw": "mnw",
"nil": "nil",
"nixpkgs": [
"nixpkgs"
],
"systems": "systems_3"
},
"locked": {
"lastModified": 1745533630,
"narHash": "sha256-6KSUHpEON1blNkSGsbJQgNpMEE0/UQqNyROaAY9C8yw=",
"owner": "notashelf",
"repo": "nvf",
"rev": "fc6c11631be694d0563464c6086f3b8b5a982e9f",
"type": "github"
},
"original": {
"owner": "notashelf",
"repo": "nvf",
"type": "github"
}
},
"root": {
"inputs": {
"agenix": "agenix",
"home-manager": "home-manager_2",
"mysecrets": "mysecrets",
"nixpkgs": "nixpkgs_2",
"nvf": "nvf",
"zen-browser": "zen-browser"
}
},
"rust-overlay": {
"inputs": {
"nixpkgs": [
"nvf",
"nil",
"nixpkgs"
]
},
"locked": {
"lastModified": 1741055476,
"narHash": "sha256-52vwEV0oS2lCnx3c/alOFGglujZTLmObit7K8VblnS8=",
"owner": "oxalica",
"repo": "rust-overlay",
"rev": "aefb7017d710f150970299685e8d8b549d653649",
"type": "github"
},
"original": {
"owner": "oxalica",
"repo": "rust-overlay",
"type": "github"
}
},
"systems": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"systems_2": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"systems_3": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"zen-browser": {
"inputs": {
"home-manager": "home-manager_3",
"nixpkgs": "nixpkgs_3"
},
"locked": {
"lastModified": 1746033441,
"narHash": "sha256-4kg2Bje8nVgsGRjRzj2AvYnrfJS+PfyCy6NN3yJHWeY=",
"owner": "0xc000022070",
"repo": "zen-browser-flake",
"rev": "149ed0ccfeffcc27c617cc4c3c18536dec0e394f",
"type": "github"
},
"original": {
"owner": "0xc000022070",
"repo": "zen-browser-flake",
"type": "github"
}
}
},
"root": "root",
"version": 7
}
# NixOS Configuration
Desktop and laptop configurations.
## Getting started
1. Setup shell enviroment `nix-shell -p git openssh`.
2. Create ssh key for root. `sudo ssh-keygen -t ed25519 -N '' -f /root/.ssh/id_ed25519 && sudo cat /root/.ssh/id_ed25519.pub`.
3. Add root's key as a deploy key to [My NixOS Secrets](https://gitlab.com/marvinroman/my-nixos-secrets/-/settings/repository#js-deploy-keys-settings).
4. Create system key for host. `sudo ssh-keygen -t ed25519 -N '' -f /etc/ssh/ssh_host_ed25519_key && sudo cat /etc/ssh/ssh_host_ed25519_key.pub`.
5. Add the system's key the systems array in secrets.nix file in [My NixOS Secrets](https://gitlab.com/marvinroman/my-nixos-secrets). Then run `agenix -r` to rekey.
6. Create a user key. `ssh-keygen -t ed25519 -N '' -f ~/.ssh/id_ed25519 && cat ~/.ssh/id_ed25519.pub`.
7. Add the user's key the users array in secrets.nix file in [My NixOS Secrets](https://gitlab.com/marvinroman/my-nixos-secrets). Then run `agenix -r` to rekey.
8. Bring down the repository `git clone git@gitlab.com:marvinroman/nixos-configuration.git myNixOS && cd myNixOS`.
9. Build the system `sudo nixos-rebuild switch --flake ./#[baker|toaster]`.
## Upgrading
### Flake lock file
This is not necessary for regular updates you have to be in repository directory to run.
Update secrets input.
```bash
nix flake update mysecrets
```
Update all flake inputs.
```bash
nix flake update
```
### Upgrade system
This is automatically run every day so it's no necesary to run unless you want to run after updating lock file.
```bash
sudo nixos-rebuild switch --flake ./#[baker|toaster] --upgrade
```
## Setup Yubikey
Need to authorize any keys within the user account to be available for pam by running the following commands.
```bash
nix-shell -p yubico-pam
ykpamcfg -2
```
MIT No Attribution
Copyright 2025 Marvin Roman
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
## [5.26.1](https://gitlab.com/marvinroman/nixos-configuration/compare/v5.26.0...v5.26.1) (2025-05-02)
### Bug Fixes
* missing adding pijul to toaster ([b3d964a](https://gitlab.com/marvinroman/nixos-configuration/commit/b3d964af37c1f6e75f1b27b3e63652fb66d37662))
## [5.26.0](https://gitlab.com/marvinroman/nixos-configuration/compare/v5.25.0...v5.26.0) (2025-05-02)
### Features
* add in pijul version control ([5ec578e](https://gitlab.com/marvinroman/nixos-configuration/commit/5ec578e24f1d218f5a8d12f152359ab220631009))
## [5.25.0](https://gitlab.com/marvinroman/nixos-configuration/compare/v5.24.0...v5.25.0) (2025-05-02)
### Features
* added jujutsu version control ([1bf3979](https://gitlab.com/marvinroman/nixos-configuration/commit/1bf3979d2f9199093cb1b28804fbd20dff9c1566))
## [5.24.0](https://gitlab.com/marvinroman/nixos-configuration/compare/v5.23.0...v5.24.0) (2025-05-02)
### Features
* **yubikey:** :package: add YubiKey-related packages and configuration ([d1cd428](https://gitlab.com/marvinroman/nixos-configuration/commit/d1cd42832a84f8582b624ebee822c2a1f0300241))
## [5.23.0](https://gitlab.com/marvinroman/nixos-configuration/compare/v5.22.1...v5.23.0) (2025-05-02)
### Features
* **yubikey:** :key: add Bolivia YubiKey ID to authorized list ([61ee5aa](https://gitlab.com/marvinroman/nixos-configuration/commit/61ee5aae7e9d8de22e9a019ba2f3c5fbc25fa246))
## [5.22.1](https://gitlab.com/marvinroman/nixos-configuration/compare/v5.22.0...v5.22.1) (2025-05-01)
### ⚠ BREAKING CHANGES
* **config:** Restructured home manager module imports; individual host configurations now reference shared common configuration
### Code Refactoring
* **config:** :package: consolidate home manager modules into common configuration ([0ca8c30](https://gitlab.com/marvinroman/nixos-configuration/commit/0ca8c30d377ac06720e0a53a2412c419d38a2927))
## [5.22.0](https://gitlab.com/marvinroman/nixos-configuration/compare/v5.21.0...v5.22.0) (2025-04-30)
### Features
* **toaster:** :package: enable Docker module ([5a92827](https://gitlab.com/marvinroman/nixos-configuration/commit/5a92827d77dc431dfa458d766d32c2c70ed3519e))
## [5.21.0](https://gitlab.com/marvinroman/nixos-configuration/compare/v5.20.3...v5.21.0) (2025-04-30)
### Features
* **nixos:** :arrow_up: update system auto-upgrade flake source ([3e77776](https://gitlab.com/marvinroman/nixos-configuration/commit/3e777765a374265d40ff137a74f328fe1f8638ab))
## [5.20.3](https://gitlab.com/marvinroman/nixos-configuration/compare/v5.20.2...v5.20.3) (2025-04-30)
### Code Refactoring
* **sddm:** :recycle: conditionally include SDDM-specific packages ([fca1048](https://gitlab.com/marvinroman/nixos-configuration/commit/fca1048d9980097c34b60fd9b94f154cb1aea191))
## [5.20.2](https://gitlab.com/marvinroman/nixos-configuration/compare/v5.20.1...v5.20.2) (2025-04-30)
### Code Refactoring
* **btrfs:** :recycle: enable beesd configuration and comment out unused snapper configs ([3dffb3d](https://gitlab.com/marvinroman/nixos-configuration/commit/3dffb3d11cafbd8cc32052341df518d10b40d228))
## [5.20.1](https://gitlab.com/marvinroman/nixos-configuration/compare/v5.20.0...v5.20.1) (2025-04-30)
### ⚠ BREAKING CHANGES
* **vscode:** Removes legacy pnpm subvolume mount and migrates Node.js configuration to new module structure
### Code Refactoring
* **vscode:** :hammer: restructure VS Code configuration and dependencies ([e7c3c6b](https://gitlab.com/marvinroman/nixos-configuration/commit/e7c3c6b120df53f1292bd84bfe6dd41193b4c951))
## [5.20.0](https://gitlab.com/marvinroman/nixos-configuration/compare/v5.19.0...v5.20.0) (2025-04-30)
### ⚠ BREAKING CHANGES
* **nixos:** Updates flake source path which may require manual migration
* **services/clamav:** Disables ClamAV services by default except for specific host
### Features
* **nixos:** :gear: update auto-upgrade flake and input flags ([290927c](https://gitlab.com/marvinroman/nixos-configuration/commit/290927c3275487e21eb8eccea941c6f0b5186a0f))
* **services/clamav:** :gear: configure ClamAV based on host name ([ac37acc](https://gitlab.com/marvinroman/nixos-configuration/commit/ac37acceca2eb836e34383c0b610961ce26f8c32))
### Bug Fixes
* **nixos:** :bug: correct flake path specification in auto-upgrade config ([d14cbdb](https://gitlab.com/marvinroman/nixos-configuration/commit/d14cbdba66719e7a6168fef448fd5615d392b7d7))
* **nixos:** :wrench: update autoUpgrade flake configuration ([235efbd](https://gitlab.com/marvinroman/nixos-configuration/commit/235efbd8bcc09c234414a33e178a800d774b5420))
### Code Refactoring
* **virtualisation:** :recycle: simplify dockerCompat logic ([2c14a9f](https://gitlab.com/marvinroman/nixos-configuration/commit/2c14a9f32a60ca7d9ff7b937d2ddc14402d8b0e8))
## [5.19.0](https://gitlab.com/marvinroman/nixos-configuration/compare/v5.18.1...v5.19.0) (2025-04-28)
### Features
* **agenix:** :key: add colab-kubectl-config secret management ([29a763f](https://gitlab.com/marvinroman/nixos-configuration/commit/29a763ff21a241d84bf2ffc4ec8c1c2a58e17b44))
## [5.18.1](https://gitlab.com/marvinroman/nixos-configuration/compare/v5.18.0...v5.18.1) (2025-04-28)
### Bug Fixes
* **virtualisation:** :bug: adjust dockerCompat logic for podman ([46a8c70](https://gitlab.com/marvinroman/nixos-configuration/commit/46a8c70029a6f35004369b9b6a2610ff6f607fdc))
## [5.18.0](https://gitlab.com/marvinroman/nixos-configuration/compare/v5.17.0...v5.18.0) (2025-04-26)
### Features
* **development:** :sparkles: add DevPod module integration ([d217284](https://gitlab.com/marvinroman/nixos-configuration/commit/d2172846ab7c79d7b5ad0ee81df516d7d65ae2d1))
* **devpod:** :package: add devpod-desktop to system packages ([03f6d53](https://gitlab.com/marvinroman/nixos-configuration/commit/03f6d53520960e5bb7aed9deb0de6ef1e06bf181))
## [5.17.0](https://gitlab.com/marvinroman/nixos-configuration/compare/v5.16.3...v5.17.0) (2025-04-20)
### Features
* **nixos:** :gear: add trusted users and extra substituters configuration ([ce66b55](https://gitlab.com/marvinroman/nixos-configuration/commit/ce66b55eb4cef6a823f81f54826812248d0df499))
## [5.16.3](https://gitlab.com/marvinroman/nixos-configuration/compare/v5.16.2...v5.16.3) (2025-04-15)
### Code Refactoring
* **nix:** :wrench: adjust package and garbage collection configurations ([236a780](https://gitlab.com/marvinroman/nixos-configuration/commit/236a780d0afce24cba4189b83d8a8f5a33fe40ae))
## [5.16.2](https://gitlab.com/marvinroman/nixos-configuration/compare/v5.16.1...v5.16.2) (2025-04-15)
### ⚠ BREAKING CHANGES
* **nixos:** Removes deprecated module paths and consolidates auto-upgrade logic
### Code Refactoring
* **nixos:** :recycle: restructure module organization and simplify configurations ([4924cc7](https://gitlab.com/marvinroman/nixos-configuration/commit/4924cc7afdd982029f8706b46b002cd5744dbee2))
## [5.16.1](https://gitlab.com/marvinroman/nixos-configuration/compare/v5.16.0...v5.16.1) (2025-04-14)
### Code Refactoring
* **modules:** :package: reorganize development-related modules ([5585f15](https://gitlab.com/marvinroman/nixos-configuration/commit/5585f15fe05798fafaea34d02a2e1389e79588f6))
## [5.16.0](https://gitlab.com/marvinroman/nixos-configuration/compare/v5.15.0...v5.16.0) (2025-04-13)
### Features
* **nixos:** :sparkles: add NixOS module integration ([4b832d1](https://gitlab.com/marvinroman/nixos-configuration/commit/4b832d1887e1a7293ccd653b22eebe1291e49d65))
## [5.15.0](https://gitlab.com/marvinroman/nixos-configuration/compare/v5.14.1...v5.15.0) (2025-04-13)
### Features
* **rdp:** :package: add KRDC client to system packages ([fa1ac48](https://gitlab.com/marvinroman/nixos-configuration/commit/fa1ac48252ba3b1196fafc864fe4d1efcc513df6))
## [5.14.1](https://gitlab.com/marvinroman/nixos-configuration/compare/v5.14.0...v5.14.1) (2025-04-13)
### Code Refactoring
* **nix:** :recycle: streamline Nix configuration and add RDP support ([c3c80dc](https://gitlab.com/marvinroman/nixos-configuration/commit/c3c80dcf365851a7fa6c5f512e96737ad9a1f123))
## [5.14.0](https://gitlab.com/marvinroman/nixos-configuration/compare/v5.13.0...v5.14.0) (2025-04-10)
### Features
* **node:** :package: add pnpm package manager support ([03ec910](https://gitlab.com/marvinroman/nixos-configuration/commit/03ec9106f5c1ab7f5b905542970221672d258346))
## [5.13.0](https://gitlab.com/marvinroman/nixos-configuration/compare/v5.12.1...v5.13.0) (2025-04-10)
### ⚠ BREAKING CHANGES
* **storage:** Disables beesd service and removes related configuration
### Features
* **storage:** :floppy_disk: add Btrfs subvolume for pnpm cache ([63656b2](https://gitlab.com/marvinroman/nixos-configuration/commit/63656b2e8fba7048fcae1acc30a93f5afba78435))
## [5.12.1](https://gitlab.com/marvinroman/nixos-configuration/compare/v5.12.0...v5.12.1) (2025-04-06)
### Code Refactoring
* **boot:** :wrench: centralize kernel package configuration ([f41b745](https://gitlab.com/marvinroman/nixos-configuration/commit/f41b7450f3b35cf0f581610a7c7111195c165fa4))
## [5.12.0](https://gitlab.com/marvinroman/nixos-configuration/compare/v5.11.0...v5.12.0) (2025-04-06)
### Features
* **boot:** :package: update kernel packages to linuxPackages_6_14 ([ccff0c4](https://gitlab.com/marvinroman/nixos-configuration/commit/ccff0c49ef7b04e478e4150f5d33dedbc22f7540))
## [5.11.0](https://gitlab.com/marvinroman/nixos-configuration/compare/v5.10.0...v5.11.0) (2025-04-06)
### Features
* **hardware:** :gear: add timeline limit configurations for backup policies ([c64bf64](https://gitlab.com/marvinroman/nixos-configuration/commit/c64bf648d404806b881e96732a0e072b30bef7c1))
## [5.10.0](https://gitlab.com/marvinroman/nixos-configuration/compare/v5.9.3...v5.10.0) (2025-04-06)
### Features
* **baker:** :wrench: enable and configure Snapper snapshots ([5f2424e](https://gitlab.com/marvinroman/nixos-configuration/commit/5f2424e4d9940154dbe34f6e6057e7b212a0e79b))
## [5.9.3](https://gitlab.com/marvinroman/nixos-configuration/compare/v5.9.2...v5.9.3) (2025-04-05)
### Code Refactoring
* **nixos:** :wrench: remove `nrBuildUsers` configuration ([6367e05](https://gitlab.com/marvinroman/nixos-configuration/commit/6367e05ee6798531318ec3669b33a9513476232b))
## [5.9.2](https://gitlab.com/marvinroman/nixos-configuration/compare/v5.9.1...v5.9.2) (2025-04-05)
### Code Refactoring
* **nixos:** :recycle: reorganize binary-cache-endpoint configuration ([03c8d87](https://gitlab.com/marvinroman/nixos-configuration/commit/03c8d875dd080188837bb10f083b4c78d76805c2))
## [5.9.1](https://gitlab.com/marvinroman/nixos-configuration/compare/v5.9.0...v5.9.1) (2025-04-05)
### Bug Fixes
* **btrfs:** :bug: enable beesd configuration for data filesystem ([e667403](https://gitlab.com/marvinroman/nixos-configuration/commit/e667403905a328340c6e0480bc3aaa57c6af9e9e))
## [5.9.0](https://gitlab.com/marvinroman/nixos-configuration/compare/v5.8.0...v5.9.0) (2025-04-05)
### Features
* **hosts/baker:** :unlock: enable hash table size configuration for beesd filesystem ([ca733bb](https://gitlab.com/marvinroman/nixos-configuration/commit/ca733bb4cd4930e166cba99c0be180ca9a33dc2a))
## [5.8.0](https://gitlab.com/marvinroman/nixos-configuration/compare/v5.7.0...v5.8.0) (2025-04-05)
### Features
* **nixos:** :gear: update binary cache build machine configuration ([7e759ef](https://gitlab.com/marvinroman/nixos-configuration/commit/7e759efa368f3b7da802db551dc74b65ab68105e))
## [5.7.0](https://gitlab.com/marvinroman/nixos-configuration/compare/v5.6.9...v5.7.0) (2025-04-05)
### Features
* **nixos:** :gear: add public host key and SSH options for distributed builds ([9c525b8](https://gitlab.com/marvinroman/nixos-configuration/commit/9c525b8bc7d992a5e0432dc97b891df3ca772886))
## [5.6.9](https://gitlab.com/marvinroman/nixos-configuration/compare/v5.6.8...v5.6.9) (2025-04-05)
### Code Refactoring
* **flake:** :recycle: streamline flake.nix structure and remove unused cursor dependency ([2e24dfc](https://gitlab.com/marvinroman/nixos-configuration/commit/2e24dfcd787b7df248904b42e6671fa5d96f5fdd))
## [5.6.8](https://gitlab.com/marvinroman/nixos-configuration/compare/v5.6.7...v5.6.8) (2025-04-05)
### Code Refactoring
* **users:** :hammer: streamline SSH host configuration logic ([0838cc2](https://gitlab.com/marvinroman/nixos-configuration/commit/0838cc2e23f0a8b94ca079b4fcb20cf7d888856b))
## [5.6.7](https://gitlab.com/marvinroman/nixos-configuration/compare/v5.6.6...v5.6.7) (2025-04-05)
### Bug Fixes
* **baker:** :bug: disable defragment service ([85ba391](https://gitlab.com/marvinroman/nixos-configuration/commit/85ba391c27d8712f570ec977beb497291dd257db))
## [5.6.6](https://gitlab.com/marvinroman/nixos-configuration/compare/v5.6.5...v5.6.6) (2025-04-05)
### Bug Fixes
* **baker:** :wrench: add missing btrfs-progs dependency for defragment service ([94df093](https://gitlab.com/marvinroman/nixos-configuration/commit/94df093b5cdd37d9dab10bd537431ed514aaaf68))
## [5.6.5](https://gitlab.com/marvinroman/nixos-configuration/compare/v5.6.4...v5.6.5) (2025-04-05)
### Bug Fixes
* **baker:** :bug: correct defragment service script path ([c86c748](https://gitlab.com/marvinroman/nixos-configuration/commit/c86c74834907ed0d06c373d87e8098ccef7d2bcd))
## [5.6.4](https://gitlab.com/marvinroman/nixos-configuration/compare/v5.6.3...v5.6.4) (2025-04-05)
### Code Refactoring
* **btrfs:** :recycle: streamline defragmentation service definition ([aefabf0](https://gitlab.com/marvinroman/nixos-configuration/commit/aefabf08973970789dc53768ed503a7359d423a4))
## [5.6.3](https://gitlab.com/marvinroman/nixos-configuration/compare/v5.6.2...v5.6.3) (2025-04-05)
### Code Refactoring
* **btrfs:** :wrench: modularize defragmentation script ([1f256b0](https://gitlab.com/marvinroman/nixos-configuration/commit/1f256b0bdeca9ddf5748678eb6e3a1a5c5e09444))
## [5.6.2](https://gitlab.com/marvinroman/nixos-configuration/compare/v5.6.1...v5.6.2) (2025-04-05)
### Bug Fixes
* **baker:** :wrench: update defragment timer schedule ([18a46cc](https://gitlab.com/marvinroman/nixos-configuration/commit/18a46cc2c64fb4fb866c85818cb177b600279d67))
## [5.6.1](https://gitlab.com/marvinroman/nixos-configuration/compare/v5.6.0...v5.6.1) (2025-04-05)
### Code Refactoring
* **hardware:** :wrench: replace cron jobs with systemd timers for defragmentation ([db4ffcc](https://gitlab.com/marvinroman/nixos-configuration/commit/db4ffcc857a3bfdcb5821937a1d4b782fcfeb9e7))
## [5.6.0](https://gitlab.com/marvinroman/nixos-configuration/compare/v5.5.1...v5.6.0) (2025-04-05)
### Features
* **nixos:** :package: add openssh to system packages ([79e7ccf](https://gitlab.com/marvinroman/nixos-configuration/commit/79e7ccff187fd5a7218fcd120bcbb56677531a08))
### Code Refactoring
* **nixos:** :recycle: reorganize SSH authorized keys configuration ([f2a1fc3](https://gitlab.com/marvinroman/nixos-configuration/commit/f2a1fc3d61ff69400cc63e8a45e165b66a2232af))
## [5.5.1](https://gitlab.com/marvinroman/nixos-configuration/compare/v5.5.0...v5.5.1) (2025-04-05)
### Code Refactoring
* **nixos:** :recycle: streamline SSH key configuration for initrd ([fc524d8](https://gitlab.com/marvinroman/nixos-configuration/commit/fc524d8cb2cfb83cf084f3e14e305c3be49a65bf))
## [5.5.0](https://gitlab.com/marvinroman/nixos-configuration/compare/v5.4.1...v5.5.0) (2025-04-05)
### Features
* **nixos:** :sparkles: add binary cache server and endpoint configuration ([778dd3a](https://gitlab.com/marvinroman/nixos-configuration/commit/778dd3ac6b92c4dfde38334c4db03934a81a2c37))
## [5.4.1](https://gitlab.com/marvinroman/nixos-configuration/compare/v5.4.0...v5.4.1) (2025-04-05)
### Code Refactoring
* **nixos:** :recycle: consolidate SSH and firewall configuration ([905e8d5](https://gitlab.com/marvinroman/nixos-configuration/commit/905e8d511f92c33ec998716ea73e3e438b979415))
## [5.4.0](https://gitlab.com/marvinroman/nixos-configuration/compare/v5.3.0...v5.4.0) (2025-04-04)
### ⚠ BREAKING CHANGES
* **nixos:** Removes `baker.local` substituter and hostname mapping
* **nixos:** Removes `nix-serve` service and nginx proxy setup
### Features
* **nixos:** :gear: configure distributed builds and update binary cache settings ([1627efc](https://gitlab.com/marvinroman/nixos-configuration/commit/1627efc76446b1f2ce362a028fa2a82c5de43129))
* **ssh:** :sparkles: enhance SSH configuration with additional host support ([3e1f659](https://gitlab.com/marvinroman/nixos-configuration/commit/3e1f65905daeb591e814cb53f29e8d6fe4130643))
### Code Refactoring
* **nixos:** :recycle: restructure binary cache server configuration ([5d2b745](https://gitlab.com/marvinroman/nixos-configuration/commit/5d2b74507614dcad08f60843c9421851421e6422))
## [5.3.0](https://gitlab.com/marvinroman/nixos-configuration/compare/v5.2.0...v5.3.0) (2025-04-04)
### Features
* **btrfs:** :recycle: enable snapper cleanup and snapshot scheduling ([b1d3205](https://gitlab.com/marvinroman/nixos-configuration/commit/b1d3205ee92a561b700515f3b8f838997b1d94f0))
* **common:** :package: add usbutils to core packages ([dd70a18](https://gitlab.com/marvinroman/nixos-configuration/commit/dd70a18ea4073f46e74ac733ece9a7870cb9aec4))
## [5.2.0](https://gitlab.com/marvinroman/nixos-configuration/compare/v5.1.0...v5.2.0) (2025-04-03)
### Features
* **btrfs:** :wrench: configure automated defragmentation and scrubbing ([8c03f8e](https://gitlab.com/marvinroman/nixos-configuration/commit/8c03f8e38e56bfa70b415d8e0e6dcb163daac9fa))
## [5.1.0](https://gitlab.com/marvinroman/nixos-configuration/compare/v5.0.0...v5.1.0) (2025-04-03)
### Features
* **config:** :package: add nixfmt-rfc-style to dependencies ([7be3d80](https://gitlab.com/marvinroman/nixos-configuration/commit/7be3d807f5e962fe1f736c23d6388be9db974026))
## [5.0.0](https://gitlab.com/marvinroman/nixos-configuration/compare/v4.2.0...v5.0.0) (2025-04-02)
### ⚠ BREAKING CHANGES
* **deps:** Removes `nmd` dependency from the flake configuration
* **deps:** :arrow_up: update flake dependencies ([9bba0a9](https://gitlab.com/marvinroman/nixos-configuration/commit/9bba0a99079a0303a78d29c1865a4a2f5918020e))
## [4.2.0](https://gitlab.com/marvinroman/nixos-configuration/compare/v4.1.0...v4.2.0) (2025-04-02)
### ⚠ BREAKING CHANGES
* **vscode:** Removes hardcoded API key in favor of environment variable
### Features
* **agenix:** :key: add Alibaba API key secret configuration ([2d62d15](https://gitlab.com/marvinroman/nixos-configuration/commit/2d62d15e3a32c61e050431d6075bba076e9492ab))
* **vscode:** :sparkles: enhance configuration and integrate Alibaba API key support ([5ff5868](https://gitlab.com/marvinroman/nixos-configuration/commit/5ff5868216cc43935c8bbc9b4fd4f87e5e765925))
### Bug Fixes
* **llm:** :bug: correct secret reference syntax in nginx-proxies ([ae5b1cc](https://gitlab.com/marvinroman/nixos-configuration/commit/ae5b1ccc3d258a6e3e7b266ab6b3e09ac9f3be37))
## [4.1.0](https://gitlab.com/marvinroman/nixos-configuration/compare/v4.0.0...v4.1.0) (2025-04-01)
### ⚠ BREAKING CHANGES
* **home-manager:** Introduces new home manager configuration structure
* **hardware:** Replaces `btrfs.autoScrub` with Snapper-based management for Btrfs subvolumes
* **nixos:** Replaces `inputs.home-manager.nixosModules.default` with `home-manager.nixosModules.default`
### Features
* **btrfs:** :sparkles: add auto-scrub configuration for Btrfs filesystems ([2e774fe](https://gitlab.com/marvinroman/nixos-configuration/commit/2e774feb93757b68869c8859ae2b97fd1b15d0fa))
* **git-config:** :new: enable Git LFS support ([122a25d](https://gitlab.com/marvinroman/nixos-configuration/commit/122a25da6d4cc59cd95d09550514f638c011f1bf))
* **hardware:** :floppy_disk: add Btrfs subvolume configuration and Snapper support ([0716621](https://gitlab.com/marvinroman/nixos-configuration/commit/0716621e52906b86df78af34f4327b6c0db3d76f))
* **home-manager:** :sparkles: add initial home configuration for toaster host ([ea865ce](https://gitlab.com/marvinroman/nixos-configuration/commit/ea865ced3e55b61ff23b5033e7ed6128839200d0))
* **home-manager:** :sparkles: add initial home.nix configuration for baker host ([7daad8e](https://gitlab.com/marvinroman/nixos-configuration/commit/7daad8e65f5e536b38dadae45de3085e0186ad04))
* **hosts:** :sparkles: add user-specific configuration for baker ([1eeeb97](https://gitlab.com/marvinroman/nixos-configuration/commit/1eeeb970252efd01917ea2a8bf116d6049ca62f2))
* **nixos:** :wrench: integrate Home Manager for user configurations ([c1a9e07](https://gitlab.com/marvinroman/nixos-configuration/commit/c1a9e07fdbabe0e0bd5406b385aea14c5f87922f))
* **users:** :sparkles: add initial package configuration for user marvin ([b363f61](https://gitlab.com/marvinroman/nixos-configuration/commit/b363f6132f2048aac25c69a4720b6f2d2c6e4c38))
* **users:** :sparkles: add OBS Studio module configuration ([37404e9](https://gitlab.com/marvinroman/nixos-configuration/commit/37404e9f4abafe1f8e00d7ff71cb5552ff61404e))
### Bug Fixes
* **config:** :wrench: correct user module path inclusion ([bfcabbd](https://gitlab.com/marvinroman/nixos-configuration/commit/bfcabbdc85fb1eb7f16b9521c9646f7f7adf8dad))
* **toaster:** :bug: correct filesystem configuration for snapper ([ba95174](https://gitlab.com/marvinroman/nixos-configuration/commit/ba951743fa98f35c1aa1dd0ee6f21ba18fcc904c))
## [4.0.0](https://gitlab.com/marvinroman/nixos-configuration/compare/v3.20.0...v4.0.0) (2025-04-01)
### ⚠ BREAKING CHANGES
* Discontinues AI-powered commit message generation utility
* :fire: remove shell.nix script for AI git commit helper ([2268156](https://gitlab.com/marvinroman/nixos-configuration/commit/226815672ebbebbb4f3314aadf923e23a48d071e))
### Code Refactoring
* **auto-upgrade:** :recycle: consolidate flake.lock output configuration ([9b46360](https://gitlab.com/marvinroman/nixos-configuration/commit/9b4636059984ea97826e2bfe69d02333957bc00d))
* **toaster:** :recycle: replace encrypted swap with swapfile ([13acbf5](https://gitlab.com/marvinroman/nixos-configuration/commit/13acbf5d947b8e0ebcd2bb2f6cf3288849fd1196))
## [3.20.0](https://gitlab.com/marvinroman/nixos-configuration/compare/v3.19.0...v3.20.0) (2025-03-31)
### Features
* **direnv:** :sparkles: add direnv module integration ([513016b](https://gitlab.com/marvinroman/nixos-configuration/commit/513016b3fedeb1d695b6acc086c082cca9c36d17))
* **vscode:** :sparkles: update and streamline VS Code extensions configuration ([bddaf8b](https://gitlab.com/marvinroman/nixos-configuration/commit/bddaf8bf88b63edce8ed135665f5f2e4e6e27c07))
## [3.19.0](https://gitlab.com/marvinroman/nixos-configuration/compare/v3.18.8...v3.19.0) (2025-03-31)
### ⚠ BREAKING CHANGES
* **btrfs:** Introduces new dependencies and configuration for Btrfs modules
* **vscode:** Introduces new dependencies on AI commit and Roo-Cline extensions
* **hardware:** Replaces previous unencrypted root filesystem setup with LUKS encryption
* **storage:** Existing mounts without `compress=zstd` will need remounting or reboot
### Features
* **btrfs:** :sparkles: add Btrfs module configuration ([6db22fd](https://gitlab.com/marvinroman/nixos-configuration/commit/6db22fdb664c86fd276a5e63cf4caf21f3b2f171))
* **btrfs:** :sparkles: add Snapper integration for automated snapshots ([9f30a8c](https://gitlab.com/marvinroman/nixos-configuration/commit/9f30a8cb301aa5063e1ca31f24600036e0d9750c))
* **common:** :sparkles: add btrfs module and enable partition manager ([a208fed](https://gitlab.com/marvinroman/nixos-configuration/commit/a208feddf8e6d3a367ba91d5bcfed40417dc2aca))
* **hardware:** :key: add LUKS encryption and Btrfs subvolumes ([e8a17da](https://gitlab.com/marvinroman/nixos-configuration/commit/e8a17da900baad99e6066b63fa9e655fea6d7adb))
* **networking:** :globe_with_meridians: add lmstudio hostname mapping ([070b281](https://gitlab.com/marvinroman/nixos-configuration/commit/070b28139cd9677d4f7486e5e81c2c21d0c67451))
* **storage:** :compression: enable zstd compression for btrfs subvolumes ([480a737](https://gitlab.com/marvinroman/nixos-configuration/commit/480a7376498ddbea79ced2fd6d56630873557815))
* **toaster:** :sparkles: add snapper configurations for home and repos ([ce9b02c](https://gitlab.com/marvinroman/nixos-configuration/commit/ce9b02c7ad8edf8d93c45009cc77f502665a2a8e))
* **vscode:** :sparkles: add AI commit and Roo-Cline configurations ([5e81f21](https://gitlab.com/marvinroman/nixos-configuration/commit/5e81f218f3a4c4b7cf604e09d54a2dd8145d628b))
## [3.18.8](https://gitlab.com/marvinroman/nixos-configuration/compare/v3.18.7...v3.18.8) (2025-03-25)
### Configuration Updates
* **llm:** allow TCP traffic on port 8080 for open-webui ([bcf1ccb](https://gitlab.com/marvinroman/nixos-configuration/commit/bcf1ccb0b9400db4b7dce6785baa6a5a341e0b80))
## [3.18.7](https://gitlab.com/marvinroman/nixos-configuration/compare/v3.18.6...v3.18.7) (2025-03-25)
### Configuration Updates
* **llm:** update open-webui to bind to all interfaces ([cff68e1](https://gitlab.com/marvinroman/nixos-configuration/commit/cff68e140b202874f25b2b1a32fd8dbbe8031b69))
## [3.18.6](https://gitlab.com/marvinroman/nixos-configuration/compare/v3.18.5...v3.18.6) (2025-03-25)
### Configuration Updates
* **core:** add gaming module to core imports ([e76c01a](https://gitlab.com/marvinroman/nixos-configuration/commit/e76c01ad7bbca89cb38d8c742591f644c1bca5e0))
## [3.18.5](https://gitlab.com/marvinroman/nixos-configuration/compare/v3.18.4...v3.18.5) (2025-03-25)
### Configuration Updates
* **users:** remove obsidian-nvim from flake.lock ([6531ec4](https://gitlab.com/marvinroman/nixos-configuration/commit/6531ec4e291eb365f6801dc9c42a1bcc8ed458d1))
## [3.18.4](https://gitlab.com/marvinroman/nixos-configuration/compare/v3.18.3...v3.18.4) (2025-03-23)
### Configuration Updates
* add commitlint configuration for standardized commit messages ([1a4d829](https://gitlab.com/marvinroman/nixos-configuration/commit/1a4d8299e819b9704ae9fe202eb79cae91465fb7))
* **applications:** remove neovim configuration file ([0e01b4d](https://gitlab.com/marvinroman/nixos-configuration/commit/0e01b4d128316487b2258e04f935628b35addefa))
* **flake:** added nvf for neovim configuration ([860dd99](https://gitlab.com/marvinroman/nixos-configuration/commit/860dd99bb78dd7c5d1b1190b8dd515054808d75a))
* **users:** add neovim configuration module with extensive settings ([eeae37a](https://gitlab.com/marvinroman/nixos-configuration/commit/eeae37a6d29156def60e581d33512db19b4761a3))
* **users:** add neovim module to home configuration ([5f3a846](https://gitlab.com/marvinroman/nixos-configuration/commit/5f3a846d97095380d09b9d4b9f8c5340bcd8a3fc))
* **users:** remove lunarvim and add eslint_d to Marvin's package list ([e639932](https://gitlab.com/marvinroman/nixos-configuration/commit/e63993232d908327ac7920fecbac5334dc3123d8))
## [3.18.3](https://gitlab.com/marvinroman/nixos-configuration/compare/v3.18.2...v3.18.3) (2025-03-23)
### Bug Fixes
* **lmstudio:** update version to 0.3.14 and sha for package integrity ([e316c35](https://gitlab.com/marvinroman/nixos-configuration/commit/e316c3521a01d4a69c4fc2bea95b30daac0dff67))
## [3.18.2](https://gitlab.com/marvinroman/nixos-configuration/compare/v3.18.1...v3.18.2) (2025-03-23)
### Configuration Updates
* **services:** :wrench: adjust ClamAV scanner scheduling ([d2167bf](https://gitlab.com/marvinroman/nixos-configuration/commit/d2167bf05f0bd57b9efe22c3129411439bece8c0))
## [3.18.1](https://gitlab.com/marvinroman/nixos-configuration/compare/v3.18.0...v3.18.1) (2025-03-16)
### Configuration Updates
* **baker:** configure ClamAV scanner interval to run every Monday at 15:00 ([b16ded7](https://gitlab.com/marvinroman/nixos-configuration/commit/b16ded7e62256939ebf07c2a4c9ffd0451f426f2))
## [3.18.0](https://gitlab.com/marvinroman/nixos-configuration/compare/v3.17.0...v3.18.0) (2025-03-16)
### Features
* **hardware:** add lmstudio models filesystem to btrfs configuration ([5a5c430](https://gitlab.com/marvinroman/nixos-configuration/commit/5a5c430a998c0fc3f1c76e4ccec4fa89ec5c008f))
### Bug Fixes
* **dependencies:** revert from twilight to beta ([35b8280](https://gitlab.com/marvinroman/nixos-configuration/commit/35b828075df1ee530d47c71f9a88e414676c167c))
## [3.17.0](https://gitlab.com/marvinroman/nixos-configuration/compare/v3.16.2...v3.17.0) (2025-03-15)
### Features
* **openmanus:** add OpenManus package and integrate into baker configuration ([aecb5a6](https://gitlab.com/marvinroman/nixos-configuration/commit/aecb5a663003e89cc62b8d85633a94e994ef3a69))
## [3.16.2](https://gitlab.com/marvinroman/nixos-configuration/compare/v3.16.1...v3.16.2) (2025-03-15)
### Code Refactoring
* **auto-upgrade:** :wrench: update auto-upgrade configuration ([5e9df8a](https://gitlab.com/marvinroman/nixos-configuration/commit/5e9df8a601e91650951cd86f979c806ad5bfd93a))
* **secrets:** :recycle: reorganize secret definitions for modularity ([9864026](https://gitlab.com/marvinroman/nixos-configuration/commit/986402695114e99c827a3279bc3eeff4ed91af24))
## [3.16.1](https://gitlab.com/marvinroman/nixos-configuration/compare/v3.16.0...v3.16.1) (2025-03-14)
### Bug Fixes
* **nix:** correct syntax in default.nix and core.nix configuration files ([1ede837](https://gitlab.com/marvinroman/nixos-configuration/commit/1ede837530d13c42f94560d9776c39f80ffc0d2b))
## [3.16.0](https://gitlab.com/marvinroman/nixos-configuration/compare/v3.15.0...v3.16.0) (2025-03-14)
### Features
* **release.config:** add parser options for identifying breaking changes in release notes ([5e16b66](https://gitlab.com/marvinroman/nixos-configuration/commit/5e16b6678363193a3efe8ee4aa2a62d137f61abe))
## [3.15.0](https://gitlab.com/marvinroman/nixos-configuration/compare/v3.14.2...v3.15.0) (2025-03-14)
### Features
* **release.config:** add parser options for breaking change keywords ([6d3b748](https://gitlab.com/marvinroman/nixos-configuration/commit/6d3b748f02f2837dca394aa7bbb7feb1cae179df))
## [3.14.2](https://gitlab.com/marvinroman/nixos-configuration/compare/v3.14.1...v3.14.2) (2025-03-14)
### ⚠ BREAKING CHANGES
* **auto-upgrade:** Removes explicit enable flag from individual host configs
### Bug Fixes
* **flake.lock:** :wrench: update nixpkgs and zen-browser-flake revisions and hashes ([0d351ab](https://gitlab.com/marvinroman/nixos-configuration/commit/0d351abfb0ebe17bd40b4a7b8cc061e489c5df8b))
### Code Refactoring
* **auto-upgrade:** :wrench: streamline auto-upgrade configuration ([07ee8e0](https://gitlab.com/marvinroman/nixos-configuration/commit/07ee8e08ca7d0aee90a24decc73123a1998094f3))
* **auto-upgrade:** :wrench: update flake source paths for baker and toaster ([d350430](https://gitlab.com/marvinroman/nixos-configuration/commit/d350430a8777378610bde3958815af2c1d7a324b))
## [3.14.1](https://gitlab.com/marvinroman/nixos-configuration/compare/v3.14.0...v3.14.1) (2025-03-14)
### Bug Fixes
* **btrfs:** :wrench: fix syntax for auto-scrub configuration in hardware.nix ([8f03e1c](https://gitlab.com/marvinroman/nixos-configuration/commit/8f03e1c6b8a24be92b55021437e54c9b196bcdcf))
### Code Refactoring
* **auto-upgrade:** :wrench: refine auto-upgrade configurations ([dc184b1](https://gitlab.com/marvinroman/nixos-configuration/commit/dc184b11a38f2e25e7971942eb4586dc186611b5))
## [3.14.0](https://gitlab.com/marvinroman/nixos-configuration/compare/v3.13.5...v3.14.0) (2025-03-14)
### Features
* **btrfs:** :wrench: enable auto-scrub for Btrfs file systems ([24af9bb](https://gitlab.com/marvinroman/nixos-configuration/commit/24af9bbd58b10156983d4527851005541a418eca))
* **clamav:** add '/mnt' to the list of directories for scanning ([6c18b9f](https://gitlab.com/marvinroman/nixos-configuration/commit/6c18b9f744e977c1a9c3333ec1dfb34bf89bbbca))
### Code Refactoring
* **clamav:** :wrench: restructure configuration for daemon, scanner, and updater ([b779a77](https://gitlab.com/marvinroman/nixos-configuration/commit/b779a77a80240c9b99ed9983da5a2eea85da994b))
## [3.13.5](https://gitlab.com/marvinroman/nixos-configuration/compare/v3.13.4...v3.13.5) (2025-03-14)
### Bug Fixes
* **clamav:** update scan interval to run only on Mondays at 15:00 ([8bad349](https://gitlab.com/marvinroman/nixos-configuration/commit/8bad3492f73ffdecd9a5dd88b6cf5e22bdbca60f))
## [3.13.4](https://gitlab.com/marvinroman/nixos-configuration/compare/v3.13.3...v3.13.4) (2025-03-13)
### Code Refactoring
* **nginx-proxies:** :recycle: remove unused commonProxyHeaders configuration ([237013c](https://gitlab.com/marvinroman/nixos-configuration/commit/237013c9f205157cc70a559348f2080eb3b2b04c))
## [3.13.3](https://gitlab.com/marvinroman/nixos-configuration/compare/v3.13.2...v3.13.3) (2025-03-13)
### ⚠ BREAKING CHANGES
* **virtualisation:** Removes rootless Docker support and modifies network interface trust [0]
### Code Refactoring
* **virtualisation:** :wrench: update Docker and Podman configurations ([1ded405](https://gitlab.com/marvinroman/nixos-configuration/commit/1ded405e5db2f8204b454f02684a89625f1c8332))
## [3.13.2](https://gitlab.com/marvinroman/nixos-configuration/compare/v3.13.1...v3.13.2) (2025-03-12)
### Bug Fixes
* **open-webui:** :bug: correct network configuration and add trusted interfaces ([2ac784d](https://gitlab.com/marvinroman/nixos-configuration/commit/2ac784dbdde1c268ac01b62b6bebdb170bebe028))
## [3.13.1](https://gitlab.com/marvinroman/nixos-configuration/compare/v3.13.0...v3.13.1) (2025-03-11)
### Bug Fixes
* **flake:** update mysecrets lock with new lastModified and narHash ([7e985ea](https://gitlab.com/marvinroman/nixos-configuration/commit/7e985ea27929fd0f3f8de28ab2d62805c13930b6))
* **llm:** update Chroma HTTP host and adjust network options ([0648093](https://gitlab.com/marvinroman/nixos-configuration/commit/064809302e8b5603ad6cf66d8a845533f6036923))
## [3.13.0](https://gitlab.com/marvinroman/nixos-configuration/compare/v3.12.0...v3.13.0) (2025-03-11)
### Features
* **lmstudio:** update version to 0.3.12 and adjust SHA for package integrity ([173e926](https://gitlab.com/marvinroman/nixos-configuration/commit/173e926a0a3acb74847949106f285f30dcc63a08))
## [3.12.0](https://gitlab.com/marvinroman/nixos-configuration/compare/v3.11.0...v3.12.0) (2025-03-10)
### Features
* **open-webui:** add host mapping to extra options for improved connectivity ([fb32b8a](https://gitlab.com/marvinroman/nixos-configuration/commit/fb32b8a2e3a7f98f799982d9c81ba2322906c7f6))
## [3.11.0](https://gitlab.com/marvinroman/nixos-configuration/compare/v3.10.1...v3.11.0) (2025-03-10)
### Features
* **open-webui:** enhance Open Web UI configuration and integrate ChromaDB ([f35d245](https://gitlab.com/marvinroman/nixos-configuration/commit/f35d2459e5c3ddea9ec7f183d0f2237214b7095d))
### Code Refactoring
* :truck: swapped directories for vectorestores ([ee20b10](https://gitlab.com/marvinroman/nixos-configuration/commit/ee20b10e37be615c8a684c637c807e38a91e9297))
## [3.10.1](https://gitlab.com/marvinroman/nixos-configuration/compare/v3.10.0...v3.10.1) (2025-03-08)
### Code Refactoring
* **secrets:** centralize agenix secret management ([afb820d](https://gitlab.com/marvinroman/nixos-configuration/commit/afb820d63c00aa7b772bf87cb8c2e8e39ed4f560))
## [3.10.0](https://gitlab.com/marvinroman/nixos-configuration/compare/v3.9.1...v3.10.0) (2025-03-08)
### Features
* **nixos:** refactor nginx proxy configuration for multiple domains ([c095923](https://gitlab.com/marvinroman/nixos-configuration/commit/c0959238fcce932dbe7d9307c8b35d03b5a3b1e7))
## [3.9.1](https://gitlab.com/marvinroman/nixos-configuration/compare/v3.9.0...v3.9.1) (2025-03-08)
### Code Refactoring
* reorganize networking configuration in default.nix ([bbc4d4e](https://gitlab.com/marvinroman/nixos-configuration/commit/bbc4d4e7168264d3ebf5d0de8c372fb89b02c92b))
## [3.9.0](https://gitlab.com/marvinroman/nixos-configuration/compare/v3.8.3...v3.9.0) (2025-03-08)
### Features
* **nixos:** add nginx proxy configurations and update module imports ([9fd4456](https://gitlab.com/marvinroman/nixos-configuration/commit/9fd4456974015634bd7b217bcf7f3493eede66d8))
## [3.8.3](https://gitlab.com/marvinroman/nixos-configuration/compare/v3.8.2...v3.8.3) (2025-03-05)
### Code Refactoring
* :recycle: update podman configuration and improve open-webui setup ([4aa450f](https://gitlab.com/marvinroman/nixos-configuration/commit/4aa450f951747c64e04223d9fbb04f61dc2b66d4))
## [3.8.2](https://gitlab.com/marvinroman/nixos-configuration/compare/v3.8.1...v3.8.2) (2025-03-05)
### Code Refactoring
* :recycle: moved open webui to being a pod ([8794ba1](https://gitlab.com/marvinroman/nixos-configuration/commit/8794ba15d041ed482306562296041e592eb0a851))
## [3.8.1](https://gitlab.com/marvinroman/nixos-configuration/compare/v3.8.0...v3.8.1) (2025-03-05)
### Bug Fixes
* set OCI containers backend to podman in chromadb configuration ([1bb8328](https://gitlab.com/marvinroman/nixos-configuration/commit/1bb83283341febd8f2483d497ee88f97bbab1f71))
* update mysecrets lock file with new lastModified and narHash values ([d54526b](https://gitlab.com/marvinroman/nixos-configuration/commit/d54526b1e2d5c2523eb4cf30ce8898ce81138968))
## [3.8.0](https://gitlab.com/marvinroman/nixos-configuration/compare/v3.7.1...v3.8.0) (2025-03-05)
### Features
* added cursoer ide ([e46f28f](https://gitlab.com/marvinroman/nixos-configuration/commit/e46f28f8d00805ac0270a17e8d2f76ec862a5150))
## [3.7.1](https://gitlab.com/marvinroman/nixos-configuration/compare/v3.7.0...v3.7.1) (2025-03-02)
### Bug Fixes
* changed chromadb to pod ([494f661](https://gitlab.com/marvinroman/nixos-configuration/commit/494f6612fa7643d98915c11ce111af8662a23c97))
## [3.7.0](https://gitlab.com/marvinroman/nixos-configuration/compare/v3.6.0...v3.7.0) (2025-03-02)
### Features
* :sparkles: added chromadb service ([263f9bd](https://gitlab.com/marvinroman/nixos-configuration/commit/263f9bde6fc0d2f8e4c5a5e4b60046465afc0fd4))
* updated packages ([0b0617c](https://gitlab.com/marvinroman/nixos-configuration/commit/0b0617cb2287efd7ca33202954bb005002aa3b06))
### Bug Fixes
* :fire: removed openwebui package since it will be added by service ([d74e255](https://gitlab.com/marvinroman/nixos-configuration/commit/d74e255419d9cc2a71541aaa5dc3b32f6e7521b8))
* bind nix-server to loopback ([19f0719](https://gitlab.com/marvinroman/nixos-configuration/commit/19f07193c81ca8ddab442f48e1412022240ce010))
* moved webui lm studio internal to call back to loopback ([87ed193](https://gitlab.com/marvinroman/nixos-configuration/commit/87ed19381b791b9f4ccdea741109b0736ed4a038))
## [3.6.0](https://gitlab.com/marvinroman/nixos-configuration/compare/v3.5.0...v3.6.0) (2025-03-02)
### Features
* :sparkles: added binary caching ([4621a50](https://gitlab.com/marvinroman/nixos-configuration/commit/4621a501993a507823b7af22b55bb0357b96593d))
* **virtualisation:** add podman to system packages ([70f3855](https://gitlab.com/marvinroman/nixos-configuration/commit/70f385500fd10a591dda7e2ffbdbc1e3d867a20e))
### Bug Fixes
* :fire: remove docker service ([3ed06af](https://gitlab.com/marvinroman/nixos-configuration/commit/3ed06af31369a74f8998b4c1f30eaf899e4e909a))
* :wrench: vscode configuration updates ([4c6deac](https://gitlab.com/marvinroman/nixos-configuration/commit/4c6deaca8f92843d56f595526b5068d785d84f9c))
## [3.5.0](https://gitlab.com/marvinroman/nixos-configuration/compare/v3.4.2...v3.5.0) (2025-03-01)
### Features
* **config:** add vectorstore and virtualization modules ([624e793](https://gitlab.com/marvinroman/nixos-configuration/commit/624e793167dcf59c5eafe62478ce368590528155))
* **virtualisation:** add Docker module with auto-prune and rootless support ([f502818](https://gitlab.com/marvinroman/nixos-configuration/commit/f5028183bdba26f3fc56aebedd5f9d92592e3f97))
* **virtualisation:** add podman module with podman-compose package ([fa37228](https://gitlab.com/marvinroman/nixos-configuration/commit/fa3722876d6bffd030bdd79a2917a195fa0fba77))
## [3.4.2](https://gitlab.com/marvinroman/nixos-configuration/compare/v3.4.1...v3.4.2) (2025-02-26)
### Bug Fixes
* **flake:** added agenix to toaster ([cc086a0](https://gitlab.com/marvinroman/nixos-configuration/commit/cc086a0cd1545688763378afc84dd40078819296))
## [3.4.1](https://gitlab.com/marvinroman/nixos-configuration/compare/v3.4.0...v3.4.1) (2025-02-26)
### Code Refactoring
* :truck: moved user modules up a directory so they can be shared ([a7cc182](https://gitlab.com/marvinroman/nixos-configuration/commit/a7cc182f8065c0f58f8f8db97f17bb3cc1b68557))
## [3.4.0](https://gitlab.com/marvinroman/nixos-configuration/compare/v3.3.0...v3.4.0) (2025-02-25)
### Features
* **agenix:** add default.nix for age configuration and system packages ([2b7437d](https://gitlab.com/marvinroman/nixos-configuration/commit/2b7437d86fbb5c74f587e9263d5f555ed524b61f))
* **core:** update core.nix to include suitecloud-sdk and improve system compatibility ([725b91e](https://gitlab.com/marvinroman/nixos-configuration/commit/725b91e259f0ed36218b0055dec4264fe0cd4b3b))
* **flake:** add mysecrets and sops-nix inputs for enhanced configuration ([fca68ab](https://gitlab.com/marvinroman/nixos-configuration/commit/fca68abe72a009798399b0b658e2ab4544ef8634))
* **modules:** configure KDE Wallet and tools for secret management ([c2fdc8f](https://gitlab.com/marvinroman/nixos-configuration/commit/c2fdc8f20736e6d5e5760030e63002abd391c5a8))
## [3.3.0](https://gitlab.com/marvinroman/nixos-configuration/compare/v3.2.0...v3.3.0) (2025-02-24)
### Features
* **core:** add twilight package from zen-browser inputs for reproducibility ([fdeeac3](https://gitlab.com/marvinroman/nixos-configuration/commit/fdeeac3382b00bc3957a87df6d55e9750a8b6d5c))
* **flake:** add zen-browser input and update nixpkgs reference ([2edc900](https://gitlab.com/marvinroman/nixos-configuration/commit/2edc900ab118e258cd3c7da57c1aaf3f66c6af0a))
## [3.2.0](https://gitlab.com/marvinroman/nixos-configuration/compare/v3.1.1...v3.2.0) (2025-02-20)
### Features
* **lmstudio:** update version to 0.3.10 and add SHA for AppImage hash ([c3a8c94](https://gitlab.com/marvinroman/nixos-configuration/commit/c3a8c941bd9f1de22a4f5da41fc4440ab31ce3e7))
* **vscode:** add GitHub Copilot chat locale override and enable test generation ([e9bf5ca](https://gitlab.com/marvinroman/nixos-configuration/commit/e9bf5ca5fa0ef635a9d44b89fe8055b3ae89d9db))
* **vscode:** disable extension recommendations and update shell paths ([84a4644](https://gitlab.com/marvinroman/nixos-configuration/commit/84a4644c8609c07fe74145f43ca8ba4c8fef4f5a))
### Bug Fixes
* **zsh:** update history strategy and enable duplicate expiration settings ([ca1f06c](https://gitlab.com/marvinroman/nixos-configuration/commit/ca1f06c1b61a826522868efc0fcdaf7c91c24bba))
## [3.1.1](https://gitlab.com/marvinroman/nixos-configuration/compare/v3.1.0...v3.1.1) (2025-02-18)
### Code Refactoring
* **vscode:** add GitHub Copilot chat settings for locale and test generation ([75e881a](https://gitlab.com/marvinroman/nixos-configuration/commit/75e881a7dbefd605fb1bd4e14c61981af97458d2))
## [3.1.0](https://gitlab.com/marvinroman/nixos-configuration/compare/v3.0.0...v3.1.0) (2025-02-17)
### Features
* **ci:** add conventional-changelog-conventionalcommits to CI script for enhanced changelog generation ([7f24b0c](https://gitlab.com/marvinroman/nixos-configuration/commit/7f24b0cb21c293d5c17fff99b7a4534fa27ce195))
### Bug Fixes
* **ci:** update conventional-changelog-conventionalcommits to version 7.0.2 in CI script ([6ad1596](https://gitlab.com/marvinroman/nixos-configuration/commit/6ad159649638326fa6a5f9e9bb96c4f6bf121d2e))
* **release.config:** correct typo in module.exports for proper functionality ([3f76b55](https://gitlab.com/marvinroman/nixos-configuration/commit/3f76b55306fa9c8e0ef4944fc37dcda0688cde91))
* **release.config:** update @semantic-release/git configuration to include changelog as an asset ([e5f0808](https://gitlab.com/marvinroman/nixos-configuration/commit/e5f0808503b1a9e61e26346be802f2f18550308d))
### Code Refactoring
* **home.nix:** reorganize module imports for clarity and consistency ([2440e02](https://gitlab.com/marvinroman/nixos-configuration/commit/2440e02f5c96af296e4af45601837330b0c12e2d))
* **release:** replace .releaserc.json with release.config.cjs for improved configuration management ([f7e151f](https://gitlab.com/marvinroman/nixos-configuration/commit/f7e151f9f4281f653ba5b08ea38817bf93ce57ba))
* **vscode:** update to version 1.97.2 and enhance user settings ([8a2079b](https://gitlab.com/marvinroman/nixos-configuration/commit/8a2079b08211ac361a36b3bbf7ac850e9be05314))
# [3.0.0](https://gitlab.com/marvinroman/nixos-configuration/compare/v2.0.0...v3.0.0) (2025-02-17)
### Code Refactoring
* **user-shell:** modularize shell tools and improve configurations ([7d638c9](https://gitlab.com/marvinroman/nixos-configuration/commit/7d638c95ed08630ea922b8e569d37b791562abc7))
### BREAKING CHANGES
* **user-shell:** Eza aliases now require importing `eza.nix` module in home configurations
# [2.0.0](https://gitlab.com/marvinroman/nixos-configuration/compare/v1.10.1...v2.0.0) (2025-02-17)
### Code Refactoring
* **nixos:** modularize configuration and organize services ([632fe1d](https://gitlab.com/marvinroman/nixos-configuration/commit/632fe1d04ac8684831f18e8c75d86027209a2947))
### BREAKING CHANGES
* **nixos:** RClone Google Drive mount service now requires explicit import via `services/gdrive.nix` module
## [1.10.1](https://gitlab.com/marvinroman/nixos-configuration/compare/v1.10.0...v1.10.1) (2025-02-12)
### Bug Fixes
* **etc/nixos/llm/open-webui.nix:** update API URL and environment variable ([32fa8f7](https://gitlab.com/marvinroman/nixos-configuration/commit/32fa8f745121120d05e3a0242bb5527d5cf09899))
# [1.10.0](https://gitlab.com/marvinroman/nixos-configuration/compare/v1.9.0...v1.10.0) (2025-02-11)
### Features
* **nixos:** add configuration for ollama and open-webui services ([dec79e1](https://gitlab.com/marvinroman/nixos-configuration/commit/dec79e1837122d6b52d4d850572fa5aa4aeb3921))
# [1.9.0](https://gitlab.com/marvinroman/nixos-configuration/compare/v1.8.0...v1.9.0) (2025-02-11)
### Features
* **configuration:** add Visual Studio Code to baker's configuration ([b92fd57](https://gitlab.com/marvinroman/nixos-configuration/commit/b92fd576231c59eaaded32b95faa5f40f0076747))
# [1.8.0](https://gitlab.com/marvinroman/nixos-configuration/compare/v1.7.0...v1.8.0) (2025-02-03)
### Features
* **configuration.nix:** add support for steam and steam-unwrapped packages ([2ecd026](https://gitlab.com/marvinroman/nixos-configuration/commit/2ecd026fcff671250e60c330a34a52a4a6f9d0a3))
* **shell:** integrate AI for generating git commit messages ([355f928](https://gitlab.com/marvinroman/nixos-configuration/commit/355f928ef73cf9e318aa8ec7bc0fd1ccbcdc734f))
* update lmstudio hash and enable rocm support ([3464fb9](https://gitlab.com/marvinroman/nixos-configuration/commit/3464fb9f29fe36eee5e0d97f9cb2bb9019272f19))
# [1.7.0](https://gitlab.com/marvinroman/nixos-configuration/compare/v1.6.0...v1.7.0) (2025-01-30)
### Bug Fixes
* :fire: disable difftastic to help in copying diffs into LLM chat ([9a1f0ad](https://gitlab.com/marvinroman/nixos-configuration/commit/9a1f0ad8a360929e17a0b3a00c19cc3c61c35103))
### Features
* :construction: started firefox configuration ([f244541](https://gitlab.com/marvinroman/nixos-configuration/commit/f244541cceb6db8c74ccc79c95795703c38841a4))
# [1.6.0](https://gitlab.com/marvinroman/nixos-configuration/compare/v1.5.0...v1.6.0) (2025-01-30)
### Features
* **git:** update Git configuration settings ([1ac6457](https://gitlab.com/marvinroman/nixos-configuration/commit/1ac6457ccdfe4be21fdd46d218f017f11ff43745))
# [1.5.0](https://gitlab.com/marvinroman/nixos-configuration/compare/v1.4.0...v1.5.0) (2025-01-30)
### Features
* **ssh:** add CAFB server SSH configuration ([1e62677](https://gitlab.com/marvinroman/nixos-configuration/commit/1e62677145f60e23ea29b6275b4f8cf6749da7f9))
# [1.4.0](https://gitlab.com/marvinroman/nixos-configuration/compare/v1.3.0...v1.4.0) (2025-01-30)
### Features
* **nixos:** refine unfree package handling and update git diff tools ([359db30](https://gitlab.com/marvinroman/nixos-configuration/commit/359db30e1a36e83bb1c3acc14551dd4c28d308d9))
# [1.3.0](https://gitlab.com/marvinroman/nixos-configuration/compare/v1.2.0...v1.3.0) (2025-01-26)
### Features
* added cuda layers for amd gpu ([9aaa458](https://gitlab.com/marvinroman/nixos-configuration/commit/9aaa458851e594fb64db15a85d80a3a8e28b0dfc))
# [1.2.0](https://gitlab.com/marvinroman/nixos-configuration/compare/v1.1.0...v1.2.0) (2025-01-26)
### Features
* added lmstudio to baker config ([c97785d](https://gitlab.com/marvinroman/nixos-configuration/commit/c97785dc33dc6f24f56c58498c86fcbde1f22f11))
# [1.1.0](https://gitlab.com/marvinroman/nixos-configuration/compare/v1.0.0...v1.1.0) (2025-01-25)
### Bug Fixes
* **lmstudio:** wrap callPackage in parentheses for proper evaluation ([c7e2d58](https://gitlab.com/marvinroman/nixos-configuration/commit/c7e2d5857727ba3ce646fc168117321fda3a7304))
### Features
* add darwin derivation for lmstudio ([7edae44](https://gitlab.com/marvinroman/nixos-configuration/commit/7edae4408112096f03fb11956e6d81b143a257c0))
* add linux derivation for lmstudio ([452eea9](https://gitlab.com/marvinroman/nixos-configuration/commit/452eea907bc5d60d3f8a1fc697006fb436f25300))
* add lmstudio overlay for version 0.3.8 ([7c15b97](https://gitlab.com/marvinroman/nixos-configuration/commit/7c15b978c870d7882a867ff046706fa43abdb9c5))
* add package definition for lmstudio ([19fa461](https://gitlab.com/marvinroman/nixos-configuration/commit/19fa46127a2afe751e8c27c6749ac9120289daa9))
# 1.0.0 (2025-01-25)
### Bug Fixes
* :fire: removed npm release ([31026d3](https://gitlab.com/marvinroman/nixos-configuration/commit/31026d37347a5cda7b356ad48c94ac5feb8a1c22))
* added docker group to user ([ef99e03](https://gitlab.com/marvinroman/nixos-configuration/commit/ef99e03efb65acd71225fdd6827701260d184792))
* added docker group to user ([8d2201d](https://gitlab.com/marvinroman/nixos-configuration/commit/8d2201d5bf2fc8f521d48459f8b82020185dcb04))
* added docker group to user ([a526618](https://gitlab.com/marvinroman/nixos-configuration/commit/a526618692a4033b704b32a0037f6a04438f609e))
* autoupgrade flags were deprecated ([5c4fa43](https://gitlab.com/marvinroman/nixos-configuration/commit/5c4fa4324dd56faa7d20bbb48a10f9d30786789b))
* bring back sudo for docker ([119f4bf](https://gitlab.com/marvinroman/nixos-configuration/commit/119f4bf9b898fdc69fd1e1345e834b4a084e4097))
* changed ssh keyfile paths to be relative to home directory ([821552c](https://gitlab.com/marvinroman/nixos-configuration/commit/821552c00513d0c4e0d6e4955d9eacb4e89a9a2f))
* fixed hostname to baker ([ea49588](https://gitlab.com/marvinroman/nixos-configuration/commit/ea495887d4e4e1f688e8025136b8df5503b86c98))
* remove docker group from marvin so sudo is needed ([838c365](https://gitlab.com/marvinroman/nixos-configuration/commit/838c365b9f1f907f11d65d758c727a810e3b57db))
* remove docker group from marvin so sudo is needed ([1fd6916](https://gitlab.com/marvinroman/nixos-configuration/commit/1fd6916c7f1986a8c4fd509cc2b23dcbce4cc916))
* rsync command had the wrong source path ([c7458f9](https://gitlab.com/marvinroman/nixos-configuration/commit/c7458f9f403993cf08ea1b824f9ee49ac153a923))
### Features
* :sparkles: added autoupgrade and auto garbage collection ([39cc570](https://gitlab.com/marvinroman/nixos-configuration/commit/39cc570d892b64b7b29f4816ec7d6379087720c1))
* :sparkles: added in additional input methods ([669f214](https://gitlab.com/marvinroman/nixos-configuration/commit/669f214e54df08d63db3f6f8910b26f3620c37df))
* activate firewall ([53edaea](https://gitlab.com/marvinroman/nixos-configuration/commit/53edaea737cf70345368eb537fc160a68ca40993))
* added auto garbage collection and upgrade ([4d42386](https://gitlab.com/marvinroman/nixos-configuration/commit/4d4238679cf0da25c40f2b6eeab5d417698dfed5))
* added autoUpgrade channel ([0e85cc5](https://gitlab.com/marvinroman/nixos-configuration/commit/0e85cc53a8e2f7aea27e2cb460dbcc0c85399f62))
* added back in bash shell setup ([9044696](https://gitlab.com/marvinroman/nixos-configuration/commit/9044696931e53a7e9067977d4734ee79473f6c2d))
* added dbeaver package ([ef7a0f3](https://gitlab.com/marvinroman/nixos-configuration/commit/ef7a0f3a672d49f02d495cb062dd09ebdb43235d))
* added discord package to marvin ([be825c0](https://gitlab.com/marvinroman/nixos-configuration/commit/be825c048c17c8b99417b5d3a807659d0d385133))
* added fonts setup; input switcher ([289c179](https://gitlab.com/marvinroman/nixos-configuration/commit/289c179bca6a413d5969482079d211a9097b7708))
* added home manager settings for alacritty ssh git and zsh ([9eb1755](https://gitlab.com/marvinroman/nixos-configuration/commit/9eb175555586774bb09ef2248f617a4a5d5bbd76))
* added new hosts entry for platform.test ([83fead3](https://gitlab.com/marvinroman/nixos-configuration/commit/83fead322f6012047fb13805dc3a8b14c4afd7c5))
* added new packages ([c9779e4](https://gitlab.com/marvinroman/nixos-configuration/commit/c9779e4898c2334e9781095511fb4ce6c69c0f0c))
* breadmaker flake ([cf6b1f6](https://gitlab.com/marvinroman/nixos-configuration/commit/cf6b1f6c970bc963b6bc9b87ac21be56efc082ff))
* changed terminal to ghostty ([3c1eb97](https://gitlab.com/marvinroman/nixos-configuration/commit/3c1eb9770ec2b0f417cc994e3d84fef37dafb051))
* most installed packages moved back to stable channel ([8896a7e](https://gitlab.com/marvinroman/nixos-configuration/commit/8896a7e30673b2b87ee8f3e619b1415ad0403a92))
* moved to home manager managed vscode ([dd3a5c0](https://gitlab.com/marvinroman/nixos-configuration/commit/dd3a5c0567be8c14e546315fb51230940a175c70))
* refactored to use flakes and home manager ([b7dc3be](https://gitlab.com/marvinroman/nixos-configuration/commit/b7dc3befee6c398d37b83dfad689fc3171208315))
* swapped configuration to under hosts ([3ec06b0](https://gitlab.com/marvinroman/nixos-configuration/commit/3ec06b0962e695ba0c6d3f29621b4581d952efbe))
* swapped to flake usage ([b6f65a7](https://gitlab.com/marvinroman/nixos-configuration/commit/b6f65a72fd74c4da4ef47d08482a4d8262c6909c))
### BREAKING CHANGES
* Re-organized the configuration.
.git
.DS_Store
.jj/
.pijul/
.vscode/settings.json
image: node:18
stages:
- release
release:
stage: release
only:
- main
script:
- npm install -g semantic-release @semantic-release/changelog @semantic-release/git @semantic-release/gitlab conventional-changelog-conventionalcommits@7.0.2
- npx semantic-release
variables:
GITLAB_AUTH_TOKEN: $CI_PUSH_TOKEN
GIT_AUTHOR_EMAIL: $GIT_AUTHOR_EMAIL
GIT_AUTHOR_NAME: $GIT_AUTHOR_NAME
GIT_COMMITTER_EMAIL: $GIT_AUTHOR_EMAIL
GIT_COMMITTER_NAME: $GIT_AUTHOR_NAME
GITLAB_TOKEN: $GITLAB_TOKEN
NPM_TOKEN: $GITLAB_TOKEN
result
.vscode/settings.json
nohup.out
.pijul/
.jj/
{
"rules": {
"body-leading-blank": [1, "always"],
"body-max-line-length": [2, "always", 100],
"footer-leading-blank": [1, "always"],
"footer-max-line-length": [2, "always", 100],
"header-max-length": [2, "always", 100],
"header-trim": [2, "always"],
"subject-case": [
2,
"never",
["sentence-case", "start-case", "pascal-case", "upper-case"]
],
"subject-empty": [2, "never"],
"subject-full-stop": [2, "never", "."],
"type-case": [2, "always", "lower-case"],
"type-empty": [2, "never"],
"type-enum": [
2,
"always",
[
"build",
"chore",
"ci",
"config",
"docs",
"feat",
"fix",
"perf",
"refactor",
"revert",
"style",
"test"
]
]
}
}