diff --git a/Droidnix/README.org b/Droidnix/README.org
index 2bdfa45fa..6d8531d2c 100644
--- a/Droidnix/README.org
+++ b/Droidnix/README.org
@@ -513,6 +513,76 @@ This sets up the zsh in the terminal
}
#+END_SRC
+** =generated/modules/traveldroid/apps/emacs/emacs.nix=
+This installs emacs
+#+BEGIN_SRC nix :tangle generated/modules/traveldroid/apps/emacs/emacs.nix :noweb tangle :mkdirp yes :eval never-html
+{ pkgs, ... }:
+{
+programs.emacs = {
+enable = true;
+# install with tree sitter enabled
+package = (pkgs.emacs-pgtk.override { withTreeSitter = true; });
+extraPackages = epkgs: [
+ # also install all tree sitter grammars
+ epkgs.manualPackages.treesit-grammars.with-all-grammars
+ epkgs.nerd-icons # nerd fonts support
+ epkgs.doom-modeline # model line
+ epkgs.diminish # hides modes from modeline
+ epkgs.eldoc # doc support
+ epkgs.pulsar # pulses the cursor when jumping about
+ epkgs.which-key # help porcelain
+ epkgs.expreg # expand region
+ epkgs.vundo # undo tree
+ epkgs.puni # structured editing
+ epkgs.avy # jumping utility
+ epkgs.consult # emacs right click
+ epkgs.vertico # minibuffer completion
+ epkgs.marginalia # annotations for completions
+ epkgs.crux # utilities
+ epkgs.magit # git porcelain
+ epkgs.nerd-icons-corfu # nerd icons for completion
+ epkgs.corfu # completion
+ epkgs.cape # completion extensions
+ epkgs.orderless # search paradigm
+ epkgs.yasnippet # snippets support
+ epkgs.yasnippet-snippets # commonly used snippets
+ epkgs.rg # ripgrep
+ epkgs.exec-path-from-shell # load env and path
+ epkgs.eat # better shell
+ epkgs.rust-mode # rust mode (when rust-ts doesn't cut it)
+ epkgs.rustic # more rust things
+ epkgs.nix-mode # nix lang
+ epkgs.hcl-mode # hashicorp file mode
+ epkgs.shell-pop # quick shell popup
+ epkgs.envrc # support for loading .envrc
+ epkgs.nixpkgs-fmt # format nix files
+ epkgs.f # string + file utilities
+ epkgs.gptel # llm chat (mainly claude)
+ epkgs.catppuccin-theme # catppuccin theme
+ epkgs.eldoc-box # docs in a box
+ epkgs.sideline # mainly for flymake errors on the side
+ epkgs.sideline-flymake # mainly for flymake errors on the side
+ epkgs.sideline-eglot # mainly for flymake errors on the side
+];
+};
+home.sessionVariables = {
+EDITOR = "emacs";
+XDG_SCREENSHOTS_DIR = "~/screenshots";
+};
+home.file = {
+emacs-init = {
+ source = "${flakeRoot}/assets/traveldroid/conf/emacs/early-init.el";
+ target = ".emacs.d/early-init.el";
+};
+emacs = {
+ source = "${flakeRoot}/assets/traveldroid/conf/emacs//init.el";
+ target = ".emacs.d/init.el";
+};
+};
+}
+
+#+END_SRC
+
* generated/modules/traveldroid/desktop
** =generated/modules/traveldroid/desktop/fonts.nix=
diff --git a/Droidnix/assets/traveldroid/apps/emacs/setup_emacs.sh b/Droidnix/assets/traveldroid/apps/emacs/setup_emacs.sh
deleted file mode 100755
index 88e8da42c..000000000
--- a/Droidnix/assets/traveldroid/apps/emacs/setup_emacs.sh
+++ /dev/null
@@ -1,301 +0,0 @@
-#!/usr/bin/env bash
-
-# Droidnix: Complete Emacs setup for Nix/Org tangling, HTML export, and a great editing experience
-# For NixOS systems
-
-set -euo pipefail
-
-
-# Install Emacs and git via nix-shell (no apt-get)
-if ! command -v emacs &> /dev/null; then
- echo "Emacs not found. Installing Emacs and git via nix-shell..."
- nix-shell -p emacs git --run "$0" "$@"
- exit 0
-fi
-
-# Create a minimal Emacs config for package installation
-TEMP_CONFIG=$(mktemp /tmp/droidnix-emacs-setup.XXXXXX.el)
-cat > "$TEMP_CONFIG" << 'EOF'
-;; Minimal config for installing packages
-(require 'package)
-(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t)
-(add-to-list 'package-archives '("melpa-stable" . "https://stable.melpa.org/packages/") t)
-(package-initialize)
-EOF
-
-# Install packages in batch mode
-echo "Installing Emacs packages..."
-emacs --batch \
- --load "$TEMP_CONFIG" \
- --eval "(package-refresh-contents)" \
- --eval "(package-install 'use-package)" \
- --eval "(package-install 'org)" \
- --eval "(package-install 'nix-mode)" \
- --eval "(package-install 'htmlize)" \
- --eval "(package-install 'catppuccin-theme)" \
- --eval "(package-install 'org-bullets)" \
- --eval "(package-install 'magit)" \
- --eval "(package-install 'company)" \
- --eval "(package-install 'flycheck)" \
- --eval "(package-install 'doom-modeline)" \
- --eval "(package-install 'which-key)" \
- --eval "(package-install 'projectile)" \
- --eval "(package-install 'ivy)" \
- --eval "(package-install 'counsel)" \
- --eval "(package-install 'all-the-icons)" \
- --eval "(package-install 'doom-themes)" \
- --eval "(package-install 'treemacs)" \
- --eval "(package-install 'lsp-mode)" \
- --eval "(package-install 'dashboard)"
-
-# Create a post-install config for interactive use
-USER_EMACSCONFIG="${HOME}/.emacs.d/init.el"
-if [ ! -f "$USER_EMACSCONFIG" ]; then
- mkdir -p "${HOME}/.emacs.d"
- cat > "$USER_EMACSCONFIG" << 'EOF'
-;; Droidnix Emacs Configuration for NixOS
-(require 'package)
-(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t)
-(package-initialize)
-
-;; Basic UI improvements
-(tool-bar-mode -1) ; Disable toolbar
-(menu-bar-mode -1) ; Disable menu bar
-(scroll-bar-mode -1) ; Disable scroll bar
-(setq inhibit-startup-message t) ; Disable startup message
-(setq make-backup-files nil) ; Disable backup files
-(setq auto-save-default nil) ; Disable auto-save files
-
-;; Enable Catppuccin Mocha theme
-(when (fboundp 'load-theme)
- (ignore-errors
- (load-theme 'catppuccin-mocha t)
- (setq catppuccin-disable-term-colors nil)
- (setq catppuccin-enable-bold t)
- (setq catppuccin-enable-italic t)))
-
-;; Enable Doom Modeline
-(when (fboundp 'doom-modeline-mode)
- (doom-modeline-mode 1))
-
-;; Enable All The Icons
-(when (fboundp 'all-the-icons-install-fonts)
- (all-the-icons-install-fonts)
- (global-all-the-icons-mode))
-
-;; Enable Treemacs
-(when (fboundp 'treemacs)
- (treemacs-mode)
- (setq treemacs-width 30)
- (setq treemacs-position 'left)
- (setq treemacs-space-between-root-nodes nil)
- (setq treemacs-indent-level 2)
- (setq treemacs-file-follow-delay 0.1)
- (setq treemacs-git-icon-enabled t)
- (setq treemacs-project-follow t)
- (setq treemacs-display-project-root t)
- (setq treemacs-show-hidden-files t))
-
-;; Enable Company for autocomplete
-(when (fboundp 'company-mode)
- (global-company-mode)
- (setq company-idle-delay 0.1)
- (setq company-minimum-prefix-length 1))
-
-;; Enable Flycheck for syntax checking
-(when (fboundp 'flycheck-mode)
- (global-flycheck-mode)
- (setq flycheck-check-syntax-automatically '(save mode-enabled))
- (setq flycheck-display-errors-delay 0.5))
-
-;; Enable Ivy + Counsel for better completion
-(when (fboundp 'ivy-mode)
- (ivy-mode 1)
- (setq ivy-use-virtual-buffers t)
- (setq ivy-count-format "(%d/%d) ")
- (setq ivy-height 10)
- (when (fboundp 'counsel-mode)
- (counsel-mode 1)))
-
-;; Enable Projectile for project management
-(when (fboundp 'projectile-mode)
- (projectile-mode +1)
- (define-key projectile-mode-map (kbd "C-c p") 'projectile-command-map)
- (setq projectile-completion-system 'ivy)
- (setq projectile-switch-project-action 'projectile-dired))
-
-;; Enable Which Key for keybindings help
-(when (fboundp 'which-key-mode)
- (which-key-mode 1)
- (setq which-key-idle-delay 0.5)
- (setq which-key-show-major-modes nil))
-
-;; Configure Org Mode with Babel support for Nix and Shell
-(require 'org)
-(require 'ob-shell) ; Required for shell code blocks
-(require 'ob-nix) ; Required for nix code blocks
-(org-babel-do-load-languages
- 'org-babel-load-languages
- '((emacs-lisp . t)
- (nix . t)
- (shell . t)
- (python . t)
- (dockerfile . t)))
-(setq org-babel-tangle-lang-exts '(("nix" . "nix")))
-(setq org-src-fontify-natively t)
-(setq org-src-tab-act-as-tab t)
-(setq org-edit-src-content-indentation 0)
-(setq org-startup-indented t)
-(setq org-startup-folded nil)
-(setq org-ellipsis "⤵")
-(setq org-hide-emphasis-markers t)
-(setq org-image-actual-width nil)
-(setq org-html-htmlize-output-type 'css)
-(setq org-export-with-toc nil)
-(setq org-todo-keywords '("TODO" "DOING" "|" "DONE" "CANCELED"))
-(setq org-log-done 'time)
-(setq org-directory "~/org")
-(when (fboundp 'org-bullets-mode)
- (add-hook 'org-mode-hook (lambda () (org-bullets-mode 1))))
-
-;; Enable Magit for Git
-(when (fboundp 'magit-version)
- (setq magit-display-buffer-function 'magit-display-buffer-fullscreen)
- (setq magit-last-seen-setup-instruction "1.4.0"))
-
-;; Enable LSP Mode for language server support
-(when (fboundp 'lsp-mode)
- (lsp-mode 1)
- (setq lsp-keymap-prefix "C-c l")
- (setq lsp-enable-snippets nil)
- (setq lsp-enable-indentation nil)
- (setq lsp-enable-on-type-formatting nil)
- (setq lsp-lens-enable nil)
- (setq lsp-signature-auto-activate nil))
-
-;; Enable Dashboard
-(when (fboundp 'dashboard-refresh-buffer)
- (dashboard-mode 1)
- (setq dashboard-items '((recents . 5)
- (projects . 5)
- (agenda . 5)
- (bookmarks . 5)))
- (setq dashboard-center-content t)
- (setq dashboard-banner-logo-title "Droidnix Configuration"))
-
-;; Enable Nix Mode
-(when (fboundp 'nix-mode)
- (setq auto-mode-alist (cons '("\\.nix\\'" . nix-mode) auto-mode-alist))
- (add-to-list 'auto-mode-alist '("\\.nix\\'" . nix-mode)))
-
-;; Custom keybindings
-(global-set-key (kbd "C-c t") 'treemacs)
-(global-set-key (kbd "C-c p") 'projectile-command-map)
-(global-set-key (kbd "C-c g") 'magit-status)
-(global-set-key (kbd "C-c d") 'dashboard-refresh-buffer)
-(global-set-key (kbd "C-c b") 'ivy-switch-buffer)
-(global-set-key (kbd "C-c f") 'find-file)
-(global-set-key (kbd "C-c s") 'save-buffer)
-(global-set-key (kbd "C-c q") 'kill-buffer)
-(global-set-key (kbd "C-c w") 'widen)
-(global-set-key (kbd "C-c n") 'narrow-to-region)
-
-;; Nix-specific configurations
-(setq nix-indent-width 2)
-(setq nix-continuation-indent-width 4)
-
-;; HTML export settings for Org
-(setq org-html-head-include-default-style nil)
-(setq org-html-head-extra "
-
-
-")
-
-;; Function to wrap tree output in div for HTML export
-(defun my/org-wrap-tree-in-div ()
- "Wrap the Nix tree output in a div with class 'tree' for HTML export."
- (interactive)
- (save-excursion
- (goto-char (point-min))
- (when (re-search-forward "#+RESULTS:\n#+BEGIN_EXAMPLE\n\\(.*?\n\\)#+END_EXAMPLE" nil t)
- (goto-char (match-beginning 1))
- (insert "#+HTML:
\n")
- (goto-char (match-end 1))
- (insert "#+HTML:
\n"))))
-
-;; Add hook to automatically wrap tree output on export
-(add-hook 'org-export-before-processing-hook 'my/org-wrap-tree-in-div)
-
-;; Set default mode for new buffers
-(setq-default major-mode 'text-mode)
-(setq-default indent-tabs-mode nil)
-(setq default-tab-width 2)
-(setq tab-width 2)
-
-;; Enable line numbers globally
-(global-display-line-numbers-mode 1)
-(setq display-line-numbers-type 'relative)
-
-;; Configure fill column indicator
-(setq display-fill-column-indicator t)
-(setq display-fill-column-indicator-character ?│)
-(setq fill-column 80)
-
-;; Enable delete-selection-mode for more intuitive editing
-(delete-selection-mode 1)
-
-;; Configure modeline
-(setq display-time-day-and-date t)
-(setq display-time-24hr-format t)
-
-;; Configure frame appearance
-(setq default-frame-alist '((fullscreen . maximized)
- (alpha . (95 95))
- (vertical-scroll-bars . nil)
- (tool-bar-lines . 0)
- (menu-bar-lines . 0)
- (line-spacing . 3)
- (font . "Fira Code-12")))
-EOF
-fi
-
-# Clean up
-rm "$TEMP_CONFIG"
-
-echo ""
-echo "Emacs setup complete with Catppuccin Mocha and all plugins!"
-echo ""
-echo "Installed packages:"
-echo " ✅ Catppuccin Mocha (theme)"
-echo " ✅ Org mode + Org Bullets + Org Babel (Nix/Shell support)"
-echo " ✅ Magit (Git interface)"
-echo " ✅ Company (autocomplete)"
-echo " ✅ Flycheck (syntax checking)"
-echo " ✅ Doom Modeline (status bar)"
-echo " ✅ Which Key (keybindings help)"
-echo " ✅ Projectile (project management)"
-echo " ✅ Ivy + Counsel (completion framework)"
-echo " ✅ All The Icons (pretty icons)"
-echo " ✅ Treemacs (file tree)"
-echo " ✅ LSP Mode (language server)"
-echo " ✅ ob-shell + ob-nix (Org Babel support)"
-echo " ✅ Dashboard (start page)"
-echo " ✅ tree.js (for collapsible directory trees in HTML export)"
-echo ""
-echo "You can now:"
-echo "1. Tangle Org files: emacs README.org --batch -f org-babel-tangle"
-echo "2. Export to HTML: emacs -Q --batch README.org -f org-html-export-to-html"
-echo "3. Open Emacs: emacs"
-echo ""
-echo "The configuration includes:"
-echo "- Proper Org Babel support for shell and Nix"
-echo "- Tree.js integration for collapsible directory trees in HTML export"
-echo "- Custom keybindings for common operations"
-echo "- Enhanced UI with Treemacs, Doom Modeline, and Catppuccin theme"
-echo "- Optimized settings for Nix development"
-echo "- HTML export with embedded CSS for better styling"
diff --git a/Droidnix/assets/traveldroid/apps/neovim/setup_nvim_literate_nixos.sh b/Droidnix/assets/traveldroid/apps/neovim/setup_nvim_literate_nixos.sh
deleted file mode 100755
index b31ad4ee0..000000000
--- a/Droidnix/assets/traveldroid/apps/neovim/setup_nvim_literate_nixos.sh
+++ /dev/null
@@ -1,123 +0,0 @@
-#!/usr/bin/env bash
-set -euo pipefail
-
-# Install Neovim and Neovide using nix-env with the correct attribute path for NixOS
-echo "Installing Neovim and Neovide..."
-nix-env -iA nixos.neovim nixos.neovide
-
-# Create Neovim config directory
-NVIM_CONFIG_DIR="${XDG_CONFIG_HOME:-$HOME/.config}/nvim"
-mkdir -p "$NVIM_CONFIG_DIR"
-
-# Install packer.nvim (plugin manager)
-PACKER_DIR="${XDG_DATA_HOME:-$HOME/.local/share}/nvim/site/pack/packer/start/packer.nvim"
-if [ ! -d "$PACKER_DIR" ]; then
- echo "Installing packer.nvim..."
- git clone --depth 1 https://github.com/wbthomason/packer.nvim "$PACKER_DIR"
-fi
-
-# Write minimal init.lua for literate NixOS
-cat > "$NVIM_CONFIG_DIR/init.lua" << 'EOF'
--- Enable filetype detection, syntax highlighting, and indenting
-vim.cmd([[
- filetype plugin indent on
- syntax on
-]])
-
--- Leader key
-vim.g.mapleader = " "
-
--- Install plugins with Packer
-local fn = vim.fn
-local install_path = fn.stdpath('data')..'/site/pack/packer/start/packer.nvim'
-local packer_bootstrap = false
-
-if fn.empty(fn.glob(install_path)) > 0 then
- packer_bootstrap = fn.system({'git', 'clone', '--depth', '1', 'https://github.com/wbthomason/packer.nvim', install_path})
- vim.cmd [[packadd packer.nvim]]
-end
-
-require('packer').startup(function(use)
- -- Plugin manager
- use 'wbthomason/packer.nvim'
-
- -- Catppuccin theme
- use { 'catppuccin/nvim', as = 'catppuccin' }
-
- -- Orgmode for literate NixOS
- use {
- 'nvim-orgmode/orgmode',
- config = function()
- require('orgmode').setup({
- org_agenda_files = {'~/Documents/org/*'},
- org_default_notes_file = '~/Documents/org/notes.org',
- })
- end
- }
-
- -- Treesitter (better syntax highlighting)
- use {
- 'nvim-treesitter/nvim-treesitter',
- run = ':TSUpdate',
- config = function()
- require('nvim-treesitter.configs').setup({
- ensure_installed = {'nix', 'org'},
- highlight = { enable = true },
- })
- end
- }
-
- -- LSP (for Nix language server)
- use {
- 'neovim/nvim-lspconfig',
- config = function()
- require('lspconfig').nil_ls.setup({})
- end
- }
-
- -- Telescope (fuzzy finder)
- use {
- 'nvim-telescope/telescope.nvim',
- requires = {{'nvim-lua/plenary.nvim'}}
- }
-
- -- Automatically set up after cloning packer.nvim
- if packer_bootstrap then
- require('packer').sync()
- end
-end)
-
--- Set Catppuccin theme
-vim.cmd.colorscheme('catppuccin-mocha')
-
--- Keybindings for orgmode
-vim.api.nvim_set_keymap('n', 'oo', 'lua require("orgmode").action("agenda.prompt")', { noremap = true, silent = true })
-vim.api.nvim_set_keymap('n', 'oc', 'lua require("orgmode").action("capture.prompt")', { noremap = true, silent = true })
-vim.api.nvim_set_keymap('n', 'ot', 'lua require("orgmode").action("tangle.current_file")', { noremap = true, silent = true })
-vim.api.nvim_set_keymap('n', 'oe', 'lua require("orgmode").action("export.current_file")', { noremap = true, silent = true })
-
--- Auto-install LSP and Treesitter parsers on first run
-vim.api.nvim_create_autocmd('BufEnter', {
- pattern = {'*.nix', '*.org'},
- callback = function()
- vim.cmd('TSInstall! nix')
- vim.cmd('TSInstall! org')
- end,
-})
-EOF
-
-# Install nil (Nix language server)
-echo "Installing nil (Nix language server)..."
-nix-env -iA nixos.nil
-
-# Install Neovide config (optional)
-NEOVIDE_CONFIG_DIR="${XDG_CONFIG_HOME:-$HOME/.config}/neovide"
-mkdir -p "$NEOVIDE_CONFIG_DIR"
-cat > "$NEOVIDE_CONFIG_DIR/config.toml" << 'EOF'
-[editor]
-theme = "catppuccin-mocha"
-EOF
-
-echo "Setup complete!"
-echo "Run 'nvim' or 'neovide' to start."
-echo "In Neovim, run ':PackerSync' to install plugins."
diff --git a/Droidnix/assets/traveldroid/conf/emacs/early-init.el b/Droidnix/assets/traveldroid/conf/emacs/early-init.el
new file mode 100644
index 000000000..d6f8111be
--- /dev/null
+++ b/Droidnix/assets/traveldroid/conf/emacs/early-init.el
@@ -0,0 +1,92 @@
+;;; package --- early init -*- lexical-binding: t -*-
+ ;;; Commentary:
+ ;;; Prevents white flash and better Emacs defaults
+ ;;; Code:
+ (set-language-environment "UTF-8")
+ (setq-default
+default-frame-alist
+'((background-color . "#1e1e2e")
+ (bottom-divider-width . 1) ; Thin horizontal window divider
+ (foreground-color . "#bac2de") ; Default foreground color
+ (fullscreen . maximized) ; Maximize the window by default
+ (horizontal-scroll-bars . nil) ; No horizontal scroll-bars
+ (left-fringe . 8) ; Thin left fringe
+ (menu-bar-lines . 0) ; No menu bar
+ (right-divider-width . 1) ; Thin vertical window divider
+ (right-fringe . 8) ; Thin right fringe
+ (tool-bar-lines . 0) ; No tool bar
+ (undecorated . t) ; Remove extraneous X decorations
+ (vertical-scroll-bars . nil)) ; No vertical scroll-bars
+user-full-name "Henrov henrov" ; ME!
+;; memory configuration
+;; Higher garbage collection threshold, prevents frequent gc locks, reset later
+gc-cons-threshold most-positive-fixnum
+;; Ignore warnings for (obsolete) elisp compilations
+byte-compile-warnings '(not obsolete)
+;; And other log types completely
+warning-suppress-log-types '((comp) (bytecomp))
+;; Large files are okay in the new millenium.
+large-file-warning-threshold 100000000
+;; dont show garbage collection messages at startup, will reset later
+garbage-collection-messages nil
+;; native compilation
+package-native-compile t
+native-comp-warning-on-missing-source nil
+native-comp-async-report-warnings-errors 'silent
+;; Read more based on system pipe capacity
+read-process-output-max (max (* 10240 10240) read-process-output-max)
+;; scroll configuration
+scroll-margin 0 ; Lets scroll to the end of the margin
+scroll-conservatively 100000 ; Never recenter the window
+scroll-preserve-screen-position 1 ; Scrolling back and forth
+;; frame config
+;; Improve emacs startup time by not resizing to adjust for custom settings
+frame-inhibit-implied-resize t
+;; Dont resize based on character height / width but to exact pixels
+frame-resize-pixelwise t
+;; backups & files
+backup-directory-alist '(("." . "~/.backups/")) ; Don't clutter
+backup-by-copying t ; Don't clobber symlinks
+create-lockfiles nil ; Don't have temp files
+delete-old-versions t ; Cleanup automatically
+kept-new-versions 6 ; Update every few times
+kept-old-versions 2 ; And cleanup even more
+version-control t ; Version them backups
+delete-by-moving-to-trash t ; Dont delete, send to trash instead
+;; startup
+inhibit-startup-screen t ; I have already done the tutorial. Twice
+inhibit-startup-message t ; I know I am ready
+inhibit-startup-echo-area-message t ; Yep, still know it
+initial-scratch-message nil ; I know it is the scratch buffer!
+initial-buffer-choice nil
+inhibit-startup-buffer-menu t
+inhibit-x-resources t
+initial-major-mode 'fundamental-mode
+pgtk-wait-for-event-timeout 0.001 ; faster child frames
+ad-redefinition-action 'accept ; dont care about legacy things being redefined
+inhibit-compacting-font-caches t
+;; tabs
+tab-width 4 ; Always tab 4 spaces.
+indent-tabs-mode nil ; Never use actual tabs.
+;; rendering
+cursor-in-non-selected-windows nil ; dont render cursors other windows
+;; packages
+use-package-always-defer t
+load-prefer-newer t
+default-input-method nil
+use-dialog-box nil
+use-file-dialog nil
+use-package-expand-minimally t
+package-enable-at-startup nil
+use-package-enable-imenu-support t
+auto-mode-case-fold nil ; No second pass of case-insensitive search over auto-mode-alist.
+package-archives '(("melpa" . "https://melpa.org/packages/")
+ ("gnu" . "https://elpa.gnu.org/packages/")
+ ("nongnu" . "https://elpa.nongnu.org/nongnu/")
+ ("melpa-stable" . "https://stable.melpa.org/packages/"))
+package-archive-priorities '(("gnu" . 99)
+ ("nongnu" . 80)
+ ("melpa" . 70)
+ ("melpa-stable" . 50))
+)
+;;; early-init.el ends here
diff --git a/Droidnix/assets/traveldroid/conf/emacs/init.el b/Droidnix/assets/traveldroid/conf/emacs/init.el
new file mode 100644
index 000000000..932195993
--- /dev/null
+++ b/Droidnix/assets/traveldroid/conf/emacs/init.el
@@ -0,0 +1,400 @@
+;;; package --- Summary - My minimal Emacs init file -*- lexical-binding: t -*-
+
+;;; Commentary:
+;;; Simple Emacs setup I carry everywhere
+
+;;; Code:
+(setq custom-file (locate-user-emacs-file "custom.el"))
+(load custom-file 'noerror) ;; no error on missing custom file
+
+(require 'package)
+(package-initialize)
+
+(defun reset-custom-vars ()
+"Resets the custom variables that were set to crazy numbers"
+(setopt gc-cons-threshold (* 1024 1024 100))
+(setopt garbage-collection-messages t))
+
+(use-package emacs
+:custom
+(native-comp-async-query-on-exit t)
+(read-answer-short t)
+(use-short-answers t)
+(enable-recursive-minibuffers t)
+(which-func-update-delay 1.0)
+(visible-bell nil)
+(custom-buffer-done-kill t)
+(whitespace-line-column nil)
+(x-underline-at-descent-line t)
+(imenu-auto-rescan t)
+(uniquify-buffer-name-style 'forward)
+(confirm-nonexistent-file-or-buffer nil)
+(create-lockfiles nil)
+(make-backup-files nil)
+(kill-do-not-save-duplicates t)
+(sentence-end-double-space nil)
+(treesit-enabled-modes t)
+:init
+;; base visual
+(menu-bar-mode -1) ;; no menu bar
+(toggle-scroll-bar -1) ;; no scroll bar
+(tool-bar-mode -1) ;; no tool bar either
+(blink-cursor-mode -1) ;; stop blinking
+
+;; font of the century
+(set-frame-font "Aporetic Sans Mono 12" nil t)
+
+:bind
+(("C-" . pixel-scroll-precision) ; dont zoom in please, just scroll
+ ("C-" . pixel-scroll-precision) ; dont zoom in either, just scroll
+ ("C-x k" . kill-current-buffer)) ; kill the buffer, dont ask
+:hook
+(text-mode . delete-trailing-whitespace-mode)
+(prog-mode . delete-trailing-whitespace-mode)
+(after-init . global-display-line-numbers-mode) ;; always show line numbers
+(after-init . column-number-mode) ;; column number in the mode line
+(after-init . size-indication-mode) ;; file size in the mode line
+(after-init . pixel-scroll-precision-mode) ;; smooth mouse scroll
+(after-init . electric-pair-mode) ;; i mean ... parens should auto create
+(after-init . reset-custom-vars)
+)
+
+(use-package autorevert
+:ensure nil
+:custom
+(auto-revert-interval 3)
+(auto-revert-remote-files nil)
+(auto-revert-use-notify t)
+(auto-revert-avoid-polling nil)
+(auto-revert-verbose t)
+:hook
+(after-init . global-auto-revert-mode))
+
+(use-package recentf
+:ensure nil
+:commands (recentf-mode recentf-cleanup)
+:hook
+(after-init . recentf-mode)
+:custom
+(recentf-auto-cleanup 'never)
+(recentf-exclude
+ (list "\\.tar$" "\\.tbz2$" "\\.tbz$" "\\.tgz$" "\\.bz2$"
+ "\\.bz$" "\\.gz$" "\\.gzip$" "\\.xz$" "\\.zip$"
+ "\\.7z$" "\\.rar$"
+ "COMMIT_EDITMSG\\'"
+ "\\.\\(?:gz\\|gif\\|svg\\|png\\|jpe?g\\|bmp\\|xpm\\)$"
+ "-autoloads\\.el$" "autoload\\.el$"))
+
+:config
+;; A cleanup depth of -90 ensures that `recentf-cleanup' runs before
+;; `recentf-save-list', allowing stale entries to be removed before the list
+;; is saved by `recentf-save-list', which is automatically added to
+;; `kill-emacs-hook' by `recentf-mode'.
+(add-hook 'kill-emacs-hook #'recentf-cleanup -90))
+
+(use-package savehist
+:ensure nil
+:commands (savehist-mode savehist-save)
+:hook
+(after-init . savehist-mode)
+:custom
+(savehist-autosave-interval 600)
+(savehist-additional-variables
+ '(kill-ring ; clipboard
+ register-alist ; macros
+ mark-ring global-mark-ring ; marks
+ search-ring regexp-search-ring)))
+
+(use-package hl-line
+:ensure nil
+:custom
+(hl-line-sticky-flag nil)
+(global-hl-line-sticky-flag nil)
+:hook
+(after-init . global-hl-line-mode))
+
+(use-package saveplace
+:ensure nil
+:commands (save-place-mode save-place-local-mode)
+:hook
+(after-init . save-place-mode)
+:custom
+(save-place-limit 400))
+
+(use-package nerd-icons
+:custom
+;; disable bright icon colors
+(nerd-icons-color-icons nil))hells.nix
+
+(use-package doom-modeline
+:custom
+(inhibit-compacting-font-caches t) ;; speed
+(doom-modeline-buffer-file-name-style 'relative-from-project)
+(doom-modeline-major-mode-icon nil) ;; distracting icons, no thank you
+(doom-modeline-buffer-encoding nil) ;; everything is utf-8 anyway
+(doom-modeline-buffer-state-icon nil) ;; the filename already shows me
+(doom-modeline-lsp nil) ;; lsp state is too distracting, too often
+:hook (after-init . doom-modeline-mode))
+
+(load-theme 'catppuccin :no-confirm)
+
+(use-package diminish :demand t) ;; declutter the modeline
+(use-package eldoc
+:diminish eldoc-mode
+:custom
+(eldoc-echo-area-use-multiline-p nil)) ;; docs for everything
+
+(use-package eldoc-box
+:defer t
+:config
+(set-face-background 'eldoc-box-border (catppuccin-color 'green))
+(set-face-background 'eldoc-box-body (catppuccin-color 'base))
+:bind
+(("M-h" . eldoc-box-help-at-point)))
+
+(use-package pulsar
+:commands pulsar-global-mode pulsar-recenter-top pulsar-reveal-entry
+:init
+(defface pulsar-catppuccin
+`((default :extend t)
+ (((class color) (min-colors 88) (background light))
+ :background ,(catppuccin-color 'sapphire))
+ (((class color) (min-colors 88) (background dark))
+ :background ,(catppuccin-color 'sapphire))
+ (t :inverse-video t))
+"Alternative nord face for `pulsar-face'."
+:group 'pulsar-faces)
+:custom
+(pulsar-face 'pulsar-catppuccin)
+:hook
+(after-init . pulsar-global-mode))
+
+(use-package which-key
+:commands which-key-mode
+:diminish which-key-mode
+:hook
+(after-init . which-key-mode))
+
+(use-package expreg
+:bind ("M-m" . expreg-expand))
+
+(use-package vundo) ;; undo tree
+
+;; better structured editing
+(use-package puni
+:commands puni-global-mode
+:hook
+(after-init . puni-global-mode))
+
+(use-package avy
+:bind
+("M-i" . avy-goto-char-2)
+:custom
+(avy-background t))
+
+(use-package consult
+:bind
+("C-x b" . consult-buffer) ;; orig. switch-to-buffer
+("M-y" . consult-yank-pop) ;; orig. yank-pop
+("M-g M-g" . consult-goto-line) ;; orig. goto-line
+("M-g i" . consult-imenu) ;; consult version is interactive
+("M-g r" . consult-ripgrep) ;; find in project also works
+:custom
+(consult-narrow-key "<"))
+
+(use-package vertico
+:commands vertico-mode
+:custom
+(read-file-name-completion-ignore-case t)
+(read-buffer-completion-ignore-case t)
+(completion-ignore-case t)
+(enable-recursive-minibuffers t)
+(minibuffer-prompt-properties '(read-only t cursor-intangible t face minibuffer-prompt))
+:init
+(vertico-mode)
+:hook
+(minibuffer-setup-hook . cursor-intangible-mode))
+
+(use-package marginalia
+:commands marginalia-mode
+:hook (after-init . marginalia-mode))
+
+(use-package crux
+:bind
+("C-c M-e" . crux-find-user-init-file)
+("C-c C-w" . crux-transpose-windows)
+("C-c M-d" . crux-find-current-directory-dir-locals-file)
+("C-a" . crux-move-beginning-of-line))
+
+(use-package magit
+:bind (("C-M-g" . magit-status)))
+
+(use-package nerd-icons-corfu
+:commands nerd-icons-corfu-formatter
+:defines corfu-margin-formatters)
+
+(use-package corfu
+:commands global-corfu-mode
+:custom
+(corfu-cycle t)
+(corfu-auto t)
+(corfu-auto-delay 1)
+(corfu-auto-prefix 3)
+(corfu-separator ?_)
+:hook
+(after-init . global-corfu-mode)
+:config
+(add-to-list 'corfu-margin-formatters #'nerd-icons-corfu-formatter))
+
+(use-package cape)
+
+(use-package orderless
+:custom
+(completion-styles '(orderless partial-completion basic))
+(completion-category-defaults nil)
+(completion-category-overrides nil))
+
+(use-package yasnippet
+:commands yas-global-mode
+:diminish yas-minor-mode
+:hook
+(after-init . yas-global-mode))
+
+(use-package yasnippet-snippets :after yasnippet)
+
+(use-package exec-path-from-shell
+:commands exec-path-from-shell-initialize
+:custom
+(exec-path-from-shell-arguments nil)
+:hook
+(after-init . exec-path-from-shell-initialize))
+
+(use-package nixpkgs-fmt
+:custom
+(nixpkgs-fmt-command "nixfmt"))
+
+(use-package eat
+:bind
+(("C-c e p" . eat-project)
+ ("C-c e t" . eat)))
+
+(use-package f :demand t)
+
+(use-package envrc
+:commands envrc-global-mode
+:hook
+(after-init . envrc-global-mode))
+
+(use-package gptel
+:commands gptel-make-anthropic f-read-text
+:config
+(gptel-make-anthropic "Claude"
+:stream t :key (f-read-text "/run/secrets/claude_key")))
+
+(use-package sideline-flymake)
+(use-package sideline-eglot)
+(use-package sideline
+:custom
+(sideline-backends-right '(sideline-flymake sideline-eglot))
+:hook
+(eglot-managed-mode . sideline-mode)
+(flymake-mode . sideline-mode))
+
+(use-package eglot
+:custom
+(eglot-extend-to-xref t)
+(eglot-ignored-server-capabilities '(:inlayHintProvider))
+(jsonrpc-event-hook nil)
+:hook
+(eglot-managed-mode . eldoc-box-hover-mode)
+(before-save . eldoc-format-buffer)
+:bind
+(:map eglot-mode-map
+ ("C-c l a" . eglot-code-actions)
+ ("C-c l r" . eglot-rename)
+ ("C-c l h" . eldoc)
+ ("C-c l g" . xref-find-references)
+ ("C-c l w" . eglot-reconnect)))
+
+(use-package proced
+:custom
+(proced-auto-update-flag t)
+(proced-auto-update-interval 3)
+(proced-enable-color-flag t)
+(proced-show-remote-processes t))
+
+(use-package org
+:ensure t
+:defer t
+:commands (org-mode org-capture org-agenda)
+:init
+(defvar org-journal-file "~/nextcloud/org/journal.org")
+(defvar org-archive-file "~/nextcloud/org/archive.org")
+(defvar org-notes-file "~/nextcloud/org/notes.org")
+(defvar org-inbox-file "~/nextcloud/org/inbox.org")
+(defvar org-work-file "~/nextcloud/org/work.org")
+(defun my/org-capture-project-target-heading ()
+"Determine Org target headings from the current file's project path.
+
+This function assumes a directory structure like '~/projects/COMPANY/PROJECT/'.
+It extracts 'COMPANY' and 'PROJECT' to use as nested headlines
+for an Org capture template.
+
+If the current buffer is not visi
+ting a file within such a
+project structure, it returns nil, causing capture to default to
+the top of the file."
+(when-let* ((path (buffer-file-name))) ; Ensure we are in a file-visiting buffer
+ (let ((path-parts (split-string path "/" t " ")))
+ (when-let* ((projects-pos (cl-position "projects" path-parts :test #'string=))
+ (company (nth (+ 1 projects-pos) path-parts))
+ (project (nth (+ 2 projects-pos) path-parts)))
+ ;; Return a list of headlines for Org to find or create.
+ (list company project)))))
+:bind
+(("C-c c" . org-capture)
+ ("C-c i" . org-store-link)
+ ("C-c a" . org-agenda)
+ :map org-mode-map
+ ("C-c t" . org-toggle-inline-images)
+ ("C-c l" . org-toggle-link-display))
+:custom
+(org-agenda-files (list org-inbox-file org-journal-file))
+(org-directory "~/nextcloud/org")
+(org-default-notes-file org-inbox-file)
+(org-archive-location (concat org-archive-file "::* From %s"))
+(org-log-done 'time)
+(org-log-into-drawer t)
+(org-hide-emphasis-markers t)
+(org-src-fontify-natively t)
+(org-src-tab-acts-natively t)
+(org-capture-templates '(("t" "Todo" entry (file org-inbox-file)
+ "* TODO %?\n:PROPERTIES:\n:CREATED: %U\n:END:\n\n%a\n\n)")
+ ("j" "Journal" entry (file+olp+datetree org-journal-file)
+ "* %?\n:PROPERTIES:\n:CREATED: %U\n:END:\n\n%a\n\n")
+ ("n" "Note" entry (file org-notes-file)
+ "* %?\n:PROPERTIES:\n:CREATED: %U\n:END:\n\n%a\n\n")
+ ("p" "Project Task" item
+ (file+function org-work-file my/org-capture-project-target-heading)
+ "* TODO %? \n CLOCK: %U"
+ ))
+ )
+:config
+;; Enable syntax highlighting in code blocks
+(add-hook 'org-mode-hook 'turn-on-font-lock)
+(add-hook 'org-mode-hook 'org-indent-mode))
+
+;; extras
+(use-package comp-run
+:ensure nil
+:config
+(push "tramp-loaddefs.el.gz" native-comp-jit-compilation-deny-list)
+(push "cl-loaddefs.el.gz" native-comp-jit-compilation-deny-list))
+
+(use-package rustic
+:custom
+(rustic-lsp-client 'eglot))
+
+(provide 'init)
+
+;;; init.el ends here
diff --git a/Droidnix/generated/hosts/traveldroid/boot.nix b/Droidnix/generated/hosts/traveldroid/boot.nix
deleted file mode 100644
index f8092e344..000000000
--- a/Droidnix/generated/hosts/traveldroid/boot.nix
+++ /dev/null
@@ -1,43 +0,0 @@
-{ config, pkgs, lib, flakeRoot, ... }:
-
-{
- boot.loader = {
- systemd-boot.enable = true;
- efi.canTouchEfiVariables = true;
- efi.efiSysMountPoint = "/boot";
- timeout = 5;
- };
-
- boot.kernelPackages = pkgs.linuxPackages_latest;
-
- boot.kernelParams = [
- "quiet"
- "splash"
- "udev.log_level=3"
- "rd.systemd.show_status=false"
- ];
-
- boot.consoleLogLevel = 0;
- #boot.initrd.systemd.enable = true;
- boot.initrd.availableKernelModules = [
- "xhci_pci"
- "nvme"
- "usb_storage"
- "sd_mod"
- "rtsx_usb_sdmmc"
- ];
- boot.kernelModules = [ "kvm-intel" ];
-
- boot.plymouth = {
- enable = true;
- theme = "rings";
- themePackages = [
- (pkgs.adi1090x-plymouth-themes.override {
- selected_themes = [ "rings" ];
- })
- ];
- };
-
- hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
- nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
-}
diff --git a/Droidnix/generated/hosts/traveldroid/hardware-configuration.nix b/Droidnix/generated/hosts/traveldroid/hardware-configuration.nix
deleted file mode 100644
index 802b3df31..000000000
--- a/Droidnix/generated/hosts/traveldroid/hardware-configuration.nix
+++ /dev/null
@@ -1,47 +0,0 @@
-{
- hostname,
- pkgs,
- lib,
- modulesPath,
- user,
- config,
- ...
-}:
-{
- imports = [
- # (modulesPath + "/installer/scan/not-detected.nix")
- #../../hardware/hardware.nix
- ];
-
- boot.initrd.availableKernelModules = [
- "xhci_pci"
- "nvme"
- "usb_storage"
- "sd_mod"
- "rtsx_usb_sdmmc"
- ];
- boot.initrd.kernelModules = [ ];
- boot.kernelModules = [ "kvm-intel" ];
- boot.extraModulePackages = [ ];
-
- fileSystems."/" = {
- device = "/dev/disk/by-uuid/69433a14-fbaf-401b-af85-cd1bbf02b4e2";
- fsType = "ext4";
- };
-
- fileSystems."/boot" = {
- device = "/dev/disk/by-uuid/811D-0676";
- fsType = "vfat";
- options = [
- "fmask=0077"
- "dmask=0077"
- ];
- };
-
- swapDevices = [
- { device = "/dev/disk/by-uuid/b6c557c2-7682-460b-a5e7-8f6f2f429a3a"; }
- ];
-
- nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
- hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
-}
diff --git a/Droidnix/generated/hosts/traveldroid/host.nix b/Droidnix/generated/hosts/traveldroid/host.nix
deleted file mode 100644
index e88eaec47..000000000
--- a/Droidnix/generated/hosts/traveldroid/host.nix
+++ /dev/null
@@ -1,51 +0,0 @@
-{ lib, config, pkgs, flakeRoot, import-tree, home-manager, ... }:
-
-let
- hostname = "traveldroid";
-
- modulesPath = "${flakeRoot}/generated/modules/${hostname}";
- usersPath = "${flakeRoot}/generated/users";
-
- hostModules = import-tree modulesPath;
- globalUsers = import-tree usersPath;
-
- allModules = hostModules.imports ++ globalUsers.imports;
-
-in
-{
- #################################
- # Core system config
- #################################
-
- networking.hostName = hostname;
- system.stateVersion = "26.05";
-
- #################################
- # Imports
- #################################
-
- imports =
- [
- ./boot.nix
- ./hardware-configuration.nix
-
- # REQUIRED for Home Manager
- home-manager.nixosModules.home-manager
- ]
- ++ allModules;
-
- #################################
- # Home Manager integration
- #################################
-
- home-manager.useGlobalPkgs = true;
- home-manager.useUserPackages = true;
-
-# Install dconf for the system/user
- environment.systemPackages = [
- pkgs.dconf
- ];
-
-# Ensure Home Manager writes dconf safely
- programs.dconf.enable = true;
-}
diff --git a/Droidnix/generated/modules/traveldroid/apps/kitty.nix b/Droidnix/generated/modules/traveldroid/apps/kitty.nix
deleted file mode 100644
index 7ebc33ce4..000000000
--- a/Droidnix/generated/modules/traveldroid/apps/kitty.nix
+++ /dev/null
@@ -1,52 +0,0 @@
-{ lib, pkgs, config, ... }:
-
-let
- #################################
- # Determine default username
- #################################
- username = config.defaultUser or "henrov";
- moduleName = "kitty";
-
- #################################
- # Paths to assets
- #################################
- assetPath = ../../../assets/traveldroid/conf/${moduleName};
- programFiles = builtins.readDir assetPath;
-
- # Convert asset files into a nix attribute set
- files = lib.genAttrs (builtins.attrNames programFiles) (name: {
- source = "${assetPath}/${name}";
- });
-
-in
-{
- #################################
- # System-wide packages
- #################################
- environment.systemPackages = [
- pkgs.kitty
- ];
-
- #################################
- # Home Manager user configuration
- #################################
- _module.args.hmUsers = {
- ${username} = {
-
- # Enable Kitty through Home Manager
- programs.kitty.enable = true;
-
- # Extra user-specific config snippet
- programs.kitty.extraConfig = ''
- # Include the Catppuccin-Mocha theme
- include themes/Catppuccin-Mocha.conf
- '';
-
- # Map all asset files into ~/.config/kitty/
- home.file = lib.mkMerge (
- map (name: { ".config/${moduleName}/${name}" = { source = files.${name}.source; }; })
- (builtins.attrNames files)
- );
- };
- };
-}
diff --git a/Droidnix/generated/modules/traveldroid/apps/packages.nix b/Droidnix/generated/modules/traveldroid/apps/packages.nix
deleted file mode 100644
index 94bbefb4b..000000000
--- a/Droidnix/generated/modules/traveldroid/apps/packages.nix
+++ /dev/null
@@ -1,55 +0,0 @@
-{ lib, config, pkgs, flakeRoot, ... }:
-
-let
- #################################
- # Read package list from config file
- #################################
- packagesConfPath = "${flakeRoot}/assets/traveldroid/conf/packages.conf";
- raw = builtins.readFile packagesConfPath;
-
- rawLines = lib.splitString "\n" raw;
-
- # Guard against splitting into characters accidentally
- _guard = assert !(builtins.stringLength raw > 1 && builtins.length rawLines == builtins.stringLength raw); true;
-
- # Clean each line: remove CRs, comments, trim whitespace
- cleanLine = line:
- let
- noCR = lib.replaceStrings [ "\r" ] [ "" ] line;
- noInlineComment = lib.head (lib.splitString "#" noCR);
- in
- lib.strings.trim noInlineComment;
-
- # Filter out empty lines
- entries = builtins.filter (l: l != "") (map cleanLine rawLines);
-
- # Resolve attribute paths in pkgs
- resolvePkg = name:
- let
- parts = lib.splitString "." name;
- found = lib.attrByPath parts null pkgs;
- in
- if found == null then
- (throw ''
- packages.nix: package not found in pkgs
- Token : ${builtins.toJSON name}
- packages.conf : ${packagesConfPath}
- Hint : check the attribute name on search.nixos.org/packages
- '')
- else
- found;
-
- # Final system-wide package list
- packages = builtins.seq _guard (map resolvePkg entries);
-
-in {
- #################################
- # Allow unfree packages globally
- #################################
- nixpkgs.config = { allowUnfree = true; };
-
- #################################
- # System packages
- #################################
- environment.systemPackages = packages;
-}
diff --git a/Droidnix/generated/modules/traveldroid/apps/starship.nix b/Droidnix/generated/modules/traveldroid/apps/starship.nix
deleted file mode 100644
index 4450be7d6..000000000
--- a/Droidnix/generated/modules/traveldroid/apps/starship.nix
+++ /dev/null
@@ -1,31 +0,0 @@
-{ lib, config, pkgs, flakeRoot, ... }:
-
-let
- # Default username fallback
- username = config.defaultUser or "henrov";
-
- # Path to the starship config in assets
- starshipConfSrc = "${flakeRoot}/assets/traveldroid/conf/starship.toml";
-in
-{
- #################################
- # Enable Starship system-wide
- #################################
- environment.systemPackages = [ pkgs.starship ];
-
- #################################
- # Home Manager user configuration
- #################################
- _module.args.hmUsers = {
- ${username} = {
- programs.starship = {
- enable = true;
- };
-
- # Copy the starship.toml from assets to ~/.config/starship.toml
- home.file = {
- ".config/starship.toml" = { source = starshipConfSrc; };
- };
- };
- };
-}
diff --git a/Droidnix/generated/modules/traveldroid/apps/thunar.nix b/Droidnix/generated/modules/traveldroid/apps/thunar.nix
deleted file mode 100644
index 15e2d9026..000000000
--- a/Droidnix/generated/modules/traveldroid/apps/thunar.nix
+++ /dev/null
@@ -1,31 +0,0 @@
-{ pkgs, config, lib, ... }:
-
-let
- # Resolve the default username from host config
- username = config.defaultUser or "henrov";
-in
-{
- ############################
- # System-level packages
- ############################
- environment.systemPackages = with pkgs; [
- thunar # main file manager
- thunar-archive-plugin # zip, tar, rar, 7z support
- thunar-volman # auto-mount removable drives
- gvfs # support for external drives and network shares
- xarchiver # optional GUI archive manager
- ];
-
- ############################
- # Home Manager user-level configuration
- ############################
- # Direct assignment to the user avoids recursiveUpdate issues
- home-manager.users."${username}" = {
- home.stateVersion = "26.05"; # required
-
- home.sessionVariables = {
- FILE_MANAGER = "thunar";
- USERNAME = username;
- };
- };
-}
diff --git a/Droidnix/generated/modules/traveldroid/apps/zenbrowser.nix b/Droidnix/generated/modules/traveldroid/apps/zenbrowser.nix
deleted file mode 100644
index 582f14684..000000000
--- a/Droidnix/generated/modules/traveldroid/apps/zenbrowser.nix
+++ /dev/null
@@ -1,11 +0,0 @@
-{ config, pkgs, lib, zen-browser, ... }:
-
-let
- # Grab the Zen Browser package for this host system
- zenBrowser = zen-browser.packages.${pkgs.stdenv.hostPlatform.system}.default;
-in
-{
- environment.systemPackages = [
- zenBrowser
- ];
-}
diff --git a/Droidnix/generated/modules/traveldroid/apps/zsh.nix b/Droidnix/generated/modules/traveldroid/apps/zsh.nix
deleted file mode 100644
index bc650ef0d..000000000
--- a/Droidnix/generated/modules/traveldroid/apps/zsh.nix
+++ /dev/null
@@ -1,25 +0,0 @@
-{ config, pkgs, lib, ... }:
-{
- programs.zsh = {
- enable = true;
- enableCompletion = true;
- # autocd = true;
- # dotDir = "${config.xdg.configHome}/zsh";
- ohMyZsh = {
- enable = true;
- theme = "";
- plugins = [
- "git"
- "sudo"
- "extract"
- "colored-man-pages"
- "command-not-found"
- "history"
- "docker"
- "kubectl"
- ];
- };
- autosuggestions.enable = true;
- syntaxHighlighting.enable = true;
- };
-}
diff --git a/Droidnix/generated/modules/traveldroid/desktop/fonts.nix b/Droidnix/generated/modules/traveldroid/desktop/fonts.nix
deleted file mode 100644
index 4b53d64e4..000000000
--- a/Droidnix/generated/modules/traveldroid/desktop/fonts.nix
+++ /dev/null
@@ -1,8 +0,0 @@
-{ lib, pkgs, config, ... }:
-
-{
- fonts.packages = with pkgs; [
- nerd-fonts.iosevka
- nerd-fonts.fira-code
- ];
-}
diff --git a/Droidnix/generated/modules/traveldroid/desktop/gtk.nix b/Droidnix/generated/modules/traveldroid/desktop/gtk.nix
deleted file mode 100644
index 253e2bafe..000000000
--- a/Droidnix/generated/modules/traveldroid/desktop/gtk.nix
+++ /dev/null
@@ -1,45 +0,0 @@
-{ pkgs, config, lib, ... }:
-
-let
- # Resolve the username from the host config
- username = config.defaultUser or "henrov";
-in
-{
- ############################
- # System-level GTK packages
- ############################
- environment.systemPackages = with pkgs; [
- gtk3
- gtk4
- ];
-
- ############################
- # Home Manager user-level GTK configuration
- ############################
- # Directly assign the GTK config to the user, no recursiveUpdate
- home-manager.users."${username}" = {
- gtk = {
- enable = true;
-
- # GTK theme
- theme = {
- name = "Catppuccin-Mocha-Standard-Blue-Dark";
- package = pkgs.magnetic-catppuccin-gtk;
- };
-
- # Icon theme
- iconTheme = {
- name = "Papirus-Dark";
- package = pkgs.papirus-icon-theme;
- };
-
- # Extra GTK3 / GTK4 settings
- gtk3.extraConfig = {
- "gtk-application-prefer-dark-theme" = 1;
- };
- gtk4.extraConfig = {
- "gtk-application-prefer-dark-theme" = 1;
- };
- };
- };
-}
diff --git a/Droidnix/generated/modules/traveldroid/desktop/hyprland.nix b/Droidnix/generated/modules/traveldroid/desktop/hyprland.nix
deleted file mode 100644
index 55ef61613..000000000
--- a/Droidnix/generated/modules/traveldroid/desktop/hyprland.nix
+++ /dev/null
@@ -1,38 +0,0 @@
-{ lib, config, pkgs, flakeRoot, home-manager, inputs, ... }:
-
-let
- username = config.defaultUser or "henrov";
- assetPath = "${flakeRoot}/assets/traveldroid/conf/hypr/";
-
- # Read all files in the asset directory
- assetFiles = builtins.attrNames (builtins.readDir assetPath);
-
- # Convert files to Home Manager xdg config entries
- hyprFiles = lib.genAttrs assetFiles (f: {
- # Destination path in home directory
- name = ".config/hypr/${f}";
- # Source file path
- value = { source = "${assetPath}/${f}"; };
- });
-
- # Determine Hyprland package
- hyprlandPkg =
- pkgs.hyprland or
- pkgs.hyprland-git or
- inputs.hyprland.packages.${pkgs.system}.default;
-in
-{
- environment.systemPackages = [ hyprlandPkg ];
-
- _module.args.hmUsers = {
- ${username} = {
- home.packages = [ hyprlandPkg ];
-
- # Merge all files in the asset folder into ~/.config/hypr/
- home.file = lib.mkMerge hyprFiles;
-
- # Optional: Hyprland settings
- settings.general."col.active_border" = "0xff97cbcd 0xff89b4fa";
- };
- };
-}
diff --git a/Droidnix/generated/modules/traveldroid/desktop/stylix.nix b/Droidnix/generated/modules/traveldroid/desktop/stylix.nix
deleted file mode 100644
index 295ee1332..000000000
--- a/Droidnix/generated/modules/traveldroid/desktop/stylix.nix
+++ /dev/null
@@ -1,72 +0,0 @@
-{ lib, config, pkgs, ... }:
-
-let
- username = config.defaultUser or "henrov";
- moduleName = "stylix";
-
- # Path to stylix assets
- assetPath = ../../../assets/system/conf/${moduleName};
-
- # Read all files in the asset directory
- programFiles = builtins.readDir assetPath;
-
- files = lib.genAttrs (builtins.attrNames programFiles) (name: {
- source = "${assetPath}/${name}";
- });
-
- # Optional stylix.conf
- stylixConfFile = "${assetPath}/stylix.conf";
- stylixConf =
- if builtins.pathExists stylixConfFile
- then builtins.readFile stylixConfFile
- else "";
-
- # Cursor defaults
- cursorName = "phinger-cursors-light";
- cursorSize = 24;
-in
-{
- ############################
- # System packages
- ############################
- environment.systemPackages = [
- pkgs.feh
- pkgs.st
- ];
-
- ############################
- # Home Manager user settings
- ############################
- # Use the _module.args.hmUsers style to avoid "option does not exist"
- _module.args.hmUsers = {
- "${username}" = {
- # Copy all stylix config files into ~/.config/stylix/
- xdg.configFile =
- lib.mapAttrs' (name: value: {
- name = "${moduleName}/${name}";
- value = { inherit (value) source; };
- }) files;
-
- # Optionally include stylix.conf
- home.file."${moduleName}/stylix.conf".text = stylixConf;
-
- # Session variables
- home.sessionVariables = {
- STYLIX_CONF = "$HOME/.config/stylix/stylix.conf";
-
- XCURSOR_THEME = cursorName;
- XCURSOR_SIZE = toString cursorSize;
- HYPRCURSOR_THEME = cursorName;
- HYPRCURSOR_SIZE = toString cursorSize;
- };
-
- # Enable GTK target for Stylix
- stylix = {
- enable = true;
- targets = {
- gtk = { enable = true; };
- };
- };
- };
- };
-}
diff --git a/Droidnix/generated/modules/traveldroid/desktop/waybar.nix b/Droidnix/generated/modules/traveldroid/desktop/waybar.nix
deleted file mode 100644
index 0ff003878..000000000
--- a/Droidnix/generated/modules/traveldroid/desktop/waybar.nix
+++ /dev/null
@@ -1,23 +0,0 @@
-{ config, pkgs, ... }:
-
-let
- waybarPath = "${pkgs.waybar}/bin/waybar";
-in
-{
- # Enable a user systemd service for Waybar
- systemd.user.services.waybar = {
- description = "Waybar for Hyprland";
- after = [ "graphical.target" ];
-
- serviceConfig = {
- ExecStart = "${waybarPath}";
- Restart = "always";
- Environment = [
- "WAYLAND_DISPLAY=${config.environment.sessionVariables.WAYLAND_DISPLAY or "wayland-0"}"
- "XDG_CURRENT_DESKTOP=Hyprland"
- ];
- };
-
- wantedBy = [ "default.target" ];
- };
-}
diff --git a/Droidnix/generated/modules/traveldroid/desktop/wayland.nix b/Droidnix/generated/modules/traveldroid/desktop/wayland.nix
deleted file mode 100644
index 0c214a100..000000000
--- a/Droidnix/generated/modules/traveldroid/desktop/wayland.nix
+++ /dev/null
@@ -1,24 +0,0 @@
-{ lib, config, pkgs, ... }:
-
-{
- #################################
- # Core Wayland packages
- #################################
- environment.systemPackages = with pkgs; [
- wayland
- wl-clipboard # optional but commonly used for copy/paste
- ];
-
- #################################
- # Optional: enable graphics stack
- #################################
- hardware.graphics.enable = true;
-
- #################################
- # Optional session variables for Wayland
- #################################
- environment.sessionVariables = {
- # Forces some apps to use Wayland
- NIXOS_OZONE_WL = "1";
- };
-}
diff --git a/Droidnix/generated/modules/traveldroid/desktop/xdg.nix b/Droidnix/generated/modules/traveldroid/desktop/xdg.nix
deleted file mode 100644
index a37bfe915..000000000
--- a/Droidnix/generated/modules/traveldroid/desktop/xdg.nix
+++ /dev/null
@@ -1,43 +0,0 @@
-{ lib, config, pkgs, inputs, ... }:
-
-let
- #################################
- # Default username fallback
- #################################
- username = config.defaultUser or "henrov";
-
- #################################
- # Determine XDG portal package
- #################################
- xdgPortalHyprlandPkg =
- pkgs.xdg-desktop-portal-hyprland or
- inputs.xdgPortalHyprland.packages.${pkgs.system}.default;
-in
-{
- #################################
- # System-wide packages
- #################################
- environment.systemPackages = [
- xdgPortalHyprlandPkg
- ];
-
- #################################
- # Home Manager user config
- #################################
- _module.args.hmUsers = {
- ${username} = {
- home.packages = [
- xdgPortalHyprlandPkg
- ];
-
- # Enable XDG portal integration for Hyprland
- xdg.portal = {
- enable = true;
- extraPortals = [ xdgPortalHyprlandPkg ];
- config.hyprland = {
- "org.freedesktop.impl.portal.Screencast" = [ "hyprland" ];
- };
- };
- };
- };
-}
diff --git a/Droidnix/generated/modules/traveldroid/system/dbus.nix b/Droidnix/generated/modules/traveldroid/system/dbus.nix
deleted file mode 100644
index 3304a874a..000000000
--- a/Droidnix/generated/modules/traveldroid/system/dbus.nix
+++ /dev/null
@@ -1,18 +0,0 @@
-{ config, pkgs, ... }:
-
-{
- # Enable classic D-Bus service
- services.dbus.enable = true;
-
- # Use default dbus package (classic D-Bus)
- services.dbus.dbusPackage = pkgs.dbus;
-
- # Include some essential system packages so shell and tools exist
- environment.systemPackages = with pkgs; [
- bashInteractive
- coreutils
- ];
-
- # Do not attempt to wrap dbus-daemon-launch-helper manually
- # No extra security.wrappers needed
-}
diff --git a/Droidnix/generated/modules/traveldroid/system/login-tuigreet.nix b/Droidnix/generated/modules/traveldroid/system/login-tuigreet.nix
deleted file mode 100644
index ec7f7b3ba..000000000
--- a/Droidnix/generated/modules/traveldroid/system/login-tuigreet.nix
+++ /dev/null
@@ -1,45 +0,0 @@
-{ config, pkgs, lib, ... }:
-
-let
- tuigreetBin = "${pkgs.tuigreet}/bin/tuigreet";
- sessionsDir = "${pkgs.hyprland}/share/wayland-sessions";
-in
-{
- #################################
- # Greetd (tuigreet)
- #################################
-
- services.greetd = {
- enable = true;
-
- settings = {
- default_session = {
- command = ''
- ${tuigreetBin} \
- --time \
- --remember \
- --remember-session \
- --sessions ${sessionsDir} \
- --cmd "start-hyprland"
- '';
- user = "greeter";
- };
- };
- };
-
- #################################
- # Fix TTY / boot noise issues
- #################################
-
- systemd.services.greetd.serviceConfig = {
- Type = "idle";
- StandardInput = "tty";
- StandardOutput = "tty";
- StandardError = "journal";
-
- # Prevent boot log spam on tty
- TTYReset = true;
- TTYVHangup = true;
- TTYVTDisallocate = true;
- };
-}
diff --git a/Droidnix/generated/modules/traveldroid/system/networking.nix b/Droidnix/generated/modules/traveldroid/system/networking.nix
deleted file mode 100644
index d81a2756c..000000000
--- a/Droidnix/generated/modules/traveldroid/system/networking.nix
+++ /dev/null
@@ -1,55 +0,0 @@
-{ lib, config, pkgs, ... }:
-
-{
- #################################
- # Networking core
- #################################
- networking = {
- # Let DHCP be default unless overridden elsewhere
- useDHCP = lib.mkDefault true;
-
- # Hostname comes from host.nix, do NOT redefine here
-
- #################################
- # NetworkManager (primary stack)
- #################################
- networkmanager = {
- enable = true;
-
- # Use iwd backend for WiFi
- wifi.backend = "iwd";
- };
-
- #################################
- # iwd (WiFi daemon)
- #################################
- wireless.iwd = {
- enable = true;
- # Allow user control via NM / CLI
- settings.General.EnableNetworkConfiguration = true;
- };
-
- #################################
- # Firewall
- #################################
- firewall = {
- enable = true;
-
- # KDE Connect support
- allowedTCPPortRanges = [
- { from = 1714; to = 1764; }
- ];
-
- allowedUDPPortRanges = [
- { from = 1714; to = 1764; }
- ];
- };
- };
-
- #################################
- # System packages
- #################################
- environment.systemPackages = [
- pkgs.networkmanager
- ];
-}
diff --git a/Droidnix/generated/modules/traveldroid/system/nix.nix b/Droidnix/generated/modules/traveldroid/system/nix.nix
deleted file mode 100644
index 96a5be55a..000000000
--- a/Droidnix/generated/modules/traveldroid/system/nix.nix
+++ /dev/null
@@ -1,10 +0,0 @@
-{ lib, config, ... }:
-
-{
- nix.settings = {
- experimental-features = [ "nix-command" "flakes" ];
- download-buffer-size = 536870912; # 512 MB
- cores = 2;
- max-jobs = 1;
- };
-}
diff --git a/Droidnix/generated/users/copy_2_home.nix b/Droidnix/generated/users/copy_2_home.nix
deleted file mode 100644
index 87a18da52..000000000
--- a/Droidnix/generated/users/copy_2_home.nix
+++ /dev/null
@@ -1,42 +0,0 @@
-{ config, pkgs, lib, flakeRoot, ... }:
-
-let
- username = config.users.users.defaultUser or "henrov";
- homeDir = "/home/${username}";
- assetPath = "${flakeRoot}/assets/copy_2_home";
-in
-{
- environment.systemPackages = [ pkgs.rsync ];
-
- systemd.services.copyAssets = {
- description = "Copy assets to ${username}'s home directory";
- wantedBy = [ "multi-user.target" ];
-
- # oneshot service runs once at boot
- serviceConfig.Type = "oneshot";
-
- # Always use /bin/sh -c for multi-line commands
- serviceConfig.ExecStart = ''
- /bin/sh -c '
- echo "Copying assets from ${assetPath} to ${homeDir} ..."
-
- if [ ! -d "${assetPath}" ]; then
- echo "ERROR: ${assetPath} does not exist"
- exit 1
- fi
-
- mkdir -p "${homeDir}"
- chown ${username}:${username} "${homeDir}"
-
- ${pkgs.rsync}/bin/rsync -a --no-owner --no-group "${assetPath}/" "${homeDir}/"
-
- # Fix .config permissions
- mkdir -p "${homeDir}/.config"
- chown -R ${username}:${username} "${homeDir}/.config"
- chmod u+rwx "${homeDir}/.config"
-
- echo "Done copying assets."
- '
- '';
- };
-}
diff --git a/Droidnix/generated/users/henrov.nix b/Droidnix/generated/users/henrov.nix
deleted file mode 100644
index 72861ceec..000000000
--- a/Droidnix/generated/users/henrov.nix
+++ /dev/null
@@ -1,40 +0,0 @@
-{ lib, config, pkgs, ... }:
-
-let
- username = "henrov";
-in
-{
-
-
- #################################
- # NixOS system user
- #################################
- users.users.${username} = {
- isNormalUser = true;
- home = "/home/${username}";
- hashedPassword = "$6$S7iShgBxB.77CwmP$i0njK.2r3OL5UEvgZbmwZ0rnpZ4QyJcv8p9uCmJ4AiVPSMXkQkIwMLzyAOnJ0q8.tPLIp/7EquEIZeK8qbmgw/";
- extraGroups = [ "wheel" "networkmanager" ];
- };
-
- #################################
- # Home Manager user definition
- #################################
- _module.args.hmUsers = {
- ${username} = {
- # Minimal required
- home.username = username;
- home.homeDirectory = "/home/${username}";
- home.stateVersion = "26.05";
-
- # Add user-specific packages here
- home.packages = [
- ];
-
- # Add user dotfiles, session variables, etc. here if needed
- home.file = {
- # Example:
- # ".bashrc" = { source = /path/to/bashrc; };
- };
- };
- };
-}