Testing emacs

This commit is contained in:
2025-09-16 15:02:56 -04:00
parent 9b33a71816
commit e75178c276
12 changed files with 1049 additions and 89 deletions

477
flake.lock generated
View File

@@ -1,5 +1,38 @@
{
"nodes": {
"aquamarine": {
"inputs": {
"hyprutils": [
"hyprland",
"hyprutils"
],
"hyprwayland-scanner": [
"hyprland",
"hyprwayland-scanner"
],
"nixpkgs": [
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1755946532,
"narHash": "sha256-POePremlUY5GyA1zfbtic6XLxDaQcqHN6l+bIxdT5gc=",
"owner": "hyprwm",
"repo": "aquamarine",
"rev": "81584dae2df6ac79f6b6dae0ecb7705e95129ada",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "aquamarine",
"type": "github"
}
},
"disko": {
"inputs": {
"nixpkgs": "nixpkgs"
@@ -50,6 +83,22 @@
"type": "github"
}
},
"flake-compat_3": {
"flake": false,
"locked": {
"lastModified": 1747046372,
"narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885",
"type": "github"
},
"original": {
"owner": "edolstra",
"repo": "flake-compat",
"type": "github"
}
},
"flake-parts": {
"inputs": {
"nixpkgs-lib": [
@@ -94,8 +143,8 @@
},
"git-hooks": {
"inputs": {
"flake-compat": "flake-compat_2",
"gitignore": "gitignore",
"flake-compat": "flake-compat_3",
"gitignore": "gitignore_2",
"nixpkgs": [
"neovim-nightly-overlay",
"nixpkgs"
@@ -116,6 +165,28 @@
}
},
"gitignore": {
"inputs": {
"nixpkgs": [
"hyprland",
"pre-commit-hooks",
"nixpkgs"
]
},
"locked": {
"lastModified": 1709087332,
"narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=",
"owner": "hercules-ci",
"repo": "gitignore.nix",
"rev": "637db329424fd7e46cf4185293b9cc8c88c95394",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "gitignore.nix",
"type": "github"
}
},
"gitignore_2": {
"inputs": {
"nixpkgs": [
"neovim-nightly-overlay",
@@ -179,14 +250,303 @@
"type": "github"
}
},
"hyprcursor": {
"inputs": {
"hyprlang": [
"hyprland",
"hyprlang"
],
"nixpkgs": [
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1753964049,
"narHash": "sha256-lIqabfBY7z/OANxHoPeIrDJrFyYy9jAM4GQLzZ2feCM=",
"owner": "hyprwm",
"repo": "hyprcursor",
"rev": "44e91d467bdad8dcf8bbd2ac7cf49972540980a5",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprcursor",
"type": "github"
}
},
"hyprgraphics": {
"inputs": {
"hyprutils": [
"hyprland",
"hyprutils"
],
"nixpkgs": [
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1757542864,
"narHash": "sha256-8i9tsVoOmLQDHJkNgzJWnmxYFGkJNsSndimYpCoqmoA=",
"owner": "hyprwm",
"repo": "hyprgraphics",
"rev": "aa9d14963b94186934fd0715d9a7f0f2719e64bb",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprgraphics",
"type": "github"
}
},
"hyprland": {
"inputs": {
"aquamarine": "aquamarine",
"hyprcursor": "hyprcursor",
"hyprgraphics": "hyprgraphics",
"hyprland-protocols": "hyprland-protocols",
"hyprland-qtutils": "hyprland-qtutils",
"hyprlang": "hyprlang",
"hyprutils": "hyprutils",
"hyprwayland-scanner": "hyprwayland-scanner",
"nixpkgs": "nixpkgs_2",
"pre-commit-hooks": "pre-commit-hooks",
"systems": "systems",
"xdph": "xdph"
},
"locked": {
"lastModified": 1757936652,
"narHash": "sha256-qQi/z2sfqFpVnDP+oqIBXRxwRCsmtk7HFOrQF08h6e8=",
"owner": "hyprwm",
"repo": "Hyprland",
"rev": "9e74d0aea7614eaf238ef07261129026572337e7",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "Hyprland",
"type": "github"
}
},
"hyprland-plugins": {
"inputs": {
"hyprland": [
"hyprland"
],
"nixpkgs": [
"hyprland-plugins",
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland-plugins",
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1757774228,
"narHash": "sha256-6jAtMjnWq8kty/dpPbIKxIupUG+WAE2AKMIKhxdLYNo=",
"owner": "hyprwm",
"repo": "hyprland-plugins",
"rev": "5ff379f4e525183cc6766ea95764b52ec97d8966",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprland-plugins",
"type": "github"
}
},
"hyprland-protocols": {
"inputs": {
"nixpkgs": [
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1749046714,
"narHash": "sha256-kymV5FMnddYGI+UjwIw8ceDjdeg7ToDVjbHCvUlhn14=",
"owner": "hyprwm",
"repo": "hyprland-protocols",
"rev": "613878cb6f459c5e323aaafe1e6f388ac8a36330",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprland-protocols",
"type": "github"
}
},
"hyprland-qt-support": {
"inputs": {
"hyprlang": [
"hyprland",
"hyprland-qtutils",
"hyprlang"
],
"nixpkgs": [
"hyprland",
"hyprland-qtutils",
"nixpkgs"
],
"systems": [
"hyprland",
"hyprland-qtutils",
"systems"
]
},
"locked": {
"lastModified": 1749154592,
"narHash": "sha256-DO7z5CeT/ddSGDEnK9mAXm1qlGL47L3VAHLlLXoCjhE=",
"owner": "hyprwm",
"repo": "hyprland-qt-support",
"rev": "4c8053c3c888138a30c3a6c45c2e45f5484f2074",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprland-qt-support",
"type": "github"
}
},
"hyprland-qtutils": {
"inputs": {
"hyprland-qt-support": "hyprland-qt-support",
"hyprlang": [
"hyprland",
"hyprlang"
],
"hyprutils": [
"hyprland",
"hyprland-qtutils",
"hyprlang",
"hyprutils"
],
"nixpkgs": [
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1757508108,
"narHash": "sha256-bTYedtQFqqVBAh42scgX7+S3O6XKLnT6FTC6rpmyCCc=",
"owner": "hyprwm",
"repo": "hyprland-qtutils",
"rev": "119bcb9aa742658107b326c50dcd24ab59b309b7",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprland-qtutils",
"type": "github"
}
},
"hyprlang": {
"inputs": {
"hyprutils": [
"hyprland",
"hyprutils"
],
"nixpkgs": [
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1756810301,
"narHash": "sha256-wgZ3VW4VVtjK5dr0EiK9zKdJ/SOqGIBXVG85C3LVxQA=",
"owner": "hyprwm",
"repo": "hyprlang",
"rev": "3d63fb4a42c819f198deabd18c0c2c1ded1de931",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprlang",
"type": "github"
}
},
"hyprutils": {
"inputs": {
"nixpkgs": [
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1756117388,
"narHash": "sha256-oRDel6pNl/T2tI+nc/USU9ZP9w08dxtl7hiZxa0C/Wc=",
"owner": "hyprwm",
"repo": "hyprutils",
"rev": "b2ae3204845f5f2f79b4703b441252d8ad2ecfd0",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprutils",
"type": "github"
}
},
"hyprwayland-scanner": {
"inputs": {
"nixpkgs": [
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1755184602,
"narHash": "sha256-RCBQN8xuADB0LEgaKbfRqwm6CdyopE1xIEhNc67FAbw=",
"owner": "hyprwm",
"repo": "hyprwayland-scanner",
"rev": "b3b0f1f40ae09d4447c20608e5a4faf8bf3c492d",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprwayland-scanner",
"type": "github"
}
},
"neovim-config": {
"flake": false,
"locked": {
"lastModified": 1757828301,
"narHash": "sha256-vjyWq2fMUAsO+BqXxuifh5LQ7yomZfS1qnQq2VQsJ0E=",
"lastModified": 1757956531,
"narHash": "sha256-qfkl4aiAkzb2H4LY2L6ZAqHs5YrAfPEr1qLvDrxcbJ0=",
"ref": "New-Master",
"rev": "fcc084630ada799cff650d34056efa38c4f1f64d",
"revCount": 34,
"rev": "a9e3cd2d6814b678cc2da6d639bcd1c0251b4ae1",
"revCount": 37,
"type": "git",
"url": "https://git.th3r00t.net/th3r00t/nvim-config.git"
},
@@ -198,12 +558,12 @@
},
"neovim-nightly-overlay": {
"inputs": {
"flake-compat": "flake-compat",
"flake-compat": "flake-compat_2",
"flake-parts": "flake-parts",
"git-hooks": "git-hooks",
"hercules-ci-effects": "hercules-ci-effects",
"neovim-src": "neovim-src",
"nixpkgs": "nixpkgs_2",
"nixpkgs": "nixpkgs_3",
"treefmt-nix": "treefmt-nix"
},
"locked": {
@@ -289,6 +649,22 @@
}
},
"nixpkgs_2": {
"locked": {
"lastModified": 1757487488,
"narHash": "sha256-zwE/e7CuPJUWKdvvTCB7iunV4E/+G0lKfv4kk/5Izdg=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "ab0f3607a6c7486ea22229b92ed2d355f1482ee0",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_3": {
"locked": {
"lastModified": 1757746433,
"narHash": "sha256-fEvTiU4s9lWgW7mYEU/1QUPirgkn+odUBTaindgiziY=",
@@ -304,7 +680,7 @@
"type": "github"
}
},
"nixpkgs_3": {
"nixpkgs_4": {
"locked": {
"lastModified": 1757745802,
"narHash": "sha256-hLEO2TPj55KcUFUU1vgtHE9UEIOjRcH/4QbmfHNF820=",
@@ -320,15 +696,40 @@
"type": "github"
}
},
"pre-commit-hooks": {
"inputs": {
"flake-compat": "flake-compat",
"gitignore": "gitignore",
"nixpkgs": [
"hyprland",
"nixpkgs"
]
},
"locked": {
"lastModified": 1757588530,
"narHash": "sha256-tJ7A8mID3ct69n9WCvZ3PzIIl3rXTdptn/lZmqSS95U=",
"owner": "cachix",
"repo": "git-hooks.nix",
"rev": "b084b2c2b6bc23e83bbfe583b03664eb0b18c411",
"type": "github"
},
"original": {
"owner": "cachix",
"repo": "git-hooks.nix",
"type": "github"
}
},
"root": {
"inputs": {
"disko": "disko",
"home-manager": "home-manager",
"hyprland": "hyprland",
"hyprland-plugins": "hyprland-plugins",
"neovim-config": "neovim-config",
"neovim-nightly-overlay": "neovim-nightly-overlay",
"nix-index-database": "nix-index-database",
"nixos-hardware": "nixos-hardware",
"nixpkgs": "nixpkgs_3",
"nixpkgs": "nixpkgs_4",
"sops-nix": "sops-nix"
}
},
@@ -352,6 +753,21 @@
"type": "github"
}
},
"systems": {
"locked": {
"lastModified": 1689347949,
"narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=",
"owner": "nix-systems",
"repo": "default-linux",
"rev": "31732fcf5e8fea42e59c2488ad31a0e651500f68",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default-linux",
"type": "github"
}
},
"treefmt-nix": {
"inputs": {
"nixpkgs": [
@@ -372,6 +788,47 @@
"repo": "treefmt-nix",
"type": "github"
}
},
"xdph": {
"inputs": {
"hyprland-protocols": [
"hyprland",
"hyprland-protocols"
],
"hyprlang": [
"hyprland",
"hyprlang"
],
"hyprutils": [
"hyprland",
"hyprutils"
],
"hyprwayland-scanner": [
"hyprland",
"hyprwayland-scanner"
],
"nixpkgs": [
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1755354946,
"narHash": "sha256-zdov5f/GcoLQc9qYIS1dUTqtJMeDqmBmo59PAxze6e4=",
"owner": "hyprwm",
"repo": "xdg-desktop-portal-hyprland",
"rev": "a10726d6a8d0ef1a0c645378f983b6278c42eaa0",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "xdg-desktop-portal-hyprland",
"type": "github"
}
}
},
"root": "root",

View File

@@ -6,6 +6,11 @@
home-manager = {
url = "github:nix-community/home-manager";
inputs.nixpkgs.follows = "nixpkgs";
};
hyprland.url = "github:hyprwm/Hyprland";
hyprland-plugins = {
url = "github:hyprwm/hyprland-plugins";
inputs.hyprland.follows = "hyprland";
};
nix-index-database.url = "github:nix-community/nix-index-database";
nix-index-database.inputs.nixpkgs.follows = "nixpkgs";
@@ -41,7 +46,7 @@
in {
nixosConfigurations.xps13 = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
specialArgs = { inherit overlays; };
specialArgs = { inherit overlays inputs; };
modules = [
{ nixpkgs.overlays = overlays; }
sops-nix.nixosModules.sops
@@ -50,6 +55,7 @@
nixos-hardware.nixosModules.dell-xps-13-9370
home-manager.nixosModules.home-manager {
# Optionally, use home-manager.extraSpecialArgs to pass arguments to home.nix
home-manager.extraSpecialArgs = { inherit inputs; };
# home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.sharedModules = [ {nixpkgs.overlays = overlays;} ];
@@ -69,7 +75,7 @@
};
nixosConfigurations.Titan = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
specialArgs = { inherit overlays; };
specialArgs = { inherit overlays inputs; };
modules = [
{ nixpkgs.overlays = overlays; }
disko.nixosModules.disko
@@ -80,6 +86,7 @@
# home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.sharedModules = [ {nixpkgs.overlays = overlays;} ];
home-manager.extraSpecialArgs = { inherit inputs; };
home-manager.users.th3r00t = {
imports = [
./home/server.nix
@@ -97,7 +104,7 @@
};
nixosConfigurations.Athena = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
specialArgs = { inherit overlays; };
specialArgs = { inherit overlays inputs; };
modules = [
{ nixpkgs.overlays = overlays; }
disko.nixosModules.disko
@@ -108,6 +115,7 @@
# home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.sharedModules = [ {nixpkgs.overlays = overlays;} ];
home-manager.extraSpecialArgs = { inherit inputs; };
home-manager.users.th3r00t = {
imports = [
./home/server.nix

View File

@@ -30,6 +30,7 @@
];
home.packages = with pkgs; [
autossh
elinks
fastfetch
ranger
mpv
@@ -55,6 +56,7 @@
nix-output-monitor
devenv
direnv
dotenv-cli
irssi
luarocks
lua5_1

433
home/emacs.org Normal file
View File

@@ -0,0 +1,433 @@
* Emacs litterate config file
I am using straight as the backend for use package and have thusly set it in
[./early-init.el]
** Use-Package
Install use-package and enable ':ensure t' globally.
#+begin_src emacs-lisp
(straight-use-package 'use-package)
(setq use-package-always-ensure t)
(use-package straight
:custom
(straight-use-package-by-default t))
#+end_src
As a lifetime vim user I need to evil keys set up early
** Overrides
#+begin_src emacs-lisp
(setq custom-file (locate-user-emacs-file "custom-vars.el"))
(load custom-file 'noerror 'nomessage)
(setq global-auto-revert-non-file-buffers 't)
#+end_src
** Evil Mode
*** Undo-Tree
evil mode requires undo-tree so I have it set to compress the undo files
and enable undo-tree mode globally
#+begin_src emacs-lisp
(use-package undo-tree :config
(global-undo-tree-mode)
(setq undo-tree-auto-save-history t)
(defadvice undo-tree-make-history-save-filename
(after undo-tree activate)
(setq ad-return-value (concat ad-return-value ".gz"))))
#+end_src
*** goto-chg
It also requires goto-chg
#+begin_src emacs-lisp
(use-package goto-chg)
#+end_src
*** Evil Mode
Now I hook in Evil mode
#+begin_src emacs-lisp
(use-package evil :config
(evil-mode 1)
(setq evil-search-module 'evil-search)
(setq evil-shift-width 2)
(setq evil-split-window-below 't)
(setq evil-vsplit-window-right 't)
(setq show-paren-mode 't)
(setq evil-undo-system 'undo-tree))
(evil-set-leader '(normal visual motion) (kbd "SPC"))
(evil-define-key 'normal 'global
(kbd "<leader>f f") 'file-file
(kbd "<leader>f s") 'save-buffer
(kbd "<leader>f r") 'recentf-open-files
(kbd "<leader>e e") 'eval-buffer)
#+end_src
*** Evil Collection
#+begin_src emacs-lisp
(use-package evil-collection :after evil
:ensure t
:config
(evil-collection-init))
(use-package evil-org :after org
:ensure t
:hook (org-mode . (lambda () evil-org-mode))
:config
(require 'evil-org-agenda)
(evil-org-agenda-set-keys)
(setf evil-org-key-theme '(navigation insert textobjects additional))
(setf org-special-ctrl-a/e t))
#+end_src
** UI
#+begin_src emacs-lisp
(use-package treemacs :config
(evil-define-key 'normal 'global (kbd "<leader> f e") 'treemacs))
#+end_src
Enable which key mode
#+begin_src emacs-lisp
(which-key-mode)
#+end_src
** Theming
*** Fonts / icons
Icons must be installed 'all-the-icons-install
#+begin_src emacs-lisp
(use-package all-the-icons
:if (display-graphic-p))
(use-package rainbow-delimiters :hook (prog-mode . rainbow-delimiters-mode))
#+end_src
*** UI System
#+begin_src emacs-lisp
(require 'recentf)
(recentf-mode 1)
(setq history-length 50)
(savehist-mode 1)
(setq recentf-max-menu-items 25)
(save-place-mode 1)
(menu-bar-mode -1)
(tool-bar-mode -1)
(scroll-bar-mode -1)
(global-display-line-numbers-mode 1)
(hl-line-mode 1)
(blink-cursor-mode 1)
#+end_src
*** Color Scheme -> load-theme here
#+begin_src emacs-lisp
(use-package doom-themes
:ensure t
:config
;; Global settings (defaults)
(setq doom-themes-enable-bold t ; if nil, bold is universally disabled
doom-themes-enable-italic t) ; if nil, italics is universally disabled
(load-theme 'doom-tokyo-night t)
(doom-themes-visual-bell-config)
(doom-themes-neotree-config)
(setq doom-themes-treemacs-theme "doom-tokyo-night") ; use "doom-colors" for less minimal icon theme
(doom-themes-treemacs-config)
;; Corrects (and improves) org-mode's native fontification.
(doom-themes-org-config))
#+end_src
** Utilities
*** Completion
**** counsel
#+begin_src emacs-lisp
(use-package counsel :config (counsel-mode))
(use-package swiper)
(use-package ivy :config
(ivy-mode)
(setq ivy-use-virtual-buffers 't)
(setq enable-recursive-minibuffers 't)
(global-set-key "\C-s" 'swiper-isearch)
(global-set-key (kbd "C-c C-r") 'ivy-resume)
(global-set-key (kbd "M-x") 'counsel-M-x)
(global-set-key (kbd "C-x C-f") 'counsel-find-file)
(global-set-key (kbd "<f1> f") 'counsel-describe-function)
(global-set-key (kbd "<f1> v") 'counsel-describe-variable)
(global-set-key (kbd "<f1> o") 'counsel-describe-symbol)
(global-set-key (kbd "<f1> l") 'counsel-find-library)
(global-set-key (kbd "<f1> i") 'counsel-info-lookup-symbol)
(global-set-key (kbd "<f1> u") 'counsel-unicode-char)
(global-set-key (kbd "C-c g") 'counsel-git)
(global-set-key (kbd "C-c j") 'counsel-git-grep)
(global-set-key (kbd "C-c k") 'counsel-ag)
(global-set-key (kbd "C-x l") 'counsel-locate)
(global-set-key (kbd "C-S-o") 'counsel-rhythmbox)
(define-key minibuffer-local-map (kbd "C-r") 'counsel-minibuffer-history))
(use-package all-the-icons-ivy-rich
:ensure t
:init (all-the-icons-ivy-rich-mode 1))
(use-package ivy-rich
:ensure t
:init (ivy-rich-mode 1))
#+end_src
**** helpful
#+begin_src emacs-lisp
(use-package helpful
:config
(global-set-key (kbd "C-h f") #'helpful-callable)
(global-set-key (kbd "C-h v") #'helpful-variable)
(global-set-key (kbd "C-h k") #'helpful-key)
(global-set-key (kbd "C-h x") #'helpful-command)
(global-set-key (kbd "C-c C-S-d") #'helpful-at-point))
#+end_src
** Org Mode
*** Org Roam
Presents a good example of use-package's capabilities.
#+begin_src emacs-lisp
(use-package org-roam :ensure t :after org :custom (org-roam-directory "~/org/roam") :bind
(("C-c n l" . org-roam-buffer-toggle)
("C-c n f" . org-roam-node-find)
("C-c n i" . org-roam-node-insert)
:map org-mode-map
("C-M-i" . completion-at-point))
:init (setq org-roam-v2-ack t)
:config
(org-roam-setup))
(setq org-roam-node-display-template
(concat "${title:*} "
(propertize "${tags:10}" 'face 'org-tag)))
(setq org-roam-database-connector 'sqlite-builtin)
(setq org-roam-capture-templates '(("d" "default" plain "%?"
:target (file+head "${slug}.org"
"#+title: ${title}\n")
:unnarrowed t)))
#+end_src
#+begin_src
(org-roam-capture-templates
'(("d" "default" plain
"%?"
:if-new (file+head "%<%Y%m%d%H%M%S>-${slug}.org" "#+title: ${title}\n")
:unnarrowed t)
("l" "programming language" plain
"* Characteristics\n\n- Family: %?\n- Inspired by: \n\n*Reference:\n\n"
:if-new (file+head "%<%Y%m%d%H%M%S>-${slug}.org" "#+title: ${title}\n")
:unnarrowed t)
("b" "book notes" plain
"\n* Source\n\nAuthor: %^{Author}\nTitle: ${title}\nYear: %^{Year}\n\n* Summary\n\n%?"
:if-new (file+head "%<%Y%m%d%H%M%S>-${slug}.org" "#+title: ${title}\n")
:unnarrowed t)
("p" "project" plain "* Goals\n\n%?\n\n* Tasks\n\n** TODO Add initial tasks\n\n* Dates\n\n"
:if-new (file+head "%<%Y%m%d%H%M%S>-${slug}.org" "#+title: ${title}\n#+filetags: Project")
:unnarrowed t))
#+end_src
**** Capture Templates
#+begin_src emacs-lisp
#+end_src
*** Org Agenda
#+begin_src emacs-lisp
(setq org-columns-default-format "%50ITEM(Task) %10CLOCKSUM %16TIMESTAMP_IA")
#+end_src
*** Capture Templates
**** Agenda Related
:PROPERTIES:
:ID: e81c993e-995d-492f-af46-73928c0a4fbd
:END:
[https://d12frosted.io/posts/2020-06-23-task-management-with-roam-vol1.html]
#+begin_src emacs-lisp
(setq org-capture-templates
'(("t" "todo" entry (file org-default-notes-file)
"* TODO %?\n%u\n%a\n" :clock-in t :clock-resume t)
("m" "Meeting" entry (file org-default-notes-file)
"* MEETING with %? :MEETING:\n%t" :clock-in t :clock-resume t)
("d" "Diary" entry (file+datetree "~/org/diary.org")
"* %?\n%U\n" :clock-in t :clock-resume t)
("i" "Idea" entry (file org-default-notes-file)
"* %? :IDEA: \n%t" :clock-in t :clock-resume t)
("n" "Next Task" entry (file+headline org-default-notes-file "Tasks")
"** NEXT %? \nDEADLINE: %t") ))
#+end_src
#+begin_src emacs-lisp
(setq org-agenda-prefix-format
'((agenda . " %i %-12(vulpea-agenda-category)%?-12t% s")
(todo . " %i %-12(vulpea-agenda-category) ")
(tags . " %i %-12(vulpea-agenda-category) ")
(search . " %i %-12(vulpea-agenda-category) ")))
(defun vulpea-agenda-category ()
"Get category of item at point for agenda.
Category is defined by one of the following items:
- CATEGORY property
- TITLE keyword
- TITLE property
- filename without directory and extension
Usage example:
(setq org-agenda-prefix-format
'((agenda . \" %(vulpea-agenda-category) %?-12t %12s\")))
Refer to `org-agenda-prefix-format' for more information."
(let* ((file-name (when buffer-file-name
(file-name-sans-extension
(file-name-nondirectory buffer-file-name))))
(title (vulpea-buffer-prop-get "title"))
(category (org-get-category)))
(or (if (and
title
(string-equal category file-name))
title
category)
"")))
(defun vulpea-buffer-prop-get (name)
"Get a buffer property called NAME as a string."
(org-with-point-at 1
(when (re-search-forward (concat "^#\\+" name ": \\(.*\\)")
(point-max) t)
(buffer-substring-no-properties
(match-beginning 1)
(match-end 1)))))
(setq org-agenda-prefix-format
'((agenda . " %i %(vulpea-agenda-category 12)%?-12t% s")
(todo . " %i %(vulpea-agenda-category 12) ")
(tags . " %i %(vulpea-agenda-category 12) ")
(search . " %i %(vulpea-agenda-category 12) ")))
(defun vulpea-agenda-category (&optional len)
"Get category of item at point for agenda.
Category is defined by one of the following items:
- CATEGORY property
- TITLE keyword
- TITLE property
- filename without directory and extension
When LEN is a number, resulting string is padded right with
spaces and then truncated with ... on the right if result is
longer than LEN.
Usage example:
(setq org-agenda-prefix-format
'((agenda . \" %(vulpea-agenda-category) %?-12t %12s\")))
Refer to `org-agenda-prefix-format' for more information."
(let* ((file-name (when buffer-file-name
(file-name-sans-extension
(file-name-nondirectory buffer-file-name))))
(title (vulpea-buffer-prop-get "title"))
(category (org-get-category))
(result
(or (if (and
title
(string-equal category file-name))
title
category)
"")))
(if (numberp len)
(s-truncate len (s-pad-right len " " result))
result)))
(defun vulpea-ensure-filetag ()
"Add respective file tag if it's missing in the current note."
(interactive)
(let ((tags (vulpea-buffer-tags-get))
(tag (vulpea--title-as-tag)))
(when (and (seq-contains-p tags "people")
(not (seq-contains-p tags tag)))
(vulpea-buffer-tags-add tag))))
(defun vulpea--title-as-tag ()
"Return title of the current note as tag."
(vulpea--title-to-tag (vulpea-buffer-title-get)))
(defun vulpea--title-to-tag (title)
"Convert TITLE to tag."
(concat "@" (s-replace " " "" title)))
(defun vulpea-tags-add ()
"Add a tag to current note."
(interactive)
;; since https://github.com/org-roam/org-roam/pull/1515
;; `org-roam-tag-add' returns added tag, we could avoid reading tags
;; in `vulpea-ensure-filetag', but this way it can be used in
;; different contexts while having simple implementation.
(when (call-interactively #'org-roam-tag-add)
(vulpea-ensure-filetag)))
(defun org-roam-node-insert-wrapper (fn)
"Insert a link to the note using FN.
If inserted node has PEOPLE tag on it, tag the current outline
accordingly."
(interactive)
(when-let*
((node (funcall fn))
(title (org-roam-node-title node))
(tags (org-roam-node-tags node)))
(when (seq-contains-p tags "people")
(save-excursion
(ignore-errors
(org-back-to-heading)
(org-set-tags
(seq-uniq
(cons
(vulpea--title-to-tag title)
(org-get-tags nil t)))))))))
(advice-add
#'org-roam-node-insert
:around
#'org-roam-node-insert-wrapper)
(defun my-vulpea-insert-handle (note)
"Hook to be called on NOTE after `vulpea-insert'."
(when-let* ((title (vulpea-note-title note))
(tags (vulpea-note-tags note)))
(when (seq-contains-p tags "people")
(save-excursion
(ignore-errors
(org-back-to-heading)
(when (eq 'todo (org-element-property
:todo-type
(org-element-at-point)))
(org-set-tags
(seq-uniq
(cons
(vulpea--title-to-tag title)
(org-get-tags nil t))))))))))
(defun vulpea--title-to-tag (title)
"Convert TITLE to tag."
(concat "@" (s-replace " " "" title)))
(add-hook 'vulpea-insert-handle-functions
#'my-vulpea-insert-handle)
#+end_src
* EXWM
#+begin_src emacs-lisp
(require 'exwm)
;; Set the initial workspace number.
(setq exwm-workspace-number 4)
;; Make class name the buffer name.
(add-hook 'exwm-update-class-hook
(lambda () (exwm-workspace-rename-buffer exwm-class-name)))
;; Global keybindings.
(setq exwm-input-global-keys
`(([?\s-r] . exwm-reset) ;; s-r: Reset (to line-mode).
([?\s-w] . exwm-workspace-switch) ;; s-w: Switch workspace.
([?\s-&] . (lambda (cmd) ;; s-&: Launch application.
(interactive (list (read-shell-command "$ ")))
(start-process-shell-command cmd nil cmd)))
;; s-N: Switch to certain workspace.
,@(mapcar (lambda (i)
`(,(kbd (format "s-%d" i)) .
(lambda ()
(interactive)
(exwm-workspace-switch-create ,i))))
(number-sequence 0 9))))
;; Enable EXWM
;; let's get encryption established
(setenv "GPG_AGENT_INFO" nil) ;; use emacs pinentry
(setq auth-source-debug t)
(setq epg-gpg-program "gpg2") ;; not necessary
(require 'epa-file)
(epa-file-enable)
(setq epa-pinentry-mode 'loopback)
(setq epg-pinentry-mode 'loopback)
(pinentry-start)
(require 'org-crypt)
(org-crypt-use-before-save-magic)
(require 'exwm-randr)
(require 'exwm-systemtray)
(setq exwm-randr-workspace-output-plist '(o "eDP-1"))
(add-hook 'exwm-randr-screen-change-hook
(lambda ()
(start-process-shell-command
"xrandr" nil "xrandr --output eDP-1 --scale .5 --filter nearest")))
(exwm-randr-enable)
(exwm-systemtray-enable)

View File

@@ -238,11 +238,11 @@
# https://github.com/kovidgoyal/kitty-themes/tree/master/themes
themeFile = "tokyo_night_night";
shellIntegration = {
enableBashIntegration = true;
enableZshIntegration = true;
enableFishIntegration = true;
};
extraConfig = ''
shell zsh
dynamic_background_opacity yes
background_opacity 0.7
'';

View File

@@ -65,17 +65,6 @@
];
};
users.users.th3r00t = {
isNormalUser = true;
description = "Mike 'th3r00t' Young";
extraGroups = [ "networkmanager" "wheel" "input" ];
packages = with pkgs; [
];
openssh.authorizedKeys.keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIH8P/3yzsruekSaZ9b+yk429VTcfCtI1j8jnkNbPAgnr th3r00t@nixos"
];
};
environment = {
variables.EDITOR = "nvim";
systemPackages = with pkgs; [

View File

@@ -8,6 +8,20 @@
../services.nix
];
# Define a user account. Don't forget to set a password with passwd.
users.users.th3r00t = {
isNormalUser = true;
description = "Mike 'th3r00t' Young";
extraGroups = [ "networkmanager" "wheel" "input" ];
packages = with pkgs; [
# kdePackages.kate
# thunderbird
];
};
programs.zsh.enable = true;
programs.fish.enable = true;
programs.bash.enable = true;
users.defaultUserShell = pkgs.zsh;
nix.settings.experimental-features = [ "nix-command" "flakes" ];
nix.settings.trusted-users = [ "root" "th3r00t" ];
nix.extraOptions = ''

View File

@@ -59,17 +59,6 @@
];
};
users.users.th3r00t = {
isNormalUser = true;
description = "Mike 'th3r00t' Young";
extraGroups = [ "networkmanager" "wheel" "input" ];
packages = with pkgs; [
];
openssh.authorizedKeys.keys = [
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIH8P/3yzsruekSaZ9b+yk429VTcfCtI1j8jnkNbPAgnr th3r00t@nixos"
];
};
environment = {
variables.EDITOR = "nvim";
systemPackages = with pkgs; [

View File

@@ -2,7 +2,7 @@
# your system. Help is available in the configuration.nix(5) man page
# and in the NixOS manual (accessible by running nixos-help).
{ config, pkgs, ... }:
{ config, pkgs, callPackage, ... }:
{
imports =
@@ -27,12 +27,75 @@
options ath10k_core rawmode=1
'';
};
nixpkgs.overlays = [
(import (builtins.fetchTarball {
url = "https://github.com/nix-community/emacs-overlay/archive/master.tar.gz";
sha256 = "0d04az7ghk446k7wgrlia4rynanx8863xqfw7qzcwqplpzp8h10r";
}))
];
security.rtkit.enable = true;
# Enable touchpad support (enabled default in most desktopManager).
fonts = {
enableDefaultPackages = true;
fontDir.enable = true;
packages = with pkgs; [
(pkgs.emacsWithPackagesFromUsePackage {
# Your Emacs config file. Org mode babel files are also
# supported.
# NB: Config files cannot contain unicode characters, since
# they're being parsed in nix, which lacks unicode
# support.
# config = ./emacs.org;
config = ../../home/emacs.org;
# config = ./emacs.el;
# Whether to include your config as a default init file.
# If being bool, the value of config is used.
# Its value can also be a derivation like this if you want to do some
# substitution:
# defaultInitFile = pkgs.substituteAll {
# name = "default.el";
# src = ./emacs.el;
# inherit (config.xdg) configHome dataHome;
# };
defaultInitFile = true;
# Package is optional, defaults to pkgs.emacs
# package = pkgs.emacs-git;
package = pkgs.emacs-unstable-pgtk;
# By default emacsWithPackagesFromUsePackage will only pull in
# packages with `:ensure`, `:ensure t` or `:ensure <package name>`.
# Setting `alwaysEnsure` to `true` emulates `use-package-always-ensure`
# and pulls in all use-package references not explicitly disabled via
# `:ensure nil` or `:disabled`.
# Note that this is NOT recommended unless you've actually set
# `use-package-always-ensure` to `t` in your config.
alwaysEnsure = true;
# For Org mode babel files, by default only code blocks with
# `:tangle yes` are considered. Setting `alwaysTangle` to `true`
# will include all code blocks missing the `:tangle` argument,
# defaulting it to `yes`.
# Note that this is NOT recommended unless you have something like
# `#+PROPERTY: header-args:emacs-lisp :tangle yes` in your config,
# which defaults `:tangle` to `yes`.
alwaysTangle = true;
# Optionally provide extra packages not in the configuration file.
# This can also include extra executables to be run by Emacs (linters,
# language servers, formatters, etc)
extraEmacsPackages = epkgs: [
epkgs.cask
pkgs.shellcheck
];
# Optionally override derivations.
override = final: prev: {
weechat = prev.melpaPackages.weechat.overrideAttrs(old: {
patches = [ ./weechat-el.patch ];
});
};
})
noto-fonts
noto-fonts-cjk-sans
noto-fonts-emoji
@@ -56,16 +119,6 @@
};
# Define a user account. Don't forget to set a password with passwd.
users.users.th3r00t = {
isNormalUser = true;
description = "Mike 'th3r00t' Young";
extraGroups = [ "networkmanager" "wheel" "input" ];
packages = with pkgs; [
# kdePackages.kate
# thunderbird
];
};
# List packages installed in system profile. To search, run:
# $ nix search wget
@@ -110,6 +163,10 @@
pulseaudio.enable = false;
libinput.enable = true;
# logmein-hamachi.enable = true;
emacs = {
enable = true;
package = pkgs.emacs-unstable-pgtk;
};
};
# Open ports in the firewall.

View File

@@ -1,14 +1,15 @@
{ config, pkgs, ... }:
{ config, pkgs, inputs, ... }:
{
imports = [
./waybar.nix
];
wayland.windowManager.hyprland = {
enable = true;
package = inputs.hyprland.packages.${pkgs.system}.hyprland;
systemd.enable = true;
xwayland.enable = true;
plugins = [
# pkgs.hyprlandPlugins.hyprbars
# inputs.hyprland-plugins.packages.${pkgs.system}.hyprbars -- Version Mismatch
];
settings = {
input = {
@@ -19,7 +20,7 @@
};
};
decoration = {
rounding = "0";
rounding = "10";
rounding_power = "2";
active_opacity = "1";
inactive_opacity = ".7";
@@ -45,8 +46,8 @@
};
extraConfig = ''
general {
gaps_in = 0
gaps_out = 0
gaps_in = 10
gaps_out = 20
border_size = 1
col.active_border = rgb(b000b5)
col.inactive_border = rgb(1f2335)
@@ -68,7 +69,7 @@
monitor = DP-2, 2560x1080@74.99,auto,1
# monitor = Virtual-1, 2800x1752@120, 1920x0, 1
$terminal-notmux = kitty
$terminal = kitty -e tmux new-session zsh -c 'tmuxstartup.sh'
$terminal = kitty -e tmux
# $terminal = ghostty
# $terminal = footclient
# $terminal = footclient -e tmux new-session zsh -c '~/.local/usr/bin/tmuxstartup.sh'
@@ -188,6 +189,20 @@
# Performance optimizations for Virtual-1 monitor
workspace = name:virtual,monitor:Virtual-1,default:true,gapsin:0,gapsout:0
plugin {
hyprbars {
bar_height = 23
bar_color = rgb(1f2335)
col.text = rgb(b000b5)
bar_text_align = left
bar_text_font = "FiraCode Nerd Font:style=bold"
bar_button_padding = 5
hyprbars-button = rgb(b000b5), 15, 󰅖, hyprctl dispatch killactive
hyprbars-button = rgb(b000b5), 15, 󰖯, hyprctl dispatch fullscreen 1
}
}
'';
};
programs.hyprlock = {

View File

@@ -1,21 +1,30 @@
{ pkgs, config, ... }:
{
programs.starship = {
enable = true;
# custom settings
settings = {
add_newline = false;
aws.disabled = true;
gcloud.disabled = true;
line_break.disabled = true;
};
home.sessionVariables = {
SHELL = "${pkgs.zsh}/bin/zsh";
};
programs.zsh = {
enable = true;
enableCompletion = true;
syntaxHighlighting = {
enable = true;
highlighters = [ "main" "brackets" "cursor" "root" "line" ];
};
autosuggestion.enable = true;
autocd = true;
defaultKeymap = "vicmd";
sessionVariables = {
PATH="$PATH:$HOME/.local/usr/bin";
PYTHONBREAKPOINT="pudb.set_trace";
};
shellAliases = {
urlencode = "python3 -c 'import sys, urllib.parse as ul; print(ul.quote_plus(sys.stdin.read()))'";
urldecode = "python3 -c 'import sys, urllib.parse as ul; print(il.unquote_plus(sys.stdin.read()))'";
ls = "eza";
cat = "bat";
l = "ls -lh --color=always --group-directories-first";
la = "ls -lah --color=always --group-directories-first";
};
oh-my-zsh = {
enable = true;
plugins = [
@@ -43,20 +52,7 @@
"vi-mode"
"zsh-navigation-tools"
];
# theme = "starship";
};
};
programs.bash = {
enable = true;
enableCompletion = true;
bashrcExtra = ''
export PATH="$PATH:$HOME/.local/usr/bin";
'';
shellAliases = {
urlencode = "python3 -c 'import sys, urllib.parse as ul; print(ul.quote_plus(sys.stdin.read()))'";
urldecode = "python3 -c 'import sys, urllib.parse as ul; print(il.unquote_plus(sys.stdin.read()))'";
ls = "eza";
cat = "bat";
theme = "fox";
};
};
}

View File

@@ -67,7 +67,7 @@
];
prefix = "C-a";
# shell = "${pkgs.zsh}/bin/zsh";
shell = "${pkgs.zsh}/bin/zsh";
# terminal = "xterm-kitty:RGB";
tmuxinator.enable = true;
extraConfig = ''