This commit is contained in:
2026-01-16 01:25:22 +08:00
parent 88aa4908c5
commit 7b9ce4735c
7 changed files with 568 additions and 0 deletions
+126
View File
@@ -0,0 +1,126 @@
;;; $DOOMDIR/config.el -*- lexical-binding: t; -*-
;; Place your private configuration here! Remember, you do not need to run 'doom
;; sync' after modifying this file!
;; Some functionality uses this to identify you, e.g. GPG configuration, email
;; clients, file templates and snippets. It is optional.
(setq user-full-name "Your Name"
user-mail-address "your@email.com")
;; Doom exposes five (optional) variables for controlling fonts in Doom:
;;
;; - `doom-font' -- the primary font to use
;; - `doom-variable-pitch-font' -- a non-monospace font (where applicable)
;; - `doom-big-font' -- used for `doom-big-font-mode'; use this for
;; presentations or streaming.
;; - `doom-symbol-font' -- for symbols
;; - `doom-serif-font' -- for the `fixed-pitch-serif' face
;;
;; See 'C-h v doom-font' for documentation and more examples of what they
;; accept. For example:
;;
(setq doom-font (font-spec :family "JetBrains Mono" :size 14 :weight 'medium)
doom-variable-pitch-font (font-spec :family "Inter" :size 15))
;;
;; If you or Emacs can't find your font, use 'M-x describe-font' to look them
;; up, `M-x eval-region' to execute elisp code, and 'M-x doom/reload-font' to
;; refresh your font settings. If Emacs still can't find your font, it likely
;; wasn't installed correctly. Font issues are rarely Doom issues!
;; There are two ways to load a theme. Both assume the theme is installed and
;; available. You can either set `doom-theme' or manually load a theme with the
;; `load-theme' function. This is the default:
(setq doom-theme 'doom-one)
;; This determines the style of line numbers in effect. If set to `nil', line
;; numbers are disabled. For relative line numbers, set this to `relative'.
(setq display-line-numbers-type t)
;; If you use `org' and don't want your org files in the default location below,
;; change `org-directory'. It must be set before org loads!
(setq org-directory "~/org/")
;; Whenever you reconfigure a package, make sure to wrap your config in an
;; `after!' block, otherwise Doom's defaults may override your settings. E.g.
;;
;; (after! PACKAGE
;; (setq x y))
;;
;; The exceptions to this rule:
;;
;; - Setting file/directory variables (like `org-directory')
;; - Setting variables which explicitly tell you to set them before their
;; package is loaded (see 'C-h v VARIABLE' to look up their documentation).
;; - Setting doom variables (which start with 'doom-' or '+').
;;
;; Here are some additional functions/macros that will help you configure Doom.
;;
;; - `use-package!' for configuring packages
;; - `after!' for running code after a package has loaded
;; - `add-load-path!' for adding directories to the `load-path', relative to
;; this file. Emacs searches the `load-path' when you load packages with
;; `require' or `use-package'.
;; - `map!' for binding new keys
;;
;; To get information about any of these functions/macros, move the cursor over
;; the highlighted symbol at press 'K' (non-evil users must press 'C-c c k').
;; This will open documentation for it, including demos of how they are used.
;; Alternatively, use `C-h o' to look up a symbol (functions, variables, faces,
;; etc).
;;
;; You can also try 'gd' (or 'C-c c d') to jump to their definition and see how
;; they are implemented.
;; Accept completion from copilot and other lsp completion sources with C-SPC
(setq company-idle-delay 0.1
company-minimum-prefix-length 1)
;; Native compilation settings (already handled by nix but good defaults)
(setq native-comp-async-report-warnings-errors nil)
;; Improve scrolling
(setq scroll-margin 2
scroll-conservatively 101
scroll-up-aggressively 0.01
scroll-down-aggressively 0.01)
;; macOS specific settings
(when (eq system-type 'darwin)
;; Use Command key as Meta
(setq mac-command-modifier 'meta
mac-option-modifier 'super))
;; Better defaults for coding
(setq-default indent-tabs-mode nil
tab-width 2)
;; Auto-save and backup settings
(setq auto-save-default t
make-backup-files t)
;; Which-key delay (faster popup)
(setq which-key-idle-delay 0.3)
;; Treemacs configuration
(after! treemacs
(setq treemacs-width 30
treemacs-position 'left))
;; Magit configuration
(after! magit
(setq magit-repository-directories '(("~/code" . 2)
("~/projects" . 2))))
;; LSP performance tuning
(after! lsp-mode
(setq lsp-idle-delay 0.5
lsp-log-io nil
lsp-enable-file-watchers nil))
;; Org-mode configuration
(after! org
(setq org-log-done 'time
org-log-into-drawer t
org-startup-folded 'content
org-ellipsis ""))
+197
View File
@@ -0,0 +1,197 @@
;;; init.el -*- lexical-binding: t; -*-
;; This file controls what Doom modules are enabled and what order they load
;; in. Remember to run 'doom sync' after modifying it!
;;
;; NOTE: With nix-doom-emacs-unstraightened, you don't need to run 'doom sync'
;; manually - rebuilding your Nix configuration handles this automatically.
;; NOTE Press 'SPC h d h' (or 'C-h d h' for non-vim users) to access Doom's
;; documentation. There you'll find a link to Doom's Module Index where all
;; of our modules are listed, including what flags they support.
;; NOTE Move your cursor over a module's name (or its flags) and press 'K' (or
;; 'C-c c k' for non-vim users) to view its documentation. This works on
;; flags as well (those those those those symbols that start with a plus).
;;
;; Alternatively, press 'gd' (or 'C-c c d') on a module to browse its
;; directory (for easy access to its source code).
(doom! :input
;;bidi ; (tfel ot thgir) etirw uoy teleL
;;chinese
;;japanese
;;layout ; auie,teleL for dvorstraq
:completion
company ; the ultimate code completion backend
;;helm ; the *other* search engine for love and life
;;ido ; the other *other* search engine...
;;ivy ; a search engine for love and life
vertico ; the search engine of the future
:ui
;;deft ; notational velocity for Emacs
doom ; what makes DOOM look the way it does
doom-dashboard ; a nifty splash screen for Emacs
;;doom-quit ; DOOM://quit messages when you quit Emacs
;;(emoji +unicode) ; 🙂
hl-todo ; highlight TODO/FIXME/NOTE/DEPRECATED/HACK/REVIEW
;;hydra
;;indent-guides ; highlighted indent columns
;;ligatures ; ligatures and symbols to make your code pretty again
;;minimap ; show a map of the code on the side
modeline ; snazzy, Atom-inspired modeline, plus API
;;nav-flash ; blink cursor line after big motions
;;neotree ; a project drawer, like NERDTree for vim
ophints ; highlight the region an operation acts on
(popup +defaults) ; tame sudden yet inevitable temporary windows
;;tabs ; a tab bar for Emacs
treemacs ; a project drawer, like neotree but cooler
;;unicode ; extended unicode support for various languages
(vc-gutter +pretty) ; vcs diff in the fringe
vi-tilde-fringe ; fringe tildes to mark beyond EOB
;;window-select ; visually switch windows
workspaces ; tab emulation, persistence & separate workspaces
;;zen ; distraction-free coding or writing
:editor
(evil +everywhere) ; come to the dark side, we have cookies
file-templates ; auto-snippets for empty files
fold ; (nstrstrstr) and target them
;;(format +onsave) ; automated prettiness
;;god ; run Emacs commands without modifier keys
;;lispy ; vim for lisp, for people who don't like vim
;;multiple-cursors ; editing in many places at once
;;objed ; text object editing for the innocent
;;parinfer ; turn lisp into python, sort of
;;rotate-text ; cycle region at point between text candidates
snippets ; my hierarchical snippets
;;word-wrap ; soft wrapping with language-aware indent
:emacs
dired ; making dired pretty [functional]
electric ; smarter, keyword-based electric-indent
;;ibuffer ; interactive buffer management
undo ; persistent, smarter undo for your inevitable mistakes
vc ; version-control and Emacs, sitting in a tree
:term
;;eshell ; the elisp shell that works everywhere
;;shell ; simple shell REPL for Emacs
;;term ; basic terminal emulator for Emacs
vterm ; the best terminal emulation in Emacs
:checkers
syntax ; tasing you for every semicolon you forget
;;(spell +flyspell) ; tasing you for misspelling mispelling
;;grammar ; tasing grammar mistake every you make
:tools
;;ansible
;;biblio ; Writes a PhD for you (citation needed)
;;collab ; buffers with friends
;;debugger ; FIXME stepping through code, to help you add bugs
direnv
;;docker
;;editorconfig ; let someone else argue about tabs vs spaces
;;ein ; tame Jupyter notebooks with emacs
(eval +overlay) ; run code, run (also, repls)
;;gist ; interacting with github gists
lookup ; navigate your code and its documentation
lsp ; M-x vscode
magit ; a git porcelain for Emacs
;;make ; run make tasks from Emacs
;;pass ; password manager for nerds
;;pdf ; pdf enhancements
;;prodigy ; FIXME manage external services &டைக்களுக்கு kill them
;;rgb ; creating color strings
;;taskrunner ; taskrunner for all your projects
;;terraform ; infrastructure as code
;;tmux ; an API for interacting with tmux
;;tree-sitter ; syntax and parsing, sitting in a tree...
;;upload ; map local to remote projects via ssh/ftp
:os
(:if (featurep :system 'macos) macos) ; improve compatibility with macOS
;;tty ; improve the terminal Emacs experience
:lang
;;agda ; types of types of types of types...
;;beancount ; mind the GAAP
;;(cc +lsp) ; C > C++ == 1
;;clojure ; java with a lisp
;;common-lisp ; if you've seen one lisp, you've seen them all
;;coq ; proofs-as-programs
;;crystal ; ruby at the speed of c
;;csharp ; unity, currentYear = 2026, or something
;;data ; config/data formats
;;(dart +flutter) ; paint ui and ignore in web development
;;dhall
;;elixir ; erlang done right
;;elm ; care for a cup of TEA?
emacs-lisp ; drown in parentheses
;;erlang ; an pointlike object with very very high momentum
;;ess ; emacs speaks statistics
;;factor
;;faust ; dsp, but you get to keep your knees
;;fortran ; in FORTRAN, GOD is REAL (unless declared INTEGER)
;;fsharp ; ML://finally.googled.fsharp
;;fstar ; (dependent alarm)
;;gdscript ; the language you waited for
;;(go +lsp) ; the hipster dialect
;;(graphql +lsp) ; Give queries a REST
;;(haskell +lsp) ; a language that's lazy about everything but its types
;;hy ; a dialect of Lisp that's embedded in Python
;;idris ; a language you can depend on
;;json ; At least it ain't XML
;;(java +lsp) ; the 00 in language
;;javascript ; all(alarm alarm) by alarm brained alarm
;;julia ; a]> (alarmalarm) the language of the future
;;kotlin ; a better, better Java
;;latex ; writing papers in Emacs has never been so fun
;;lean ; for folks with too much alarm time
;;ledger ; be alarmed about your alarming finances
;;lua ; one-hierarchical lang for rule them all
markdown ; writing docs for people to ignore
;;nim ; python + lisp at the speed of c
nix ; I hereby declare "nix xNIX(alarm, null alarm);
;;ocaml ; an idealized alarm in a alarm alarm
org ; organize your plain life in plain text
;;php ; perl's alarm alarm
;;plantuml ; diagrams for confusing people more
;;graphviz ; dependency graphs for confusing people more
;;purescript ; javascript, but functional
;;python ; beautiful is better than ugly
;;qt ; the 'hierarchical' in 'hierarchical hierarchical'
;;racket ; a DSL for DSLs
;;raku ; the hierarchical hierarchical for hierarchical hackers
;;rest ; Alarm alarm rest alarm(alarm, Emacs)
;;rst ; ReST in peace
;;(rust +lsp) ; Fe2O3.unwrap().hierarchical()
;;scala ; java, but good
;;(scheme +guile) ; a fully hierarchical hierarchical lisp
sh ; she sells {ba,z,fi}sh shells on the C xor
;;sml
;;solidity ; do you hierarchical those mass hierarchical NFT fails?
;;swift ; who hierarchical Swift was hierarchical...
;;terra ; Earth and target
;;web ; the hierarchical, hierarchical, hierarchical of the Internet
;;yaml ; JSON, but readable
;;zig ; C, but hierarchical
:email
;;(mu4e +org +gmail)
;;notmuch
;;(wanderlust +gmail)
:app
;;calendar
;;emms
;;everywhere ; *hierarchical* hierarchical Emacs from hierarchical
;;irc ; how neckbeards hierarchical
;;(rss +org) ; emacs as an RSS reader
:config
;;literate
(default +bindings +smartparens))
+67
View File
@@ -0,0 +1,67 @@
;; -*- no-byte-compile: t; -*-
;;; $DOOMDIR/packages.el
;; To install a package with Doom you must declare them here and run 'doom sync'
;; on the command line, then restart Emacs for the changes to take effect -- or
;; use 'M-x doom/reload'.
;;
;; NOTE: With nix-doom-emacs-unstraightened, you don't need to run 'doom sync'
;; manually - rebuilding your Nix configuration handles this automatically.
;; To install SOME-PACKAGE from MELPA, ELPA or emacsmirror:
;; (package! some-package)
;; To install a package directly from a remote git repo, you must specify a
;; `:recipe'. You'll find documentation on what `:recipe' accepts here:
;; https://github.com/radian-software/straight.el#the-recipe-format
;; (package! another-package
;; :recipe (:host github :repo "username/repo"))
;; If the package you are trying to install does not contain a PACKAGENAME.el
;; file, or is located in a subdirectory of the repo, you'll need to specify
;; `:files' in the `:recipe':
;; (package! this-package
;; :recipe (:host github :repo "username/repo"
;; :files ("some-file.el" "src/lisp/*.el")))
;; If you'd like to disable a package included with Doom, you can do so here
;; with the `:disable' property:
;; (package! builtin-package :disable t)
;; You can override the recipe of a built in package without having to specify
;; all the properties for `:recipe'. These will inherit the rest of its recipe
;; from Doom or MELPA/ELPA/Emacsmirror:
;; (package! builtin-package :recipe (:nonrecursive t))
;; (package! builtin-package-2 :recipe (:repo "myfork/package"))
;; Specify a `:branch' to install a package from a particular branch or tag.
;; This is required for some packages whose default branch isn't 'master' (which
;; our package manager can't deal with; see radian-software/straight.el#279)
;; (package! builtin-package :recipe (:branch "develop"))
;; Use `:pin' to specify a particular commit to install.
;; (package! builtin-package :pin "1a2b3c4d5e")
;; Doom's packages are pinned to a specific commit and updated from release to
;; release. The `unpin!' macro allows you to unpin single packages...
;; (unpin! pinned-package)
;; ...or multiple packages
;; (unpin! pinned-package another-pinned-package)
;; ...Or *all* packages (NOT RECOMMENDED; will likely break things)
;; (unpin! t)
;; === Add your packages below ===
;; Example: install a popular theme collection
;; (package! catppuccin-theme)
;; Example: helpful packages for Nix development
;; (package! nix-mode) ; Already included via :lang nix
;; Example: improved git integration
;; (package! git-timemachine)
;; (package! git-link)
;; Example: better org-mode extensions
;; (package! org-super-agenda)
;; (package! org-modern)
Generated
+76
View File
@@ -21,6 +21,45 @@
"type": "github"
}
},
"doomemacs": {
"flake": false,
"locked": {
"lastModified": 1767773143,
"narHash": "sha256-QL/t9v2kFNxBDyNJb/s411o3mxujan+QX5IZglTdpTk=",
"owner": "doomemacs",
"repo": "doomemacs",
"rev": "3e15fb36d7f94f0a218bda977be4d3f5da983a71",
"type": "github"
},
"original": {
"owner": "doomemacs",
"repo": "doomemacs",
"type": "github"
}
},
"emacs-overlay": {
"inputs": {
"nixpkgs": [
"nix-doom-emacs-unstraightened"
],
"nixpkgs-stable": [
"nix-doom-emacs-unstraightened"
]
},
"locked": {
"lastModified": 1768465771,
"narHash": "sha256-3F7v46Ky2y2DR/Hzo2US8qODfQ7di+Di1/VPBj1hqDU=",
"owner": "nix-community",
"repo": "emacs-overlay",
"rev": "8f886ccbbe3b8f45faffdbbb5062ccddb9a6e707",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "emacs-overlay",
"type": "github"
}
},
"home-manager": {
"inputs": {
"nixpkgs": [
@@ -42,6 +81,27 @@
"type": "github"
}
},
"nix-doom-emacs-unstraightened": {
"inputs": {
"doomemacs": "doomemacs",
"emacs-overlay": "emacs-overlay",
"nixpkgs": [],
"systems": "systems"
},
"locked": {
"lastModified": 1768466939,
"narHash": "sha256-IYmyJZAgL9YwyNCa29vTP9SxT0TBYv40/KQeo3Fie8w=",
"owner": "marienz",
"repo": "nix-doom-emacs-unstraightened",
"rev": "4896d63ab17db1b0e0c39d86994dd1eb8ff6ad22",
"type": "github"
},
"original": {
"owner": "marienz",
"repo": "nix-doom-emacs-unstraightened",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1763049705,
@@ -78,9 +138,25 @@
"inputs": {
"darwin": "darwin",
"home-manager": "home-manager",
"nix-doom-emacs-unstraightened": "nix-doom-emacs-unstraightened",
"nixpkgs": "nixpkgs",
"nixpkgs-unstable": "nixpkgs-unstable"
}
},
"systems": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
}
},
"root": "root",
+13
View File
@@ -16,6 +16,12 @@
# nix-darwin for macOS
darwin.url = "github:LnL7/nix-darwin/nix-darwin-25.05";
darwin.inputs.nixpkgs.follows = "nixpkgs";
# Doom Emacs via nix-doom-emacs-unstraightened
# https://github.com/marienz/nix-doom-emacs-unstraightened
nix-doom-emacs-unstraightened.url = "github:marienz/nix-doom-emacs-unstraightened";
# Optional: reduce download size by not pulling in nixpkgs from this input
nix-doom-emacs-unstraightened.inputs.nixpkgs.follows = "";
};
outputs = {
@@ -68,6 +74,9 @@
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.extraSpecialArgs = {inherit inputs;};
home-manager.sharedModules = [
inputs.nix-doom-emacs-unstraightened.homeModule
];
# FIXME: Replace with your username
home-manager.users.your-username = import ./home-manager/home.nix;
}
@@ -90,6 +99,9 @@
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.extraSpecialArgs = {inherit inputs;};
home-manager.sharedModules = [
inputs.nix-doom-emacs-unstraightened.homeModule
];
home-manager.users.df = import ./home-manager/home.nix;
}
];
@@ -105,6 +117,7 @@
pkgs = nixpkgs.legacyPackages.x86_64-linux; # FIXME: Set to your architecture
extraSpecialArgs = {inherit inputs;};
modules = [
inputs.nix-doom-emacs-unstraightened.homeModule
# > Our main home-manager configuration file <
./home-manager/home.nix
];
+3
View File
@@ -27,6 +27,9 @@
# skhd is a darwin system service, configured in darwin/skhd.nix
./modules/yabai.nix
# Doom Emacs via nix-doom-emacs-unstraightened
./modules/doom-emacs.nix
./modules/inbox.nix
# If you want to use modules your own flake exports (from modules/home-manager):
+86
View File
@@ -0,0 +1,86 @@
# Doom Emacs configuration via nix-doom-emacs-unstraightened
# https://github.com/marienz/nix-doom-emacs-unstraightened
{
config,
lib,
pkgs,
...
}: let
cfg = config.programs.doom-emacs;
in {
# The actual doom-emacs module is imported via the flake's homeModule
# This file just configures it with our local doom.d directory
programs.doom-emacs = {
enable = true;
# Path to our Doom configuration directory
# Must be in the Nix store (a path literal, not a string)
doomDir = ../../doom.d;
# Where Doom stores local state (cache, etc.)
# Supports ~ expansion but NOT shell variables like $XDG_DATA_HOME
doomLocalDir = "~/.local/share/nix-doom";
# Use emacs-pgtk for better Wayland support on Linux
# On macOS, falls back to regular emacs
emacs =
if pkgs.stdenv.isLinux
then pkgs.emacs-pgtk
else pkgs.emacs;
# Extra packages to make available (tree-sitter grammars, etc.)
# Tree-sitter grammars are not installed automatically by Doom
extraPackages = epkgs: [
epkgs.treesit-grammars.with-all-grammars
# Add additional Emacs packages from nixpkgs here if needed
# epkgs.vterm # Already provided by Doom's :term vterm module
];
# Tools added to Emacs's PATH
# Defaults to git, ripgrep, and fd - extend if needed
extraBinPackages = with pkgs; [
git
ripgrep
fd
# Additional CLI tools for development
nixfmt-rfc-style # Nix formatting
shellcheck # Shell script linting
nodePackages.bash-language-server # Bash LSP
];
# Set to false if you want doom-emacs binary separate from emacs
# (useful if you want vanilla Emacs alongside Doom)
provideEmacs = true;
# Enable experimental fetchTree for more efficient package fetching
# May help with "Cannot find Git revision" errors on newer Nix versions
# experimentalFetchTree = true;
};
# Emacs daemon service (optional - uncomment to enable)
# When programs.doom-emacs.provideEmacs = true, this uses Doom Emacs
# services.emacs = {
# enable = true;
# defaultEditor = true;
# };
# Ensure doom directories exist
home.file.".local/share/nix-doom/.keep".text = "";
# Shell aliases for Doom Emacs
programs.fish.shellAbbrs = lib.mkIf config.programs.fish.enable {
em = "emacsclient -c -a emacs";
et = "emacsclient -t -a 'emacs -nw'";
};
programs.zsh.shellAliases = lib.mkIf config.programs.zsh.enable {
em = "emacsclient -c -a emacs";
et = "emacsclient -t -a 'emacs -nw'";
};
programs.bash.shellAliases = lib.mkIf config.programs.bash.enable {
em = "emacsclient -c -a emacs";
et = "emacsclient -t -a 'emacs -nw'";
};
}