Added nixos configs
This commit is contained in:
+46
@@ -0,0 +1,46 @@
|
||||
{ pkgs, user, ... } :
|
||||
{
|
||||
imports = [
|
||||
./waybar.nix
|
||||
./wallpaper.nix
|
||||
./lock.nix
|
||||
./unity.nix
|
||||
./hyprland.nix
|
||||
./walker.nix
|
||||
./theme.nix
|
||||
./terminal.nix
|
||||
./dev.nix
|
||||
./emacs
|
||||
];
|
||||
|
||||
home.username = "${user.username}";
|
||||
home.homeDirectory = pkgs.lib.mkDefault "/home/${user.username}";
|
||||
home.stateVersion = user.stateVersion;
|
||||
|
||||
home.packages = with pkgs; [
|
||||
audacity # audio recording
|
||||
handbrake # video transcoding
|
||||
xdg-utils # utils, for screensharing
|
||||
vlc # media player
|
||||
pavucontrol # audio control
|
||||
# everdo # gtd tool
|
||||
spotify # music player
|
||||
simple-scan # scanner software
|
||||
# gimp2 # image editor
|
||||
mpv # media player
|
||||
kdePackages.kate # best texteditor
|
||||
libreoffice # office suite
|
||||
obsidian # knowegde base
|
||||
vivaldi # browser
|
||||
brave # browser
|
||||
kdePackages.kdeconnect-kde # KDE Connect
|
||||
pamixer # volumemixer
|
||||
|
||||
];
|
||||
|
||||
services.dunst.enable = true; # notifications daemon
|
||||
|
||||
programs.obs-studio.enable = true; # screen recording tool
|
||||
|
||||
programs.home-manager.enable = true;
|
||||
}
|
||||
Executable
+71
@@ -0,0 +1,71 @@
|
||||
{ user, pkgs, ... }:
|
||||
{
|
||||
programs = {
|
||||
vscode.enable = true; # yes, sometimes i like to dabble
|
||||
vim.enable = true; # and this one too
|
||||
ripgrep.enable = true; # fast text search across projects
|
||||
btop.enable = true; # even better task manager
|
||||
|
||||
# nicer terminal info
|
||||
starship = {
|
||||
enable = true;
|
||||
enableZshIntegration = true;
|
||||
enableBashIntegration = true;
|
||||
};
|
||||
|
||||
# fuzzy finder
|
||||
fzf = {
|
||||
enable = true;
|
||||
enableZshIntegration = true;
|
||||
enableBashIntegration = true;
|
||||
};
|
||||
|
||||
# better cd
|
||||
zoxide = {
|
||||
enable = true;
|
||||
enableZshIntegration = true;
|
||||
enableBashIntegration = true;
|
||||
};
|
||||
|
||||
# better ls
|
||||
eza = {
|
||||
enable = true;
|
||||
enableZshIntegration = true;
|
||||
enableBashIntegration = true;
|
||||
};
|
||||
|
||||
# this is mainly for integration with nix flakes in individual projects
|
||||
direnv = {
|
||||
enable = true;
|
||||
enableZshIntegration = true;
|
||||
enableBashIntegration = true;
|
||||
nix-direnv.enable = true;
|
||||
};
|
||||
|
||||
# zsh everywhere with oh-my-zsh
|
||||
zsh = {
|
||||
enable = true;
|
||||
oh-my-zsh = {
|
||||
enable = true;
|
||||
plugins = [ "git" ];
|
||||
theme = "robbyrussell";
|
||||
};
|
||||
|
||||
shellAliases = {
|
||||
cd = "z"; # zoxide
|
||||
};
|
||||
|
||||
# for emacs-eat package
|
||||
initContent = pkgs.lib.mkOrder 1200 ''
|
||||
[ -n "$EAT_SHELL_INTEGRATION_DIR" ] && \
|
||||
source "$EAT_SHELL_INTEGRATION_DIR/zsh"
|
||||
'';
|
||||
};
|
||||
|
||||
# git with lfs
|
||||
git = {
|
||||
lfs.enable = true;
|
||||
enable = true;
|
||||
};
|
||||
};
|
||||
}
|
||||
+72
@@ -0,0 +1,72 @@
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
programs.emacs = {
|
||||
enable = true;
|
||||
# install with tree sitter enabled
|
||||
package = (pkgs.emacs-pgtk.override { withTreeSitter = true; });
|
||||
extraPackages = epkgs: [
|
||||
# also install all tree sitter grammars
|
||||
epkgs.manualPackages.treesit-grammars.with-all-grammars
|
||||
epkgs.nerd-icons # nerd fonts support
|
||||
epkgs.doom-modeline # model line
|
||||
epkgs.diminish # hides modes from modeline
|
||||
epkgs.eldoc # doc support
|
||||
epkgs.pulsar # pulses the cursor when jumping about
|
||||
epkgs.which-key # help porcelain
|
||||
epkgs.expreg # expand region
|
||||
epkgs.vundo # undo tree
|
||||
epkgs.puni # structured editing
|
||||
epkgs.avy # jumping utility
|
||||
epkgs.consult # emacs right click
|
||||
epkgs.vertico # minibuffer completion
|
||||
epkgs.marginalia # annotations for completions
|
||||
epkgs.crux # utilities
|
||||
epkgs.magit # git porcelain
|
||||
epkgs.nerd-icons-corfu # nerd icons for completion
|
||||
epkgs.corfu # completion
|
||||
epkgs.cape # completion extensions
|
||||
epkgs.orderless # search paradigm
|
||||
epkgs.yasnippet # snippets support
|
||||
epkgs.yasnippet-snippets # commonly used snippets
|
||||
epkgs.rg # ripgrep
|
||||
epkgs.exec-path-from-shell # load env and path
|
||||
epkgs.eat # better shell
|
||||
epkgs.rust-mode # rust mode (when rust-ts doesn't cut it)
|
||||
epkgs.rustic # more rust things
|
||||
epkgs.nix-mode # nix lang
|
||||
epkgs.hcl-mode # hashicorp file mode
|
||||
epkgs.shell-pop # quick shell popup
|
||||
epkgs.envrc # support for loading .envrc
|
||||
epkgs.nixpkgs-fmt # format nix files
|
||||
epkgs.f # string + file utilities
|
||||
epkgs.gptel # llm chat (mainly claude)
|
||||
|
||||
epkgs.catppuccin-theme # catppuccin theme
|
||||
epkgs.eldoc-box # docs in a box
|
||||
epkgs.sideline # mainly for flymake errors on the side
|
||||
epkgs.sideline-flymake # mainly for flymake errors on the side
|
||||
epkgs.sideline-eglot # mainly for flymake errors on the side
|
||||
];
|
||||
};
|
||||
|
||||
home.sessionVariables = {
|
||||
EDITOR = "emacs";
|
||||
XDG_SCREENSHOTS_DIR = "~/screenshots";
|
||||
};
|
||||
|
||||
home.file = {
|
||||
emacs-init = {
|
||||
source = ./early-init.el;
|
||||
target = ".emacs.d/early-init.el";
|
||||
};
|
||||
|
||||
emacs = {
|
||||
source = ./init.el;
|
||||
target = ".emacs.d/init.el";
|
||||
};
|
||||
};
|
||||
|
||||
services.nextcloud-client = {
|
||||
enable = true;
|
||||
};
|
||||
}
|
||||
+118
@@ -0,0 +1,118 @@
|
||||
;;; 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
|
||||
+400
@@ -0,0 +1,400 @@
|
||||
;;; package --- Summary - My minimal Emacs init file -*- lexical-binding: t -*-
|
||||
|
||||
;;; Commentary:
|
||||
;;; Simple Emacs setup I carry everywhere
|
||||
|
||||
;;; Code:
|
||||
(setq custom-file (locate-user-emacs-file "custom.el"))
|
||||
(load custom-file 'noerror) ;; no error on missing custom file
|
||||
|
||||
(require 'package)
|
||||
(package-initialize)
|
||||
|
||||
(defun reset-custom-vars ()
|
||||
"Resets the custom variables that were set to crazy numbers"
|
||||
(setopt gc-cons-threshold (* 1024 1024 100))
|
||||
(setopt garbage-collection-messages t))
|
||||
|
||||
(use-package emacs
|
||||
:custom
|
||||
(native-comp-async-query-on-exit t)
|
||||
(read-answer-short t)
|
||||
(use-short-answers t)
|
||||
(enable-recursive-minibuffers t)
|
||||
(which-func-update-delay 1.0)
|
||||
(visible-bell nil)
|
||||
(custom-buffer-done-kill t)
|
||||
(whitespace-line-column nil)
|
||||
(x-underline-at-descent-line t)
|
||||
(imenu-auto-rescan t)
|
||||
(uniquify-buffer-name-style 'forward)
|
||||
(confirm-nonexistent-file-or-buffer nil)
|
||||
(create-lockfiles nil)
|
||||
(make-backup-files nil)
|
||||
(kill-do-not-save-duplicates t)
|
||||
(sentence-end-double-space nil)
|
||||
(treesit-enabled-modes t)
|
||||
:init
|
||||
;; base visual
|
||||
(menu-bar-mode -1) ;; no menu bar
|
||||
(toggle-scroll-bar -1) ;; no scroll bar
|
||||
(tool-bar-mode -1) ;; no tool bar either
|
||||
(blink-cursor-mode -1) ;; stop blinking
|
||||
|
||||
;; font of the century
|
||||
(set-frame-font "Aporetic Sans Mono 12" nil t)
|
||||
|
||||
:bind
|
||||
(("C-<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))
|
||||
|
||||
(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
|
||||
+215
@@ -0,0 +1,215 @@
|
||||
{
|
||||
# required for the default Hyprland config
|
||||
programs.kitty.enable = true;
|
||||
|
||||
services.hyprpolkitagent.enable = true;
|
||||
|
||||
# enable Hyprland
|
||||
wayland.windowManager.hyprland.enable = true;
|
||||
|
||||
# we start hyprland using uwsm
|
||||
wayland.windowManager.hyprland.systemd.enable = false;
|
||||
|
||||
# hyprland.conf
|
||||
wayland.windowManager.hyprland.settings = {
|
||||
exec-once = [
|
||||
# read in env vars
|
||||
"dbus-update-activation-environment --systemd --all"
|
||||
# start waybar
|
||||
"uwsm app -- waybar"
|
||||
];
|
||||
|
||||
input = {
|
||||
follow_mouse = "1";
|
||||
|
||||
touchpad = {
|
||||
natural_scroll = "no";
|
||||
scroll_factor = 0.5;
|
||||
};
|
||||
|
||||
scroll_factor = 0.5;
|
||||
|
||||
accel_profile = "adaptive";
|
||||
sensitivity = -0.5; # -1.0 - 1.0, 0 means no modification.
|
||||
|
||||
kb_layout = "us";
|
||||
|
||||
# very emacs specific, i use caps as an extra ctrl key
|
||||
kb_options = "ctrl:nocaps";
|
||||
};
|
||||
|
||||
cursor = {
|
||||
no_hardware_cursors = "true";
|
||||
};
|
||||
|
||||
general = {
|
||||
gaps_in = 2;
|
||||
gaps_out = 4;
|
||||
border_size = 2;
|
||||
"col.active_border" = "$blue $green 45deg";
|
||||
"col.inactive_border" = "$base";
|
||||
|
||||
layout = "dwindle";
|
||||
};
|
||||
|
||||
decoration = {
|
||||
rounding = 5;
|
||||
};
|
||||
|
||||
animations = {
|
||||
enabled = "yes";
|
||||
bezier = "myBezier, 0.05, 0.9, 0.1, 1.05";
|
||||
|
||||
animation = [
|
||||
"windows, 1, 7, myBezier"
|
||||
"windowsOut, 1, 7, default, popin 80%"
|
||||
"border, 1, 10, default"
|
||||
"borderangle, 1, 8, default"
|
||||
"fade, 1, 7, default"
|
||||
"workspaces, 1, 6, default"
|
||||
];
|
||||
};
|
||||
|
||||
dwindle = {
|
||||
pseudotile = "yes";
|
||||
preserve_split = "yes";
|
||||
};
|
||||
|
||||
misc = {
|
||||
disable_hyprland_logo = true;
|
||||
focus_on_activate = true;
|
||||
};
|
||||
|
||||
"$mainMod" = "SUPER";
|
||||
|
||||
bind = [
|
||||
"$mainMod, Return, exec, uwsm app -- kitty"
|
||||
# use walker to show exec menu
|
||||
"$mainMod, Space, exec, walker"
|
||||
"$mainMod, P, pseudo"
|
||||
"$mainMod, J, togglesplit"
|
||||
|
||||
# grimblast
|
||||
"$mainMod_SHIFT, p, exec, grimblast -n -f copysave active"
|
||||
"$mainMod_SHIFT, a, exec, grimblast -n -f copysave area"
|
||||
"$mainMod_ALT, p, exec, grimblast -n -f copysave output"
|
||||
"$mainMod_CTRL, p, exec, grimblast -n -f copysave screen"
|
||||
|
||||
# Terminal / launcher / kill / reload
|
||||
"$mainMod, RETURN, exec, kitty"
|
||||
"$mainMod, D, exec, wofi --show drun"
|
||||
"$mainMod, Q, killactive"
|
||||
"$mainMod_SHIFT, Q, exit"
|
||||
"$mainMod_SHIFT, R, exec, hyprctl reload"
|
||||
"$mainMod_SHIFT, S, exec, wlogout"
|
||||
|
||||
# Default browser
|
||||
"$mainMod, W, exec, xdg-open https://about:blank"
|
||||
|
||||
# Focus movement
|
||||
"$mainMod, H, movefocus, l"
|
||||
"$mainMod, L, movefocus, r"
|
||||
"$mainMod, K, movefocus, u"
|
||||
"$mainMod, J, movefocus, d"
|
||||
"$mainMod, left, movefocus, l"
|
||||
"$mainMod, right, movefocus, r"
|
||||
"$mainMod, up, movefocus, u"
|
||||
"$mainMod, down, movefocus, d"
|
||||
# Keybindings #
|
||||
|
||||
# Move windows
|
||||
"$mainMod_SHIFT, H, movewindow, l"
|
||||
"$mainMod_SHIFT, L, movewindow, r"
|
||||
"$mainMod_SHIFT, K, movewindow, u"
|
||||
"$mainMod_SHIFT, J, movewindow, d"
|
||||
"$mainMod_SHIFT, left, movewindow, l"
|
||||
"$mainMod_SHIFT, right, movewindow, r"
|
||||
"$mainMod_SHIFT, up, movewindow, u"
|
||||
"$mainMod_SHIFT, down, movewindow, d"
|
||||
|
||||
# Resize windows
|
||||
"$mainMod CTRL, H, resizeactive, -30 0"
|
||||
"$mainMod CTRL, L, resizeactive, 30 0"
|
||||
"$mainMod CTRL, K, resizeactive, 0 -30"
|
||||
"$mainMod CTRL, J, resizeactive, 0 30"
|
||||
|
||||
# Floating / fullscreen
|
||||
"$mainMod, V, togglefloating"
|
||||
"$mainMod, F, fullscreen, 0"
|
||||
"$mainMod_SHIFT, F, fullscreen, 1"
|
||||
|
||||
# Workspaces
|
||||
"$mainMod, 1, workspace, 1"
|
||||
"$mainMod, 2, workspace, 2"
|
||||
"$mainMod, 3, workspace, 3"
|
||||
"$mainMod, 4, workspace, 4"
|
||||
"$mainMod, 5, workspace, 5"
|
||||
"$mainMod, 6, workspace, 6"
|
||||
"$mainMod, 7, workspace, 7"
|
||||
"$mainMod, 8, workspace, 8"
|
||||
"$mainMod, 9, workspace, 9"
|
||||
"$mainMod, 0, workspace, 10"
|
||||
|
||||
"$mainMod_SHIFT, 1, movetoworkspace, 1"
|
||||
"$mainMod_SHIFT, 2, movetoworkspace, 2"
|
||||
"$mainMod_SHIFT, 3, movetoworkspace, 3"
|
||||
"$mainMod_SHIFT, 4, movetoworkspace, 4"
|
||||
"$mainMod_SHIFT, 5, movetoworkspace, 5"
|
||||
"$mainMod_SHIFT, 6, movetoworkspace, 6"
|
||||
"$mainMod_SHIFT, 7, movetoworkspace, 7"
|
||||
"$mainMod_SHIFT, 8, movetoworkspace, 8"
|
||||
"$mainMod_SHIFT, 9, movetoworkspace, 9"
|
||||
"$mainMod_SHIFT, 0, movetoworkspace, 10"
|
||||
|
||||
# Cycle workspaces
|
||||
"$mainMod, mouse_down, workspace, e+1"
|
||||
"$mainMod, mouse_up, workspace, e-1"
|
||||
|
||||
# Mouse drag
|
||||
"$mainMod, mouse:272, movewindow"
|
||||
"$mainMod, mouse:273, resizewindow"
|
||||
|
||||
#########################
|
||||
# Audio (pamixer)
|
||||
#########################
|
||||
"XF86AudioRaiseVolume, exec, pamixer -i 5"
|
||||
"XF86AudioLowerVolume, exec, pamixer -d 5"
|
||||
"XF86AudioMute, exec, pamixer -t"
|
||||
"XF86AudioMicMute, exec, pamixer --default-source -t"
|
||||
|
||||
#########################
|
||||
# Media (playerctl)
|
||||
#########################
|
||||
"XF86AudioPlay, exec, playerctl play-pause"
|
||||
"XF86AudioPause, exec, playerctl pause"
|
||||
"XF86AudioNext, exec, playerctl next"
|
||||
"XF86AudioPrev, exec, playerctl previous"
|
||||
"XF86AudioStop, exec, playerctl stop"
|
||||
|
||||
#########################
|
||||
# Brightness (brightnessctl)
|
||||
#########################
|
||||
"XF86MonBrightnessUp, exec, brightnessctl set +10%"
|
||||
"XF86MonBrightnessDown, exec, brightnessctl set 10%-"
|
||||
"XF86KbdBrightnessUp, exec, brightnessctl -d '*kbd_backlight*' set +10%"
|
||||
"XF86KbdBrightnessDown, exec, brightnessctl -d '*kbd_backlight*' set 10%-"
|
||||
|
||||
#########################
|
||||
# Power / session
|
||||
#########################
|
||||
"XF86Sleep, exec, systemctl suspend"
|
||||
"XF86PowerOff, exec, systemctl poweroff"
|
||||
"XF86WakeUp, exec, systemctl suspend"
|
||||
|
||||
|
||||
#########################
|
||||
# Start apps
|
||||
#########################
|
||||
"CTRLALT, B, exec, flatpak run eu.betterbird.Betterbird"
|
||||
"CTRLALT, S, exec, spotify"
|
||||
"CTRLALT, z, exec, flatpak run app.zen_browser.zen"
|
||||
|
||||
"$mainMod_SHIFT, S, exec, wlogout"
|
||||
];
|
||||
};
|
||||
}
|
||||
Executable
+155
@@ -0,0 +1,155 @@
|
||||
{ pkgs, ... } :
|
||||
{
|
||||
home.packages = with pkgs; [
|
||||
hyprlock
|
||||
hypridle
|
||||
wlogout
|
||||
];
|
||||
|
||||
|
||||
home.file = {
|
||||
lock = {
|
||||
source = ../assets/lock.png;
|
||||
target = ".lock.png";
|
||||
};
|
||||
};
|
||||
|
||||
services = {
|
||||
# hypridle to
|
||||
# 150 seconds - turn of monitor
|
||||
# 300 seconds - lock screen
|
||||
# 330 seconds - turn of monitor
|
||||
# 30 minutes - put to sleep
|
||||
hypridle = {
|
||||
enable = true;
|
||||
settings = {
|
||||
general = {
|
||||
lock_cmd = "pidof hyprlock || hyprlock"; # avoid starting multiple hyprlock instances.
|
||||
before_sleep_cmd = "loginctl lock-session"; # lock before suspend.
|
||||
after_sleep_cmd = "hyprctl dispatch dpms on"; # to avoid having to press a key twice to turn on the display.
|
||||
};
|
||||
|
||||
listener = [
|
||||
{
|
||||
timeout = 150; # 2.5min.
|
||||
on-timeout = "brightnessctl -s set 10"; # set monitor backlight to minimum, avoid 0 on OLED monitor.
|
||||
on-resume = "brightnessctl -r"; # monitor backlight restore.
|
||||
}
|
||||
{
|
||||
timeout = 300; # 5min
|
||||
on-timeout = "loginctl lock-session"; # lock screen when timeout has passed
|
||||
}
|
||||
{
|
||||
timeout = 330; # 5.5min
|
||||
on-timeout = "hyprctl dispatch dpms off"; # screen off when timeout has passed
|
||||
on-resume = "hyprctl dispatch dpms on && brightnessctl -r"; # screen on when activity is detected after timeout has fired.
|
||||
}
|
||||
{
|
||||
timeout = 1800; # 30min
|
||||
on-timeout = "systemctl suspend"; # suspend pc
|
||||
}
|
||||
];
|
||||
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
|
||||
programs.wlogout = {
|
||||
enable = true;
|
||||
layout = [
|
||||
{
|
||||
"label" = "lock";
|
||||
"action" = "hyprlock";
|
||||
"text" = "Lock";
|
||||
"keybind" = "l";
|
||||
}
|
||||
{
|
||||
"label" = "shutdown";
|
||||
"action" = "systemctl poweroff";
|
||||
"text" = "Shutdown";
|
||||
"keybind" = "s";
|
||||
}
|
||||
{
|
||||
"label" = "suspend";
|
||||
"action" = "systemctl suspend";
|
||||
"text" = "Suspend";
|
||||
"keybind" = "u";
|
||||
}
|
||||
{
|
||||
"label" = "reboot";
|
||||
"action" = "systemctl reboot";
|
||||
"text" = "Reboot";
|
||||
"keybind" = "r";
|
||||
}
|
||||
{
|
||||
"label" = "hibernate";
|
||||
"action" = "systemctl hibernate";
|
||||
"text" = "Hibernate";
|
||||
"keybind" = "h";
|
||||
}
|
||||
{
|
||||
"label" = "reboot";
|
||||
"action" = "systemctl reboot";
|
||||
"text" = "Reboot";
|
||||
"keybind" = "r";
|
||||
}
|
||||
];
|
||||
};
|
||||
|
||||
catppuccin.wlogout.iconStyle = "wleave";
|
||||
|
||||
programs.hyprlock = {
|
||||
enable = true;
|
||||
settings = {
|
||||
auth = {
|
||||
fingerprint = {
|
||||
enabled = true;
|
||||
};
|
||||
};
|
||||
|
||||
background = {
|
||||
path = "~/.lock.png";
|
||||
color = "$base";
|
||||
};
|
||||
|
||||
label = {
|
||||
monitor = "";
|
||||
text = "$TIME";
|
||||
color = "$text";
|
||||
font_size = 90;
|
||||
position = "0, 0";
|
||||
halign = "center";
|
||||
valign = "top";
|
||||
};
|
||||
|
||||
input-field = {
|
||||
monitor = "";
|
||||
size = "300, 60";
|
||||
outline_thickness = 4;
|
||||
dots_size = 0.2;
|
||||
dots_spacing = 0.2;
|
||||
dots_center = true;
|
||||
outer_color = "$accent";
|
||||
inner_color = "$surface0";
|
||||
font_color = "$text";
|
||||
fade_on_empty = true;
|
||||
placeholder_text = ''<span foreground="##$textAlpha"><i> Logged in as </i><span foreground="##$accentAlpha">$USER</span></span>'';
|
||||
hide_input = false;
|
||||
check_color = "$accent";
|
||||
fail_color = "$red";
|
||||
fail_text = ''<i>$FAIL <b>($ATTEMPTS)</b></i>'';
|
||||
capslock_color = "$yellow";
|
||||
position = "0, -47";
|
||||
halign = "center";
|
||||
valign = "center";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
catppuccin.hyprlock.enable = true;
|
||||
catppuccin.hyprlock.flavor = "mocha";
|
||||
catppuccin.hyprlock.accent = "blue";
|
||||
catppuccin.hyprlock.useDefaultConfig = false; # we use our own
|
||||
}
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
{
|
||||
programs = {
|
||||
# <henrov: I need to setup kitty here>
|
||||
alacritty = {
|
||||
enable = true;
|
||||
settings = {
|
||||
font.normal.family = "Aporetic Sans Mono";
|
||||
font.size = 12;
|
||||
terminal.shell.program = "zsh";
|
||||
|
||||
window = {
|
||||
padding.x = 4;
|
||||
padding.y = 4;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
catppuccin.alacritty.enable = true;
|
||||
catppuccin.alacritty.flavor = "mocha";
|
||||
}
|
||||
Executable
+24
@@ -0,0 +1,24 @@
|
||||
{ pkgs, ...}:
|
||||
{
|
||||
gtk = {
|
||||
enable = true;
|
||||
colorScheme = "dark";
|
||||
theme = {
|
||||
name = "Catppuccin-GTK-Grey-Dark-Compact";
|
||||
package = (pkgs.magnetic-catppuccin-gtk.override {
|
||||
accent = [ "grey" ];
|
||||
shade = "dark";
|
||||
tweaks = [ "black" ];
|
||||
size = "compact";
|
||||
});
|
||||
};
|
||||
|
||||
iconTheme.name = "Papirus-Dark";
|
||||
};
|
||||
|
||||
catppuccin.enable = true;
|
||||
catppuccin.flavor = "mocha";
|
||||
catppuccin.accent = "blue";
|
||||
catppuccin.gtk.icon.enable = true;
|
||||
catppuccin.cursors.enable = true;
|
||||
}
|
||||
Executable
+11
@@ -0,0 +1,11 @@
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
home.packages = with pkgs; [
|
||||
(pkgs.unityhub.override {
|
||||
extraPkgs = pkgs: with pkgs; [
|
||||
dotnet-sdk
|
||||
];
|
||||
})
|
||||
];
|
||||
|
||||
}
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
{
|
||||
services.walker.enable = true;
|
||||
services.walker.settings = {
|
||||
close = "ctrl g";
|
||||
next = "ctrl n";
|
||||
previous = "ctrl p";
|
||||
quick_activate = ["1" "2" "3" "4"];
|
||||
};
|
||||
}
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
{ pkgs, ... }:
|
||||
{
|
||||
home.packages = with pkgs; [
|
||||
hyprpaper
|
||||
];
|
||||
|
||||
services.hyprpaper.enable = true;
|
||||
services.hyprpaper.settings = {
|
||||
ipc = "on";
|
||||
splash = false;
|
||||
splash_offset = 2.0;
|
||||
|
||||
preload = [ "~/.background-image.png" ];
|
||||
wallpaper = [ ",~/.background-image.png" ];
|
||||
};
|
||||
|
||||
home.file = {
|
||||
background = {
|
||||
source = ../assets/background.png;
|
||||
target = ".background-image.png";
|
||||
};
|
||||
};
|
||||
}
|
||||
+165
@@ -0,0 +1,165 @@
|
||||
{
|
||||
programs.waybar = {
|
||||
enable = true;
|
||||
settings = {
|
||||
mainBar = {
|
||||
layer = "top";
|
||||
height = 34;
|
||||
modules-left = [ "hyprland/workspaces" "hyprland/window" ];
|
||||
modules-right = [
|
||||
"idle_inhibitor"
|
||||
"pulseaudio"
|
||||
"network"
|
||||
"cpu"
|
||||
"memory"
|
||||
"temperature"
|
||||
"battery"
|
||||
"tray"
|
||||
"clock"
|
||||
];
|
||||
"idle_inhibitor" = {
|
||||
format = "{icon}";
|
||||
format-icons = {
|
||||
activated = " ";
|
||||
deactivated = " ";
|
||||
};
|
||||
};
|
||||
"pulseaudio" = {
|
||||
"format" = "{volume}% {icon}";
|
||||
"format-bluetooth" = "{volume}% {icon}";
|
||||
"format-muted" = "";
|
||||
"format-icons"= {
|
||||
"headphones"= "";
|
||||
"headset"= "";
|
||||
"phone"= "";
|
||||
"portab le"= "";
|
||||
"default"= ["" ""];
|
||||
};
|
||||
"on-click"= "pavucontrol";
|
||||
};
|
||||
"network" = {
|
||||
"format-wifi" = " ({bandwidthDownBits})";
|
||||
"format-ethernet" = " ({bandwidthDownBits})";
|
||||
"format-disconnected" = "Disconnected ⚠";
|
||||
"tooltip-format-wifi" = "{essid} ({signalStrength}%)";
|
||||
"tooltip-format-ethernet" = "{ifname}: {ipaddr}/{cidr}";
|
||||
"on-click" = "impala";
|
||||
};
|
||||
"cpu".format = "{usage}% ";
|
||||
"cpu".tooltip = false;
|
||||
"temperature" = {
|
||||
"format" = "{temperatureC}°C ";
|
||||
};
|
||||
"temperature".tooltip = false;
|
||||
"tray".spacing = 10;
|
||||
"tray".icon-size = 14;
|
||||
"clock".format = "{:%a, %d %b %Y - %H:%M}";
|
||||
"clock".tooltip = false;
|
||||
"battery" = {
|
||||
"bat" = "BAT0";
|
||||
"states" = {
|
||||
"good" = 95;
|
||||
"warning" = 30;
|
||||
"critical" = 15;
|
||||
};
|
||||
"format" = "{capacity}% {icon}";
|
||||
"format-charging" = "{capacity}% ";
|
||||
"format-plugged" = "{capacity}% ";
|
||||
"format-icons" = ["" "" "" "" " "];
|
||||
};
|
||||
"memory".format = "{percentage}% ";
|
||||
};
|
||||
};
|
||||
style = ''
|
||||
* {
|
||||
font-family: Aporetic Sans Mono, Iosevka Nerd Font, Roboto, Helvetica, Arial, sans-serif;
|
||||
font-size: 13px;
|
||||
}
|
||||
|
||||
window#waybar {
|
||||
background-color: @base;
|
||||
color: @text;
|
||||
transition-property: background-color;
|
||||
border-bottom: 0px solid rgba(0, 0, 0, 0);
|
||||
transition-duration: .5s;
|
||||
}
|
||||
|
||||
#workspaces button {
|
||||
padding: 0 5px;
|
||||
background-color: transparent;
|
||||
border: none;
|
||||
border-radius: 0;
|
||||
color: @text;
|
||||
}
|
||||
|
||||
#workspaces button:hover {
|
||||
background: @surface1;
|
||||
color: @text;
|
||||
}
|
||||
|
||||
#workspaces button.active {
|
||||
background-color: @green;
|
||||
color: @base;
|
||||
box-shadow: inset 0 -3px @subtext1;
|
||||
}
|
||||
|
||||
#clock,
|
||||
#idle_inhibitor
|
||||
#battery,
|
||||
#cpu,
|
||||
#memory,
|
||||
#temperature,
|
||||
#network,
|
||||
#pulseaudio,
|
||||
#tray {
|
||||
margin: 0 5px;
|
||||
padding: 0 2px;
|
||||
}
|
||||
|
||||
#idle_inhibitor.activated {
|
||||
background-color: @green;
|
||||
}
|
||||
|
||||
#battery.charging {
|
||||
color: @green;
|
||||
}
|
||||
|
||||
@keyframes blink {
|
||||
to {
|
||||
background-color: #ffffff;
|
||||
color: black;
|
||||
}
|
||||
}
|
||||
|
||||
#battery.warning:not(.charging) {
|
||||
color: white;
|
||||
animation-name: blink;
|
||||
animation-duration: 0.5s;
|
||||
animation-timing-function: linear;
|
||||
animation-iteration-count: infinite;
|
||||
animation-direction: alternate;
|
||||
}
|
||||
|
||||
#window,
|
||||
#workspaces {
|
||||
margin: 0 4px;
|
||||
}
|
||||
|
||||
.modules-left > widget:first-child > #workspaces {
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
.modules-right > widget:last-child > #workspaces {
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
#network.disconnected {
|
||||
background-color: @red;
|
||||
}
|
||||
|
||||
#temperature.critical {
|
||||
background-color: @red;
|
||||
}
|
||||
'';
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user