307 lines
8 KiB
Nix
307 lines
8 KiB
Nix
{
|
|
lib,
|
|
pkgs,
|
|
inputs,
|
|
...
|
|
}: {
|
|
imports = with inputs; [
|
|
catppuccin.homeManagerModules.catppuccin
|
|
chaotic.homeManagerModules.default
|
|
hyprland.homeManagerModules.default
|
|
nix-colors.homeManagerModules.default
|
|
nix-index-database.hmModules.nix-index
|
|
|
|
./hyprland
|
|
./screenshot
|
|
];
|
|
|
|
snowfallorg.user = {
|
|
enable = true;
|
|
name = "marshall";
|
|
};
|
|
|
|
colorScheme = inputs.nix-colors.colorSchemes.catppuccin-mocha;
|
|
|
|
home = {
|
|
packages = with pkgs;
|
|
[
|
|
alejandra
|
|
beeper
|
|
duf
|
|
eternal-terminal
|
|
glow
|
|
grc
|
|
iamb
|
|
jamesdsp
|
|
jdk21
|
|
killall
|
|
libnotify
|
|
lm_sensors
|
|
loupe
|
|
neovide
|
|
playerctl
|
|
prismlauncher
|
|
slack
|
|
telegram-desktop
|
|
vesktop
|
|
youki
|
|
(pkgs.buildFHSUserEnv {
|
|
name = "zed";
|
|
targetPkgs = pkgs:
|
|
with pkgs; [
|
|
zed-editor
|
|
];
|
|
runScript = "zed";
|
|
})
|
|
]
|
|
++ (with jetbrains; [
|
|
clion
|
|
rust-rover
|
|
webstorm
|
|
idea-ultimate
|
|
])
|
|
++ (with inputs; [
|
|
nixvim.packages.${pkgs.system}.default
|
|
])
|
|
++ (with inputs.chaotic.packages.${pkgs.system}; [
|
|
distrobox_git
|
|
firefox_nightly
|
|
]);
|
|
|
|
stateVersion = "24.05";
|
|
};
|
|
|
|
dconf.settings = {
|
|
"org/virt-manager/virt-manager/connections" = {
|
|
autoconnect = ["qemu:///system"];
|
|
uris = ["qemu:///system"];
|
|
};
|
|
};
|
|
|
|
xdg.enable = true;
|
|
|
|
catppuccin = {
|
|
enable = true;
|
|
flavor = "mocha";
|
|
accent = "green";
|
|
pointerCursor.enable = true;
|
|
};
|
|
|
|
gtk = let
|
|
gradiencePreset = pkgs.fetchurl {
|
|
url = "https://raw.githubusercontent.com/GradienceTeam/Community/next/official/catppuccin-macchiato.json";
|
|
hash = "sha256-FgQvmK/Pjn980o+UVc2a70kGa6sGse045zPS9hzCs14=";
|
|
};
|
|
|
|
gradienceBuild = pkgs.stdenv.mkDerivation {
|
|
name = "gradience-build";
|
|
phases = ["buildPhase" "installPhase"];
|
|
nativeBuildInputs = [pkgs.gradience];
|
|
buildPhase = ''
|
|
shopt -s nullglob
|
|
export HOME=$TMPDIR
|
|
mkdir -p $HOME/.config/presets
|
|
gradience-cli apply -p ${gradiencePreset} --gtk both
|
|
'';
|
|
installPhase = ''
|
|
mkdir -p $out
|
|
cp -r .config/gtk-4.0 $out/
|
|
cp -r .config/gtk-3.0 $out/
|
|
'';
|
|
};
|
|
in {
|
|
enable = true;
|
|
theme.name = "adw-gtk3-dark";
|
|
theme.package = pkgs.adw-gtk3;
|
|
|
|
gtk3 = {
|
|
extraCss = builtins.readFile "${gradienceBuild}/gtk-3.0/gtk.css";
|
|
extraConfig = {
|
|
gtk-application-prefer-dark-theme = 1;
|
|
};
|
|
};
|
|
|
|
gtk4 = {
|
|
extraCss = builtins.readFile "${gradienceBuild}/gtk-4.0/gtk.css";
|
|
extraConfig = {
|
|
gtk-application-prefer-dark-theme = 1;
|
|
};
|
|
};
|
|
};
|
|
|
|
qt = {
|
|
enable = true;
|
|
platformTheme.name = "kvantum";
|
|
style.name = "kvantum";
|
|
style.catppuccin.enable = true;
|
|
};
|
|
|
|
programs = {
|
|
emacs = {
|
|
enable = true;
|
|
package = pkgs.emacs29-pgtk;
|
|
|
|
extraPackages = epkgs:
|
|
with epkgs; [
|
|
catppuccin-theme
|
|
company
|
|
dashboard
|
|
direnv
|
|
doom-modeline
|
|
eglot
|
|
evil
|
|
evil-leader
|
|
flycheck
|
|
flycheck-inline
|
|
nix-mode
|
|
treemacs
|
|
treemacs-evil
|
|
treesit-auto
|
|
treesit-grammars.with-all-grammars
|
|
tree-sitter-langs
|
|
vterm
|
|
];
|
|
|
|
extraConfig = ''
|
|
; Catppuccin theme
|
|
(load-theme 'catppuccin :no-confirm)
|
|
|
|
; Doom modeline
|
|
(require 'doom-modeline)
|
|
(doom-modeline-mode 1)
|
|
|
|
; Set font
|
|
(set-frame-font "Maple Mono NF 12" nil t)
|
|
|
|
; Change default indent size to 2 spaces
|
|
(setq-default indent-tabs-mode nil) ;; Use spaces instead of tabs
|
|
(setq-default standard-indent 2) ;; Change indent
|
|
(setq-default tab-width 2) ;; Change tab width
|
|
|
|
; Evil mode
|
|
(setq evil-want-C-u-scroll t)
|
|
(require 'evil)
|
|
(evil-mode 1)
|
|
|
|
;; Treemacs (+ evil mode support)
|
|
(require 'treemacs)
|
|
(require 'treemacs-evil) ; Optional: if you want Evil keybindings for Treemacs
|
|
|
|
;; Evil leader
|
|
(global-evil-leader-mode)
|
|
(evil-leader/set-leader "<SPC>")
|
|
(evil-leader/set-key "e" 'treemacs)
|
|
|
|
;; Centered scrolling
|
|
(defun my/evil-scroll-up ()
|
|
"Scroll up half a screen and center the line."
|
|
(interactive)
|
|
(evil-scroll-up nil)
|
|
(recenter))
|
|
|
|
(defun my/evil-scroll-down ()
|
|
"Scroll down half a screen and center the line."
|
|
(interactive)
|
|
(evil-scroll-down nil)
|
|
(recenter))
|
|
|
|
(define-key evil-normal-state-map (kbd "C-u") 'my/evil-scroll-up)
|
|
(define-key evil-normal-state-map (kbd "C-d") 'my/evil-scroll-down)
|
|
|
|
; Disable menubar and toolbar
|
|
(menu-bar-mode -1)
|
|
(tool-bar-mode -1)
|
|
|
|
; Dashboard
|
|
(require 'dashboard)
|
|
(dashboard-setup-startup-hook)
|
|
(setq dashboard-startup-banner 'logo)
|
|
|
|
; Direnv
|
|
(direnv-mode)
|
|
|
|
; Nix setup
|
|
(require 'nix-mode)
|
|
(add-to-list 'auto-mode-alist '("\\.nix\\'" . nix-mode))
|
|
|
|
; Tree-sitter setup
|
|
(require 'treesit)
|
|
(require 'tree-sitter-langs)
|
|
(require 'treesit-auto)
|
|
(global-treesit-auto-mode)
|
|
|
|
(add-hook 'prog-mode-hook #'tree-sitter-mode)
|
|
(add-hook 'prog-mode-hook #'tree-sitter-hl-mode)
|
|
|
|
;; Use Tree-sitter for better syntax highlighting
|
|
(dolist (lang treesit-language-source-alist)
|
|
(let ((mode (intern (format "%s-ts-mode" (car lang)))))
|
|
(when (fboundp mode)
|
|
(add-to-list 'major-mode-remap-alist
|
|
(cons (intern (car lang)) mode)))))
|
|
|
|
; Eglot setup
|
|
(add-hook 'prog-mode-hook 'eglot-ensure)
|
|
(add-hook 'nix-mode-hook 'eglot-ensure)
|
|
|
|
;; Function to format the buffer using Eglot
|
|
(defun my/eglot-format-buffer-on-save ()
|
|
"Format the current buffer if Eglot is active."
|
|
(when (bound-and-true-p eglot--managed-p)
|
|
(eglot-format-buffer)))
|
|
|
|
;; Add the function to the save-hook
|
|
(add-hook 'before-save-hook #'my/eglot-format-buffer-on-save)
|
|
|
|
; Flycheck setup
|
|
(require 'flycheck)
|
|
(global-flycheck-mode)
|
|
|
|
; Flycheck-inline setup
|
|
(require 'flycheck-inline)
|
|
(add-hook 'flycheck-mode-hook #'flycheck-inline-mode)
|
|
|
|
; Disable Flycheck modeline error messages
|
|
(setq-default flycheck-mode-line-prefix "")
|
|
(setq-default flycheck-display-errors-function #'flycheck-inline-display-errors)
|
|
|
|
; Company mode setup
|
|
(require 'company)
|
|
(global-company-mode) ; Enable Company mode globally
|
|
|
|
; Key bindings for company mode
|
|
(setq company-idle-delay 0.2) ; Start completion after a short delay
|
|
(setq company-minimum-prefix-length 1) ; Start completion after typing 1 character
|
|
(setq company-show-numbers t) ; Show numbers for completion candidates
|
|
(global-set-key (kbd "M-/") 'company-complete) ; Trigger completion manually with M-/
|
|
|
|
(defun my/compile-and-focus-treemacs ()
|
|
"Run `compile` and focus on the project root in `Treemacs`."
|
|
(interactive)
|
|
(let ((default-directory (project-root (project-current t))))
|
|
(compile (read-shell-command "Compile command: " (concat (or compile-command "make") " ")))
|
|
(treemacs-select-window)))
|
|
|
|
(global-set-key (kbd "C-c C-c") 'my/compile-and-focus-treemacs)
|
|
'';
|
|
};
|
|
|
|
wezterm.extraConfig = builtins.readFile ./wezterm.lua;
|
|
|
|
git = {
|
|
extraConfig.credential.helper = "libsecret";
|
|
signing.key = "0FF5B8826803F895";
|
|
};
|
|
|
|
mpv = {
|
|
enable = true;
|
|
scripts = [pkgs.mpvScripts.uosc];
|
|
catppuccin.enable = true;
|
|
};
|
|
};
|
|
|
|
systemd.user.startServices = "sd-switch";
|
|
|
|
nix.package = lib.mkForce inputs.nix-super.packages.${pkgs.system}.default;
|
|
}
|