diff --git a/home/features.old/cli/AGENTS.md b/home/features.old/cli/AGENTS.md
deleted file mode 100644
index 24f1920..0000000
--- a/home/features.old/cli/AGENTS.md
+++ /dev/null
@@ -1,65 +0,0 @@
-# CLI FEATURES (home-manager)
-
-**Shell and terminal tooling with Fish + Nushell dual configuration**
-
-## OVERVIEW
-8 CLI modules with integrated tooling across Fish and Nushell shells.
-
-## STRUCTURE
-```
-cli/
-├── default.nix # Imports + shared tools (bat, eza, direnv)
-├── fish.nix # Fish shell + aliases
-├── fzf.nix # Fuzzy finder
-├── nitch.nix # System info tool
-├── nushell.nix # Nushell + aliases
-├── secrets.nix # Password-store integration
-├── starship.nix # Shell prompt
-└── zellij.nix # Terminal multiplexer
-```
-
-## WHERE TO LOOK
-
-| Task | Location | Notes |
-|------|----------|-------|
-| Add CLI tool | default.nix home.packages | Check if shell integration needed |
-| Shell aliases | fish.nix or nushell.nix | Kept in sync between shells |
-| Prompt config | starship.nix | Uses nerd-fonts symbols |
-| Secret access | secrets.nix | Agenix integration |
-
-## CONVENTIONS
-
-### Shell Integration Pattern
-Tools with shell hooks enabled in both Fish and Nushell:
-- **carapace**: Completions
-- **zoxide**: Smart cd
-- **eza**: ls replacement
-- **direnv**: Directory environments
-- **fzf**: Fuzzy finding
-
-### NixOS Rebuild Aliases (both shells)
-```
-nr/nrs - nixos-rebuild [switch]
-snr/snrs - sudo nixos-rebuild [switch]
-hms - home-manager switch
-```
-
-### Bat Theme
-Custom `universal` theme generated from nix-colors palette in default.nix (lines 34-157).
-
-### Secrets Integration
-Fish/Nushell source `$HOME/.secrets` if `secrets.enable = true` (CLI secrets feature).
-
-## ANTI-PATTERNS
-
-- **DON'T** add aliases to only one shell - keep Fish/Nushell in sync
-- **DON'T** use `programs.bash` - Nushell is default shell
-- **DON'T** bypass carapace for completions - integrated by default
-
-## NOTES
-
-- zellij-ps custom package for project session management
-- Default shell set to Nushell in hosts/common/default.nix
-- Bat theme dynamically generated (no external theme files)
-- lf file manager uses bat for previews
-- Agenix CLI (agenix-cli) included for secret management
diff --git a/home/features.old/cli/default.nix b/home/features.old/cli/default.nix
deleted file mode 100644
index 3ab556e..0000000
--- a/home/features.old/cli/default.nix
+++ /dev/null
@@ -1,230 +0,0 @@
-{
- config,
- pkgs,
- videoDrivers,
- ...
-}: {
- imports = [
- ./fish.nix
- ./fzf.nix
- ./nitch.nix
- ./nushell.nix
- ./secrets.nix
- ./starship.nix
- ./television.nix
- ./zellij.nix
- ];
-
- programs.carapace = {
- enable = true;
- enableFishIntegration = true;
- enableNushellIntegration = true;
- enableBashIntegration = true;
- };
-
- programs.zoxide = {
- enable = true;
- enableFishIntegration = true;
- enableNushellIntegration = true;
- };
-
- programs.bat = {
- enable = true;
- config = {theme = "universal";};
- themes = {
- universal = {
- src = pkgs.writeText "universal.tmTheme" ''
-
-
-
-
- name
- Universal (nix-colors)
- settings
-
-
- settings
-
- background
- #${config.colorScheme.palette.base00}
- foreground
- #${config.colorScheme.palette.base05}
- caret
- #${config.colorScheme.palette.base05}
- selection
- #${config.colorScheme.palette.base02}
- selectionForeground
- #${config.colorScheme.palette.base05}
- lineHighlight
- #${config.colorScheme.palette.base01}
-
-
-
- name
- Comment
- scope
- comment
- settings
-
- foreground
- #${config.colorScheme.palette.base03}
- fontStyle
- italic
-
-
-
- name
- String
- scope
- string
- settings
-
- foreground
- #${config.colorScheme.palette.base0A}
-
-
-
- name
- Number
- scope
- constant.numeric
- settings
-
- foreground
- #${config.colorScheme.palette.base0E}
-
-
-
- name
- Keyword
- scope
- keyword
- settings
-
- foreground
- #${config.colorScheme.palette.base08}
-
-
-
- name
- Function
- scope
- entity.name.function
- settings
-
- foreground
- #${config.colorScheme.palette.base0B}
-
-
-
- name
- Type
- scope
- entity.name.type, storage.type
- settings
-
- foreground
- #${config.colorScheme.palette.base0D}
-
-
-
- name
- Variable
- scope
- variable
- settings
-
- foreground
- #${config.colorScheme.palette.base05}
-
-
-
- name
- Constant
- scope
- constant
- settings
-
- foreground
- #${config.colorScheme.palette.base0E}
-
-
-
-
-
- '';
- };
- };
- };
-
- programs.direnv = {
- enable = true;
- enableNushellIntegration = true;
- nix-direnv.enable = true;
- };
-
- programs.eza = {
- enable = true;
- enableFishIntegration = true;
- enableBashIntegration = true;
- extraOptions = ["-l" "--icons" "--git" "-a"];
- };
-
- programs.lf = {
- enable = true;
- settings = {
- preview = true;
- drawbox = true;
- hidden = true;
- icons = true;
- theme = "Dracula";
- previewer = "bat";
- };
- };
-
- cli.zellij-ps = {
- enable = true;
- projectFolders = ["/home/m3tam3re/p"];
- };
-
- home.packages = with pkgs; [
- basecamp
- comma
- coreutils
- devenv
- fabric-ai
- fd
- gcc
- go
- htop
- httpie
- hyprpaper-random
- jq
- just
- lazygit
- llm
- lf
- nix-index
- nix-update
- libnotify
- nushellPlugins.skim
- progress
- ripgrep
- rocmPackages.rocm-smi
- rocmPackages.rocminfo
- rocmPackages.rocm-runtime
- sqlite
- sqlite-vec
- tldr
- pomodoro-timer
- trash-cli
- unimatrix
- unzip
- vulkan-tools
- wttrbar
- wireguard-tools
- yazi
- zellij-ps
- zip
- ];
-}
diff --git a/home/features.old/cli/fish.nix b/home/features.old/cli/fish.nix
deleted file mode 100644
index 7d80aea..0000000
--- a/home/features.old/cli/fish.nix
+++ /dev/null
@@ -1,116 +0,0 @@
-{
- config,
- lib,
- ...
-}:
-with lib; let
- cfg = config.features.cli.fish;
-in {
- options.features.cli.fish.enable = mkEnableOption "enable fish shell";
-
- config = mkIf cfg.enable {
- programs.fish = {
- enable = true;
- interactiveShellInit = ''
- # Fish colors using universal nix-colors palette
- # Text colors
- set -g fish_color_normal ${config.colorScheme.palette.base05} # text
- set -g fish_color_param ${config.colorScheme.palette.base05} # text
- set -g fish_color_comment ${config.colorScheme.palette.base03} # muted
- set -g fish_color_autosuggestion ${config.colorScheme.palette.base03} # muted
-
- # Command colors
- set -g fish_color_command ${config.colorScheme.palette.base0D} # accent6 (blue)
- set -g fish_color_quote ${config.colorScheme.palette.base0A} # accent3 (yellow)
- set -g fish_color_redirection ${config.colorScheme.palette.base0E} # accent7 (purple)
- set -g fish_color_end ${config.colorScheme.palette.base08} # accent1 (red)
- set -g fish_color_error ${config.colorScheme.palette.base08} # accent1 (red)
- set -g fish_color_operator ${config.colorScheme.palette.base0C} # accent5 (cyan)
- set -g fish_color_escape ${config.colorScheme.palette.base09} # accent2 (orange)
-
- # Path colors
- set -g fish_color_cwd ${config.colorScheme.palette.base0B} # accent4 (green)
- set -g fish_color_cwd_root ${config.colorScheme.palette.base08} # accent1 (red)
- set -g fish_color_valid_path --underline
-
- # Interactive colors
- set -g fish_color_match ${config.colorScheme.palette.base0B} # accent4 (green)
- set -g fish_color_selection --background=${config.colorScheme.palette.base02} # overlay
- set -g fish_color_search_match --background=${config.colorScheme.palette.base02} # overlay
- set -g fish_color_history_current --bold
- set -g fish_color_user ${config.colorScheme.palette.base0B} # accent4 (green)
- set -g fish_color_host ${config.colorScheme.palette.base0D} # accent6 (blue)
- set -g fish_color_cancel -r
-
- # Pager colors
- set -g fish_pager_color_completion normal
- set -g fish_pager_color_description ${config.colorScheme.palette.base03} # muted
- set -g fish_pager_color_prefix ${config.colorScheme.palette.base0E} # accent7 (purple)
- set -g fish_pager_color_progress ${config.colorScheme.palette.base0B} # accent4 (green)
- '';
- loginShellInit = ''
- set -x NIX_PATH nixpkgs=channel:nixos-unstable
- set -x NIX_LOG info
- set -x WEBKIT_DISABLE_COMPOSITING_MODE 1
- set -x TERMINAL ghostty
- set -x EDITOR nvim
- set -x VISUAL zed
- set -x XDG_DATA_HOME $HOME/.local/share
- set -x FZF_CTRL_R_OPTS "
- --preview='bat --color=always -n {}'
- --preview-window up:3:hidden:wrap
- --bind 'ctrl-/:toggle-preview'
- --bind 'ctrl-y:execute-silent(echo -n {2..} | wl-copy)+abort'
- --color header:bold
- --header 'Press CTRL-Y to copy command into clipboard'"
- set -x FZF_DEFAULT_COMMAND fd --type f --exclude .git --follow --hidden
- set -x FZF_CTRL_T_COMMAND "$FZF_DEFAULT_COMMAND"
- set -x FLAKE $HOME/p/nixos/nixos-config
- source /run/agenix/${config.home.username}-secrets
-
- if test (tty) = "/dev/tty1"
- exec uwsm start -F /run/current-system/sw/bin/Hyprland
- end
- if test (tty) = "/dev/tty2"
- exec gamescope -O HDMI-A-1 -W 1920 -H 1080 --adaptive-sync --hdr-enabled --rt --steam -- steam -pipewire-dmabuf -tenfoot
- end
- '';
- shellAbbrs = {
- ".." = "cd ..";
- "..." = "cd ../..";
- b = "yazi";
- ls = "eza";
- l = "eza -l --icons --git -a";
- lt = "eza --tree --level=2 --long --icons --git";
- grep = "rg";
- ps = "procs";
- just = "just --unstable";
- node = "bun";
- npx = "bunx";
- fs = "du -ah . | sort -hr | head -n 10";
-
- n = "nix";
- nd = "nix develop -c $SHELL";
- ns = "nix shell";
- nsn = "nix shell nixpkgs#";
- nb = "nix build";
- nbn = "nix build nixpkgs#";
- nf = "nix flake";
-
- nr = "sudo nixos-rebuild --flake .";
- nrs = "sudo nixos-rebuild switch --flake .#(uname -n)";
- snr = "sudo nixos-rebuild --flake .";
- snrs = "sudo nixos-rebuild --flake . switch";
- hm = "home-manager --flake .";
- hms = "home-manager --flake . switch";
- hmr = "cd ~/projects/nix-configurations; nix flake lock --update-input dotfiles; home-manager --flake .#(whoami)@(hostname) switch";
-
- tsu = "sudo tailscale up";
- tsd = "sudo tailscale down";
-
- vi = "nvim";
- vim = "nvim";
- };
- };
- };
-}
diff --git a/home/features.old/cli/fzf.nix b/home/features.old/cli/fzf.nix
deleted file mode 100644
index ce65606..0000000
--- a/home/features.old/cli/fzf.nix
+++ /dev/null
@@ -1,40 +0,0 @@
-{
- config,
- lib,
- ...
-}:
-with lib; let
- cfg = config.features.cli.fzf;
-in {
- options.features.cli.fzf.enable = mkEnableOption "enable fuzzy finder";
-
- config = mkIf cfg.enable {
- programs.fzf = {
- enable = true;
- enableFishIntegration = true;
- colors = {
- "fg" = "#${config.colorScheme.palette.base05}";
- "bg" = "#${config.colorScheme.palette.base00}";
- "hl" = "#${config.colorScheme.palette.base0E}";
- "fg+" = "#${config.colorScheme.palette.base05}";
- "bg+" = "#${config.colorScheme.palette.base02}";
- "hl+" = "#${config.colorScheme.palette.base0E}";
- "info" = "#${config.colorScheme.palette.base09}";
- "prompt" = "#${config.colorScheme.palette.base0B}";
- "pointer" = "#${config.colorScheme.palette.base08}";
- "marker" = "#${config.colorScheme.palette.base08}";
- "spinner" = "#${config.colorScheme.palette.base09}";
- "header" = "#${config.colorScheme.palette.base03}";
- };
- defaultOptions = [
- "--preview='bat --color=always -n {}'"
- "--bind 'ctrl-/:toggle-preview'"
- "--header 'Press CTRL-Y to copy command into clipboard'"
- "--bind 'ctrl-/:toggle-preview'"
- "--bind 'ctrl-y:execute-silent(echo -n {2..} | wl-copy)+abort'"
- ];
- defaultCommand = "fd --type f --exclude .git --follow --hidden";
- changeDirWidgetCommand = "fd --type d --exclude .git --follow --hidden";
- };
- };
-}
diff --git a/home/features.old/cli/nitch.nix b/home/features.old/cli/nitch.nix
deleted file mode 100644
index 1177299..0000000
--- a/home/features.old/cli/nitch.nix
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- config,
- lib,
- pkgs,
- ...
-}:
-with lib; let
- cfg = config.features.cli.nitch;
-in {
- options.features.cli.nitch.enable = mkEnableOption "enable nitch";
-
- config = mkIf cfg.enable {
- home.packages = with pkgs; [nitch];
- };
-}
diff --git a/home/features.old/cli/nushell.nix b/home/features.old/cli/nushell.nix
deleted file mode 100644
index 16d1cba..0000000
--- a/home/features.old/cli/nushell.nix
+++ /dev/null
@@ -1,91 +0,0 @@
-{
- config,
- lib,
- ...
-}:
-with lib; let
- cfg = config.features.cli.nushell;
-in {
- options.features.cli.nushell.enable = mkEnableOption "enable nushell";
-
- config = mkIf cfg.enable {
- programs.nushell = {
- enable = true;
- envFile.text = ''
- $env.config.show_banner = false
- $env.NIX_PATH = "nixpkgs=channel:nixos-unstable"
- $env.NIX_LOG = "iunfo"
- $env.WEBKIT_DISABLE_COMPOSITING_MODE = "1"
- $env.TERMINAL = "ghostty"
- $env.EDITOR = "nvim"
- $env.VISUAL = "zeditor"
- $env.FZF_DEFAULT_COMMAND = "fd --type f --exclude .git --follow --hidden"
- $env.FZF_DEFAULT_OPTS = "--preview='bat --color=always -n {}' --bind 'ctrl-/:toggle-preview' --header 'Press CTRL-Y to copy command into clipboard' --bind 'ctrl-/:toggle-preview' --bind 'ctrl-y:execute-silent(echo -n {2..} | wl-copy)+abort' --color bg:#282a36,bg+:#44475a,fg:#f8f8f2,fg+:#f8f8f2,header:#6272a4,hl:#bd93f9,hl+:#bd93f9,info:#ffb86c,marker:#ff79c6,pointer:#ff79c6,prompt:#50fa7b,spinner:#ffb86c"
- $env.XDG_DATA_HOME = $"($env.HOME)/.local/share"
- $env.FZF_DEFAULT_COMMAND = "fd --type f --exclude .git --follow --hidden"
- $env.SSH_AUTH_SOCK = "/run/user/1000/gnupg/S.gpg-agent.ssh"
- $env.PATH = ($env.PATH | split row (char esep) | append $"($env.HOME)/.cache/.bun/bin" | append $"($env.HOME)/.npm-global/bin" | uniq)
- $env.NPM_CONFIG_PREFIX = $"($env.HOME)/.npm-global"
- $env.FLAKE = $"($env.HOME)/p/NIX/nixos-config"
-
- # Load kestractl-env from agenix
- if ("/run/agenix/kestractl-env" | path exists) {
- open /run/agenix/kestractl-env
- | lines
- | where {($in | str trim | str length) > 0}
- | parse "{key}={value}"
- | update value {str trim -c '"'}
- | transpose -r -d
- | load-env
- }
- '';
-
- # if (tty) == "/dev/tty1" {
- # exec uwsm start -S -F /run/current-system/sw/bin/Hyprland
- # }
- # if (tty) == "/dev/tty2" {
- # exec gamescope -O HDMI-A-1 -W 1920 -H 1080 --adaptive-sync --hdr-enabled --rt --steam -- steam -pipewire-dmabuf -tenfoot
- # }
- configFile.text = ''
- # Aliases
- alias .. = cd ..
- alias ... = cd ...
- alias h = cd $env.HOME
- alias b = yazi
- alias lt = eza --tree --level=2 --long --icons --git
- alias grep = rg
- alias just = just --unstable
-
- alias node = bun
- alias npx = bunx
-
- alias n = nix
- alias nd = nix develop -c $nu.current-shell
- alias ns = nix shell
- alias nsn = nix shell nixpkgs#
- alias nb = nix build
- alias nbn = nix build nixpkgs#
- alias nf = nix flake
-
- alias nr = sudo nixos-rebuild --flake .
- alias nrs = sudo nixos-rebuild switch --flake .#(sys host | get hostname)
- alias snr = sudo nixos-rebuild --flake .
- alias snrs = sudo nixos-rebuild --flake . switch
- alias hm = home-manager --flake .
- alias hms = home-manager --flake . switch
- alias hmr = do { cd ~/projects/nix-configurations; nix flake lock --update-input dotfiles; home-manager --flake .#(whoami)@(hostname) switch }
-
- alias tsu = sudo tailscale up
- alias tsd = sudo tailscale down
-
- alias vi = nvim
- alias vim = nvim
-
- if (which tv | is-not-empty) {
- mkdir ($nu.data-dir | path join "vendor/autoload")
- tv init nu | save -f ($nu.data-dir | path join "vendor/autoload/tv.nu")
- }
- '';
- };
- };
-}
diff --git a/home/features.old/cli/secrets.nix b/home/features.old/cli/secrets.nix
deleted file mode 100644
index c1848f3..0000000
--- a/home/features.old/cli/secrets.nix
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- config,
- lib,
- pkgs,
- ...
-}:
-with lib; let
- cfg = config.features.cli.secrets;
-in {
- options.features.cli.secrets.enable = mkEnableOption "enable secrets";
-
- config = mkIf cfg.enable {
- programs.password-store = {
- enable = true;
- package =
- pkgs.pass-wayland.withExtensions
- (exts: [exts.pass-otp exts.pass-import]);
- settings = {PASSWORD_STORE_DIR = "$XDG_DATA_HOME/password-store";};
- };
- home.packages = with pkgs; [pinentry-gnome3];
- };
-}
diff --git a/home/features.old/cli/starship.nix b/home/features.old/cli/starship.nix
deleted file mode 100644
index 0861293..0000000
--- a/home/features.old/cli/starship.nix
+++ /dev/null
@@ -1,68 +0,0 @@
-{
- config,
- lib,
- ...
-}:
-with lib; let
- cfg = config.features.cli.starship;
-in {
- options.features.cli.starship.enable = mkEnableOption "enable starship prompt";
-
- config = mkIf cfg.enable {
- programs.starship = {
- enable = true;
- enableFishIntegration = true;
- enableNushellIntegration = true;
- settings = {
- format = "$all$character";
- palette = "universal";
-
- palettes.universal = {
- background = "#${config.colorScheme.palette.base00}";
- surface = "#${config.colorScheme.palette.base01}";
- muted = "#${config.colorScheme.palette.base03}";
- text = "#${config.colorScheme.palette.base05}";
- bright = "#${config.colorScheme.palette.base07}";
- accent1 = "#${config.colorScheme.palette.base08}";
- accent2 = "#${config.colorScheme.palette.base09}";
- accent3 = "#${config.colorScheme.palette.base0A}";
- accent4 = "#${config.colorScheme.palette.base0B}";
- accent5 = "#${config.colorScheme.palette.base0C}";
- accent6 = "#${config.colorScheme.palette.base0D}";
- accent7 = "#${config.colorScheme.palette.base0E}";
- };
-
- character = {
- success_symbol = "[❯](accent7)";
- error_symbol = "[❯](accent1)";
- };
-
- directory = {
- style = "accent6";
- truncation_length = 3;
- truncate_to_repo = false;
- };
-
- git_branch = {
- style = "accent7";
- };
-
- git_status = {
- style = "accent5";
- };
-
- cmd_duration = {
- style = "accent3";
- };
-
- hostname = {
- style = "accent4";
- };
-
- username = {
- style_user = "accent2";
- };
- };
- };
- };
-}
diff --git a/home/features.old/cli/television.nix b/home/features.old/cli/television.nix
deleted file mode 100644
index bc1b036..0000000
--- a/home/features.old/cli/television.nix
+++ /dev/null
@@ -1,64 +0,0 @@
-{
- config,
- lib,
- ...
-}:
-with lib; let
- cfg = config.features.cli.television;
-in {
- options.features.cli.television.enable = mkEnableOption "enable nitch";
-
- config = mkIf cfg.enable {
- programs.television = {
- enable = true;
- channels = {
- tldr = {
- metadata = {
- description = "Browse TLDR pages";
- name = "tldr";
- requirements = [
- "tldr"
- ];
- };
- preview = {
- command = "tldr '{}'";
- };
- source = {
- command = "tldr --list";
- };
- };
- git-diff = {
- metadata = {
- description = "A channel to select files from git diff commands";
- name = "git-diff";
- requirements = [
- "git"
- ];
- };
- preview = {
- command = "git diff HEAD --color=always -- '{}'";
- };
- source = {
- command = "git diff --name-only HEAD";
- };
- };
- git-log = {
- metadata = {
- description = "A channel to select from git log entries";
- name = "git-log";
- requirements = [
- "git"
- ];
- };
- preview = {
- command = "git show -p --stat --pretty=fuller --color=always '{0}'";
- };
- source = {
- command = "git log --oneline --date=short --pretty=\"format:%h %s %an %cd\" \"$@\"";
- output = "{split: :0}";
- };
- };
- };
- };
- };
-}
diff --git a/home/features.old/cli/zellij.nix b/home/features.old/cli/zellij.nix
deleted file mode 100644
index bd38e5b..0000000
--- a/home/features.old/cli/zellij.nix
+++ /dev/null
@@ -1,32 +0,0 @@
-{
- config,
- lib,
- ...
-}:
-with lib; let
- cfg = config.features.cli.zellij;
-in {
- options.features.cli.zellij.enable = mkEnableOption "enable tmux";
-
- config = mkIf cfg.enable {
- programs.zellij = {
- enable = true;
- settings = {
- theme = "universal";
- themes.universal = {
- bg = "#${config.colorScheme.palette.base00}";
- fg = "#${config.colorScheme.palette.base05}";
- black = "#${config.colorScheme.palette.base01}";
- red = "#${config.colorScheme.palette.base08}";
- green = "#${config.colorScheme.palette.base0B}";
- yellow = "#${config.colorScheme.palette.base0A}";
- blue = "#${config.colorScheme.palette.base0D}";
- magenta = "#${config.colorScheme.palette.base0E}";
- cyan = "#${config.colorScheme.palette.base0C}";
- white = "#${config.colorScheme.palette.base07}";
- orange = "#${config.colorScheme.palette.base09}";
- };
- };
- };
- };
-}
diff --git a/home/features.old/desktop/AGENTS.md b/home/features.old/desktop/AGENTS.md
deleted file mode 100644
index 1c9fbb7..0000000
--- a/home/features.old/desktop/AGENTS.md
+++ /dev/null
@@ -1,79 +0,0 @@
-# DESKTOP FEATURES (home-manager)
-
-**Wayland/Hyprland environment with color-coordinated tooling**
-
-## OVERVIEW
-12 modular desktop features with nix-colors (Dracula) integration across all components.
-
-## STRUCTURE
-```
-desktop/
-├── default.nix # Imports + XDG + Kitty config
-├── coding.nix # Development tools (VSCode, etc.)
-├── crypto.nix # Crypto wallets/tools
-├── fonts.nix # Font packages
-├── gaming.nix # Gaming tools/Steam
-├── hyprland.nix # Hyprland WM configuration
-├── media.nix # Media players/editors
-├── office.nix # LibreOffice, document tools
-├── rofi.nix # Application launcher
-├── theme.nix # GTK/Qt theming
-├── wayland.nix # Wayland utilities
-└── webapps.nix # Browser-based apps
-```
-
-## WHERE TO LOOK
-
-| Task | Location | Notes |
-|------|----------|-------|
-| Add desktop app | Relevant feature .nix | Update home.packages |
-| Configure Hyprland | hyprland.nix | Window manager settings |
-| Fix colors | Check colorScheme references | Uses config.colorScheme.palette.base* |
-| Add font | fonts.nix | Increases system closure size |
-
-## CONVENTIONS
-
-### Color Scheme Integration
-All color-aware tools reference `config.colorScheme.palette.base00` through `base0F`:
-- **base00-07**: Grayscale (dark to light)
-- **base08**: Red/errors
-- **base09**: Orange
-- **base0A**: Yellow/strings
-- **base0B**: Green/functions
-- **base0C**: Cyan
-- **base0D**: Blue/types
-- **base0E**: Purple/constants
-- **base0F**: Brown
-
-Template:
-```nix
-foreground = "#${config.colorScheme.palette.base05}";
-background = "#${config.colorScheme.palette.base00}";
-```
-
-### Session Variables
-Set in default.nix for Wayland/Hyprland:
-```nix
-NIXOS_OZONE_WL = "1";
-QT_QPA_PLATFORM = "wayland";
-XDG_CURRENT_DESKTOP = "Hyprland";
-```
-
-### XDG Defaults
-- **PDF**: okular
-- **Text**: nvim
-- **Browser**: Zen (io.github.zen_browser.zen)
-- **Archive**: file-roller
-
-## ANTI-PATTERNS
-
-- **DON'T** hardcode hex colors - use colorScheme palette
-- **DON'T** install fonts globally - keep in user packages
-- **DON'T** bypass XDG defaults - set in mimeApps
-
-## NOTES
-
-- Kitty terminal configured in default.nix (not separate file)
-- Bibata-Modern-Ice cursor theme hardcoded
-- Session path includes cargo, npm-global, bun
-- Desktop features are always-enabled (no feature flags in this dir)
diff --git a/home/features.old/desktop/coding.nix b/home/features.old/desktop/coding.nix
deleted file mode 100644
index b6a12bf..0000000
--- a/home/features.old/desktop/coding.nix
+++ /dev/null
@@ -1,23 +0,0 @@
-{
- config,
- lib,
- pkgs,
- ...
-}:
-with lib; let
- cfg = config.features.desktop.coding;
-in {
- options.features.desktop.coding.enable =
- mkEnableOption "install coding related stuff";
-
- config = mkIf cfg.enable {
- home.packages = with pkgs; [
- bruno
- insomnia
- ];
- coding.editors = {
- neovim.enable = true;
- zed.enable = true;
- };
- };
-}
diff --git a/home/features.old/desktop/crypto.nix b/home/features.old/desktop/crypto.nix
deleted file mode 100644
index f8132b5..0000000
--- a/home/features.old/desktop/crypto.nix
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- config,
- lib,
- pkgs,
- ...
-}:
-with lib; let
- cfg = config.features.desktop.crypto;
-in {
- options.features.desktop.crypto.enable = mkEnableOption "Enable Crypto";
-
- config = mkIf cfg.enable {
- home.packages = with pkgs; [bisq2 monero-gui trezor-suite];
- };
-}
diff --git a/home/features.old/desktop/default.nix b/home/features.old/desktop/default.nix
deleted file mode 100644
index 33c3780..0000000
--- a/home/features.old/desktop/default.nix
+++ /dev/null
@@ -1,162 +0,0 @@
-{
- config,
- pkgs,
- ...
-}: {
- imports = [
- ./coding.nix
- ./crypto.nix
- ./fonts.nix
- ./gaming.nix
- ./hyprland.nix
- ./media.nix
- ./obsidian.nix
- ./office.nix
- ./rofi.nix
- ./theme.nix
- ./wallpapers.nix
- ./wayland.nix
- ./webapps.nix
- ];
-
- xdg = {
- enable = true;
- configFile."mimeapps.list".force = true;
- mimeApps = {
- enable = true;
- associations.added = {
- "application/zip" = ["org.gnome.FileRoller.desktop"];
- "application/csv" = ["calc.desktop"];
- "application/pdf" = ["okularApplication_pdf.desktop"];
- };
- defaultApplications = {
- "application/zip" = ["org.gnome.FileRoller.desktop"];
- "application/csv" = ["calc.desktop"];
- "application/pdf" = ["okularApplication_pdf.desktop"];
- "application/md" = ["nvim.desktop"];
- "application/text" = ["nvim.desktop"];
- "x-scheme-handler/http" = ["io.github.zen_browser.zen"];
- "x-scheme-handler/https" = ["io.github.zen_browser.zen"];
- };
- };
- userDirs = {
- enable = true;
- createDirectories = true;
- setSessionVariables = true;
- };
- };
-
- home.sessionVariables = {
- WEBKIT_DISABLE_COMPOSITING_MODE = "1";
- NIXOS_OZONE_WL = "1";
- TERMINAL = "ghostty";
- QT_QPA_PLATFORM = "wayland";
- XDG_CURRENT_DESKTOP = "Hyprland";
- XDG_SESSION_TYPE = "wayland";
- XDG_SESSION_DESKTOP = "Hyprland";
- };
- home.sessionPath = ["\${XDG_BIN_HOME}" "\${HOME}/.cargo/bin" "$HOME/.npm-global/bin" "$HOME/.cache/.bun/bin"];
-
- fonts.fontconfig.enable = true;
-
- programs.ghostty = {
- enable = true;
- enableFishIntegration = true;
- enableBashIntegration = true;
- settings = {
- font-family = "Fira Code";
- copy-on-select = true;
-
- # Base colors from nix-colors
- foreground = "#${config.colorScheme.palette.base05}";
- background = "#${config.colorScheme.palette.base00}";
- selection-foreground = "#${config.colorScheme.palette.base07}";
- selection-background = "#${config.colorScheme.palette.base02}";
-
- # Cursor
- cursor-color = "#${config.colorScheme.palette.base05}";
-
- # Palette (16 colors)
- palette = [
- "0=#${config.colorScheme.palette.base01}"
- "1=#${config.colorScheme.palette.base08}"
- "2=#${config.colorScheme.palette.base0B}"
- "3=#${config.colorScheme.palette.base0A}"
- "4=#${config.colorScheme.palette.base0D}"
- "5=#${config.colorScheme.palette.base0E}"
- "6=#${config.colorScheme.palette.base0C}"
- "7=#${config.colorScheme.palette.base05}"
- "8=#${config.colorScheme.palette.base03}"
- "9=#${config.colorScheme.palette.base08}"
- "10=#${config.colorScheme.palette.base0B}"
- "11=#${config.colorScheme.palette.base0A}"
- "12=#${config.colorScheme.palette.base0D}"
- "13=#${config.colorScheme.palette.base0E}"
- "14=#${config.colorScheme.palette.base0C}"
- "15=#${config.colorScheme.palette.base07}"
- ];
- };
- };
-
- home.pointerCursor = {
- gtk.enable = true;
- package = pkgs.bibata-cursors;
- name = "Bibata-Modern-Ice";
- size = 20;
- };
-
- home.packages = with pkgs; [
- appimage-run
- # blueberry
- bemoji
- brave
- # brightnessctl
- # clipman
- distrobox
- eigent
- (element-desktop.override {
- commandLineArgs = "--password-store=gnome-libsecret";
- })
- launch-webapp
- # eww
- # firefox-devedition
- file-roller
- hyprpanel
- seahorse
- sushi
- # glib
- # google-chrome
- # gsettings-desktop-schemas
- # graphviz
- ksnip
- msty-studio
- nwg-look
- # opencode-desktop
- # pamixer
- # pavucontrol
- # libsForQt5.qtstyleplugins
- # stable.nyxt
- # pcmanfm
- rose-pine-hyprcursor
- # qt5ct
- # qt6.qtwayland
- #rustdesk
- # socat
- # unrar
- # unzip
- # usbutils
- # v4l-utils
- remmina
- slack
- telegram-desktop
- vivaldi
- vivaldi-ffmpeg-codecs
- vibetyper
- # wl-clipboard
- # wlogout
- # wtype
- # xdg-utils
- # ydotool
- # zip
- ];
-}
diff --git a/home/features.old/desktop/fonts.nix b/home/features.old/desktop/fonts.nix
deleted file mode 100644
index cb69db2..0000000
--- a/home/features.old/desktop/fonts.nix
+++ /dev/null
@@ -1,24 +0,0 @@
-{
- config,
- lib,
- pkgs,
- ...
-}:
-with lib; let
- cfg = config.features.desktop.fonts;
-in {
- options.features.desktop.fonts.enable =
- mkEnableOption "install additional fonts for desktop apps";
-
- config = mkIf cfg.enable {
- home.packages = with pkgs; [
- fira-code
- fira-code-symbols
- nerd-fonts.fira-code
- nerd-fonts.jetbrains-mono
- font-manager
- font-awesome_5
- noto-fonts
- ];
- };
-}
diff --git a/home/features.old/desktop/gaming.nix b/home/features.old/desktop/gaming.nix
deleted file mode 100644
index 6cc7414..0000000
--- a/home/features.old/desktop/gaming.nix
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- config,
- lib,
- pkgs,
- ...
-}:
-with lib; let
- cfg = config.features.desktop.gaming;
-in {
- options.features.desktop.gaming.enable =
- mkEnableOption "install gaming related stuff";
-
- config = mkIf cfg.enable {
- home.packages = with pkgs; [
- gamescope
- gamemode
- goverlay
- mangohud
- protonplus
- ];
- };
-}
diff --git a/home/features.old/desktop/hyprland.nix b/home/features.old/desktop/hyprland.nix
deleted file mode 100644
index 090c809..0000000
--- a/home/features.old/desktop/hyprland.nix
+++ /dev/null
@@ -1,323 +0,0 @@
-{
- config,
- lib,
- ...
-}:
-with lib; let
- cfg = config.features.desktop.hyprland;
-in {
- options.features.desktop.hyprland.enable =
- mkEnableOption "Hyprland related stuff";
-
- config = mkIf cfg.enable {
- wayland.windowManager.hyprland = {
- settings = {
- xwayland = {
- force_zero_scaling = true;
- };
-
- exec-once = [
- "hyprpanel"
- "while ! hyprpaper-random; do sleep 0.5; done"
- "wl-paste --type text --watch cliphist store" # Stores only text data
- "wl-paste --type image --watch cliphist store" # Stores only image data "wl-paste -p -t text --watch clipman store -P --histpath=\"~/.local/share/clipman-primary.json\""
- "vibetyper"
- ];
-
- env = [
- "XCURSOR_SIZE,32"
- "HYPRCURSOR_THEME,Bibata-Modern-Ice"
- "WLR_NO_HARDWARE_CURSORS,1"
- "GTK_THEME,Dracula"
- "XDG_CURRENT_DESKTOP,Hyprland"
- "XDG_SESSION_TYPE,wayland"
- "XDG_SESSION_DESKTOP,Hyprland"
- "XKB_DEFAULT_LAYOUT,de"
- "NIXOS_OZONE_WL,1"
- ];
-
- input = {
- kb_layout = "de,us";
- kb_variant = "";
- kb_model = "";
- kb_rules = "";
- kb_options = "ctrl:nocaps";
- follow_mouse = 1;
- };
-
- general = {
- gaps_in = 5;
- gaps_out = 5;
- border_size = 1;
- # Keeping the existing active border as requested
- "col.active_border" = "rgba(9742b5ee) rgba(9742b5ee) 45deg";
- "col.inactive_border" = "rgba(${config.colorScheme.palette.base03}aa)";
- layout = "dwindle";
- };
-
- decoration = {
- shadow = {
- enabled = true;
- range = 60;
- render_power = 3;
- color = "rgba(${config.colorScheme.palette.base00}66)";
- offset = "1 2";
- scale = 0.97;
- };
- rounding = 8;
- blur = {
- enabled = true;
- size = 3;
- passes = 3;
- };
- active_opacity = 0.9;
- inactive_opacity = 0.5;
- };
-
- animations = {
- enabled = true;
- bezier = "myBezier, 0.05, 0.9, 0.1, 1.05";
- animation = [
- "windows, 1, 7, myBezier"
- "windowsOut, 1, 7, default, popin 80%"
- "border, 1, 10, default"
- "borderangle, 1, 8, default"
- "fade, 1, 7, default"
- "workspaces, 1, 6, default"
- ];
- };
-
- dwindle = {
- pseudotile = true;
- preserve_split = true;
- };
-
- master = {
- new_status = "master";
- };
-
- device = [
- {
- name = "epic-mouse-v1";
- sensitivity = -0.5;
- }
- {
- name = "zsa-technology-labs-moonlander-mark-i";
- kb_layout = "us";
- }
- {
- name = "keychron-keychron-k7";
- kb_layout = "us";
- }
- ];
- windowrule = [
- # Floating dialogs
- "match:class file_progress, float on"
- "match:class confirm, float on"
- "match:class dialog, float on"
- "match:class download, float on"
- "match:class notification, float on"
- "match:class error, float on"
- "match:class splash, float on"
- "match:class confirmreset, float on"
- "match:title Open File, float on"
- "match:title branchdialog, float on"
- "match:class pavucontrol-qt, float on"
- "match:class pavucontrol, float on"
- "match:class class:^(espanso)$, float on"
- # wlogout
- "match:class wlogout, fullscreen on"
- "match:title wlogout, float on"
- "match:title wlogout, fullscreen on"
- # mpv
- "match:class mpv, float on"
- "match:class mpv, idle_inhibit focus"
- "match:class mpv, opacity 1.0 override"
- # Media/Volume/PiP
- "match:title ^(Media viewer)$, float on"
- "match:title ^(Volume Control)$, float on"
- "match:title ^(Picture-in-Picture)$, float on"
- # Pomodoro timer
- "match:title ^(floating-pomodoro)$, float on"
- "match:title ^(floating-pomodoro)$, size 250 50"
- "match:title ^(floating-pomodoro)$, move 12 (monitor_h-150)"
- "match:title ^(floating-pomodoro)$, pin on"
- # Streamlabs overlays
- "match:initial_title .*streamlabs.com.*, float on"
- "match:initial_title .*streamlabs.com.*, pin on"
- "match:initial_title .*streamlabs.com.*, size 800 400"
- "match:initial_title .*alert-box.*, move 100%-820 102"
- "match:initial_title .*chat-box.*, move 100%-820 512"
- "match:initial_title .*streamlabs.com.*, opacity 0.5 override"
- "match:initial_title .*streamlabs.com.*, idle_inhibit focus"
- "match:initial_title .*streamlabs.com.*, no_anim on"
- "match:initial_title .*streamlabs.com.*, decorate off"
- "match:initial_title .*streamlabs.com.*, no_shadow on"
- "match:initial_title .*streamlabs.com.*, no_blur on"
- # Vibetyper recording indicator
- "match:class ^vibe-typer$, match:title ^Recording Indicator$, no_blur on"
- "border_color rgb(ffffff), match:xwayland 1"
- ];
- "$mainMod" = "SUPER";
- "$terminal" = "ghostty";
-
- bind = [
- "$mainMod, return, exec, $terminal nu -c zellij-ps"
- # "$mainMod, t, exec, warp-terminal"
- "$mainMod, t, exec, $terminal -e nu -c 'nitch; exec nu'"
- "$mainMod SHIFT, t, exec, launch-timer"
- "$mainMod, n, exec, $terminal -e nvim"
- "$mainMod, z, exec, uwsm app -- zeditor"
- "$mainMod, o, exec, hyprctl dispatch setprop activewindow opaque toggle"
- "$mainMod, r, exec, hyprctl dispatch focuswindow \"initialtitle:.*alert-box.*\" && hyprctl dispatch moveactive exact 4300 102 && hyprctl dispatch focuswindow \"initialtitle:.*chat-box.*\" && hyprctl dispatch moveactive exact 4300 512"
- "$mainMod, b, exec, uwsm app -- thunar"
- "$mainMod SHIFT, B, exec, uwsm app -- vivaldi"
- "$mainMod, Escape, exec, uwsm app -- wlogout -p layer-shell"
- "$mainMod, Space, togglefloating"
- "$mainMod, q, killactive"
- "$mainMod, M, exit"
- "$mainMod, F, fullscreen"
- "$mainMod SHIFT, V, togglefloating"
- "$mainMod, D, exec, uwsm app -- rofi -show drun -run-command \"uwsm app -- {cmd}\""
- "$mainMod, V, exec, uwsm app -- cliphist list | rofi -dmenu | cliphist decode | wl-copy"
- "$mainMod, C, exec, bash -c 'FILE=/tmp/screenshot_$(date +%s).png; grim -g \"$(slurp)\" \"$FILE\" && ksnip \"$FILE\"'"
- "$mainMod SHIFT, S, exec, uwsm app -- rofi -show emoji"
- "$mainMod, P, exec, uwsm app -- rofi-pass"
- "$mainMod SHIFT, P, pseudo"
- "$mainMod, R, exec, stt-ptt start"
- "$mainMod, S, exec, stt-ptt start"
- "$mainMod, J, togglesplit"
- "$mainMod, h, movefocus, l"
- "$mainMod, l, movefocus, r"
- "$mainMod, k, movefocus, u"
- "$mainMod, j, movefocus, d"
- "$mainMod, 1, workspace, 1"
- "$mainMod, 2, workspace, 2"
- "$mainMod, 3, workspace, 3"
- "$mainMod, 4, workspace, 4"
- "$mainMod, 5, workspace, 5"
- "$mainMod, 6, workspace, 6"
- "$mainMod, 7, workspace, 7"
- "$mainMod, 8, workspace, 8"
- "$mainMod, 9, workspace, 9"
- "$mainMod, 0, workspace, 10"
- "$mainMod SHIFT, 1, movetoworkspace, 1"
- "$mainMod SHIFT, 2, movetoworkspace, 2"
- "$mainMod SHIFT, 3, movetoworkspace, 3"
- "$mainMod SHIFT, 4, movetoworkspace, 4"
- "$mainMod SHIFT, 5, movetoworkspace, 5"
- "$mainMod SHIFT, 6, movetoworkspace, 6"
- "$mainMod SHIFT, 7, movetoworkspace, 7"
- "$mainMod SHIFT, 8, movetoworkspace, 8"
- "$mainMod SHIFT, 9, movetoworkspace, 9"
- "$mainMod SHIFT, 0, movetoworkspace, 10"
- "$mainMod, mouse_down, workspace, e+1"
- "$mainMod, mouse_up, workspace, e-1"
- ];
- bindr = [
- "$mainMod, R, exec, stt-ptt stop"
- "$mainMod, S, exec, stt-ptt format-stop"
- ];
- bindm = [
- "$mainMod, mouse:272, movewindow"
- "$mainMod, mouse:273, resizewindow"
- ];
- };
- };
- services.hypridle = {
- enable = true;
- settings = {
- general = {
- before_sleep_cmd = "hyprlock";
- after_sleep_cmd = "hyprctl dispatch dpms on";
- inhibit_sleep = 3;
- };
-
- listener = [
- {
- timeout = 300; # 5 min
- on-timeout = "hyprlock";
- }
- {
- timeout = 420; # 5.5 min
- on-timeout = "hyprctl dispatch dpms off";
- on-resume = "hyprctl dispatch dpms on";
- }
- ];
- };
- };
-
- services.hyprpaper.enable = true;
-
- programs.hyprlock = {
- enable = true;
- settings = {
- "$font" = "JetBrainsMono Nerd Font";
- "$base" = "rgb(${config.colorScheme.palette.base00})";
- "$text" = "rgb(${config.colorScheme.palette.base05})";
- "$textAlpha" = "${config.colorScheme.palette.base05}";
- "$accentAlpha" = "${config.colorScheme.palette.base0D}";
- "$red" = "rgb(${config.colorScheme.palette.base08})";
- "$yellow" = "rgb(${config.colorScheme.palette.base0A})";
-
- general = {
- hide_cursor = true;
- };
-
- background = {
- monitor = "";
- path = "${config.home.homeDirectory}/.config/hypr/wallpapers/wallhaven-lmmo8r.jpg";
- blur_passes = 0;
- color = "rgb(${config.colorScheme.palette.base00})";
- };
-
- label = [
- {
- monitor = "";
- text = "$TIME";
- color = "$text";
- font_size = 90;
- font_family = "$font";
- position = "30, 0";
- halign = "left";
- valign = "top";
- }
- {
- monitor = "";
- text = ''cmd[update:43200000] echo "$(date +"%A, %d %B %Y")"'';
- color = "$text";
- font_size = 25;
- font_family = "$font";
- position = "30, -150";
- halign = "left";
- valign = "top";
- }
- ];
-
- input-field = [
- {
- monitor = "";
- size = "300, 60";
- outline_thickness = 4;
- dots_size = 0.2;
- dots_spacing = 0.2;
- dots_center = true;
- outer_color = "rgb(${config.colorScheme.palette.base0D})";
- inner_color = "rgb(${config.colorScheme.palette.base00})";
- font_color = "rgb(${config.colorScheme.palette.base05})";
- fade_on_empty = false;
- placeholder_text = '' Logged in as $USER'';
- hide_input = false;
- check_color = "rgb(${config.colorScheme.palette.base0D})";
- fail_color = "rgb(${config.colorScheme.palette.base08})";
- fail_text = ''$FAIL ($ATTEMPTS)'';
- capslock_color = "rgb(${config.colorScheme.palette.base0A})";
- position = "0, -35";
- halign = "center";
- valign = "center";
- }
- ];
- };
- };
- };
-}
diff --git a/home/features.old/desktop/media.nix b/home/features.old/desktop/media.nix
deleted file mode 100644
index 39f4d01..0000000
--- a/home/features.old/desktop/media.nix
+++ /dev/null
@@ -1,55 +0,0 @@
-{
- config,
- lib,
- pkgs,
- ...
-}:
-with lib; let
- cfg = config.features.desktop.media;
-in {
- options.features.desktop.media.enable =
- mkEnableOption "enable media features";
-
- config = mkIf cfg.enable {
- home.packages = with pkgs; [
- # handbrake
- # kdePackages.kdenlive
- # makemkv
- # mediainfo
- amf
- ffmpeg_6-full
- gimp
- gst_all_1.gstreamer
- gst_all_1.gst-vaapi
- handbrake
- inkscape
- kdePackages.kdenlive
- libation
- #makemkv
- pamixer
- pavucontrol
- qpwgraph
- v4l-utils
- plexamp
- # uxplay
- # vlc
- webcord
- # yt-dlp
- unimatrix
- ];
-
- programs = {
- mpv = {
- enable = true;
- bindings = {
- WHEEL_UP = "seek 10";
- WHEEL_DOWN = "seek -10";
- };
- config = {
- profile = "gpu-hq";
- ytdl-format = "bestvideo+bestaudio";
- };
- };
- };
- };
-}
diff --git a/home/features.old/desktop/obsidian.nix b/home/features.old/desktop/obsidian.nix
deleted file mode 100644
index c03b766..0000000
--- a/home/features.old/desktop/obsidian.nix
+++ /dev/null
@@ -1,25 +0,0 @@
-{
- config,
- lib,
- ...
-}:
-with lib; let
- cfg = config.features.desktop.obsidian;
-in {
- options.features.desktop.obsidian.enable =
- mkEnableOption "enable Obsidian knowledge base";
-
- config = mkIf cfg.enable {
- programs.obsidian.enable = true;
-
- xdg.mimeApps = {
- enable = true;
- associations.added = {
- "text/markdown" = ["obsidian.desktop"];
- };
- defaultApplications = {
- "text/markdown" = ["obsidian.desktop"];
- };
- };
- };
-}
diff --git a/home/features.old/desktop/office.nix b/home/features.old/desktop/office.nix
deleted file mode 100644
index 0eddd32..0000000
--- a/home/features.old/desktop/office.nix
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- config,
- lib,
- pkgs,
- ...
-}:
-with lib; let
- cfg = config.features.desktop.office;
-in {
- options.features.desktop.office.enable =
- mkEnableOption "install office and paperwork stuff";
-
- config = mkIf cfg.enable {
- home.packages = with pkgs; [
- libreoffice-fresh
- ];
- };
-}
diff --git a/home/features.old/desktop/rofi.nix b/home/features.old/desktop/rofi.nix
deleted file mode 100644
index e17c9a6..0000000
--- a/home/features.old/desktop/rofi.nix
+++ /dev/null
@@ -1,206 +0,0 @@
-{
- config,
- pkgs,
- lib,
- ...
-}:
-with lib; let
- cfg = config.features.desktop.rofi;
-in {
- options.features.desktop.rofi.enable = mkEnableOption "enable rofi";
-
- config = mkIf cfg.enable {
- programs.rofi = with pkgs; {
- enable = true;
- package = rofi.override {
- plugins = [
- rofi-calc
- rofi-emoji
- stable.rofi-file-browser
- ];
- };
- pass = {
- enable = true;
- package = rofi-pass-wayland;
- };
- terminal = "${pkgs.ghostty}/bin/ghostty";
- font = "Fira Code";
- extraConfig = {
- show-icons = true;
- disable-history = false;
- modi = "drun,calc,emoji,filebrowser";
- kb-primary-paste = "Control+V,Shift+Insert";
- kb-secondary-paste = "Control+v,Insert";
- };
- theme = let
- inherit (config.colorScheme) palette;
- in
- builtins.toString (pkgs.writeText "rofi-universal-theme.rasi" ''
- * {
- /* Universal theme colors from nix-colors */
- background: #${palette.base00};
- surface: #${palette.base01};
- overlay: #${palette.base02};
- muted: #${palette.base03};
- subtle: #${palette.base04};
- text: #${palette.base05};
- bright-text: #${palette.base06};
- highlight: #${palette.base07};
- accent1: #${palette.base08};
- accent2: #${palette.base09};
- accent3: #${palette.base0A};
- accent4: #${palette.base0B};
- accent5: #${palette.base0C};
- accent6: #${palette.base0D};
- accent7: #${palette.base0E};
- accent8: #${palette.base0F};
-
- /* Global properties */
- background-color: @background;
- text-color: @text;
- font: "Fira Code 12";
- border: 0;
- margin: 0;
- padding: 0;
- spacing: 0;
- }
-
- window {
- background-color: @background;
- border: 1px;
- border-color: @accent7;
- border-radius: 6px;
- width: 40%;
- padding: 16px;
- }
-
- inputbar {
- children: [ prompt, entry ];
- spacing: 12px;
- padding: 8px;
- border-radius: 4px;
- background-color: @surface;
- }
-
- prompt {
- text-color: @accent7;
- background-color: transparent;
- }
-
- entry {
- placeholder: "Search...";
- placeholder-color: @subtle;
- text-color: @text;
- background-color: transparent;
- cursor-color: @accent7;
- }
-
- message {
- background-color: @surface;
- border-radius: 4px;
- padding: 8px;
- margin: 8px 0;
- }
-
- textbox {
- text-color: @text;
- background-color: transparent;
- }
-
- listview {
- background-color: transparent;
- margin: 8px 0 0;
- lines: 10;
- columns: 1;
- fixed-height: true;
- scrollbar: false;
- }
-
- element {
- background-color: transparent;
- text-color: @text;
- padding: 8px;
- border-radius: 4px;
- spacing: 8px;
- }
-
- element normal.normal {
- background-color: transparent;
- text-color: @text;
- }
-
- element selected.normal {
- background-color: @accent7;
- text-color: @background;
- }
-
- element alternate.normal {
- background-color: transparent;
- text-color: @text;
- }
-
- element-icon {
- background-color: transparent;
- size: 24px;
- }
-
- element-text {
- background-color: transparent;
- text-color: inherit;
- vertical-align: 0.5;
- }
-
- mode-switcher {
- spacing: 0;
- background-color: @surface;
- border-radius: 4px;
- margin: 8px 0 0;
- }
-
- button {
- padding: 8px 16px;
- background-color: transparent;
- text-color: @text;
- border-radius: 4px;
- }
-
- button selected {
- background-color: @accent7;
- text-color: @background;
- }
-
- /* Scrollbar */
- scrollbar {
- width: 4px;
- border: 0;
- handle-color: @accent7;
- handle-width: 4px;
- padding: 0;
- }
- '');
- };
- cli.rofi-project-opener = {
- enable = true;
- projectDirs = {
- AI = {
- path = "~/p/AI";
- args = "";
- };
- CHAT = {
- path = "~/p/CHAT";
- args = "--agent chiron";
- };
- MISC = {
- path = "~/p/MISC";
- args = "--agent chiron-forge";
- };
- NIX = {
- path = "~/p/NIX";
- args = "";
- };
- };
- terminal = pkgs.ghostty;
- terminalCommand = "opencode %a";
- };
- };
-}
diff --git a/home/features.old/desktop/theme.nix b/home/features.old/desktop/theme.nix
deleted file mode 100644
index ee2aa17..0000000
--- a/home/features.old/desktop/theme.nix
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- config,
- pkgs,
- ...
-}: {
- qt = {
- enable = true;
- platformTheme.name = "gtk";
- };
- gtk = {
- enable = true;
- theme = {
- name = "Dracula";
- package = pkgs.dracula-theme;
- };
- iconTheme = {
- name = "Dracula";
- package = pkgs.dracula-icon-theme;
- };
- gtk4.theme = config.gtk.theme;
- };
-}
diff --git a/home/features.old/desktop/wallpapers.nix b/home/features.old/desktop/wallpapers.nix
deleted file mode 100644
index fbc6a27..0000000
--- a/home/features.old/desktop/wallpapers.nix
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- config,
- lib,
- pkgs,
- ...
-}:
-with lib; let
- cfg = config.features.desktop.wallpapers;
-in {
- options.features.desktop.wallpapers = mkEnableOption "Wallpapers for Hyprland";
-
- config = mkIf cfg {
- xdg.configFile."hypr/wallpapers" = {
- source = ../../m3tam3re/wallpapers;
- recursive = true;
- };
- };
-}
diff --git a/home/features.old/desktop/wayland.nix b/home/features.old/desktop/wayland.nix
deleted file mode 100644
index 506b182..0000000
--- a/home/features.old/desktop/wayland.nix
+++ /dev/null
@@ -1,29 +0,0 @@
-{
- config,
- lib,
- pkgs,
- ...
-}:
-with lib; let
- cfg = config.features.desktop.wayland;
-in {
- options.features.desktop.wayland.enable = mkEnableOption "wayland extra tools and config";
-
- config = mkIf cfg.enable {
- home.packages = with pkgs; [
- grim
- hyprcursor
- hyprlock
- hyprpaper
- qt6.qtwayland
- slurp
- waypipe
- wl-clipboard
- wf-recorder
- wl-mirror
- wlogout
- wtype
- ydotool
- ];
- };
-}
diff --git a/home/features.old/desktop/webapps.nix b/home/features.old/desktop/webapps.nix
deleted file mode 100644
index 57ed3fc..0000000
--- a/home/features.old/desktop/webapps.nix
+++ /dev/null
@@ -1,55 +0,0 @@
-{
- pkgs,
- lib,
- ...
-}: let
- icons = {
- teams = pkgs.fetchurl {
- url = "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/microsoft-teams.svg";
- sha256 = "sha256-Pr9QS8nnXJq97r4/G3c6JXi34zxHl0ps9gcyI8cN/s8=";
- };
- outlook = pkgs.fetchurl {
- url = "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/microsoft-outlook.svg";
- sha256 = "sha256-3u8t5QNHFZvrAegxBiGicO4PjtMWhEaQSCv7MSSfLLc=";
- };
- opencode = pkgs.fetchurl {
- url = "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/opencode-dark.svg";
- sha256 = "1lms4f8habamvdh2qqqz9psx4py9wx23mmlkkds44pvrbq3bkj3n";
- };
- };
-in {
- xdg.desktopEntries = {
- teams = {
- name = "Microsoft Teams";
- exec = "launch-webapp https://teams.microsoft.com";
- comment = "Open Microsoft Teams as a Desktop App";
- categories = ["Application" "Network" "Chat"];
- terminal = false;
- icon = icons.teams;
- };
- outlook = {
- name = "Microsoft Outlook";
- exec = "launch-webapp https://outlook.office.com/mail/";
- comment = "Open Microsoft Outlook as a Desktop App";
- categories = ["Application" "Network"];
- terminal = false;
- icon = icons.outlook;
- };
- basecamp = {
- name = "Basecamp";
- exec = "launch-webapp https://3.basecamp.com/5996442/";
- comment = "Open Basecamp as a Desktop App";
- categories = ["Application" "Network"];
- terminal = false;
- icon = "/home/sascha.koenig/.local/share/icons/basecamp-logo.png";
- };
- opencode = {
- name = "Opencode";
- exec = "rofi-project-opener";
- comment = "Open Opencode Terminal App";
- categories = ["Application" "Development"];
- terminal = false;
- icon = icons.opencode;
- };
- };
-}
diff --git a/home/lib/default.nix b/home/lib/default.nix
index adb2a77..6fb9798 100644
--- a/home/lib/default.nix
+++ b/home/lib/default.nix
@@ -8,9 +8,7 @@
# (homeLib.mkHomeConfig { profiles = ["coding" "gaming"]; context = "desktop"; })
# ];
# }
-{ lib }:
-
-let
+{lib}: let
# Infrastructure layer — nixpkgs overlays, nix-colors, m3ta-nixpkgs modules.
# Always loaded on every host.
commonModule = ../common;
@@ -31,7 +29,6 @@ let
gaming = ../profiles/gaming;
media = ../profiles/media;
};
-
in {
# Generate a home-manager module with imports based on profiles and context.
#
@@ -46,36 +43,41 @@ in {
mkHomeConfig = {
profiles ? [],
context ? null,
- }:
- let
+ }: let
contextImport =
- if context == "desktop" then [ contextModuleMap.desktop ]
- else if context == "server" then [ contextModuleMap.server ]
+ if context == "desktop"
+ then [contextModuleMap.desktop]
+ else if context == "server"
+ then [contextModuleMap.server]
else [];
# Partition profiles into known and unknown for assertion + safe import.
- unknownProfiles = builtins.filter
+ unknownProfiles =
+ builtins.filter
(profileName: ! builtins.hasAttr profileName profileModuleMap)
profiles;
# Only import known profiles; the assertion below catches unknowns.
- activeProfiles = builtins.filter
+ activeProfiles =
+ builtins.filter
(profileName: builtins.hasAttr profileName profileModuleMap)
profiles;
profileImports = map (profileName: profileModuleMap.${profileName}) activeProfiles;
- contextStr = if context == null then "null" else context;
-
+ contextStr =
+ if context == null
+ then "null"
+ else context;
in {
imports =
- [ commonModule baseModule ]
+ [commonModule baseModule]
++ contextImport
++ profileImports;
assertions = [
{
- assertion = builtins.elem context [ "desktop" "server" null ];
+ assertion = builtins.elem context ["desktop" "server" null];
message =
"m3ta home: context must be 'desktop', 'server', or null"
+ " (got: '${contextStr}')";
diff --git a/home/m3tam3re/m3-aether.nix b/home/m3tam3re/m3-aether.nix
index a24412e..fac6499 100644
--- a/home/m3tam3re/m3-aether.nix
+++ b/home/m3tam3re/m3-aether.nix
@@ -1,15 +1,11 @@
# m3-aether — cloud VM.
# Context: server | Profiles: (none)
-{
- lib,
- ...
-}:
-let
- homeLib = import ../lib { inherit lib; };
+{lib, ...}: let
+ homeLib = import ../lib {inherit lib;};
in {
imports = [
(homeLib.mkHomeConfig {
- profiles = [ ];
+ profiles = [];
context = "server";
})
./home-server.nix
@@ -26,5 +22,4 @@ in {
nitch.enable = true;
};
};
-
}
diff --git a/home/m3tam3re/m3-ares.nix b/home/m3tam3re/m3-ares.nix
index ee7593a..4cdfb3b 100644
--- a/home/m3tam3re/m3-ares.nix
+++ b/home/m3tam3re/m3-ares.nix
@@ -4,133 +4,131 @@
config,
lib,
...
-}:
-let
- homeLib = import ../lib { inherit lib; };
+}: let
+ homeLib = import ../lib {inherit lib;};
in
-with lib; {
- imports = [
- (homeLib.mkHomeConfig {
- profiles = [ "coding" "gaming" "media" ];
- context = "desktop";
- })
- ./home.nix
- ];
+ with lib; {
+ imports = [
+ (homeLib.mkHomeConfig {
+ profiles = ["coding" "gaming" "media"];
+ context = "desktop";
+ })
+ ./home.nix
+ ];
- config = mkMerge [
- {
- # Base CLI tools (new namespace)
- base = {
- shell = {
- fish.enable = true;
- nushell.enable = true;
- starship.enable = true;
+ config = mkMerge [
+ {
+ # Base CLI tools (new namespace)
+ base = {
+ shell = {
+ fish.enable = true;
+ nushell.enable = true;
+ starship.enable = true;
+ };
+ cliTools = {
+ fzf.enable = true;
+ nitch.enable = true;
+ television.enable = true;
+ };
+ secrets.enable = true;
};
- cliTools = {
- fzf.enable = true;
- nitch.enable = true;
- television.enable = true;
+
+ # Desktop features (new namespace)
+ desktop = {
+ wm = {
+ hyprland.enable = true;
+ rofi.enable = true;
+ wayland.enable = true;
+ };
+ apps = {
+ crypto.enable = true;
+ obsidian.enable = true;
+ office.enable = true;
+ };
+ theme = {
+ fonts.enable = true;
+ wallpapers.enable = true;
+ };
};
- secrets.enable = true;
- };
-
- # Desktop features (new namespace)
- desktop = {
- wm = {
- hyprland.enable = true;
- rofi.enable = true;
- wayland.enable = true;
+ # Coding environment
+ coding = {
+ editors = {
+ neovim.enable = true;
+ zed.enable = true;
+ };
+ lsp.enable = true;
};
- apps = {
- crypto.enable = true;
- obsidian.enable = true;
- office.enable = true;
+
+ # Gaming profile features
+ profiles.gaming = {
+ steam.enable = true;
+ gamescope.enable = true;
};
- theme = {
- fonts.enable = true;
- wallpapers.enable = true;
+
+ # Media profile features
+ profiles.media = {
+ obs.enable = true;
+ ffmpeg.enable = true;
+ kdenlive.enable = true;
+ ytDlp.enable = true;
};
- };
- # Coding environment
- coding = {
- editors = {
- neovim.enable = true;
- zed.enable = true;
- };
- lsp.enable = true;
- };
-
- # Gaming profile features
- profiles.gaming = {
- steam.enable = true;
- gamescope.enable = true;
- };
-
- # Media profile features
- profiles.media = {
- obs.enable = true;
- ffmpeg.enable = true;
- kdenlive.enable = true;
- ytDlp.enable = true;
- };
-
- xdg = {
- enable = true;
- configFile."mimeapps.list".force = true;
- mimeApps = {
+ xdg = {
enable = true;
- associations.added = {
- "application/zip" = [ "org.gnome.FileRoller.desktop" ];
- "application/csv" = [ "calc.desktop" ];
- "application/pdf" = [ "vivaldi-stable.desktop" ];
- "x-scheme-handler/http" = [ "vivaldi-stable.desktop" ];
- "x-scheme-handler/https" = [ "vivaldi-stable.desktop" ];
- };
- defaultApplications = {
- "application/zip" = [ "org.gnome.FileRoller.desktop" ];
- "application/csv" = [ "calc.desktop" ];
- "application/pdf" = [ "vivaldi-stable.desktop" ];
- "application/md" = [ "dev.zed.Zed.desktop" ];
- "application/text" = [ "dev.zed.Zed.desktop" ];
- "x-scheme-handler/http" = [ "vivaldi-stable.desktop" ];
- "x-scheme-handler/https" = [ "vivaldi-stable.desktop" ];
+ configFile."mimeapps.list".force = true;
+ mimeApps = {
+ enable = true;
+ associations.added = {
+ "application/zip" = ["org.gnome.FileRoller.desktop"];
+ "application/csv" = ["calc.desktop"];
+ "application/pdf" = ["vivaldi-stable.desktop"];
+ "x-scheme-handler/http" = ["vivaldi-stable.desktop"];
+ "x-scheme-handler/https" = ["vivaldi-stable.desktop"];
+ };
+ defaultApplications = {
+ "application/zip" = ["org.gnome.FileRoller.desktop"];
+ "application/csv" = ["calc.desktop"];
+ "application/pdf" = ["vivaldi-stable.desktop"];
+ "application/md" = ["dev.zed.Zed.desktop"];
+ "application/text" = ["dev.zed.Zed.desktop"];
+ "x-scheme-handler/http" = ["vivaldi-stable.desktop"];
+ "x-scheme-handler/https" = ["vivaldi-stable.desktop"];
+ };
};
};
- };
- }
+ }
- # Host-specific Hyprland monitor and workspace layout
- (mkIf config.desktop.wm.hyprland.enable {
- wayland.windowManager.hyprland = {
- enable = true;
- settings = {
- exec-once = [ "tuxedo-backlight" ];
- monitor = [
- "eDP-1,preferred,0x0,1.25"
- "HDMI-A-1,1920x1080@120,2560x0,1"
- ];
- workspace = [
- "1, monitor:eDP-1, default:true"
- "2, monitor:eDP-1"
- "3, monitor:eDP-1"
- "4, monitor:HDMI-A-1,"
- "5, monitor:HDMI-A-1,border:false,rounding:false"
- "6, monitor:HDMI-A-1"
- ];
- windowrule = [
- "match:class dev.zed.Zed, workspace 1"
- "match:class Msty, workspace 1"
- "match:class ^(com.obsproject.Studio)$, workspace 2"
- "match:class ^(brave-browser)$, workspace 4, opacity 1.0"
- "match:class ^(vivaldi-stable)$, workspace 4, opacity 1.0"
- "match:class ^steam_app_\\d+$, fullscreen on"
- "match:class ^steam_app_\\d+$, workspace 5"
- "match:class ^steam_app_\\d+$, idle_inhibit focus"
- ];
+ # Host-specific Hyprland monitor and workspace layout
+ (mkIf config.desktop.wm.hyprland.enable {
+ wayland.windowManager.hyprland = {
+ enable = true;
+ settings = {
+ exec-once = ["tuxedo-backlight"];
+ monitor = [
+ "eDP-1,preferred,0x0,1.25"
+ "HDMI-A-1,1920x1080@120,2560x0,1"
+ ];
+ workspace = [
+ "1, monitor:eDP-1, default:true"
+ "2, monitor:eDP-1"
+ "3, monitor:eDP-1"
+ "4, monitor:HDMI-A-1,"
+ "5, monitor:HDMI-A-1,border:false,rounding:false"
+ "6, monitor:HDMI-A-1"
+ ];
+ windowrule = [
+ "match:class dev.zed.Zed, workspace 1"
+ "match:class Msty, workspace 1"
+ "match:class ^(com.obsproject.Studio)$, workspace 2"
+ "match:class ^(brave-browser)$, workspace 4, opacity 1.0"
+ "match:class ^(vivaldi-stable)$, workspace 4, opacity 1.0"
+ "match:class ^steam_app_\\d+$, fullscreen on"
+ "match:class ^steam_app_\\d+$, workspace 5"
+ "match:class ^steam_app_\\d+$, idle_inhibit focus"
+ ];
+ };
};
- };
- })
- ];
-}
+ })
+ ];
+ }
diff --git a/home/m3tam3re/m3-atlas.nix b/home/m3tam3re/m3-atlas.nix
index 161798f..248fe23 100644
--- a/home/m3tam3re/m3-atlas.nix
+++ b/home/m3tam3re/m3-atlas.nix
@@ -1,15 +1,11 @@
# m3-atlas — primary server, Traefik hub and container host.
# Context: server | Profiles: coding
-{
- lib,
- ...
-}:
-let
- homeLib = import ../lib { inherit lib; };
+{lib, ...}: let
+ homeLib = import ../lib {inherit lib;};
in {
imports = [
(homeLib.mkHomeConfig {
- profiles = [ "coding" ];
+ profiles = ["coding"];
context = "server";
})
./home-server.nix
diff --git a/home/m3tam3re/m3-daedalus.nix b/home/m3tam3re/m3-daedalus.nix
index 3c09562..124dc4a 100644
--- a/home/m3tam3re/m3-daedalus.nix
+++ b/home/m3tam3re/m3-daedalus.nix
@@ -4,126 +4,124 @@
config,
lib,
...
-}:
-let
- homeLib = import ../lib { inherit lib; };
+}: let
+ homeLib = import ../lib {inherit lib;};
in
-with lib; {
- imports = [
- (homeLib.mkHomeConfig {
- profiles = [ "coding" "media" ];
- context = "desktop";
- })
- ./home.nix
- ];
+ with lib; {
+ imports = [
+ (homeLib.mkHomeConfig {
+ profiles = ["coding" "media"];
+ context = "desktop";
+ })
+ ./home.nix
+ ];
- config = mkMerge [
- {
- # Base CLI tools (new namespace)
- base = {
- shell = {
- fish.enable = true;
- nushell.enable = true;
- starship.enable = true;
+ config = mkMerge [
+ {
+ # Base CLI tools (new namespace)
+ base = {
+ shell = {
+ fish.enable = true;
+ nushell.enable = true;
+ starship.enable = true;
+ };
+ cliTools = {
+ fzf.enable = true;
+ nitch.enable = true;
+ television.enable = true;
+ };
+ secrets.enable = true;
};
- cliTools = {
- fzf.enable = true;
- nitch.enable = true;
- television.enable = true;
- };
- secrets.enable = true;
- };
-
- # Desktop features (new namespace)
- desktop = {
- wm = {
- hyprland.enable = false;
- rofi.enable = true;
- wayland.enable = false;
+ # Desktop features (new namespace)
+ desktop = {
+ wm = {
+ hyprland.enable = false;
+ rofi.enable = true;
+ wayland.enable = false;
+ };
+ apps = {
+ obsidian.enable = true;
+ office.enable = false;
+ crypto.enable = false;
+ };
+ theme = {
+ fonts.enable = true;
+ wallpapers.enable = false;
+ };
};
- apps = {
- obsidian.enable = true;
- office.enable = false;
- crypto.enable = false;
- };
- theme = {
- fonts.enable = true;
- wallpapers.enable = false;
- };
- };
- # Coding environment
- coding = {
- editors = {
- neovim.enable = true;
- zed.enable = true;
+ # Coding environment
+ coding = {
+ editors = {
+ neovim.enable = true;
+ zed.enable = true;
+ };
+ lsp.enable = true;
};
- lsp.enable = true;
- };
- # Media profile features
- profiles.media = {
- obs.enable = false;
- ffmpeg.enable = false;
- kdenlive.enable = false;
- ytDlp.enable = true;
- };
+ # Media profile features
+ profiles.media = {
+ obs.enable = false;
+ ffmpeg.enable = false;
+ kdenlive.enable = false;
+ ytDlp.enable = true;
+ };
- xdg = {
- enable = true;
- configFile."mimeapps.list".force = true;
- mimeApps = {
+ xdg = {
enable = true;
- associations.added = {
- "application/zip" = [ "org.gnome.FileRoller.desktop" ];
- "application/csv" = [ "calc.desktop" ];
- "application/pdf" = [ "vivaldi-stable.desktop" ];
- "x-scheme-handler/http" = [ "vivaldi-stable.desktop" ];
- "x-scheme-handler/https" = [ "vivaldi-stable.desktop" ];
- };
- defaultApplications = {
- "application/zip" = [ "org.gnome.FileRoller.desktop" ];
- "application/csv" = [ "calc.desktop" ];
- "application/pdf" = [ "vivaldi-stable.desktop" ];
- "application/md" = [ "dev.zed.Zed.desktop" ];
- "application/text" = [ "dev.zed.Zed.desktop" ];
- "x-scheme-handler/http" = [ "vivaldi-stable.desktop" ];
- "x-scheme-handler/https" = [ "vivaldi-stable.desktop" ];
+ configFile."mimeapps.list".force = true;
+ mimeApps = {
+ enable = true;
+ associations.added = {
+ "application/zip" = ["org.gnome.FileRoller.desktop"];
+ "application/csv" = ["calc.desktop"];
+ "application/pdf" = ["vivaldi-stable.desktop"];
+ "x-scheme-handler/http" = ["vivaldi-stable.desktop"];
+ "x-scheme-handler/https" = ["vivaldi-stable.desktop"];
+ };
+ defaultApplications = {
+ "application/zip" = ["org.gnome.FileRoller.desktop"];
+ "application/csv" = ["calc.desktop"];
+ "application/pdf" = ["vivaldi-stable.desktop"];
+ "application/md" = ["dev.zed.Zed.desktop"];
+ "application/text" = ["dev.zed.Zed.desktop"];
+ "x-scheme-handler/http" = ["vivaldi-stable.desktop"];
+ "x-scheme-handler/https" = ["vivaldi-stable.desktop"];
+ };
};
};
- };
- }
+ }
- # Host-specific Hyprland layout — only applies when hyprland is enabled
- (mkIf config.desktop.wm.hyprland.enable {
- wayland.windowManager.hyprland = {
- enable = true;
- settings = {
- monitor = [
- "eDP-1,preferred,0x0,1.25"
- "HDMI-A-1,preferred,2560x0,1"
- ];
- workspace = [
- "1, monitor:eDP-1, default:true"
- "2, monitor:eDP-1"
- "3, monitor:eDP-1"
- "4, monitor:HDMI-A-1"
- "5, monitor:HDMI-A-1,border:false,rounding:false"
- "6, monitor:HDMI-A-1"
- ];
- windowrule = [
- "match:class dev.zed.Zed, workspace 1"
- "match:class Msty, workspace 1"
- "match:class ^(com.obsproject.Studio)$, workspace 2"
- "match:class ^(brave-browser)$, workspace 4, opacity 1.0"
- "match:class ^(vivaldi-stable)$, workspace 4, opacity 1.0"
- "match:class ^steam_app_\\d+$, fullscreen on"
- "match:class ^steam_app_\\d+$, workspace 5"
- "match:class ^steam_app_\\d+$, idle_inhibit focus"
- ];
+ # Host-specific Hyprland layout — only applies when hyprland is enabled
+ (mkIf config.desktop.wm.hyprland.enable {
+ wayland.windowManager.hyprland = {
+ enable = true;
+ settings = {
+ monitor = [
+ "eDP-1,preferred,0x0,1.25"
+ "HDMI-A-1,preferred,2560x0,1"
+ ];
+ workspace = [
+ "1, monitor:eDP-1, default:true"
+ "2, monitor:eDP-1"
+ "3, monitor:eDP-1"
+ "4, monitor:HDMI-A-1"
+ "5, monitor:HDMI-A-1,border:false,rounding:false"
+ "6, monitor:HDMI-A-1"
+ ];
+ windowrule = [
+ "match:class dev.zed.Zed, workspace 1"
+ "match:class Msty, workspace 1"
+ "match:class ^(com.obsproject.Studio)$, workspace 2"
+ "match:class ^(brave-browser)$, workspace 4, opacity 1.0"
+ "match:class ^(vivaldi-stable)$, workspace 4, opacity 1.0"
+ "match:class ^steam_app_\\d+$, fullscreen on"
+ "match:class ^steam_app_\\d+$, workspace 5"
+ "match:class ^steam_app_\\d+$, idle_inhibit focus"
+ ];
+ };
};
- };
- })
- ];
-}
+ })
+ ];
+ }
diff --git a/home/m3tam3re/m3-helios.nix b/home/m3tam3re/m3-helios.nix
index 17df42f..12fb021 100644
--- a/home/m3tam3re/m3-helios.nix
+++ b/home/m3tam3re/m3-helios.nix
@@ -1,15 +1,11 @@
# m3-helios — AdGuard DNS and internal routing server.
# Context: server | Profiles: (none)
-{
- lib,
- ...
-}:
-let
- homeLib = import ../lib { inherit lib; };
+{lib, ...}: let
+ homeLib = import ../lib {inherit lib;};
in {
imports = [
(homeLib.mkHomeConfig {
- profiles = [ ];
+ profiles = [];
context = "server";
})
./home-server.nix
@@ -26,5 +22,4 @@ in {
nitch.enable = true;
};
};
-
}
diff --git a/home/m3tam3re/m3-hermes.nix b/home/m3tam3re/m3-hermes.nix
index e79822d..fe8d193 100644
--- a/home/m3tam3re/m3-hermes.nix
+++ b/home/m3tam3re/m3-hermes.nix
@@ -1,15 +1,11 @@
# m3-hermes — secondary server.
# Context: server | Profiles: (none)
-{
- lib,
- ...
-}:
-let
- homeLib = import ../lib { inherit lib; };
+{lib, ...}: let
+ homeLib = import ../lib {inherit lib;};
in {
imports = [
(homeLib.mkHomeConfig {
- profiles = [ ];
+ profiles = [];
context = "server";
})
./home-server.nix
@@ -26,5 +22,4 @@ in {
nitch.enable = true;
};
};
-
}
diff --git a/home/m3tam3re/m3-kratos.nix b/home/m3tam3re/m3-kratos.nix
index 7d23493..333bbbd 100644
--- a/home/m3tam3re/m3-kratos.nix
+++ b/home/m3tam3re/m3-kratos.nix
@@ -4,129 +4,128 @@
config,
lib,
...
-}:
-let
- homeLib = import ../lib { inherit lib; };
+}: let
+ homeLib = import ../lib {inherit lib;};
in
-with lib; {
- imports = [
- (homeLib.mkHomeConfig {
- profiles = [ "coding" "gaming" "media" ];
- context = "desktop";
- })
- ./home.nix
- ];
+ with lib; {
+ imports = [
+ (homeLib.mkHomeConfig {
+ profiles = ["coding" "gaming" "media"];
+ context = "desktop";
+ })
+ ./home.nix
+ ];
- config = mkMerge [
- {
- # Base CLI tools (new namespace)
- base = {
- shell = {
- nushell.enable = true;
- starship.enable = true;
+ config = mkMerge [
+ {
+ # Base CLI tools (new namespace)
+ base = {
+ shell = {
+ nushell.enable = true;
+ starship.enable = true;
+ };
+ cliTools = {
+ fzf.enable = true;
+ nitch.enable = true;
+ television.enable = true;
+ };
+ secrets.enable = true;
};
- cliTools = {
- fzf.enable = true;
- nitch.enable = true;
- television.enable = true;
- };
- secrets.enable = true;
- };
- # Desktop features (new namespace)
- desktop = {
- wm = {
- hyprland.enable = true;
- rofi.enable = true;
- wayland.enable = true;
+ # Desktop features (new namespace)
+ desktop = {
+ wm = {
+ hyprland.enable = true;
+ rofi.enable = true;
+ wayland.enable = true;
+ };
+ apps = {
+ crypto.enable = true;
+ obsidian.enable = true;
+ office.enable = true;
+ };
+ theme = {
+ fonts.enable = true;
+ wallpapers.enable = true;
+ };
};
- apps = {
- crypto.enable = true;
- obsidian.enable = true;
- office.enable = true;
+
+ # Coding environment
+ coding = {
+ editors = {
+ neovim.enable = true;
+ zed.enable = true;
+ };
+ lsp.enable = true;
};
- theme = {
- fonts.enable = true;
- wallpapers.enable = true;
+
+ # Gaming profile features
+ profiles.gaming = {
+ steam.enable = true;
+ gamescope.enable = true;
};
- };
- # Coding environment
- coding = {
- editors = {
- neovim.enable = true;
- zed.enable = true;
+ # Media profile features
+ profiles.media = {
+ obs.enable = true;
+ ffmpeg.enable = true;
+ kdenlive.enable = true;
+ ytDlp.enable = true;
};
- lsp.enable = true;
- };
- # Gaming profile features
- profiles.gaming = {
- steam.enable = true;
- gamescope.enable = true;
- };
-
- # Media profile features
- profiles.media = {
- obs.enable = true;
- ffmpeg.enable = true;
- kdenlive.enable = true;
- ytDlp.enable = true;
- };
-
- xdg = {
- enable = true;
- configFile."mimeapps.list".force = true;
- mimeApps = {
+ xdg = {
enable = true;
- associations.added = {
- "application/zip" = [ "org.gnome.FileRoller.desktop" ];
- "application/csv" = [ "calc.desktop" ];
- "application/pdf" = [ "vivaldi-stable.desktop" ];
- "x-scheme-handler/http" = [ "vivaldi-stable.desktop" ];
- "x-scheme-handler/https" = [ "vivaldi-stable.desktop" ];
- };
- defaultApplications = {
- "application/zip" = [ "org.gnome.FileRoller.desktop" ];
- "application/csv" = [ "calc.desktop" ];
- "application/pdf" = [ "vivaldi-stable.desktop" ];
- "application/md" = [ "dev.zed.Zed.desktop" ];
- "application/text" = [ "dev.zed.Zed.desktop" ];
- "x-scheme-handler/http" = [ "vivaldi-stable.desktop" ];
- "x-scheme-handler/https" = [ "vivaldi-stable.desktop" ];
+ configFile."mimeapps.list".force = true;
+ mimeApps = {
+ enable = true;
+ associations.added = {
+ "application/zip" = ["org.gnome.FileRoller.desktop"];
+ "application/csv" = ["calc.desktop"];
+ "application/pdf" = ["vivaldi-stable.desktop"];
+ "x-scheme-handler/http" = ["vivaldi-stable.desktop"];
+ "x-scheme-handler/https" = ["vivaldi-stable.desktop"];
+ };
+ defaultApplications = {
+ "application/zip" = ["org.gnome.FileRoller.desktop"];
+ "application/csv" = ["calc.desktop"];
+ "application/pdf" = ["vivaldi-stable.desktop"];
+ "application/md" = ["dev.zed.Zed.desktop"];
+ "application/text" = ["dev.zed.Zed.desktop"];
+ "x-scheme-handler/http" = ["vivaldi-stable.desktop"];
+ "x-scheme-handler/https" = ["vivaldi-stable.desktop"];
+ };
};
};
- };
- }
+ }
- # Host-specific Hyprland monitor and workspace layout (dual 1440p monitors)
- (mkIf config.desktop.wm.hyprland.enable {
- wayland.windowManager.hyprland = {
- enable = true;
- settings = {
- monitor = [
- "DP-1,2560x1440@144,0x0,1"
- "DP-2,2560x1440@144,2560x0,1"
- ];
- workspace = [
- "1, monitor:DP-1, default:true"
- "2, monitor:DP-1"
- "3, monitor:DP-1"
- "4, monitor:DP-2"
- "5, monitor:DP-2"
- "6, monitor:DP-2"
- "7, monitor:DP-2"
- ];
- windowrule = [
- "match:class dev.zed.Zed, workspace 1"
- "match:class Msty, workspace 1"
- "match:class ^(com.obsproject.Studio)$, workspace 2"
- "match:class ^(brave-browser)$, workspace 4, opacity 1.0"
- "match:class ^(vivaldi-stable)$, workspace 4, opacity 1.0"
- "match:class ^steam_app_\\d+$, idle_inhibit focus"
- ];
+ # Host-specific Hyprland monitor and workspace layout (dual 1440p monitors)
+ (mkIf config.desktop.wm.hyprland.enable {
+ wayland.windowManager.hyprland = {
+ enable = true;
+ settings = {
+ monitor = [
+ "DP-1,2560x1440@144,0x0,1"
+ "DP-2,2560x1440@144,2560x0,1"
+ ];
+ workspace = [
+ "1, monitor:DP-1, default:true"
+ "2, monitor:DP-1"
+ "3, monitor:DP-1"
+ "4, monitor:DP-2"
+ "5, monitor:DP-2"
+ "6, monitor:DP-2"
+ "7, monitor:DP-2"
+ ];
+ windowrule = [
+ "match:class dev.zed.Zed, workspace 1"
+ "match:class Msty, workspace 1"
+ "match:class ^(com.obsproject.Studio)$, workspace 2"
+ "match:class ^(brave-browser)$, workspace 4, opacity 1.0"
+ "match:class ^(vivaldi-stable)$, workspace 4, opacity 1.0"
+ "match:class ^steam_app_\\d+$, idle_inhibit focus"
+ ];
+ };
};
- };
- })
- ];
-}
+ })
+ ];
+ }
diff --git a/hosts/m3-aether/hardware-configuration.nix b/hosts/m3-aether/hardware-configuration.nix
index 4e571c8..7caa8fe 100644
--- a/hosts/m3-aether/hardware-configuration.nix
+++ b/hosts/m3-aether/hardware-configuration.nix
@@ -1,24 +1,28 @@
-# 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 + "/profiles/qemu-guest.nix")
- ];
-
- boot.initrd.availableKernelModules = [ "ata_piix" "uhci_hcd" "virtio_pci" "virtio_scsi" "sd_mod" "sr_mod" ];
- boot.initrd.kernelModules = [ ];
- boot.kernelModules = [ ];
- boot.extraModulePackages = [ ];
-
- # 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..useDHCP`.
- networking.useDHCP = lib.mkDefault true;
- # networking.interfaces.ens18.useDHCP = lib.mkDefault true;
-
- nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
-}
+# 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 + "/profiles/qemu-guest.nix")
+ ];
+
+ boot.initrd.availableKernelModules = ["ata_piix" "uhci_hcd" "virtio_pci" "virtio_scsi" "sd_mod" "sr_mod"];
+ boot.initrd.kernelModules = [];
+ boot.kernelModules = [];
+ boot.extraModulePackages = [];
+
+ # 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..useDHCP`.
+ networking.useDHCP = lib.mkDefault true;
+ # networking.interfaces.ens18.useDHCP = lib.mkDefault true;
+
+ nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
+}
diff --git a/hosts/m3-ares/services/postgres.nix b/hosts/m3-ares/services/postgres.nix
index 4b8feec..eb46ca8 100644
--- a/hosts/m3-ares/services/postgres.nix
+++ b/hosts/m3-ares/services/postgres.nix
@@ -1,7 +1,4 @@
-{
- pkgs,
- ...
-}: {
+{pkgs, ...}: {
services.postgresql = {
enable = true;
package = pkgs.postgresql_17;
diff --git a/hosts/m3-atlas/services/containers/kestra.nix b/hosts/m3-atlas/services/containers/kestra.nix
index 87ceb79..8882d8c 100644
--- a/hosts/m3-atlas/services/containers/kestra.nix
+++ b/hosts/m3-atlas/services/containers/kestra.nix
@@ -1,9 +1,9 @@
-{ config, ... }: {
+{config, ...}: {
virtualisation.oci-containers.containers."kestra" = {
image = "docker.io/kestra/kestra:latest";
- environmentFiles = [ config.age.secrets.kestra-env.path ];
- cmd = [ "server" "standalone" "--config" "/etc/config/application.yaml"];
- ports = [ "127.0.0.1:3018:8080" ];
+ environmentFiles = [config.age.secrets.kestra-env.path];
+ cmd = ["server" "standalone" "--config" "/etc/config/application.yaml"];
+ ports = ["127.0.0.1:3018:8080"];
user = "root";
volumes = [
"/var/run/docker.sock:/var/run/docker.sock"
@@ -11,8 +11,7 @@
"kestra_data:/app/storage"
"/tmp/kestra-wd:/tmp/kestra-wd"
];
- extraOptions =
- [ "--add-host=postgres:10.89.0.1" "--ip=10.89.0.18" "--network=web" ];
+ extraOptions = ["--add-host=postgres:10.89.0.1" "--ip=10.89.0.18" "--network=web"];
};
systemd.tmpfiles.rules = [
@@ -21,12 +20,11 @@
# Traefik configuration specific to littlelink
services.traefik.dynamicConfigOptions.http = {
- services.kestra.loadBalancer.servers =
- [{ url = "http://localhost:3018/"; }];
+ services.kestra.loadBalancer.servers = [{url = "http://localhost:3018/";}];
routers.kestra = {
rule = "Host(`k.m3ta.dev`)";
- tls = { certResolver = "godaddy"; };
+ tls = {certResolver = "godaddy";};
service = "kestra";
entrypoints = "websecure";
};
diff --git a/hosts/m3-helios/hardware-configuration.nix b/hosts/m3-helios/hardware-configuration.nix
index 4e571c8..7caa8fe 100644
--- a/hosts/m3-helios/hardware-configuration.nix
+++ b/hosts/m3-helios/hardware-configuration.nix
@@ -1,24 +1,28 @@
-# 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 + "/profiles/qemu-guest.nix")
- ];
-
- boot.initrd.availableKernelModules = [ "ata_piix" "uhci_hcd" "virtio_pci" "virtio_scsi" "sd_mod" "sr_mod" ];
- boot.initrd.kernelModules = [ ];
- boot.kernelModules = [ ];
- boot.extraModulePackages = [ ];
-
- # 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..useDHCP`.
- networking.useDHCP = lib.mkDefault true;
- # networking.interfaces.ens18.useDHCP = lib.mkDefault true;
-
- nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
-}
+# 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 + "/profiles/qemu-guest.nix")
+ ];
+
+ boot.initrd.availableKernelModules = ["ata_piix" "uhci_hcd" "virtio_pci" "virtio_scsi" "sd_mod" "sr_mod"];
+ boot.initrd.kernelModules = [];
+ boot.kernelModules = [];
+ boot.extraModulePackages = [];
+
+ # 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..useDHCP`.
+ networking.useDHCP = lib.mkDefault true;
+ # networking.interfaces.ens18.useDHCP = lib.mkDefault true;
+
+ nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
+}
diff --git a/hosts/m3-hermes/hardware-configuration.nix b/hosts/m3-hermes/hardware-configuration.nix
index 419024b..d52e1a3 100644
--- a/hosts/m3-hermes/hardware-configuration.nix
+++ b/hosts/m3-hermes/hardware-configuration.nix
@@ -1,7 +1,13 @@
# Do not modify this file! It was generated by 'nixos-generate-config'
# and may be overwritten by future invocations. Please make changes
# to configuration.nix instead.
-{config, lib, pkgs, modulesPath, ...}: {
+{
+ config,
+ lib,
+ pkgs,
+ modulesPath,
+ ...
+}: {
imports = [
(modulesPath + "/profiles/qemu-guest.nix")
];