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; }; - }; - }; - }; -}