Regenerated
This commit is contained in:
+1
-1
@@ -543,7 +543,7 @@ This sets the bluetooth implementation
|
|||||||
hardware.bluetooth = {
|
hardware.bluetooth = {
|
||||||
enable = true; # turn on the daemon
|
enable = true; # turn on the daemon
|
||||||
powerOnBoot = true; # auto-power on
|
powerOnBoot = true; # auto-power on
|
||||||
packages = [ pkgs.bluez ];
|
package = [ pkgs.bluez ];
|
||||||
|
|
||||||
# extra config for the Bluetooth service itself
|
# extra config for the Bluetooth service itself
|
||||||
extraConfig = ''
|
extraConfig = ''
|
||||||
|
|||||||
@@ -1,54 +0,0 @@
|
|||||||
{ pkgs, config, lib, flakeRoot, ... }:
|
|
||||||
|
|
||||||
{
|
|
||||||
############################
|
|
||||||
# Bootloader (GRUB)
|
|
||||||
############################
|
|
||||||
boot.loader = {
|
|
||||||
grub = {
|
|
||||||
enable = true;
|
|
||||||
efiSupport = true;
|
|
||||||
devices = [ "nodev" ]; # pas aan naar je echte EFI-device indien nodig
|
|
||||||
useOSProber = true;
|
|
||||||
timeout = 5;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
############################
|
|
||||||
# Kernel / boot settings
|
|
||||||
############################
|
|
||||||
boot.kernelPackages = pkgs.linuxPackages_latest;
|
|
||||||
|
|
||||||
boot.kernelParams = [
|
|
||||||
"quiet"
|
|
||||||
"splash" # REQUIRED for Plymouth
|
|
||||||
"udev.log_level=3"
|
|
||||||
"rd.systemd.show_status=false"
|
|
||||||
];
|
|
||||||
|
|
||||||
boot.consoleLogLevel = 0;
|
|
||||||
boot.supportedFilesystems = [ "ntfs" ];
|
|
||||||
|
|
||||||
############################
|
|
||||||
# Plymouth
|
|
||||||
############################
|
|
||||||
boot.plymouth = {
|
|
||||||
enable = true;
|
|
||||||
theme = "rings";
|
|
||||||
|
|
||||||
themePackages = [
|
|
||||||
(pkgs.adi1090x-plymouth-themes.override {
|
|
||||||
selected_themes = [ "rings" ];
|
|
||||||
})
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
boot.initrd.systemd.enable = true;
|
|
||||||
|
|
||||||
############################
|
|
||||||
# Clean state
|
|
||||||
############################
|
|
||||||
# Remove any old theme environment.etc symlinks
|
|
||||||
environment.etc = lib.mkForce {};
|
|
||||||
system.stateVersion = "26.05";
|
|
||||||
}
|
|
||||||
@@ -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;
|
|
||||||
}
|
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
{ lib, config, pkgs, inputs, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
username = config.defaultUser or "henrov";
|
|
||||||
modulesPath = ./generated/modules;
|
|
||||||
|
|
||||||
# Import all modules recursively (DO NOT evaluate them)
|
|
||||||
importedModules = inputs.import-tree modulesPath;
|
|
||||||
|
|
||||||
# Collect Home Manager user attrsets from modules
|
|
||||||
hmUsersList =
|
|
||||||
map (m: m._module.args.hmUsers or {})
|
|
||||||
importedModules.imports;
|
|
||||||
|
|
||||||
in
|
|
||||||
{
|
|
||||||
#################################
|
|
||||||
# Core system config
|
|
||||||
#################################
|
|
||||||
|
|
||||||
networking.hostName = "traveldroid";
|
|
||||||
system.stateVersion = "26.05";
|
|
||||||
|
|
||||||
#################################
|
|
||||||
# Module imports (critical fix)
|
|
||||||
#################################
|
|
||||||
|
|
||||||
imports =
|
|
||||||
[
|
|
||||||
./boot.nix
|
|
||||||
./hardware-configuration.nix
|
|
||||||
]
|
|
||||||
++ importedModules.imports;
|
|
||||||
|
|
||||||
#################################
|
|
||||||
# Home Manager aggregation
|
|
||||||
#################################
|
|
||||||
|
|
||||||
home-manager.users = lib.mkMerge hmUsersList;
|
|
||||||
}
|
|
||||||
@@ -1,92 +0,0 @@
|
|||||||
;;; 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
|
|
||||||
@@ -1,400 +0,0 @@
|
|||||||
;;; 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-<wheel-up>" . pixel-scroll-precision) ; dont zoom in please, just scroll
|
|
||||||
("C-<wheel-down>" . 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
|
|
||||||
@@ -1,48 +0,0 @@
|
|||||||
{ config, lib, pkgs, flakeRoot, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
packagesConfPath = "${flakeRoot}/assets/system/apps/packages.conf";
|
|
||||||
raw = builtins.readFile packagesConfPath;
|
|
||||||
|
|
||||||
# Split lines safely, keep guard against splitting into characters
|
|
||||||
rawLines = lib.splitString "\n" raw;
|
|
||||||
_guard =
|
|
||||||
assert !(builtins.stringLength raw > 1 && builtins.length rawLines == builtins.stringLength raw);
|
|
||||||
true;
|
|
||||||
|
|
||||||
# Clean each line: remove CRs, remove comments, trim
|
|
||||||
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 path 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
|
|
||||||
{
|
|
||||||
|
|
||||||
nixpkgs.config = { allowUnfree = true; };
|
|
||||||
environment.systemPackages = packages;
|
|
||||||
}
|
|
||||||
@@ -1,25 +0,0 @@
|
|||||||
{ pkgs, config, lib, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
username = config.defaultUser or "henrov";
|
|
||||||
in
|
|
||||||
{
|
|
||||||
# System-wide Thunar with essential plugins
|
|
||||||
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 configuration
|
|
||||||
home-manager.users.${username} = {
|
|
||||||
home.stateVersion = "26.05"; # required
|
|
||||||
|
|
||||||
home.sessionVariables = {
|
|
||||||
FILE_MANAGER = "thunar";
|
|
||||||
USERNAME = username;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
{ lib, config, pkgs, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
programName = "wofi";
|
|
||||||
username = config.defaultUser or "henrov";
|
|
||||||
assetPath = ../../../assets/system/conf/${programName};
|
|
||||||
in
|
|
||||||
{
|
|
||||||
# Deploy assets to ~/.config/wofi via Home Manager
|
|
||||||
home-manager.users.${username}.home.file =
|
|
||||||
if builtins.pathExists assetPath then
|
|
||||||
lib.genAttrs (builtins.attrNames (builtins.readDir assetPath)) (name: {
|
|
||||||
source = "${assetPath}/${name}";
|
|
||||||
target = ".config/${programName}/${name}";
|
|
||||||
})
|
|
||||||
else {};
|
|
||||||
}
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
{ config, pkgs, lib, inputs, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
# Grab the Zen Browser from the flake overlay for your system
|
|
||||||
zenBrowser = inputs.zen-browser.packages.${pkgs.stdenv.hostPlatform.system}.default;
|
|
||||||
in
|
|
||||||
{
|
|
||||||
environment.systemPackages = [
|
|
||||||
zenBrowser
|
|
||||||
];
|
|
||||||
}
|
|
||||||
@@ -1,46 +0,0 @@
|
|||||||
{ lib, config, pkgs, inputs, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
username = config.defaultUser or "henrov";
|
|
||||||
|
|
||||||
# Paths
|
|
||||||
assetPath = ../../../assets/hyprland/conf/hypr;
|
|
||||||
mainConfig = "${assetPath}/hyprland.conf";
|
|
||||||
|
|
||||||
# Determine Hyprland package with fallbacks
|
|
||||||
hyprlandPkg =
|
|
||||||
pkgs.hyprland or
|
|
||||||
pkgs.hyprland-git or
|
|
||||||
inputs.hyprland.packages.${pkgs.system}.default;
|
|
||||||
|
|
||||||
# Map all files in the asset folder
|
|
||||||
hyprFiles =
|
|
||||||
builtins.listToAttrs (
|
|
||||||
map (f: {
|
|
||||||
name = ".config/hypr/${f}";
|
|
||||||
value = { source = "${assetPath}/${f}"; };
|
|
||||||
}) (builtins.attrNames (builtins.readDir assetPath))
|
|
||||||
);
|
|
||||||
in
|
|
||||||
{
|
|
||||||
# System-wide package
|
|
||||||
environment.systemPackages = [ hyprlandPkg ];
|
|
||||||
|
|
||||||
# Home Manager user settings
|
|
||||||
_module.args.hmUsers = {
|
|
||||||
${username} = {
|
|
||||||
home.packages = [ hyprlandPkg ];
|
|
||||||
|
|
||||||
# Merge main config + all other files
|
|
||||||
home.file = lib.mkMerge [
|
|
||||||
hyprFiles
|
|
||||||
{
|
|
||||||
".config/hypr/hyprland.conf" = { source = mainConfig; };
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
# Optional module-specific settings
|
|
||||||
settings.general."col.active_border" = "0xff97cbcd 0xff89b4fa";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,56 +0,0 @@
|
|||||||
{ lib, config, pkgs, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
username = config.defaultUser or "henrov";
|
|
||||||
|
|
||||||
moduleName = "stylix";
|
|
||||||
assetPath = ../../../assets/system/conf/${moduleName};
|
|
||||||
|
|
||||||
# Read all files in asset directory
|
|
||||||
programFiles = builtins.readDir assetPath;
|
|
||||||
|
|
||||||
files = lib.genAttrs (builtins.attrNames programFiles) (name: {
|
|
||||||
source = "${assetPath}/${name}";
|
|
||||||
});
|
|
||||||
|
|
||||||
# Read 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
|
|
||||||
_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;
|
|
||||||
|
|
||||||
# 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;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
{ lib, config, pkgs, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
user = config.defaultUser or "henrov";
|
|
||||||
assetPath = ../../../assets/system/conf/waybar;
|
|
||||||
in
|
|
||||||
{
|
|
||||||
# Install Waybar globally
|
|
||||||
environment.systemPackages = [ pkgs.waybar ];
|
|
||||||
|
|
||||||
# Deploy config files via Home Manager
|
|
||||||
home-manager.users.${user}.home.file = {
|
|
||||||
".config/waybar/config" = {
|
|
||||||
source = "${assetPath}/config";
|
|
||||||
};
|
|
||||||
".config/waybar/style.css" = {
|
|
||||||
source = "${assetPath}/style.css";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
{ lib, config, pkgs, inputs, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
username = config.defaultUser or "henrov";
|
|
||||||
|
|
||||||
# Wayland-specific packages: uwsm
|
|
||||||
uwsmPkg =
|
|
||||||
if builtins.hasAttr "uwsm" pkgs then
|
|
||||||
pkgs.uwsm
|
|
||||||
else
|
|
||||||
(inputs.uwsm.packages.${pkgs.system}.default or pkgs.uwsm);
|
|
||||||
in
|
|
||||||
{
|
|
||||||
# System packages
|
|
||||||
environment.systemPackages = [ uwsmPkg ];
|
|
||||||
|
|
||||||
# Enable Hyprland via Home Manager / programs
|
|
||||||
programs.hyprland.enable = true;
|
|
||||||
|
|
||||||
# Home Manager user settings
|
|
||||||
_module.args.hmUsers = {
|
|
||||||
${username} = {
|
|
||||||
home.packages = [ uwsmPkg ];
|
|
||||||
|
|
||||||
# Optional Hyprland-specific user configs
|
|
||||||
# programs.hyprland.enable = true; # not needed if set at global level
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,34 +0,0 @@
|
|||||||
{ lib, config, pkgs, inputs, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
# Default user fallback
|
|
||||||
username = config.defaultUser or "henrov";
|
|
||||||
|
|
||||||
# Safe package reference with flake input fallback
|
|
||||||
xdgPortalHyprlandPkg = pkgs.xdg-desktop-portal-hyprland or
|
|
||||||
inputs.xdgPortalHyprland.packages.${pkgs.system}.default;
|
|
||||||
in
|
|
||||||
{
|
|
||||||
# System-wide installation of XDG portal package
|
|
||||||
environment.systemPackages = [
|
|
||||||
xdgPortalHyprlandPkg
|
|
||||||
];
|
|
||||||
|
|
||||||
# Home Manager user configuration
|
|
||||||
_module.args.hmUsers = {
|
|
||||||
${username} = {
|
|
||||||
home.packages = [
|
|
||||||
xdgPortalHyprlandPkg
|
|
||||||
];
|
|
||||||
|
|
||||||
# Enable XDG portal for Hyprland
|
|
||||||
xdg.portal = {
|
|
||||||
enable = true;
|
|
||||||
extraPortals = [ xdgPortalHyprlandPkg ];
|
|
||||||
config.hyprland = {
|
|
||||||
"org.freedesktop.impl.portal.Screencast" = [ "hyprland" ];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,41 +0,0 @@
|
|||||||
{ config, pkgs, ... }:
|
|
||||||
|
|
||||||
{
|
|
||||||
############################
|
|
||||||
# Bluetooth hardware
|
|
||||||
############################
|
|
||||||
hardware.bluetooth = {
|
|
||||||
enable = true; # turn on the daemon
|
|
||||||
powerOnBoot = true; # auto-power on
|
|
||||||
packages = [ pkgs.bluez ];
|
|
||||||
|
|
||||||
# extra config for the Bluetooth service itself
|
|
||||||
extraConfig = ''
|
|
||||||
AutoEnable=true
|
|
||||||
DiscoverableTimeout=0
|
|
||||||
PairableTimeout=0
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
############################
|
|
||||||
# PipeWire for Bluetooth audio
|
|
||||||
############################
|
|
||||||
services.pipewire = {
|
|
||||||
enable = true; # enable the PipeWire daemon
|
|
||||||
# No raw extraConfig needed — Bluetooth audio is automatically handled
|
|
||||||
configPackages = [
|
|
||||||
pkgs.pipewire
|
|
||||||
pkgs.pipewire-pulse
|
|
||||||
pkgs.pipewire-alsa
|
|
||||||
pkgs.pipewire-jack
|
|
||||||
pkgs.pipewire-media-session
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
############################
|
|
||||||
# GUI Bluetooth manager
|
|
||||||
############################
|
|
||||||
environment.systemPackages = with pkgs; [
|
|
||||||
blueman # graphical Bluetooth manager
|
|
||||||
];
|
|
||||||
}
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
{ config, pkgs, lib, ... }:
|
|
||||||
{
|
|
||||||
services.dbus = lib.mkForce {
|
|
||||||
enable = true; # Force this to be true
|
|
||||||
};
|
|
||||||
|
|
||||||
# Configure dbus-broker via its configuration file
|
|
||||||
environment.etc."dbus-broker/launch.conf".text = ''
|
|
||||||
[General]
|
|
||||||
LogLevel=warning
|
|
||||||
MaxConnectionsPerUser=2048
|
|
||||||
'';
|
|
||||||
}
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
{ pkgs, user, ... } :
|
|
||||||
{
|
|
||||||
environment.systemPackages = with pkgs; [
|
|
||||||
tuigreet
|
|
||||||
];
|
|
||||||
services.greetd = {
|
|
||||||
enable = true;
|
|
||||||
settings = {
|
|
||||||
default_session = {
|
|
||||||
command = pkgs.lib.mkForce "${pkgs.tuigreet}/bin/tuigreet --remember --time --time-format '%I:%M %p | %a • %h | %F'";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,35 +0,0 @@
|
|||||||
{ lib, config, pkgs, ... }:
|
|
||||||
|
|
||||||
{
|
|
||||||
networking = {
|
|
||||||
useDHCP = lib.mkDefault true;
|
|
||||||
|
|
||||||
networkmanager = {
|
|
||||||
enable = true;
|
|
||||||
wifi.backend = "iwd";
|
|
||||||
};
|
|
||||||
|
|
||||||
wireless = {
|
|
||||||
iwd.enable = true;
|
|
||||||
userControlled.enable = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
firewall = {
|
|
||||||
enable = true;
|
|
||||||
|
|
||||||
# KDE Connect: discovery + encrypted connections
|
|
||||||
allowedTCPPortRanges = [
|
|
||||||
{ from = 1714; to = 1764; }
|
|
||||||
];
|
|
||||||
|
|
||||||
allowedUDPPortRanges = [
|
|
||||||
{ from = 1714; to = 1764; }
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
# Ensure NetworkManager tools are available
|
|
||||||
environment.systemPackages = [
|
|
||||||
pkgs.networkmanager
|
|
||||||
];
|
|
||||||
}
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
{ lib, config, ... }:
|
|
||||||
|
|
||||||
{
|
|
||||||
nix.settings = {
|
|
||||||
experimental-features = [ "nix-command" "flakes" ];
|
|
||||||
download-buffer-size = 536870912; # 512 MB
|
|
||||||
cores = 2;
|
|
||||||
max-jobs = 1;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
{ lib, config, ... }:
|
|
||||||
{
|
|
||||||
# --- Services (Printing & Audio) ---
|
|
||||||
services.printing.enable = true;
|
|
||||||
services.pulseaudio.enable = false;
|
|
||||||
security.rtkit.enable = true;
|
|
||||||
services.pipewire = {
|
|
||||||
enable = true;
|
|
||||||
alsa.enable = true;
|
|
||||||
alsa.support32Bit = true;
|
|
||||||
pulse.enable = true;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
{ config, pkgs, ... }:
|
|
||||||
|
|
||||||
{
|
|
||||||
# (NVF = Neovim/terminal flavor)
|
|
||||||
stylix.targets.nvf.enable = true;
|
|
||||||
# feh wallpaper integration
|
|
||||||
stylix.targets.feh.enable = true;
|
|
||||||
}
|
|
||||||
@@ -1,36 +0,0 @@
|
|||||||
{ lib, pkgs, config, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
username = config.defaultUser or "henrov";
|
|
||||||
moduleName = "kitty";
|
|
||||||
|
|
||||||
# Paths and files
|
|
||||||
assetPath = ../../../assets/system/conf/${moduleName};
|
|
||||||
programFiles = builtins.readDir assetPath;
|
|
||||||
files = lib.genAttrs (builtins.attrNames programFiles) (name: {
|
|
||||||
src = "${assetPath}/${name}";
|
|
||||||
});
|
|
||||||
in
|
|
||||||
{
|
|
||||||
# Install kitty system-wide
|
|
||||||
environment.systemPackages = [ pkgs.kitty ];
|
|
||||||
|
|
||||||
# Home Manager user-specific configuration
|
|
||||||
_module.args.hmUsers = {
|
|
||||||
${username} = {
|
|
||||||
programs.kitty.enable = true;
|
|
||||||
|
|
||||||
# Extra user config snippet
|
|
||||||
programs.kitty.extraConfig = ''
|
|
||||||
# Include the Catppuccin-Mocha theme
|
|
||||||
include themes/Catppuccin-Mocha.conf
|
|
||||||
'';
|
|
||||||
|
|
||||||
# Copy all asset files into ~/.config/kitty/
|
|
||||||
home.file = lib.mkMerge (
|
|
||||||
map (name: { ".config/${moduleName}/${name}" = { source = files.${name}.src; }; })
|
|
||||||
(builtins.attrNames files)
|
|
||||||
);
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
{ config, pkgs, lib, flakeRoot, ... }:
|
|
||||||
|
|
||||||
{
|
|
||||||
programs.starship = {
|
|
||||||
enable = true; # enable Starship integration
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -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"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
#autosuggestion.enable = true;
|
|
||||||
syntaxHighlighting.enable = true;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,37 +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}/"
|
|
||||||
|
|
||||||
echo "Done copying assets."
|
|
||||||
'
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
{ lib, config, pkgs, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
username = "henrov";
|
|
||||||
in
|
|
||||||
{
|
|
||||||
# NixOS 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} = {
|
|
||||||
home.username = username;
|
|
||||||
home.homeDirectory = "/home/${username}";
|
|
||||||
home.stateVersion = "26.05";
|
|
||||||
|
|
||||||
# Example: user packages
|
|
||||||
home.packages = [ pkgs.git pkgs.vim ];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,69 +0,0 @@
|
|||||||
{ pkgs, config, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
username = config.defaultUser or "henrov";
|
|
||||||
in
|
|
||||||
{
|
|
||||||
environment.systemPackages = [
|
|
||||||
pkgs.emacs-pgtk.override { withTreeSitter = true; }
|
|
||||||
];
|
|
||||||
|
|
||||||
home-manager.users.${username} = {
|
|
||||||
home.stateVersion = "26.05";
|
|
||||||
|
|
||||||
programs.emacs = {
|
|
||||||
enable = true;
|
|
||||||
package = pkgs.emacs-pgtk.override { withTreeSitter = true; };
|
|
||||||
|
|
||||||
extraPackages = epkgs: with epkgs; [
|
|
||||||
#(epkgs.manualPackages.treesit-grammars.override { withAllGrammars = true; })
|
|
||||||
rust-mode
|
|
||||||
rustic
|
|
||||||
nix-mode
|
|
||||||
hcl-mode
|
|
||||||
nerd-icons
|
|
||||||
doom-modeline
|
|
||||||
diminish
|
|
||||||
eldoc
|
|
||||||
eldoc-box
|
|
||||||
pulsar
|
|
||||||
which-key
|
|
||||||
avy
|
|
||||||
consult
|
|
||||||
vertico
|
|
||||||
marginalia
|
|
||||||
crux
|
|
||||||
shell-pop
|
|
||||||
nerd-icons-corfu
|
|
||||||
corfu
|
|
||||||
cape
|
|
||||||
orderless
|
|
||||||
yasnippet
|
|
||||||
yasnippet-snippets
|
|
||||||
rg
|
|
||||||
exec-path-from-shell
|
|
||||||
eat
|
|
||||||
f
|
|
||||||
gptel
|
|
||||||
nixpkgs-fmt
|
|
||||||
envrc
|
|
||||||
catppuccin-theme
|
|
||||||
magit
|
|
||||||
expreg
|
|
||||||
vundo
|
|
||||||
puni
|
|
||||||
sideline
|
|
||||||
sideline-flymake
|
|
||||||
sideline-eglot
|
|
||||||
];
|
|
||||||
|
|
||||||
# Load your init.el via extraConfig
|
|
||||||
extraConfig = builtins.readFile ./init.el;
|
|
||||||
};
|
|
||||||
|
|
||||||
home.sessionVariables = {
|
|
||||||
EDITOR = "emacs";
|
|
||||||
XDG_SCREENSHOTS_DIR = "~/screenshots";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
{ lib, pkgs, config, ... }:
|
|
||||||
|
|
||||||
{
|
|
||||||
options.enableFonts = lib.mkEnableOption "Enable nerd fonts";
|
|
||||||
|
|
||||||
config = lib.mkIf (config.enableFonts or false) {
|
|
||||||
fonts.packages = with pkgs; [
|
|
||||||
nerd-fonts.iosevka
|
|
||||||
nerd-fonts.fira-code
|
|
||||||
];
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
{ lib, config, pkgs, inputs, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
# Default username fallback
|
|
||||||
username = config.defaultUser or "henrov";
|
|
||||||
|
|
||||||
# Asset folder for configs
|
|
||||||
assetPath = ../../../assets/<myModuleName>/conf;
|
|
||||||
|
|
||||||
# Main configuration file
|
|
||||||
mainConfig = "${assetPath}/<mainConfigFile>";
|
|
||||||
|
|
||||||
# Determine the package: prefer Nixpkgs, fallback to -git, fallback to flake input
|
|
||||||
myPkg =
|
|
||||||
pkgs.<myPackage> or
|
|
||||||
pkgs.<myPackage>-git or
|
|
||||||
inputs.<myPackage>.packages.${pkgs.system}.default;
|
|
||||||
in
|
|
||||||
{
|
|
||||||
# Install system-wide
|
|
||||||
environment.systemPackages = [ myPkg ];
|
|
||||||
|
|
||||||
# Home Manager user settings
|
|
||||||
_module.args.hmUsers = {
|
|
||||||
${username} = {
|
|
||||||
home.packages = [ myPkg ];
|
|
||||||
|
|
||||||
# Copy main config into user's home
|
|
||||||
home.file.".config/<myModuleName>/<mainConfigFile>".source = mainConfig;
|
|
||||||
|
|
||||||
# Optional module-specific settings
|
|
||||||
settings.general = {
|
|
||||||
# Example placeholder
|
|
||||||
"example.setting" = "value";
|
|
||||||
};
|
|
||||||
|
|
||||||
# Optional: you can add more files dynamically from assetPath if needed
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,56 +0,0 @@
|
|||||||
{ lib, pkgs, config, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
# Module name
|
|
||||||
moduleName = "flatpaks";
|
|
||||||
|
|
||||||
# Path to your Flatpak list
|
|
||||||
assetPath = ../../../assets/system/apps/flatpaks.conf;
|
|
||||||
|
|
||||||
# Resolve user safely
|
|
||||||
username = config.defaultUser or "henrov";
|
|
||||||
in
|
|
||||||
{
|
|
||||||
# Deploy the Flatpak conf file
|
|
||||||
environment.etc."flatpak/flatpaks.conf".source = assetPath;
|
|
||||||
|
|
||||||
# Enable system Flatpak service
|
|
||||||
services.flatpak.enable = true;
|
|
||||||
|
|
||||||
|
|
||||||
# Systemd service to install Flatpaks from the list
|
|
||||||
systemd.services."${moduleName}-sync" = {
|
|
||||||
description = "Install Flatpak apps listed in flatpaks.conf";
|
|
||||||
wantedBy = [ "multi-user.target" ];
|
|
||||||
wants = [ "network-online.target" ];
|
|
||||||
after = [ "network-online.target" ];
|
|
||||||
|
|
||||||
serviceConfig = {
|
|
||||||
Type = "oneshot";
|
|
||||||
ExecStart = ''
|
|
||||||
set -euo pipefail
|
|
||||||
CONF="${assetPath}"
|
|
||||||
|
|
||||||
# Add Flathub if not present
|
|
||||||
if ! flatpak remotes --system --columns=name | grep -qx flathub; then
|
|
||||||
flatpak remote-add --system --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Install every Flatpak listed in the conf file
|
|
||||||
while IFS= read -r app || [ -n "$app" ]; do
|
|
||||||
app=$(echo "$app" | sed 's/#.*//;s/^[[:space:]]*//;s/[[:space:]]*$//')
|
|
||||||
if [ -n "$app" ]; then
|
|
||||||
if ! flatpak info --system "$app" >/dev/null 2>&1; then
|
|
||||||
flatpak install --system -y --noninteractive flathub "$app"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
done < "$CONF"
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
restartTriggers = [ assetPath ];
|
|
||||||
|
|
||||||
# Include only the packages needed for this service
|
|
||||||
path = [ pkgs.flatpak pkgs.coreutils pkgs.gnugrep pkgs.gnused ];
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
{ pkgs, user, ... }:
|
|
||||||
{
|
|
||||||
environment.systemPackages = with pkgs; [
|
|
||||||
gtk3 # GTK target
|
|
||||||
gtk4 # GTK target
|
|
||||||
];
|
|
||||||
# Stylix GTK target
|
|
||||||
stylix.targets.gtk.enable = true;
|
|
||||||
|
|
||||||
home-manager.users.${user.username} = {
|
|
||||||
gtk = {
|
|
||||||
enable = true;
|
|
||||||
theme = {
|
|
||||||
name = "Catppuccin-Mocha-Standard-Blue-Dark";
|
|
||||||
package = pkgs.magnetic-catppuccin-gtk;
|
|
||||||
};
|
|
||||||
iconTheme = {
|
|
||||||
name = "Papirus-Dark";
|
|
||||||
package = pkgs.papirus-icon-theme;
|
|
||||||
};
|
|
||||||
gtk3.extraConfig = {
|
|
||||||
gtk-application-prefer-dark-theme = 1;
|
|
||||||
};
|
|
||||||
gtk4.extraConfig = {
|
|
||||||
gtk-application-prefer-dark-theme = 1;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
{ lib, config, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
coreEnabled = config.mySystem.system.core.enable or false;
|
|
||||||
in
|
|
||||||
{
|
|
||||||
options.mySystem.system.locale.enable =
|
|
||||||
lib.mkEnableOption "Home-Manager settings";
|
|
||||||
|
|
||||||
config = lib.mkIf (coreEnabled || config.mySystem.system.locale.enable) {
|
|
||||||
|
|
||||||
# --- Home Manager Base ---
|
|
||||||
home-manager = {
|
|
||||||
backupFileExtension = "backup";
|
|
||||||
|
|
||||||
users.henrov = {
|
|
||||||
home.sessionVariables = {
|
|
||||||
TERMINAL = "kitty";
|
|
||||||
EDITOR = "emacs";
|
|
||||||
BROWSER = "zen";
|
|
||||||
};
|
|
||||||
|
|
||||||
home.stateVersion = "26.05";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
};
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user