Full Refactor and history reset
This commit is contained in:
23
bluetooth.nix
Normal file
23
bluetooth.nix
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
{
|
||||||
|
services.blueman.enable = true;
|
||||||
|
hardware.bluetooth = {
|
||||||
|
enable = true;
|
||||||
|
powerOnBoot = true;
|
||||||
|
settings = {
|
||||||
|
General = {
|
||||||
|
Experimental = true;
|
||||||
|
FastConnectable = true;
|
||||||
|
};
|
||||||
|
Policy = {
|
||||||
|
AutoEnable = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
141
desktop.nix
Normal file
141
desktop.nix
Normal file
@@ -0,0 +1,141 @@
|
|||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
makeDesktopItem,
|
||||||
|
pkgs,
|
||||||
|
inputs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
inputs.hyprland.nixosModules.default
|
||||||
|
inputs.home-manager.nixosModules.default
|
||||||
|
];
|
||||||
|
|
||||||
|
# Enable the X11 windowing system.
|
||||||
|
services.xserver.enable = true;
|
||||||
|
|
||||||
|
# Configure keymap in X11
|
||||||
|
services.xserver = {
|
||||||
|
xkb.layout = "us";
|
||||||
|
xkb.variant = "";
|
||||||
|
};
|
||||||
|
|
||||||
|
#services.libinput.enable = true;
|
||||||
|
xdg.portal.enable = true;
|
||||||
|
xdg.portal.wlr.enable = true;
|
||||||
|
|
||||||
|
environment.sessionVariables = {
|
||||||
|
QT_QPA_PLATFORMTHEME = "gtk3";
|
||||||
|
QT_QPA_PLATFORMTHEME_QT6 = "gtk3";
|
||||||
|
};
|
||||||
|
|
||||||
|
home-manager = {
|
||||||
|
users.joe = {
|
||||||
|
home.pointerCursor = {
|
||||||
|
gtk.enable = true;
|
||||||
|
x11.enable = true;
|
||||||
|
package = pkgs.bibata-cursors;
|
||||||
|
name = "Bibata-Modern-Classic";
|
||||||
|
size = 16;
|
||||||
|
};
|
||||||
|
# gtk.enable = true;
|
||||||
|
# qt.enable = true;
|
||||||
|
# qt.platformTheme = "gtk";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
users.users.joe.packages = with pkgs; [
|
||||||
|
hyprpolkitagent
|
||||||
|
hyprtoolkit
|
||||||
|
gsettings-desktop-schemas
|
||||||
|
adw-gtk3
|
||||||
|
candy-icons
|
||||||
|
wf-recorder
|
||||||
|
hyprpaper
|
||||||
|
nemo-with-extensions
|
||||||
|
google-chrome
|
||||||
|
mpv
|
||||||
|
proton-pass
|
||||||
|
];
|
||||||
|
|
||||||
|
#KDE
|
||||||
|
# services.displayManager.sddm.enable = true;
|
||||||
|
# services.displayManager.sddm.wayland.enable = true;
|
||||||
|
|
||||||
|
# services.desktopManager.plasma6.enable = true;
|
||||||
|
# environment.plasma6.excludePackages = with pkgs.kdePackages; [
|
||||||
|
# oxygen
|
||||||
|
# akonadi
|
||||||
|
# ];
|
||||||
|
# programs.kdeconnect.enable = true;
|
||||||
|
|
||||||
|
nix.settings = {
|
||||||
|
substituters = [ "https://hyprland.cachix.org" ];
|
||||||
|
trusted-substituters = [ "https://hyprland.cachix.org" ];
|
||||||
|
trusted-public-keys = [ "hyprland.cachix.org-1:a7pgxzMz7+chwVL3/pzj6jIBMioiJM7ypFP8PwtkuGc=" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
programs.hyprland = {
|
||||||
|
enable = true;
|
||||||
|
withUWSM = true; # recommended for most users
|
||||||
|
xwayland.enable = true; # Xwayland can be disabled.
|
||||||
|
package = inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.hyprland;
|
||||||
|
# portalPackage =
|
||||||
|
# inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.xdg-desktop-portal-hyprland;
|
||||||
|
};
|
||||||
|
|
||||||
|
programs.dms-shell = {
|
||||||
|
enable = true;
|
||||||
|
quickshell.package = inputs.quickshell.packages.${pkgs.stdenv.hostPlatform.system}.quickshell;
|
||||||
|
};
|
||||||
|
|
||||||
|
programs.niri.enable = true;
|
||||||
|
|
||||||
|
home-manager = {
|
||||||
|
users.joe = {
|
||||||
|
home.file.".mozilla/firefox/default/chrome/keyfox".source = inputs.firefox-keyfox-theme;
|
||||||
|
programs.firefox = {
|
||||||
|
enable = true;
|
||||||
|
profiles.default = {
|
||||||
|
name = "Default";
|
||||||
|
settings = {
|
||||||
|
"extensions.activeThemeID" = "firefox-compact-dark@mozilla.org";
|
||||||
|
"toolkit.legacyUserProfileCustomizations.stylesheets" = true;
|
||||||
|
"browser.tabs.drawInTitlebar" = false;
|
||||||
|
"browser.startup.homepage" = "chrome://browser/content/blanktab.html";
|
||||||
|
"svg.context-properties.content.enabled" = true;
|
||||||
|
};
|
||||||
|
userChrome = ''
|
||||||
|
@import "keyfox/userChrome.css";
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
kitty
|
||||||
|
dbus
|
||||||
|
notify-desktop
|
||||||
|
libinput
|
||||||
|
libnotify
|
||||||
|
wl-clipboard
|
||||||
|
xwayland-satellite
|
||||||
|
pinentry-gtk2
|
||||||
|
home-manager
|
||||||
|
vlc
|
||||||
|
zathura
|
||||||
|
slurp
|
||||||
|
grim
|
||||||
|
];
|
||||||
|
|
||||||
|
xdg.mime.defaultApplications = {
|
||||||
|
"text/html" = "org.qutebrowser.qutebrowser.desktop";
|
||||||
|
"x-scheme-handler/http" = "firefox.desktop";
|
||||||
|
"x-scheme-handler/https" = "firefox.desktop";
|
||||||
|
"x-scheme-handler/about" = "firefox.desktop";
|
||||||
|
"x-scheme-handler/unknown" = "firefox.desktop";
|
||||||
|
};
|
||||||
|
}
|
||||||
61
development_tools.nix
Normal file
61
development_tools.nix
Normal file
@@ -0,0 +1,61 @@
|
|||||||
|
{
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
inputs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
programs.tmux = {
|
||||||
|
enable = true;
|
||||||
|
plugins = with pkgs; [
|
||||||
|
tmuxPlugins.better-mouse-mode
|
||||||
|
tmuxPlugins.sensible
|
||||||
|
tmuxPlugins.vim-tmux-navigator
|
||||||
|
tmuxPlugins.catppuccin
|
||||||
|
tmuxPlugins.yank
|
||||||
|
];
|
||||||
|
extraConfig = (builtins.readFile ./dotfiles/tmux.conf);
|
||||||
|
};
|
||||||
|
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
tectonic
|
||||||
|
nil
|
||||||
|
elixir
|
||||||
|
python312
|
||||||
|
clang-tools
|
||||||
|
stylua
|
||||||
|
python312Packages.pip
|
||||||
|
python313Packages.pillow
|
||||||
|
devenv
|
||||||
|
flyctl
|
||||||
|
];
|
||||||
|
|
||||||
|
users.users.joe.packages = with pkgs; [
|
||||||
|
tea # gitea cli client
|
||||||
|
presenterm
|
||||||
|
mongodb-compass
|
||||||
|
claude-code
|
||||||
|
(builtins.getFlake "github:5Sigma/codex?rev=fe20caf8816f8f29aa49e273ba4905496f31c2b1")
|
||||||
|
.packages.x86_64-linux.default
|
||||||
|
# mysql-workbench
|
||||||
|
(import ./scripts/new-elixir.nix { inherit pkgs; })
|
||||||
|
(import ./scripts/tat.nix { inherit pkgs; })
|
||||||
|
];
|
||||||
|
|
||||||
|
home-manager.users.joe = {
|
||||||
|
|
||||||
|
xdg.desktopEntries.mongodb_compass = {
|
||||||
|
name = "MongoDB Compass (libsecret)";
|
||||||
|
genericName = "MongoDB GUI";
|
||||||
|
exec = "mongodb-compass --password-store=\"gnome-libsecret\" --ignore-additional-command-line-flags";
|
||||||
|
terminal = false;
|
||||||
|
categories = [
|
||||||
|
"Application"
|
||||||
|
"Database"
|
||||||
|
"Development"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
44
dotfiles.nix
Normal file
44
dotfiles.nix
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
{
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
inputs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
|
||||||
|
imports = [
|
||||||
|
inputs.home-manager.nixosModules.default
|
||||||
|
];
|
||||||
|
|
||||||
|
home-manager = {
|
||||||
|
useGlobalPkgs = true;
|
||||||
|
users.joe = {
|
||||||
|
home.stateVersion = "18.09";
|
||||||
|
xdg.enable = true;
|
||||||
|
# xdg.configFile."mimeapps.list".force = true;
|
||||||
|
xdg.configFile."ranger/rc.conf".source = ./dotfiles/ranger.conf;
|
||||||
|
xdg.configFile."ghostty/config".source = ./dotfiles/ghostty.conf;
|
||||||
|
xdg.configFile."kitty/kitty.conf".source = ./dotfiles/kitty/kitty.conf;
|
||||||
|
xdg.configFile."kitty/quick-access-terminal.conf".source =
|
||||||
|
./dotfiles/kitty/quick-access-terminal.conf;
|
||||||
|
xdg.configFile."alacritty/alacritty.toml".source = ./dotfiles/alacritty.toml;
|
||||||
|
xdg.configFile."lazygit/config.yml".source = ./dotfiles/lazygit.yml;
|
||||||
|
xdg.configFile."hypr/base.conf".source = ./dotfiles/hyprland.base.conf;
|
||||||
|
xdg.configFile."niri/config.kdl".source = ./dotfiles/niri.kdl;
|
||||||
|
|
||||||
|
# xdg.configFile."nvim" = {
|
||||||
|
# source = dotfiles/nvim;
|
||||||
|
# recursive = true;
|
||||||
|
# };
|
||||||
|
|
||||||
|
xdg.configFile."doom/init.el".source = ./dotfiles/emacs/init.el;
|
||||||
|
xdg.configFile."doom/config.org".source = ./dotfiles/emacs/config.org;
|
||||||
|
xdg.configFile."doom/packages.el".source = ./dotfiles/emacs/packages.el;
|
||||||
|
xdg.configFile."doom/el/conduct.el".source = ./dotfiles/emacs/el/conduct.el;
|
||||||
|
xdg.configFile."hypr/hyprpaper.conf".source = ./dotfiles/hyprpaper.specter.conf;
|
||||||
|
xdg.configFile."hypr/hyprland.conf".source = ./dotfiles/hyprland.specter.conf;
|
||||||
|
xdg.configFile."hypr/hypridle.conf".source = ./dotfiles/hypridle.conf;
|
||||||
|
xdg.configFile."hypr/hyprlock.conf".source = ./dotfiles/hyprlock.conf;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
85
dotfiles/alacritty.toml
Normal file
85
dotfiles/alacritty.toml
Normal file
@@ -0,0 +1,85 @@
|
|||||||
|
# test
|
||||||
|
[colors.primary]
|
||||||
|
background = "#292D3E"
|
||||||
|
foreground = "#C6D0F5"
|
||||||
|
dim_foreground = "#C6D0F5"
|
||||||
|
bright_foreground = "#C6D0F5"
|
||||||
|
|
||||||
|
[colors.cursor]
|
||||||
|
text = "#303446"
|
||||||
|
cursor = "#F2D5CF"
|
||||||
|
|
||||||
|
[colors.vi_mode_cursor]
|
||||||
|
text = "#303446"
|
||||||
|
cursor = "#BABBF1"
|
||||||
|
|
||||||
|
[colors.search.matches]
|
||||||
|
foreground = "#303446"
|
||||||
|
background = "#A5ADCE"
|
||||||
|
|
||||||
|
[colors.search.focused_match]
|
||||||
|
foreground = "#303446"
|
||||||
|
background = "#A6D189"
|
||||||
|
|
||||||
|
[colors.footer_bar]
|
||||||
|
foreground = "#303446"
|
||||||
|
background = "#A5ADCE"
|
||||||
|
|
||||||
|
[colors.hints.start]
|
||||||
|
foreground = "#303446"
|
||||||
|
background = "#E5C890"
|
||||||
|
|
||||||
|
[colors.hints.end]
|
||||||
|
foreground = "#303446"
|
||||||
|
background = "#A5ADCE"
|
||||||
|
|
||||||
|
[colors.selection]
|
||||||
|
text = "#303446"
|
||||||
|
background = "#F2D5CF"
|
||||||
|
|
||||||
|
[colors.normal]
|
||||||
|
black = "#51576D"
|
||||||
|
red = "#E78284"
|
||||||
|
green = "#A6D189"
|
||||||
|
yellow = "#E5C890"
|
||||||
|
blue = "#8CAAEE"
|
||||||
|
magenta = "#F4B8E4"
|
||||||
|
cyan = "#81C8BE"
|
||||||
|
white = "#B5BFE2"
|
||||||
|
|
||||||
|
[colors.bright]
|
||||||
|
black = "#626880"
|
||||||
|
red = "#E78284"
|
||||||
|
green = "#A6D189"
|
||||||
|
yellow = "#E5C890"
|
||||||
|
blue = "#8CAAEE"
|
||||||
|
magenta = "#F4B8E4"
|
||||||
|
cyan = "#81C8BE"
|
||||||
|
white = "#A5ADCE"
|
||||||
|
|
||||||
|
[colors.dim]
|
||||||
|
black = "#51576D"
|
||||||
|
red = "#E78284"
|
||||||
|
green = "#A6D189"
|
||||||
|
yellow = "#E5C890"
|
||||||
|
blue = "#8CAAEE"
|
||||||
|
magenta = "#F4B8E4"
|
||||||
|
cyan = "#81C8BE"
|
||||||
|
white = "#B5BFE2"
|
||||||
|
|
||||||
|
[[colors.indexed_colors]]
|
||||||
|
index = 16
|
||||||
|
color = "#EF9F76"
|
||||||
|
|
||||||
|
[[colors.indexed_colors]]
|
||||||
|
index = 17
|
||||||
|
color = "#F2D5CF"
|
||||||
|
|
||||||
|
[window]
|
||||||
|
opacity = 0.9
|
||||||
|
|
||||||
|
[font]
|
||||||
|
normal = { family = "PragmataPro Mono Liga", style = "Regular" }
|
||||||
|
bold = { family = "PragmataPro Mono Liga", style = "Bold" }
|
||||||
|
italic = { family = "PragmataPro Mono Liga", style = "Italic" }
|
||||||
|
size = 12
|
||||||
75
dotfiles/catppuccin-latte.toml
Normal file
75
dotfiles/catppuccin-latte.toml
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
[colors.primary]
|
||||||
|
background = "#eff1f5"
|
||||||
|
foreground = "#4c4f69"
|
||||||
|
dim_foreground = "#8c8fa1"
|
||||||
|
bright_foreground = "#4c4f69"
|
||||||
|
|
||||||
|
[colors.cursor]
|
||||||
|
text = "#eff1f5"
|
||||||
|
cursor = "#dc8a78"
|
||||||
|
|
||||||
|
[colors.vi_mode_cursor]
|
||||||
|
text = "#eff1f5"
|
||||||
|
cursor = "#7287fd"
|
||||||
|
|
||||||
|
[colors.search.matches]
|
||||||
|
foreground = "#eff1f5"
|
||||||
|
background = "#6c6f85"
|
||||||
|
|
||||||
|
[colors.search.focused_match]
|
||||||
|
foreground = "#eff1f5"
|
||||||
|
background = "#40a02b"
|
||||||
|
|
||||||
|
[colors.footer_bar]
|
||||||
|
foreground = "#eff1f5"
|
||||||
|
background = "#6c6f85"
|
||||||
|
|
||||||
|
[colors.hints.start]
|
||||||
|
foreground = "#eff1f5"
|
||||||
|
background = "#df8e1d"
|
||||||
|
|
||||||
|
[colors.hints.end]
|
||||||
|
foreground = "#eff1f5"
|
||||||
|
background = "#6c6f85"
|
||||||
|
|
||||||
|
[colors.selection]
|
||||||
|
text = "#eff1f5"
|
||||||
|
background = "#dc8a78"
|
||||||
|
|
||||||
|
[colors.normal]
|
||||||
|
black = "#bcc0cc"
|
||||||
|
red = "#d20f39"
|
||||||
|
green = "#40a02b"
|
||||||
|
yellow = "#df8e1d"
|
||||||
|
blue = "#1e66f5"
|
||||||
|
magenta = "#ea76cb"
|
||||||
|
cyan = "#179299"
|
||||||
|
white = "#5c5f77"
|
||||||
|
|
||||||
|
[colors.bright]
|
||||||
|
black = "#acb0be"
|
||||||
|
red = "#d20f39"
|
||||||
|
green = "#40a02b"
|
||||||
|
yellow = "#df8e1d"
|
||||||
|
blue = "#1e66f5"
|
||||||
|
magenta = "#ea76cb"
|
||||||
|
cyan = "#179299"
|
||||||
|
white = "#6c6f85"
|
||||||
|
|
||||||
|
[colors.dim]
|
||||||
|
black = "#bcc0cc"
|
||||||
|
red = "#d20f39"
|
||||||
|
green = "#40a02b"
|
||||||
|
yellow = "#df8e1d"
|
||||||
|
blue = "#1e66f5"
|
||||||
|
magenta = "#ea76cb"
|
||||||
|
cyan = "#179299"
|
||||||
|
white = "#5c5f77"
|
||||||
|
|
||||||
|
[[colors.indexed_colors]]
|
||||||
|
index = 16
|
||||||
|
color = "#fe640b"
|
||||||
|
|
||||||
|
[[colors.indexed_colors]]
|
||||||
|
index = 17
|
||||||
|
color = "#dc8a78"
|
||||||
2
dotfiles/config.nu
Normal file
2
dotfiles/config.nu
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
|
||||||
|
|
||||||
415
dotfiles/emacs/config.org
Normal file
415
dotfiles/emacs/config.org
Normal file
@@ -0,0 +1,415 @@
|
|||||||
|
#+PROPERTY: header-args :tangle config.el
|
||||||
|
|
||||||
|
* My Info
|
||||||
|
Basic info for some templates
|
||||||
|
|
||||||
|
#+begin_src elisp
|
||||||
|
(setq user-full-name "Joe Bellus"
|
||||||
|
user-mail-address "joe@5sigma.io")
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
* Appearance
|
||||||
|
** Fonts
|
||||||
|
Setup default fonts and faces.
|
||||||
|
#+begin_src elisp
|
||||||
|
(setq doom-font (font-spec :family "PragmataPro Mono Liga" :size 16 :weight 'bold)
|
||||||
|
doom-variable-pitch-font (font-spec :family "Iosevka" :size 16 :weight 'light)
|
||||||
|
doom-big-font (font-spec :family "Iosevka" :size 22. :weight 'medium)
|
||||||
|
doom-themes-enable-bold t
|
||||||
|
doom-themes-enable-italic t
|
||||||
|
)
|
||||||
|
#+End_src
|
||||||
|
** Window Size
|
||||||
|
#+begin_src elisp
|
||||||
|
;; (setq default-frame-alist '((width . 200) (height . 55)))
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
** Theme
|
||||||
|
#+begin_src elisp
|
||||||
|
(setq doom-theme 'doom-palenight)
|
||||||
|
;; (after! doom-themes
|
||||||
|
;; (load-theme 'doom-nano-light t))
|
||||||
|
;; (use-package! doom-nano-modeline
|
||||||
|
;; :config
|
||||||
|
;; (doom-nano-modeline-mode 1)
|
||||||
|
;; (global-hide-mode-line-mode nil))
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
** Translucency
|
||||||
|
Setup some translucency to make things look nice.
|
||||||
|
#+begin_src emacs-lisp
|
||||||
|
(doom/set-frame-opacity 100)
|
||||||
|
(set-frame-parameter nil 'alpha-background 100)
|
||||||
|
(add-to-list 'default-frame-alist '(alpha-background . 100))
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
* Startup
|
||||||
|
** Load custom scripts
|
||||||
|
#+begin_src elisp
|
||||||
|
;; (add-to-list 'load-path "~/.config/doom/el")
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
** Startup buffer
|
||||||
|
#+begin_src elisp
|
||||||
|
(setq +doom-dashboard-menu-sections '
|
||||||
|
(
|
||||||
|
("Recently opened files" :icon
|
||||||
|
(nerd-icons-faicon "nf-fa-file_text" :face 'doom-dashboard-menu-title)
|
||||||
|
:action recentf-open-files)
|
||||||
|
("Open org-agenda"
|
||||||
|
:icon (nerd-icons-octicon "nf-oct-calendar" :face 'doom-dashboard-menu-title)
|
||||||
|
:when (fboundp 'org-agenda)
|
||||||
|
:action org-agenda)
|
||||||
|
("Open Notes"
|
||||||
|
:icon (nerd-icons-faicon "nf-fa-file_text" :face 'doom-dashboard-menu-title)
|
||||||
|
:action +default/browse-notes)
|
||||||
|
))
|
||||||
|
|
||||||
|
(remove-hook '+doom-dashboard-functions #'doom-dashboard-widget-shortmenu)
|
||||||
|
(remove-hook '+doom-dashboard-functions #'doom-dashboard-widget-banner)
|
||||||
|
(remove-hook '+doom-dashboard-functions #'doom-dashboard-widget-footer)
|
||||||
|
(remove-hook '+doom-dashboard-functions #'doom-dashboard-widget-loaded)
|
||||||
|
|
||||||
|
(setq +doom-dashboard-banner-padding '(1 . 1))
|
||||||
|
(add-hook! '+doom-dashboard-functions :append 'doom-dashboard-widget-shortmenu)
|
||||||
|
(add-hook! '+doom-dashboard-functions :append 'doom-dashboard-widget-loaded)
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
* Editor
|
||||||
|
** Line numbering
|
||||||
|
Enable basic line numbering
|
||||||
|
|
||||||
|
#+begin_src elisp
|
||||||
|
(setq display-line-numbers-type t)
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
** Quit Confirmation
|
||||||
|
Don't prompt to quit
|
||||||
|
|
||||||
|
#+begin_src elisp
|
||||||
|
(setq confirm-kill-emacs nil)
|
||||||
|
#+end_src
|
||||||
|
** Horizontal scrolling
|
||||||
|
#+begin_src elisp
|
||||||
|
(setq mouse-wheel-tilt-scroll t)
|
||||||
|
#+end_src
|
||||||
|
** Precision mouse scrolling
|
||||||
|
#+begin_src elisp
|
||||||
|
(setq pixel-scroll-precision-mode t)
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
* Org Mode
|
||||||
|
** General settings
|
||||||
|
#+begin_src elisp
|
||||||
|
(require 'org)
|
||||||
|
(setq org-ellipsis " ⋯"
|
||||||
|
org-hide-emphasis-markers t
|
||||||
|
org-src-fontify-natively t
|
||||||
|
org-fontify-quote-and-verse-blocks t
|
||||||
|
org-src-tab-acts-natively t
|
||||||
|
org-hide-block-startup nil
|
||||||
|
org-startup-folded 'content
|
||||||
|
org-cycle-separator-lines 2
|
||||||
|
org-directory "~/org/"
|
||||||
|
org-agenda-files '("~/org/" "~/org/agenda/" "~/org/agenda/projects/")
|
||||||
|
)
|
||||||
|
|
||||||
|
(setq-default prettify-symbols-alist '(("#+BEGIN_SRC" . "⇨")
|
||||||
|
("#+END_SRC" . "")
|
||||||
|
("#+begin_src" . "⇨")
|
||||||
|
("#+end_src" . "")))
|
||||||
|
(setq prettify-symbols-unprettify-at-point 'right-edge)
|
||||||
|
|
||||||
|
(defun org-setup ()
|
||||||
|
(setq-local display-line-numbers nil))
|
||||||
|
(add-hook 'org-mode-hook 'org-setup)
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
** Visual fill column
|
||||||
|
#+begin_src elisp
|
||||||
|
(setq visual-fill-column-width 110
|
||||||
|
visual-fill-column-center-text t)
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
** Org presentation
|
||||||
|
#+begin_src elisp
|
||||||
|
(defun my/org-present-start ()
|
||||||
|
(visual-fill-column-mode 1)
|
||||||
|
(setq header-line-format " ")
|
||||||
|
(visual-line-mode 1)
|
||||||
|
(hide-mode-line-mode)
|
||||||
|
(setq-local
|
||||||
|
hl-line-mode nil)
|
||||||
|
(setq-local face-remapping-alist
|
||||||
|
'((default (:height 1.5) variable-pitch)
|
||||||
|
(header-line (:height 4.0) variable-pitch)
|
||||||
|
(org-document-title (:height 1.75) org-document-title)
|
||||||
|
(org-code (:height 1.55) org-code)
|
||||||
|
(org-verbatim (:height 1.55) org-verbatim)
|
||||||
|
(org-block (:height 1.25) org-block)
|
||||||
|
(org-block-begin-line (:height 0.7) org-block)))
|
||||||
|
)
|
||||||
|
|
||||||
|
(defun my/org-present-end ()
|
||||||
|
(visual-fill-column-mode 0)
|
||||||
|
(hide-mode-line-mode)
|
||||||
|
(visual-line-mode 0)
|
||||||
|
(setq header-line-format nil)
|
||||||
|
(setq-local face-remapping-alist nil
|
||||||
|
hl-line-mode t))
|
||||||
|
(add-hook 'org-present-mode-hook 'my/org-present-start)
|
||||||
|
(add-hook 'org-present-mode-quit-hook 'my/org-present-end)
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
** Setup org header faces
|
||||||
|
#+begin_src elisp
|
||||||
|
(dolist
|
||||||
|
(face '((org-level-1 . 1.2)
|
||||||
|
(org-level-2 . 1.1)
|
||||||
|
(org-level-3 . 1.05)
|
||||||
|
(org-level-4 . 1.0)
|
||||||
|
(org-level-5 . 1.0)
|
||||||
|
(org-level-6 . 1.0)
|
||||||
|
(org-level-7 . 1.0)
|
||||||
|
(org-level-8 . 1.0)))
|
||||||
|
(set-face-attribute (car face) nil
|
||||||
|
:font "Iosevka"
|
||||||
|
:weight 'medium
|
||||||
|
:height (cdr face)))
|
||||||
|
(set-face-attribute 'org-document-title nil :font "Iosevka" :weight 'bold :height 1.3)
|
||||||
|
(set-face-attribute 'org-block nil :foreground nil :inherit 'fixed-pitch)
|
||||||
|
(set-face-attribute 'org-table nil :inherit 'fixed-pitch)
|
||||||
|
(set-face-attribute 'org-formula nil :inherit 'fixed-pitch)
|
||||||
|
(set-face-attribute 'org-code nil :inherit '(shadow fixed-pitch))
|
||||||
|
(set-face-attribute 'org-verbatim nil :inherit '(shadow fixed-pitch))
|
||||||
|
(set-face-attribute 'org-special-keyword nil :inherit '(font-lock-comment-face fixed-pitch))
|
||||||
|
(set-face-attribute 'org-meta-line nil :inherit '(font-lock-comment-face fixed-pitch))
|
||||||
|
(set-face-attribute 'org-checkbox nil :inherit 'fixed-pitch)
|
||||||
|
(set-face-attribute 'bold nil :foreground "#c678dd" :weight 'extrabold)
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
** Bullets
|
||||||
|
#+begin_src elisp
|
||||||
|
(use-package org-bullets
|
||||||
|
:after org
|
||||||
|
:hook (org-mode . org-bullets-mode)
|
||||||
|
:custom
|
||||||
|
(org-bullets-bullet-list '("⁖" "◉" "○" "●" "○" "●" "○" "●")))
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
** Capture templates
|
||||||
|
#+begin_src elisp
|
||||||
|
(setq +org-capture-todo-file "agenda/tasks.org")
|
||||||
|
(setq +org-capture-notes-file "notes/personal/index.org")
|
||||||
|
|
||||||
|
(setq org-capture-templates
|
||||||
|
'(
|
||||||
|
("n" "Notes")
|
||||||
|
("nq" "Quikerve notes" entry
|
||||||
|
(file+headline "notes/quikserve/index.org" "Inbox")
|
||||||
|
"* %u %?\n%i\n%a" :prepend t)
|
||||||
|
("np" "Personal notes" entry
|
||||||
|
(file+headline +org-capture-notes-file "Inbox")
|
||||||
|
"* %u %?\n%i\n%a" :prepend t)
|
||||||
|
|
||||||
|
|
||||||
|
("t" "Tasks")
|
||||||
|
("tp" "Personal todo" entry
|
||||||
|
(file+headline +org-capture-todo-file "Inbox")
|
||||||
|
"* TODO %?\n%i\n%a" :prepend t)
|
||||||
|
("tq" "Quikserve todo" entry
|
||||||
|
(file+headline "agenda/quikserve.org" "Inbox")
|
||||||
|
"* TODO %?\n%i\n%a" :prepend t)
|
||||||
|
|
||||||
|
|
||||||
|
("j" "Journal")
|
||||||
|
("jp" "Personal journal" entry
|
||||||
|
(file+olp+datetree "journal/personal.org")
|
||||||
|
"* %U %?\n%i\n%a" :prepend t)
|
||||||
|
("jq" "Quikserve journal" entry
|
||||||
|
(file+olp+datetree "journal/quikserve.org")
|
||||||
|
"* %U %?\n%i\n%a" :prepend t)
|
||||||
|
|
||||||
|
("p" "Templates for projects")
|
||||||
|
("pt" "Project TODO" entry (file+headline project-agenda-file "Inbox")
|
||||||
|
"* TODO %?\n%i\n%a" :prepend t)
|
||||||
|
("pn" "Project notes" entry (file+headline project-notes-file "Quicknotes")
|
||||||
|
"* %U %?\n%i\n%a" :prepend t)
|
||||||
|
("pc" "Project-local changelog" entry
|
||||||
|
(file+headline +org-capture-project-changelog-file "Unreleased")
|
||||||
|
"* %U %?\n%i" :prepend t)))
|
||||||
|
|
||||||
|
(defun project-agenda-file ()
|
||||||
|
(expand-file-name (concat "agenda/projects/" (project-name (project-current)) ".org") org-directory))
|
||||||
|
|
||||||
|
(defun project-notes-file ()
|
||||||
|
(expand-file-name (concat "notes/projects/" (project-name (project-current)) ".org") org-directory))
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
** Don't show before schedule time
|
||||||
|
Hide items in the TODO list and agenda if they have a scheduled time that has not passed
|
||||||
|
#+begin_src elisp
|
||||||
|
(setq org-agenda-todo-ignore-scheduled 'future)
|
||||||
|
(setq org-agenda-todo-ignore-with-date t)
|
||||||
|
(setq org-agenda-tags-todo-honor-ignore-options t)
|
||||||
|
(setq org-agenda-skip-deadline-prewarning-if-scheduled 'pre-scheduled)
|
||||||
|
#+end_src
|
||||||
|
** Latex
|
||||||
|
#+begin_src elisp
|
||||||
|
(setq org-export-with-author t)
|
||||||
|
(setq org-export-with-date t)
|
||||||
|
(setq org-export-with-toc t)
|
||||||
|
(setq org-export-with-section-numbers nil)
|
||||||
|
(setq org-latex-toc-command "\\tableofcontents \\clearpage")
|
||||||
|
(setq org-latex-tables-centered nil)
|
||||||
|
(setq org-latex-tables-booktabs nil)
|
||||||
|
(setq org-latex-default-class "document")
|
||||||
|
(add-to-list 'org-latex-packages-alist '("" "listings"))
|
||||||
|
(add-to-list 'org-latex-packages-alist '("" "color"))
|
||||||
|
(with-eval-after-load 'ox-latex
|
||||||
|
(add-to-list 'org-latex-classes
|
||||||
|
'("quikserve"
|
||||||
|
"
|
||||||
|
\\documentclass{article}
|
||||||
|
[DEFAULT-PACKAGES]
|
||||||
|
\\include{/home/joe/org/assets/quikserve.tex}
|
||||||
|
[EXTRA]
|
||||||
|
"
|
||||||
|
("\\section{%s}" . "\\section*{%s}")
|
||||||
|
("\\subsection{%s}" . "\\subsection*{%s}")
|
||||||
|
("\\subsubsection{%s}" . "\\subsubsection*{%s}")
|
||||||
|
("\\paragraph{%s}" . "\\paragraph*{%s}")
|
||||||
|
("\\subparagraph{%s}" . "\\subparagraph*{%s}"))
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
#+end_src
|
||||||
|
** Verb
|
||||||
|
#+begin_src elisp
|
||||||
|
(with-eval-after-load 'org
|
||||||
|
(define-key org-mode-map (kbd "C-c C-r") verb-command-map))
|
||||||
|
|
||||||
|
#+end_src
|
||||||
|
* Email
|
||||||
|
#+begin_src elisp
|
||||||
|
(setq mu4e-drafts-folder "/fivesigma/Drafts"
|
||||||
|
mu4e-sent-folder "/fivesigma/Sent"
|
||||||
|
|
||||||
|
mu4e-trash-folder "/fivesigma/Trash"
|
||||||
|
mu4e-refile-folder "/fivesigme/Archive"
|
||||||
|
user-full-name "Joe Bellus"
|
||||||
|
user-mail-address "joe@5sigma.io")
|
||||||
|
|
||||||
|
(setq mu4e-update-interval 120)
|
||||||
|
(setq sendmail-program (executable-find "msmtp")
|
||||||
|
send-mail-function #'smtpmail-send-it
|
||||||
|
smtpmail-stream-type 'starttls
|
||||||
|
message-sendmail-f-is-evil t
|
||||||
|
message-sendmail-extra-arguments '("--read-envelope-from")
|
||||||
|
message-send-mail-function #'message-send-mail-with-sendmail
|
||||||
|
mu4e-bookmarks '(
|
||||||
|
(:name "Inbox" :query "maildir:/fivesigma/Inbox" :key ?i)
|
||||||
|
(:name "Today's messages" :query "date:today..now" :key ?t)
|
||||||
|
(:name "Last 7 days" :query "date:7d..now" :hide-unread t :key ?r)
|
||||||
|
("flag:flagged" "Flagged messages" ?f)))
|
||||||
|
|
||||||
|
(setq mu4e-hide-index-messages t)
|
||||||
|
(setq mu4e-html2text-command 'mu4e-shr2text)
|
||||||
|
(setq shr-color-visible-luminance-min 60)
|
||||||
|
(setq shr-color-visible-distance-min 5)
|
||||||
|
(setq shr-use-colors nil)
|
||||||
|
(setq mu4e-get-mail-command "true")
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
* Language Server
|
||||||
|
#+begin_src elisp
|
||||||
|
(setq lsp-auto-execute-action nil)
|
||||||
|
#+end_src
|
||||||
|
* Clock table
|
||||||
|
Add a key bind to show a 'clocktable' report in a new buffer
|
||||||
|
#+begin_src elisp
|
||||||
|
(defun kb/show-clocktable ()
|
||||||
|
(interactive)
|
||||||
|
(get-buffer-create "clocktable")
|
||||||
|
(with-current-buffer "clocktable"
|
||||||
|
(org-mode)
|
||||||
|
(erase-buffer)
|
||||||
|
(setq-local org-link-descriptive (not org-link-descriptive))
|
||||||
|
(insert (org-clock-get-clocktable :scope 'agenda :fileskip0 t :stepskip0 t :link t))
|
||||||
|
)
|
||||||
|
(switch-to-buffer "clocktable")
|
||||||
|
)
|
||||||
|
|
||||||
|
(map! :leader
|
||||||
|
:desc "Show clocktable"
|
||||||
|
"o C" #'kb/show-clocktable)
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
* Tramp
|
||||||
|
Set tramp to default to ssh
|
||||||
|
#+begin_src elisp
|
||||||
|
(setq tramp-default-method "ssh")
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
* Misc Key binds
|
||||||
|
** Project management
|
||||||
|
#+begin_src elisp
|
||||||
|
(map! :leader
|
||||||
|
:desc "Project terminal"
|
||||||
|
"p v" #'projectile-run-vterm-other-window)
|
||||||
|
|
||||||
|
(map! :leader "p F" nil)
|
||||||
|
(map! :leader "p g" nil)
|
||||||
|
(map! :leader "p t" nil)
|
||||||
|
(map! :leader "p C" nil)
|
||||||
|
(map! :leader "p c" nil)
|
||||||
|
(map! :leader "p s" nil)
|
||||||
|
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
** Utilities
|
||||||
|
#+begin_src elisp
|
||||||
|
(map! :leader "f c" (lambda () (interactive) (doom-project-browse "~/.config/nix/")))
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
** Code
|
||||||
|
#+begin_src elisp
|
||||||
|
(map! :leader "c X" #'flymake-show-project-diagnostics)
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
* Direnv
|
||||||
|
#+begin_src elisp
|
||||||
|
(direnv-mode)
|
||||||
|
(setq direnv-always-show-summary nil)
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
* Elixir
|
||||||
|
** LSP
|
||||||
|
#+begin_src elisp
|
||||||
|
(with-eval-after-load 'eglot
|
||||||
|
(setf (alist-get 'elixir-mode eglot-server-programs)
|
||||||
|
(if (and (fboundp 'w32-shell-dos-semantics)
|
||||||
|
(w32-shell-dos-semantics))
|
||||||
|
'("language_server.bat")
|
||||||
|
(eglot-alternatives
|
||||||
|
'("language_server.sh" "lexical")))))
|
||||||
|
|
||||||
|
(with-eval-after-load 'eglot
|
||||||
|
(setf (alist-get 'elixir-ts-mode eglot-server-programs)
|
||||||
|
(if (and (fboundp 'w32-shell-dos-semantics)
|
||||||
|
(w32-shell-dos-semantics))
|
||||||
|
'("language_server.bat")
|
||||||
|
(eglot-alternatives
|
||||||
|
'("language_server.sh" "lexical")))))
|
||||||
|
#+end_src
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
* Fix mu4e
|
||||||
|
#+begin_src elisp
|
||||||
|
;;(defalias 'mu4e~compose-remap-faces 'mu4e--compose-remap-faces)
|
||||||
|
;;(defalias 'mu4e~compose-setup-completion 'mu4e--compose-setup-completion)
|
||||||
|
;;(defalias 'mu4e~request-contacts 'mu4e--request-contacts-maybe)
|
||||||
|
;; (mu4e-compat-define-aliases-backwards)
|
||||||
|
;; (mu4e-compat-define-aliases-forwards)
|
||||||
|
#+end_src
|
||||||
196
dotfiles/emacs/el/conduct.el
Normal file
196
dotfiles/emacs/el/conduct.el
Normal file
@@ -0,0 +1,196 @@
|
|||||||
|
;;; el/conduct.el -*- lexical-binding: t; -*-
|
||||||
|
|
||||||
|
|
||||||
|
(require 'shell)
|
||||||
|
(define-derived-mode conduct-mode shell-mode "Conduct"
|
||||||
|
"Conduct process buffer" :interactive nil
|
||||||
|
(read-only-mode)
|
||||||
|
(evil-define-key 'insert conduct-mode-map "q" 'conduct/buffer-kill)
|
||||||
|
(evil-define-key 'normal conduct-mode-map "r" 'conduct/buffer-restart)
|
||||||
|
(evil-define-key 'normal conduct-mode-map "r" 'conduct/buffer-restart)
|
||||||
|
(evil-define-key 'normal conduct-mode-map "q" 'conduct/buffer-kill))
|
||||||
|
|
||||||
|
(provide 'conduct-mode)
|
||||||
|
|
||||||
|
(defun conduct/buffer-restart () (interactive) (conduct/restart-task current-task))
|
||||||
|
(defun conduct/buffer-kill () (interactive) (conduct/kill-task current-task))
|
||||||
|
|
||||||
|
(defun conduct-run ()
|
||||||
|
"Run a task or task group defined in the current project"
|
||||||
|
(interactive)
|
||||||
|
|
||||||
|
(let* (
|
||||||
|
(config-data (conduct/load-config))
|
||||||
|
(tasks (alist-get 'tasks config-data))
|
||||||
|
(groups (alist-get 'groups config-data))
|
||||||
|
(select-tasks (append (mapcar 'conduct/format-task-name tasks) nil))
|
||||||
|
(select-groups (append (mapcar 'conduct/format-group-name groups) nil))
|
||||||
|
(items (seq-remove #'conduct/is-running (append select-tasks select-groups)))
|
||||||
|
(selected-name (conduct/extract-name-from-selection (completing-read "Task: " items)))
|
||||||
|
(task-names (conduct/get-task-name selected-name config-data))
|
||||||
|
(group-names (conduct/get-group-name selected-name config-data))
|
||||||
|
(names (append task-names group-names)))
|
||||||
|
(dolist (name names)
|
||||||
|
(unless (conduct/get-task-buffer (conduct/get-named-task name config-data))
|
||||||
|
(conduct/run-task (conduct/get-named-task name config-data))))))
|
||||||
|
|
||||||
|
(defun conduct-kill ()
|
||||||
|
"Kill a defined project task"
|
||||||
|
(interactive)
|
||||||
|
|
||||||
|
(let* (
|
||||||
|
(config-data (conduct/load-config))
|
||||||
|
(tasks (alist-get 'tasks config-data))
|
||||||
|
(groups (alist-get 'groups config-data))
|
||||||
|
(select-tasks (seq-filter #'conduct/is-running (append (mapcar 'conduct/format-task-name tasks) nil)))
|
||||||
|
(select-groups (append (mapcar 'conduct/format-group-name groups) nil))
|
||||||
|
(items (append select-tasks select-groups))
|
||||||
|
(selected-name (conduct/extract-name-from-selection (completing-read "Task: " items)))
|
||||||
|
(task-names (conduct/get-task-name selected-name config-data))
|
||||||
|
(group-names (conduct/get-group-name selected-name config-data))
|
||||||
|
(names (append task-names group-names)))
|
||||||
|
|
||||||
|
(dolist (name names)
|
||||||
|
(conduct/kill-task (conduct/get-named-task name config-data)))))
|
||||||
|
|
||||||
|
(defun conduct-show ()
|
||||||
|
"Kill a defined project task"
|
||||||
|
(interactive)
|
||||||
|
|
||||||
|
(let* (
|
||||||
|
(config-data (conduct/load-config))
|
||||||
|
(tasks (alist-get 'tasks config-data))
|
||||||
|
(select-tasks (seq-filter #'conduct/is-running (append (mapcar 'conduct/format-task-name tasks) nil)))
|
||||||
|
(selected-name (conduct/extract-name-from-selection (completing-read "Task: " select-tasks))))
|
||||||
|
|
||||||
|
(switch-to-buffer (format "task-%s" selected-name))))
|
||||||
|
|
||||||
|
(defun conduct-restart ()
|
||||||
|
"Kill a defined project task"
|
||||||
|
(interactive)
|
||||||
|
|
||||||
|
(let* (
|
||||||
|
(config-data (conduct/load-config))
|
||||||
|
(tasks (alist-get 'tasks config-data))
|
||||||
|
(select-tasks (seq-filter #'conduct/is-running (append (mapcar 'conduct/format-task-name tasks) nil)))
|
||||||
|
(selected-name (conduct/extract-name-from-selection (completing-read "Task: " select-tasks)))
|
||||||
|
(task (conduct/get-named-task selected-name config-data)))
|
||||||
|
(conduct/restart-task task)))
|
||||||
|
|
||||||
|
(defun conduct/create-task-path (task)
|
||||||
|
"Generate a new path based on the project root and the path for TASK"
|
||||||
|
(concat
|
||||||
|
(file-name-as-directory (project-root (project-current)))
|
||||||
|
(or (alist-get 'path task) ".")))
|
||||||
|
|
||||||
|
|
||||||
|
(defun conduct/load-config ()
|
||||||
|
"Load the conduct.json config file from the current project root"
|
||||||
|
(let* (
|
||||||
|
(config-file (concat
|
||||||
|
(file-name-as-directory (project-root (project-current)))
|
||||||
|
"conduct.json")))
|
||||||
|
(json-read-file config-file)))
|
||||||
|
|
||||||
|
(defun conduct/get-named-task (name data)
|
||||||
|
"Return the task for NAME. NAME is assumed to be a string"
|
||||||
|
(assoc (intern name) (alist-get 'tasks data)))
|
||||||
|
|
||||||
|
(defun conduct/get-task-name (name data)
|
||||||
|
"Returns the name of the task as a single item list. If it exists in DATA"
|
||||||
|
(when-let (name (assoc (intern name) (alist-get 'tasks data)))
|
||||||
|
(list (symbol-name (car name)))))
|
||||||
|
|
||||||
|
|
||||||
|
(defun conduct/get-group-name (name data)
|
||||||
|
"Returns a list of all tasks for the group named NAME in DATA"
|
||||||
|
(append (cdr (assoc (intern name) (alist-get 'groups data))) nil))
|
||||||
|
|
||||||
|
(defun conduct/run-task (task)
|
||||||
|
"Run the given task definition"
|
||||||
|
(let* (
|
||||||
|
(name (concat "task-" (symbol-name (car task))))
|
||||||
|
(buffer (concat "task-" (symbol-name (car task))))
|
||||||
|
(raw-cmd (alist-get 'command (cdr task)))
|
||||||
|
(task-cmd (concat "cd " (conduct/create-task-path (cdr task)) " && " raw-cmd))
|
||||||
|
(command (list "/bin/sh" "-c" task-cmd))
|
||||||
|
(process (make-process :name name :buffer buffer :command command :sentinel 'conduct/task-sentinal)))
|
||||||
|
(with-current-buffer buffer
|
||||||
|
(conduct-mode)
|
||||||
|
(setq-local current-task task)
|
||||||
|
(set-process-query-on-exit-flag process nil)
|
||||||
|
(set-process-filter process 'comint-output-filter)
|
||||||
|
(display-buffer buffer)
|
||||||
|
buffer)))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
(defun conduct/get-task-buffer (task)
|
||||||
|
"Get the buffer related to a TASK defintiion"
|
||||||
|
(get-buffer (concat "task-" (symbol-name (car task)))))
|
||||||
|
|
||||||
|
|
||||||
|
(defun conduct/restart-task (task)
|
||||||
|
"Kill the process and buffer for a TASK"
|
||||||
|
(if-let* ((buffer (conduct/get-task-buffer task))
|
||||||
|
(old-process (get-buffer-process buffer))
|
||||||
|
(raw-cmd (alist-get 'command (cdr task)))
|
||||||
|
(task-cmd (concat "cd " (conduct/create-task-path (cdr task)) " && " raw-cmd))
|
||||||
|
(command (list "/bin/sh" "-c" task-cmd))
|
||||||
|
(name (concat "task-" (symbol-name (car task)))))
|
||||||
|
(with-current-buffer buffer
|
||||||
|
(set-process-sentinel old-process (lambda(_process _event) (set-process-filter (make-process :name name :buffer buffer :command command :sentinel 'conduct/task-sentinal) 'comint-output-filter)))
|
||||||
|
(kill-process old-process))
|
||||||
|
(message "Task buffer not found for %s" (alist-get 'name task))))
|
||||||
|
|
||||||
|
(defun conduct/kill-task (task)
|
||||||
|
"Kill the process and buffer for a TASK"
|
||||||
|
(if-let* ((buffer (conduct/get-task-buffer task))
|
||||||
|
(process (get-buffer-process buffer)))
|
||||||
|
(progn
|
||||||
|
(kill-process (get-buffer-process buffer)))
|
||||||
|
(message "Task buffer not found for %s" (alist-get 'name task))))
|
||||||
|
|
||||||
|
(defun conduct/format-group-name (group)
|
||||||
|
"Format the name for GROUP that can be used in the popup selection"
|
||||||
|
(concat
|
||||||
|
(propertize (symbol-name (car group)) 'face 'outline-1)
|
||||||
|
(propertize "|" 'invisible t)
|
||||||
|
" "
|
||||||
|
(propertize (mapconcat #'identity (cdr group) ", ") 'face 'org-archived)))
|
||||||
|
|
||||||
|
(defun conduct/extract-name-from-selection (selection)
|
||||||
|
(car (split-string selection "|")))
|
||||||
|
|
||||||
|
(defun conduct/is-running (task-name)
|
||||||
|
(let* ((process-name (concat "task-" (conduct/extract-name-from-selection task-name))))
|
||||||
|
(member process-name (mapcar #'process-name (process-list)))))
|
||||||
|
|
||||||
|
(defun conduct/format-task-name (task)
|
||||||
|
"Format the name for TASK to be used in the popup selection"
|
||||||
|
(let* (
|
||||||
|
(task-name (symbol-name (car task))))
|
||||||
|
(concat
|
||||||
|
(propertize task-name 'face 'bold)
|
||||||
|
(propertize "|" 'invisible t)
|
||||||
|
(propertize " ")
|
||||||
|
(propertize (alist-get 'command (cdr task)) 'face 'org-archived))))
|
||||||
|
|
||||||
|
(defun conduct/check-signal (sig s)
|
||||||
|
"Check the process signal against a value"
|
||||||
|
(and (> (length s) (length sig)) (equal sig (substring s 0 (length sig)))))
|
||||||
|
|
||||||
|
(defun conduct/task-sentinal (process event)
|
||||||
|
"Monitor the task process and close the buffer if it ends"
|
||||||
|
(cond
|
||||||
|
((conduct/check-signal "finished" event)
|
||||||
|
(message "Task ended: %s" (buffer-name (process-buffer process)))
|
||||||
|
(kill-buffer (process-buffer process)))
|
||||||
|
((conduct/check-signal "exited" event) (kill-buffer (process-buffer process)))
|
||||||
|
((conduct/check-signal "deleted" event) (kill-buffer (process-buffer process)))
|
||||||
|
((conduct/check-signal "failed" event)
|
||||||
|
(message "Task failed: %s" (buffer-name (process-buffer process)))
|
||||||
|
(kill-buffer (process-buffer process)))
|
||||||
|
((conduct/check-signal "killed" event)
|
||||||
|
(kill-buffer (process-buffer process)))
|
||||||
|
(t (message (format "Process: %s had the event '%s'" process event)))))
|
||||||
193
dotfiles/emacs/init.el
Normal file
193
dotfiles/emacs/init.el
Normal file
@@ -0,0 +1,193 @@
|
|||||||
|
;;; init.el -*- lexical-binding: t; -*- This file controls what Doom modules are enabled and what order they load
|
||||||
|
;; in. Remember to run 'doom sync' after modifying it!
|
||||||
|
|
||||||
|
;; NOTE Press 'SPC h d h' (or 'C-h d h' for non-vim users) to access Doom's
|
||||||
|
;; documentation. There you'll find a link to Doom's Module Index where all
|
||||||
|
;; of our modules are listed, including what flags they support.
|
||||||
|
|
||||||
|
;; NOTE Move your cursor over a module's name (or its flags) and press 'K' (or
|
||||||
|
;; 'C-c c k' for non-vim users) to view its documentation. This works on
|
||||||
|
;; flags as well (those symbols that start with a plus).
|
||||||
|
;;
|
||||||
|
;; Alternatively, press 'gd' (or 'C-c c d') on a module to browse its
|
||||||
|
;; directory (for easy access to its source code).
|
||||||
|
|
||||||
|
(doom! :input
|
||||||
|
;;bidi ; (tfel ot) thgir etirw uoy gnipleh
|
||||||
|
;;chinese
|
||||||
|
;;japanese
|
||||||
|
;;layout ; auie,ctsrnm is the superior home row
|
||||||
|
|
||||||
|
:completion
|
||||||
|
(company +childframe) ; the ultimate code completion backend
|
||||||
|
;;helm ; the *other* search engine for love and life
|
||||||
|
;;ido ; the other *other* search engine...
|
||||||
|
;;ivy ; a search engine for love and life
|
||||||
|
vertico ; the search engine of the future
|
||||||
|
|
||||||
|
:ui
|
||||||
|
;;deft ; notational velocity for Emacs
|
||||||
|
doom ; what makes DOOM look the way it does
|
||||||
|
doom-dashboard ; a nifty splash screen for Emacs
|
||||||
|
;;doom-quit ; DOOM quit-message prompts when you quit Emacs
|
||||||
|
;;(emoji +unicode) ; 🙂
|
||||||
|
hl-todo ; highlight TODO/FIXME/NOTE/DEPRECATED/HACK/REVIEW
|
||||||
|
;;hydra
|
||||||
|
;;indent-guides ; highlighted indent columns
|
||||||
|
ligatures ; ligatures and symbols to make your code pretty again
|
||||||
|
;;minimap ; show a map of the code on the side
|
||||||
|
(modeline) ; snazzy, Atom-inspired modeline, plus API
|
||||||
|
;;nav-flash ; blink cursor line after big motions
|
||||||
|
;;neotree ; a project drawer, like NERDTree for vim
|
||||||
|
ophints ; highlight the region an operation acts on
|
||||||
|
(popup +defaults) ; tame sudden yet inevitable temporary windows
|
||||||
|
;;tabs ; a tab bar for Emacs
|
||||||
|
;;treemacs ; a project drawer, like neotree but cooler
|
||||||
|
;;unicode ; extended unicode support for various languages
|
||||||
|
(vc-gutter +pretty) ; vcs diff in the fringe
|
||||||
|
;;vi-tilde-fringe ; fringe tildes to mark beyond EOB
|
||||||
|
;;window-select ; visually switch windows
|
||||||
|
workspaces ; tab emulation, persistence & separate workspaces
|
||||||
|
;;zen ; distraction-free coding or writing
|
||||||
|
|
||||||
|
:editor
|
||||||
|
(evil +everywhere); come to the dark side, we have cookies
|
||||||
|
file-templates ; auto-snippets for empty files
|
||||||
|
fold ; (nigh) universal code folding
|
||||||
|
(format +onsave) ; automated prettiness
|
||||||
|
;;god ; run Emacs commands without modifier keys
|
||||||
|
;;lispy ; vim for lisp, for people who don't like vim
|
||||||
|
;;multiple-cursors ; editing in many places at once
|
||||||
|
;;objed ; text object editing for the innocent
|
||||||
|
parinfer ; turn lisp into python, sort of
|
||||||
|
;;rotate-text ; cycle region at point between text candidates
|
||||||
|
snippets ; my elves. They type so I don't have to
|
||||||
|
;;word-wrap ; soft wrapping with language-aware indent
|
||||||
|
|
||||||
|
:emacs
|
||||||
|
(dired +icons) ; making dired pretty [functional]
|
||||||
|
electric ; smarter, keyword-based electric-indent
|
||||||
|
;;ibuffer ; interactive buffer management
|
||||||
|
undo ; persistent, smarter undo for your inevitable mistakes
|
||||||
|
vc ; version-control and Emacs, sitting in a tree
|
||||||
|
|
||||||
|
:term
|
||||||
|
;;eshell ; the elisp shell that works everywhere
|
||||||
|
;;shell ; simple shell REPL for Emacs
|
||||||
|
;;term ; basic terminal emulator for Emacs
|
||||||
|
vterm ; the best terminal emulation in Emacs
|
||||||
|
|
||||||
|
:checkers
|
||||||
|
syntax ; tasing you for every semicolon you forget
|
||||||
|
(spell +flyspell) ; tasing you for misspelling mispelling
|
||||||
|
grammar ; tasing grammar mistake every you make
|
||||||
|
|
||||||
|
:tools
|
||||||
|
;;ansible
|
||||||
|
;;biblio ; Writes a PhD for you (citation needed)
|
||||||
|
;;collab ; buffers with friends
|
||||||
|
;;debugger ; FIXME stepping through code, to help you add bugs
|
||||||
|
;;direnv
|
||||||
|
docker
|
||||||
|
;;editorconfig ; let someone else argue about tabs vs spaces
|
||||||
|
;;ein ; tame Jupyter notebooks with emacs
|
||||||
|
(eval +overlay) ; run code, run (also, repls)
|
||||||
|
;;gist ; interacting with github gists
|
||||||
|
lookup ; navigate your code and its documentation
|
||||||
|
(lsp +eglot) ; M-x vscode
|
||||||
|
(magit +forge) ; a git porcelain for Emacs
|
||||||
|
;;make ; run make tasks from Emacs
|
||||||
|
;;pass ; password manager for nerds
|
||||||
|
pdf ; pdf enhancements
|
||||||
|
;;prodigy ; FIXME managing external services & code builders
|
||||||
|
;; rgb ; creating color strings
|
||||||
|
;;taskrunner ; taskrunner for all your projects
|
||||||
|
;;terraform ; infrastructure as code
|
||||||
|
;;tmux ; an API for interacting with tmux
|
||||||
|
tree-sitter ; syntax and parsing, sitting in a tree...
|
||||||
|
;;upload ; map local to remote projects via ssh/ftp
|
||||||
|
|
||||||
|
:os
|
||||||
|
(:if IS-MAC macos) ; improve compatibility with macOS
|
||||||
|
;;tty ; improve the terminal Emacs experience
|
||||||
|
|
||||||
|
:lang
|
||||||
|
;;agda ; types of types of types of types...
|
||||||
|
;;beancount ; mind the GAAP
|
||||||
|
(cc +lsp) ; C > C++ == 1
|
||||||
|
;;clojure ; java with a lisp
|
||||||
|
;;common-lisp ; if you've seen one lisp, you've seen them all
|
||||||
|
;;coq ; proofs-as-programs
|
||||||
|
;;crystal ; ruby at the speed of c
|
||||||
|
;;csharp ; unity, .NET, and mono shenanigans
|
||||||
|
;;data ; config/data formats
|
||||||
|
;;(dart +flutter) ; paint ui and not much else
|
||||||
|
;;dhall
|
||||||
|
(elixir +lsp +tree-sitter) ; erlang done right
|
||||||
|
;;elm ; care for a cup of TEA?
|
||||||
|
emacs-lisp ; drown in parentheses
|
||||||
|
;;erlang ; an elegant language for a more civilized age
|
||||||
|
;;ess ; emacs speaks statistics
|
||||||
|
;;factor
|
||||||
|
;;faust ; dsp, but you get to keep your soul
|
||||||
|
;;fortran ; in FORTRAN, GOD is REAL (unless declared INTEGER)
|
||||||
|
;;fsharp ; ML stands for Microsoft's Language
|
||||||
|
;;fstar ; (dependent) types and (monadic) effects and Z3
|
||||||
|
;;gdscript ; the language you waited for
|
||||||
|
;;(go +lsp) ; the hipster dialect
|
||||||
|
;;(graphql +lsp) ; Give queries a REST
|
||||||
|
;;(haskell +lsp) ; a language that's lazier than I am
|
||||||
|
;;hy ; readability of scheme w/ speed of python
|
||||||
|
;;idris ; a language you can depend on
|
||||||
|
(json +lsp +tree-sitter) ; At least it ain't XML
|
||||||
|
;;(java +lsp) ; the poster child for carpal tunnel syndrome
|
||||||
|
javascript ; all(hope(abandon(ye(who(enter(here))))))
|
||||||
|
;;julia ; a better, faster MATLAB
|
||||||
|
;;kotlin ; a better, slicker Java(Script)
|
||||||
|
latex ; writing papers in Emacs has never been so fun
|
||||||
|
;;lean ; for folks with too much to prove
|
||||||
|
ledger ; be audit you can be
|
||||||
|
lua ; one-based indices? one-based indices
|
||||||
|
markdown ; writing docs for people to ignore
|
||||||
|
;;nim ; python + lisp at the speed of c
|
||||||
|
(nix +lsp) ; I hereby declare "nix geht mehr!"
|
||||||
|
;;ocaml ; an objective camel
|
||||||
|
(org +present +pandoc +roam2) ; organize your plain life in plain text
|
||||||
|
;;php ; perl's insecure younger brother
|
||||||
|
;;plantuml ; diagrams for confusing people more
|
||||||
|
;;purescript ; javascript, but functional
|
||||||
|
(python +lsp) ; beautiful is better than ugly
|
||||||
|
;;qt ; the 'cutest' gui framework ever
|
||||||
|
;;racket ; a DSL for DSLs
|
||||||
|
;;raku ; the artist formerly known as perl6
|
||||||
|
rest ; Emacs as a REST client
|
||||||
|
;;rst ; ReST in peace
|
||||||
|
;;(ruby +rails) ; 1.step {|i| p "Ruby is #{i.even? ? 'love' : 'life'}"}
|
||||||
|
(rust +lsp +tree-sitter) ; Fe2O3.unwrap().unwrap().unwrap().unwrap()
|
||||||
|
;;scala ; java, but good
|
||||||
|
;;(scheme +guile) ; a fully conniving family of lisps
|
||||||
|
sh ; she sells {ba,z,fi}sh shells on the C xor
|
||||||
|
;;sml
|
||||||
|
;;solidity ; do you need a blockchain? No.
|
||||||
|
;;swift ; who asked for emoji variables?
|
||||||
|
;;terra ; Earth and Moon in alignment for performance.
|
||||||
|
(web +lsp +tree-sitter) ; the tubes
|
||||||
|
yaml ; JSON, but readable
|
||||||
|
;;zig ; C, but simpler
|
||||||
|
|
||||||
|
:email
|
||||||
|
(mu4e +org)
|
||||||
|
;;notmuch
|
||||||
|
;;(wanderlust +gmail)
|
||||||
|
|
||||||
|
:app
|
||||||
|
;;calendar
|
||||||
|
;;emms
|
||||||
|
;;everywhere ; *leave* Emacs!? You must be joking
|
||||||
|
;;irc ; how neckbeards socialize
|
||||||
|
;;(rss +org) ; emacs as an RSS reader
|
||||||
|
;;twitter ; twitter client https://twitter.com/vnought
|
||||||
|
|
||||||
|
:config
|
||||||
|
literate
|
||||||
|
(default +bindings +smartparens))
|
||||||
68
dotfiles/emacs/packages.el
Normal file
68
dotfiles/emacs/packages.el
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
;; -*- no-byte-compile: t; -*-
|
||||||
|
;;; $DOOMDIR/packages.el
|
||||||
|
|
||||||
|
;; To install a package with Doom you must declare them here and run 'doom sync'
|
||||||
|
;; on the command line, then restart Emacs for the changes to take effect -- or
|
||||||
|
;; use 'M-x doom/reload'.
|
||||||
|
|
||||||
|
|
||||||
|
(package! org-ql)
|
||||||
|
(package! org-bullets)
|
||||||
|
(package! org-present)
|
||||||
|
(package! visual-fill-column)
|
||||||
|
(package! direnv)
|
||||||
|
;(package! doom-nano-modeline
|
||||||
|
; :recipe (:repo "ronisbr/doom-nano-modeline" :host github))
|
||||||
|
(package! yuck-mode)
|
||||||
|
(package! org-ql)
|
||||||
|
|
||||||
|
(package! verb)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;; To install SOME-PACKAGE from MELPA, ELPA or emacsmirror:
|
||||||
|
;; (package! some-package)
|
||||||
|
|
||||||
|
;; To install a package directly from a remote git repo, you must specify a
|
||||||
|
;; `:recipe'. You'll find documentation on what `:recipe' accepts here:
|
||||||
|
;; https://github.com/radian-software/straight.el#the-recipe-format
|
||||||
|
;; (package! another-package
|
||||||
|
;; :recipe (:host github :repo "username/repo"))
|
||||||
|
|
||||||
|
;; If the package you are trying to install does not contain a PACKAGENAME.el
|
||||||
|
;; file, or is located in a subdirectory of the repo, you'll need to s)kpecify
|
||||||
|
;; `:files' in the `:recipe':
|
||||||
|
;; (package! this-package
|
||||||
|
;; :recipe (:host github :repo "username/repo"
|
||||||
|
;; :files ("some-file.el" "src/lisp/*.el")))
|
||||||
|
|
||||||
|
;; If you'd like to disable a package included with Doom, you can do so here
|
||||||
|
;; with the `:disable' property:
|
||||||
|
;; (package! builtin-package :disable t)
|
||||||
|
|
||||||
|
;; You can override the recipe of a built in package without having to specify
|
||||||
|
;; all the properties for `:recipe'. These will inherit the rest of its recipe
|
||||||
|
;; from Doom or MELPA/ELPA/Emacsmirror:
|
||||||
|
;; (package! builtin-package :recipe (:nonrecursive t))
|
||||||
|
;; (package! builtin-package-2 :recipe (:repo "myfork/package"))
|
||||||
|
|
||||||
|
;; Specify a `:branch' to install a package from a particular branch or tag.
|
||||||
|
;; This is required for some packages whose default branch isn't 'master' (which
|
||||||
|
;; our package manager can't deal with; see radian-software/straight.el#279)
|
||||||
|
;; (package! builtin-package :recipe (:branch "develop"))
|
||||||
|
|
||||||
|
;; Use `:pin' to specify a particular commit to install.
|
||||||
|
;; (package! builtin-package :pin "1a2b3c4d5e")
|
||||||
|
|
||||||
|
|
||||||
|
;; Doom's packages are pinned to a specific commit and updated from release to
|
||||||
|
;; release. The `unpin!' macro allows you to unpin single packages...
|
||||||
|
;; (unpin! pinned-package)
|
||||||
|
;; ...or multiple packages
|
||||||
|
;; (unpin! pinned-package another-pinned-package)
|
||||||
|
;; ...Or *all* packages (NOT RECOMMENDED; will likely break things)
|
||||||
|
;; (unpin! t)
|
||||||
4
dotfiles/ghostty.conf
Normal file
4
dotfiles/ghostty.conf
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
theme = dankcolors
|
||||||
|
app-notifications = no-clipboard-copy,no-config-reload
|
||||||
|
font-family = "JetBrainsMono NF Regular"
|
||||||
|
|
||||||
34
dotfiles/hypridle.conf
Normal file
34
dotfiles/hypridle.conf
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
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.
|
||||||
|
}
|
||||||
|
|
||||||
|
# turn off keyboard backlight, comment out this section if you dont have a keyboard backlight.
|
||||||
|
listener {
|
||||||
|
timeout = 150 # 2.5min.
|
||||||
|
# on-timeout = brightnessctl -sd rgb:kbd_backlight set 0 # turn off keyboard backlight.
|
||||||
|
# on-resume = brightnessctl -rd rgb:kbd_backlight # turn on keyboard backlight.
|
||||||
|
}
|
||||||
|
|
||||||
|
listener {
|
||||||
|
timeout = 1800 # 5min
|
||||||
|
on-timeout = loginctl lock-session # lock screen when timeout has passed
|
||||||
|
}
|
||||||
|
|
||||||
|
listener {
|
||||||
|
timeout = 2000 # 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.
|
||||||
|
}
|
||||||
|
|
||||||
|
listener {
|
||||||
|
timeout = 1800 # 30min
|
||||||
|
on-timeout = systemctl suspend # suspend pc
|
||||||
|
}
|
||||||
170
dotfiles/hyprland.base.conf
Normal file
170
dotfiles/hyprland.base.conf
Normal file
@@ -0,0 +1,170 @@
|
|||||||
|
exec-once = dms run
|
||||||
|
exec-once = systemctl --user start kanshi
|
||||||
|
exec-once = systemctl --user start hypridle
|
||||||
|
exec-once = systemctl --user start hyprpolkitagent
|
||||||
|
|
||||||
|
input {
|
||||||
|
kb_layout = us
|
||||||
|
follow_mouse = 1
|
||||||
|
sensitivity = 0.5
|
||||||
|
touchpad {
|
||||||
|
natural_scroll = no
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
general {
|
||||||
|
gaps_in = 30
|
||||||
|
gaps_out = 5, 20, 20, 20
|
||||||
|
border_size = 0
|
||||||
|
col.active_border = rgba(ffffff88)
|
||||||
|
col.inactive_border = rgba(ffffff22)
|
||||||
|
layout = master
|
||||||
|
# layout = master
|
||||||
|
}
|
||||||
|
|
||||||
|
master {
|
||||||
|
orientation = center
|
||||||
|
}
|
||||||
|
|
||||||
|
decoration {
|
||||||
|
active_opacity = 1
|
||||||
|
inactive_opacity = 1
|
||||||
|
dim_inactive = true
|
||||||
|
dim_strength = 0.2
|
||||||
|
dim_special = 0
|
||||||
|
rounding = 5
|
||||||
|
border_part_of_window = false
|
||||||
|
blur {
|
||||||
|
enabled = true
|
||||||
|
size = 5
|
||||||
|
passes = 2
|
||||||
|
brightness = 0.8
|
||||||
|
}
|
||||||
|
shadow {
|
||||||
|
enabled = true
|
||||||
|
range = 30
|
||||||
|
render_power = 4
|
||||||
|
color = rgba(00000099)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Ultraide gaps
|
||||||
|
# workspace = w[t1] m[DP-4] s[false], gapsout:10 1500
|
||||||
|
# workspace = w[t1] m[DP-4] s[true], gapsout:10 1800
|
||||||
|
# workspace = w[t2] m[DP-4] s[true], gapsout:10 1000
|
||||||
|
|
||||||
|
gesture = 4, horizontal, workspace
|
||||||
|
gesture = 4, down, mod: ALT, close
|
||||||
|
gesture = 4, up, mod: SUPER, fullscreen
|
||||||
|
|
||||||
|
group {
|
||||||
|
col.border_active = rgba(7d32a899) rgba(da16f099) 45deg
|
||||||
|
col.border_inactive = rgba(cccccc88)
|
||||||
|
groupbar {
|
||||||
|
font_family = "Iosevka Bold"
|
||||||
|
font_size = 10
|
||||||
|
height = 22
|
||||||
|
text_color = 0xccccccff
|
||||||
|
col.active = rgba(7d32a899)
|
||||||
|
col.inactive = rgba(00000088)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
animations {
|
||||||
|
enabled = yes
|
||||||
|
}
|
||||||
|
|
||||||
|
animation = specialWorkspace, 1, 10, default, fade
|
||||||
|
|
||||||
|
misc {
|
||||||
|
disable_hyprland_logo=true
|
||||||
|
}
|
||||||
|
|
||||||
|
windowrule=float on,pin on,opaque on,no_dim on,no_shadow on, no_blur on, border_size 0, match:title Picture-in-Picture
|
||||||
|
# windowrule = opacity 0.5, class:kitty
|
||||||
|
|
||||||
|
$mainMod = SUPER
|
||||||
|
|
||||||
|
bindle = ,XF86MonBrightnessUp, exec, brightnessctl set +10%
|
||||||
|
bindle = ,XF86MonBrightnessDown, exec, brightnessctl set 10%-
|
||||||
|
bindle=, XF86AudioRaiseVolume, exec, amixer sset Master 5%+
|
||||||
|
bindle=, XF86AudioRaiseVolume, exec, eww update volume=$(amixer sget Master | awk -F"[][]" '/Left:/ { print $2 }' | tr -d '%')
|
||||||
|
bindle=, XF86AudioLowerVolume, exec, amixer sset Master 5%-
|
||||||
|
bindle=, XF86AudioLowerVolume, exec, eww update volume=$(amixer sget Master | awk -F"[][]" '/Left:/ { print $2 }' | tr -d '%')
|
||||||
|
bindle=, XF86AudioMute, exec, amixer sset Master 1+ toggle
|
||||||
|
bindle=, XF86AudioMute, exec, eww update volume=$(amixer sget Master | awk -F"[][]" '/Left:/ { print $2 }' | tr -d '%')
|
||||||
|
bindle=, XF86Calculator, exec, kitty -e octave
|
||||||
|
|
||||||
|
bindle=, XF86AudioPlay, exec, playerctl play-pause
|
||||||
|
bindle=, XF86AudioNext, exec, playerctl next
|
||||||
|
bindle=, XF86AudioPrev, exec, playerctl previous
|
||||||
|
|
||||||
|
bind = $mainMod, F9, exec, hyprctl keyword monitor "DP-4, 2560x1440@60, 0x0, 1"
|
||||||
|
bind = $mainMod, F10, exec, hyprctl keyword monitor "DP-4, 5120x1440@60, 0x0, 1"
|
||||||
|
bind = $mainMod, RETURN, exec, kitty
|
||||||
|
bind = $mainMod, W, killactive,
|
||||||
|
bind = $mainMod SHIFT, F, togglefloating,
|
||||||
|
bind = $mainMod, SPACE, exec, dms ipc call spotlight toggle
|
||||||
|
bind = $mainMod, P, pseudo, # dwindle
|
||||||
|
bind = $mainMod, V, togglesplit, # dwindle
|
||||||
|
bind = $mainMod, G, togglegroup,
|
||||||
|
bind = $mainMod SHIFT, G, moveoutofgroup,
|
||||||
|
bind = $mainMod, TAB, changegroupactive,
|
||||||
|
bind = $mainMod, F, fullscreen
|
||||||
|
bind = $mainMod, b, exec, eww open --toggle side-panel
|
||||||
|
bind = $mainMod, Print, exec, grim -g "$(slurp -d)" - | wl-copy
|
||||||
|
bind = $mainMod SHIFT, S, exec, grim -g "$(slurp -d)" - | wl-copy
|
||||||
|
|
||||||
|
bind = $mainMod, h, movefocus, l
|
||||||
|
bind = $mainMod, l, movefocus, r
|
||||||
|
bind = $mainMod, k, movefocus, u
|
||||||
|
bind = $mainMod, j, movefocus, d
|
||||||
|
|
||||||
|
bind = $mainMod SHIFT, h, movewindow, l
|
||||||
|
bind = $mainMod SHIFT, l, movewindow, r
|
||||||
|
bind = $mainMod SHIFT, k, movewindow, u
|
||||||
|
bind = $mainMod SHIFT, j, movewindow, d
|
||||||
|
|
||||||
|
# Switch workspaces with mainMod + [0-9]
|
||||||
|
bind=SUPER,1,moveworkspacetomonitor,1 current
|
||||||
|
bind=SUPER,1,workspace,1
|
||||||
|
bind=SUPER,2,moveworkspacetomonitor,2 current
|
||||||
|
bind=SUPER,2,workspace,2
|
||||||
|
bind=SUPER,3,moveworkspacetomonitor,3 current
|
||||||
|
bind=SUPER,3,workspace,3
|
||||||
|
bind=SUPER,4,moveworkspacetomonitor,4 current
|
||||||
|
bind=SUPER,4,workspace,4
|
||||||
|
bind=SUPER,5,moveworkspacetomonitor,5 current
|
||||||
|
bind=SUPER,5,workspace,5
|
||||||
|
bind=SUPER,6,moveworkspacetomonitor,6 current
|
||||||
|
bind=SUPER,6,workspace,6
|
||||||
|
bind=SUPER,7,moveworkspacetomonitor,7 current
|
||||||
|
bind=SUPER,7,workspace,7
|
||||||
|
bind=SUPER,8,moveworkspacetomonitor,8 current
|
||||||
|
bind=SUPER,8,workspace,8
|
||||||
|
bind=SUPER,9,moveworkspacetomonitor,9 current
|
||||||
|
bind=SUPER,9,workspace,9
|
||||||
|
|
||||||
|
# Move active window to a workspace with mainMod + SHIFT + [0-9]
|
||||||
|
bind = $mainMod SHIFT, 1, movetoworkspace, 1
|
||||||
|
bind = $mainMod SHIFT, 2, movetoworkspace, 2
|
||||||
|
bind = $mainMod SHIFT, 3, movetoworkspace, 3
|
||||||
|
bind = $mainMod SHIFT, 4, movetoworkspace, 4
|
||||||
|
bind = $mainMod SHIFT, 5, movetoworkspace, 5
|
||||||
|
bind = $mainMod SHIFT, 6, movetoworkspace, 6
|
||||||
|
bind = $mainMod SHIFT, 7, movetoworkspace, 7
|
||||||
|
bind = $mainMod SHIFT, 8, movetoworkspace, 8
|
||||||
|
bind = $mainMod SHIFT, 9, movetoworkspace, 9
|
||||||
|
bind = $mainMod SHIFT, 0, movetoworkspace, 10
|
||||||
|
|
||||||
|
# Example special workspace (scratchpad)
|
||||||
|
bind = $mainMod, grave, togglespecialworkspace, magic
|
||||||
|
bind = $mainMod SHIFT, grave, movetoworkspace, special:magic
|
||||||
|
|
||||||
|
# Scroll through existing workspaces with mainMod + scroll
|
||||||
|
bind = $mainMod, mouse_down, workspace, e+1
|
||||||
|
bind = $mainMod, mouse_up, workspace, e-1
|
||||||
|
|
||||||
|
# Move/resize windows with mainMod + LMB/RMB and dragging
|
||||||
|
bindm = $mainMod, mouse:272, movewindow
|
||||||
|
bindm = $mainMod, mouse:273, resizewindow
|
||||||
5
dotfiles/hyprland.specter.conf
Normal file
5
dotfiles/hyprland.specter.conf
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
source = ./base.conf
|
||||||
|
# monitor = eDP-2, 2560x1600@165, 0x0, 1
|
||||||
|
# monitor = DP-4, 2560x1440@120, 0x0, 1
|
||||||
|
# monitor = DP-3, 1280x800, 2560x1440, 1
|
||||||
|
monitor = , preferred, auto, 1
|
||||||
78
dotfiles/hyprlock.conf
Normal file
78
dotfiles/hyprlock.conf
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
$font = Monospace
|
||||||
|
|
||||||
|
general {
|
||||||
|
hide_cursor = false
|
||||||
|
}
|
||||||
|
|
||||||
|
auth {
|
||||||
|
fingerprint {
|
||||||
|
enabled = true
|
||||||
|
ready_message = Scan fingerprint to unlock
|
||||||
|
present_message = Scanning...
|
||||||
|
retry_delay = 250
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
animations {
|
||||||
|
enabled = true
|
||||||
|
bezier = linear, 1, 1, 0, 0
|
||||||
|
animation = fadeIn, 1, 5, linear
|
||||||
|
animation = fadeOut, 1, 5, linear
|
||||||
|
animation = inputFieldDots, 1, 2, linear
|
||||||
|
}
|
||||||
|
|
||||||
|
background {
|
||||||
|
monitor =
|
||||||
|
path = screenshot
|
||||||
|
blur_passes = 3
|
||||||
|
}
|
||||||
|
|
||||||
|
input-field {
|
||||||
|
monitor =
|
||||||
|
size = 20%, 5%
|
||||||
|
outline_thickness = 3
|
||||||
|
inner_color = rgba(0, 0, 0, 0.0) # no fill
|
||||||
|
|
||||||
|
outer_color = rgba(e208ffee) rgba(9008ffee) 45deg
|
||||||
|
check_color = rgba(00ff99ee) rgba(ff6633ee) 120deg
|
||||||
|
fail_color = rgba(ff6633ee) rgba(ff0066ee) 40deg
|
||||||
|
|
||||||
|
font_color = rgb(143, 143, 143)
|
||||||
|
fade_on_empty = false
|
||||||
|
rounding = 15
|
||||||
|
|
||||||
|
font_family = $font
|
||||||
|
placeholder_text = Input password...
|
||||||
|
fail_text = $PAMFAIL
|
||||||
|
|
||||||
|
dots_spacing = 0.3
|
||||||
|
|
||||||
|
# hide_input = true
|
||||||
|
|
||||||
|
position = 0, -20
|
||||||
|
halign = center
|
||||||
|
valign = center
|
||||||
|
}
|
||||||
|
|
||||||
|
label {
|
||||||
|
monitor =
|
||||||
|
text = $TIME
|
||||||
|
font_size = 90
|
||||||
|
font_family = $font
|
||||||
|
|
||||||
|
position = -30, 0
|
||||||
|
halign = right
|
||||||
|
valign = top
|
||||||
|
}
|
||||||
|
|
||||||
|
# DATE
|
||||||
|
label {
|
||||||
|
monitor =
|
||||||
|
text = cmd[update:60000] date +"%A, %d %B %Y"
|
||||||
|
font_size = 25
|
||||||
|
font_family = $font
|
||||||
|
|
||||||
|
position = -30, -150
|
||||||
|
halign = right
|
||||||
|
valign = top
|
||||||
|
}
|
||||||
13
dotfiles/hyprpaper.specter.conf
Normal file
13
dotfiles/hyprpaper.specter.conf
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
wallpaper {
|
||||||
|
monitor = eDP-2
|
||||||
|
path = ~/Pictures/aishot-1745.jpg
|
||||||
|
fit_mode = cover
|
||||||
|
}
|
||||||
|
|
||||||
|
wallpaper {
|
||||||
|
monitor = DP-4
|
||||||
|
path = ~/Pictures/creature.jpg
|
||||||
|
fit_mode = cover
|
||||||
|
}
|
||||||
|
|
||||||
|
splash = false
|
||||||
78
dotfiles/kitty/kitty.conf
Normal file
78
dotfiles/kitty/kitty.conf
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
font_size 12.0
|
||||||
|
# font_family PragmataPro Mono Liga
|
||||||
|
font_family JetBrainsMono Nerd Font
|
||||||
|
# bold_font Iosevka
|
||||||
|
# italic_font Iosevka
|
||||||
|
# bold_italic_font Iosevka
|
||||||
|
|
||||||
|
|
||||||
|
hide_window_decorations yes
|
||||||
|
|
||||||
|
tab_bar_style powerline
|
||||||
|
enable_audio_bell no
|
||||||
|
cursor_shape beam
|
||||||
|
confirm_os_window_close 0
|
||||||
|
update_check_interval 0
|
||||||
|
window_padding_width 5
|
||||||
|
|
||||||
|
# background #292D3E
|
||||||
|
# background_opacity 0.6
|
||||||
|
|
||||||
|
# vim:ft=kitty
|
||||||
|
|
||||||
|
background #1a1b26
|
||||||
|
foreground #c0caf5
|
||||||
|
selection_background #283457
|
||||||
|
selection_foreground #c0caf5
|
||||||
|
url_color #73daca
|
||||||
|
cursor #c0caf5
|
||||||
|
cursor_text_color #1a1b26
|
||||||
|
|
||||||
|
|
||||||
|
# Tabs
|
||||||
|
active_tab_background #7aa2f7
|
||||||
|
active_tab_foreground #16161e
|
||||||
|
inactive_tab_background #292e42
|
||||||
|
inactive_tab_foreground #545c7e
|
||||||
|
#tab_bar_background #15161e
|
||||||
|
|
||||||
|
# Windows
|
||||||
|
active_border_color #7aa2f7
|
||||||
|
inactive_border_color #292e42
|
||||||
|
|
||||||
|
# normal
|
||||||
|
color0 #15161e
|
||||||
|
color1 #f7768e
|
||||||
|
color2 #9ece6a
|
||||||
|
color3 #e0af68
|
||||||
|
color4 #7aa2f7
|
||||||
|
color5 #bb9af7
|
||||||
|
color6 #7dcfff
|
||||||
|
color7 #a9b1d6
|
||||||
|
|
||||||
|
# bright
|
||||||
|
color8 #414868
|
||||||
|
color9 #ff899d
|
||||||
|
color10 #9fe044
|
||||||
|
color11 #faba4a
|
||||||
|
color12 #8db0ff
|
||||||
|
color13 #c7a9ff
|
||||||
|
color14 #a4daff
|
||||||
|
color15 #c0caf5
|
||||||
|
|
||||||
|
# extended colors
|
||||||
|
color16 #ff9e64
|
||||||
|
color17 #db4b4b
|
||||||
|
|
||||||
|
|
||||||
|
# map ctrl+j kitten pass_keys.py neighboring_window bottom ctrl+j
|
||||||
|
# map ctrl+k kitten pass_keys.py neighboring_window top ctrl+k
|
||||||
|
# map ctrl+h kitten pass_keys.py neighboring_window left ctrl+h
|
||||||
|
# map ctrl+l kitten pass_keys.py neighboring_window right ctrl+l
|
||||||
|
allow_remote_control yes
|
||||||
|
listen_on unix:@mykitty
|
||||||
|
enabled_layouts tall:bias=50;full_size=1;mirrored=false
|
||||||
|
remember_window_size no
|
||||||
|
|
||||||
|
include dank-tabs.conf
|
||||||
|
include dank-theme.conf
|
||||||
0
dotfiles/kitty/quick-access-terminal.conf
Normal file
0
dotfiles/kitty/quick-access-terminal.conf
Normal file
27
dotfiles/lazygit.yml
Normal file
27
dotfiles/lazygit.yml
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
services:
|
||||||
|
'git.5sigma.io': 'gitea:git.5sigma.io'
|
||||||
|
|
||||||
|
gui:
|
||||||
|
theme:
|
||||||
|
activeBorderColor:
|
||||||
|
- '#b4befe'
|
||||||
|
- bold
|
||||||
|
inactiveBorderColor:
|
||||||
|
- '#a6adc8'
|
||||||
|
optionsTextColor:
|
||||||
|
- '#89b4fa'
|
||||||
|
selectedLineBgColor:
|
||||||
|
- '#313244'
|
||||||
|
cherryPickedCommitBgColor:
|
||||||
|
- '#45475a'
|
||||||
|
cherryPickedCommitFgColor:
|
||||||
|
- '#b4befe'
|
||||||
|
unstagedChangesColor:
|
||||||
|
- '#f38ba8'
|
||||||
|
defaultFgColor:
|
||||||
|
- '#cdd6f4'
|
||||||
|
searchingActiveBorderColor:
|
||||||
|
- '#f9e2af'
|
||||||
|
|
||||||
|
authorColors:
|
||||||
|
'*': '#b4befe'
|
||||||
7
dotfiles/mako.conf
Normal file
7
dotfiles/mako.conf
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
border-radius=5
|
||||||
|
border-size=0
|
||||||
|
default-timeout=60000
|
||||||
|
background-color=#000000cc
|
||||||
|
height=200
|
||||||
|
width=500
|
||||||
|
padding=25
|
||||||
652
dotfiles/niri.kdl
Normal file
652
dotfiles/niri.kdl
Normal file
@@ -0,0 +1,652 @@
|
|||||||
|
// This config is in the KDL format: https://kdl.dev
|
||||||
|
// "/-" comments out the following node.
|
||||||
|
// Check the wiki for a full description of the configuration:
|
||||||
|
// https://yalter.github.io/niri/Configuration:-Introduction
|
||||||
|
|
||||||
|
// Input device configuration.
|
||||||
|
// Find the full list of options on the wiki:
|
||||||
|
// https://yalter.github.io/niri/Configuration:-Input
|
||||||
|
input {
|
||||||
|
keyboard {
|
||||||
|
xkb {
|
||||||
|
// You can set rules, model, layout, variant and options.
|
||||||
|
// For more information, see xkeyboard-config(7).
|
||||||
|
|
||||||
|
// For example:
|
||||||
|
// layout "us,ru"
|
||||||
|
// options "grp:win_space_toggle,compose:ralt,ctrl:nocaps"
|
||||||
|
|
||||||
|
// If this section is empty, niri will fetch xkb settings
|
||||||
|
// from org.freedesktop.locale1. You can control these using
|
||||||
|
// localectl set-x11-keymap.
|
||||||
|
}
|
||||||
|
|
||||||
|
// Enable numlock on startup, omitting this setting disables it.
|
||||||
|
numlock
|
||||||
|
}
|
||||||
|
|
||||||
|
// Next sections include libinput settings.
|
||||||
|
// Omitting settings disables them, or leaves them at their default values.
|
||||||
|
// All commented-out settings here are examples, not defaults.
|
||||||
|
touchpad {
|
||||||
|
// off
|
||||||
|
// tap
|
||||||
|
dwt
|
||||||
|
dwtp
|
||||||
|
// drag false
|
||||||
|
// drag-lock
|
||||||
|
natural-scroll
|
||||||
|
// accel-speed 0.2
|
||||||
|
// accel-profile "flat"
|
||||||
|
// scroll-method "two-finger"
|
||||||
|
disabled-on-external-mouse
|
||||||
|
}
|
||||||
|
|
||||||
|
mouse {
|
||||||
|
// off
|
||||||
|
// natural-scroll
|
||||||
|
// accel-speed 0.2
|
||||||
|
// accel-profile "flat"
|
||||||
|
// scroll-method "no-scroll"
|
||||||
|
}
|
||||||
|
|
||||||
|
trackpoint {
|
||||||
|
// off
|
||||||
|
// natural-scroll
|
||||||
|
// accel-speed 0.2
|
||||||
|
// accel-profile "flat"
|
||||||
|
// scroll-method "on-button-down"
|
||||||
|
// scroll-button 273
|
||||||
|
// scroll-button-lock
|
||||||
|
// middle-emulation
|
||||||
|
}
|
||||||
|
|
||||||
|
// Uncomment this to make the mouse warp to the center of newly focused windows.
|
||||||
|
// warp-mouse-to-focus
|
||||||
|
|
||||||
|
// Focus windows and outputs automatically when moving the mouse into them.
|
||||||
|
// Setting max-scroll-amount="0%" makes it work only on windows already fully on screen.
|
||||||
|
// focus-follows-mouse max-scroll-amount="0%"
|
||||||
|
}
|
||||||
|
|
||||||
|
gestures {
|
||||||
|
dnd-edge-view-scroll {
|
||||||
|
trigger-width 30
|
||||||
|
delay-ms 100
|
||||||
|
max-speed 1500
|
||||||
|
}
|
||||||
|
|
||||||
|
dnd-edge-workspace-switch {
|
||||||
|
trigger-height 50
|
||||||
|
delay-ms 100
|
||||||
|
max-speed 1500
|
||||||
|
}
|
||||||
|
|
||||||
|
hot-corners {
|
||||||
|
// off
|
||||||
|
top-left
|
||||||
|
// top-right
|
||||||
|
// bottom-left
|
||||||
|
// bottom-right
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// You can configure outputs by their name, which you can find
|
||||||
|
// by running `niri msg outputs` while inside a niri instance.
|
||||||
|
// The built-in laptop monitor is usually called "eDP-1".
|
||||||
|
// Find more information on the wiki:
|
||||||
|
// https://yalter.github.io/niri/Configuration:-Outputs
|
||||||
|
// Remember to uncomment the node by removing "/-"!
|
||||||
|
output "eDP-2" {
|
||||||
|
mode "2560x1600@165"
|
||||||
|
scale 1
|
||||||
|
}
|
||||||
|
|
||||||
|
output "DP-4" {
|
||||||
|
// Uncomment this line to disable this output.
|
||||||
|
// off
|
||||||
|
|
||||||
|
// Resolution and, optionally, refresh rate of the output.
|
||||||
|
// The format is "<width>x<height>" or "<width>x<height>@<refresh rate>".
|
||||||
|
// If the refresh rate is omitted, niri will pick the highest refresh rate
|
||||||
|
// for the resolution.
|
||||||
|
// If the mode is omitted altogether or is invalid, niri will pick one automatically.
|
||||||
|
// Run `niri msg outputs` while inside a niri instance to list all outputs and their modes.
|
||||||
|
// mode custom=true "5120x1440@60"
|
||||||
|
|
||||||
|
// You can use integer or fractional scale, for example use 1.5 for 150% scale.
|
||||||
|
scale 1
|
||||||
|
|
||||||
|
// Transform allows to rotate the output counter-clockwise, valid values are:
|
||||||
|
// normal, 90, 180, 270, flipped, flipped-90, flipped-180 and flipped-270.
|
||||||
|
transform "normal"
|
||||||
|
|
||||||
|
// Position of the output in the global coordinate space.
|
||||||
|
// This affects directional monitor actions like "focus-monitor-left", and cursor movement.
|
||||||
|
// The cursor can only move between directly adjacent outputs.
|
||||||
|
// Output scale and rotation has to be taken into account for positioning:
|
||||||
|
// outputs are sized in logical, or scaled, pixels.
|
||||||
|
// For example, a 3840×2160 output with scale 2.0 will have a logical size of 1920×1080,
|
||||||
|
// so to put another output directly adjacent to it on the right, set its x to 1920.
|
||||||
|
// If the position is unset or results in an overlap, the output is instead placed
|
||||||
|
// automatically.
|
||||||
|
position x=0 y=0
|
||||||
|
}
|
||||||
|
|
||||||
|
// Settings that influence how windows are positioned and sized.
|
||||||
|
// Find more information on the wiki:
|
||||||
|
// https://yalter.github.io/niri/Configuration:-Layout
|
||||||
|
layout {
|
||||||
|
// Set gaps around windows in logical pixels.
|
||||||
|
gaps 30
|
||||||
|
|
||||||
|
// When to center a column when changing focus, options are:
|
||||||
|
// - "never", default behavior, focusing an off-screen column will keep at the left
|
||||||
|
// or right edge of the screen.
|
||||||
|
// - "always", the focused column will always be centered.
|
||||||
|
// - "on-overflow", focusing a column will center it if it doesn't fit
|
||||||
|
// together with the previously focused column.
|
||||||
|
center-focused-column "never"
|
||||||
|
|
||||||
|
// You can customize the widths that "switch-preset-column-width" (Mod+R) toggles between.
|
||||||
|
preset-column-widths {
|
||||||
|
// Proportion sets the width as a fraction of the output width, taking gaps into account.
|
||||||
|
// For example, you can perfectly fit four windows sized "proportion 0.25" on an output.
|
||||||
|
// The default preset widths are 1/3, 1/2 and 2/3 of the output.
|
||||||
|
proportion 0.33333
|
||||||
|
proportion 0.5
|
||||||
|
proportion 0.66667
|
||||||
|
|
||||||
|
// Fixed sets the width in logical pixels exactly.
|
||||||
|
// fixed 1920
|
||||||
|
}
|
||||||
|
|
||||||
|
// You can also customize the heights that "switch-preset-window-height" (Mod+Shift+R) toggles between.
|
||||||
|
// preset-window-heights { }
|
||||||
|
|
||||||
|
// You can change the default width of the new windows.
|
||||||
|
default-column-width { proportion 0.5; }
|
||||||
|
// If you leave the brackets empty, the windows themselves will decide their initial width.
|
||||||
|
// default-column-width {}
|
||||||
|
|
||||||
|
// By default focus ring and border are rendered as a solid background rectangle
|
||||||
|
// behind windows. That is, they will show up through semitransparent windows.
|
||||||
|
// This is because windows using client-side decorations can have an arbitrary shape.
|
||||||
|
//
|
||||||
|
// If you don't like that, you should uncomment `prefer-no-csd` below.
|
||||||
|
// Niri will draw focus ring and border *around* windows that agree to omit their
|
||||||
|
// client-side decorations.
|
||||||
|
//
|
||||||
|
// Alternatively, you can override it with a window rule called
|
||||||
|
// `draw-border-with-background`.
|
||||||
|
|
||||||
|
// You can change how the focus ring looks.
|
||||||
|
focus-ring {
|
||||||
|
// Uncomment this line to disable the focus ring.
|
||||||
|
off
|
||||||
|
|
||||||
|
// How many logical pixels the ring extends out from the windows.
|
||||||
|
width 1
|
||||||
|
|
||||||
|
// Colors can be set in a variety of ways:
|
||||||
|
// - CSS named colors: "red"
|
||||||
|
// - RGB hex: "#rgb", "#rgba", "#rrggbb", "#rrggbbaa"
|
||||||
|
// - CSS-like notation: "rgb(255, 127, 0)", rgba(), hsl() and a few others.
|
||||||
|
|
||||||
|
// Color of the ring on the active monitor.
|
||||||
|
active-color "#7fc8ff"
|
||||||
|
|
||||||
|
// Color of the ring on inactive monitors.
|
||||||
|
//
|
||||||
|
// The focus ring only draws around the active window, so the only place
|
||||||
|
// where you can see its inactive-color is on other monitors.
|
||||||
|
inactive-color "#505050"
|
||||||
|
|
||||||
|
// You can also use gradients. They take precedence over solid colors.
|
||||||
|
// Gradients are rendered the same as CSS linear-gradient(angle, from, to).
|
||||||
|
// The angle is the same as in linear-gradient, and is optional,
|
||||||
|
// defaulting to 180 (top-to-bottom gradient).
|
||||||
|
// You can use any CSS linear-gradient tool on the web to set these up.
|
||||||
|
// Changing the color space is also supported, check the wiki for more info.
|
||||||
|
//
|
||||||
|
// active-gradient from="#80c8ff" to="#c7ff7f" angle=45
|
||||||
|
|
||||||
|
// You can also color the gradient relative to the entire view
|
||||||
|
// of the workspace, rather than relative to just the window itself.
|
||||||
|
// To do that, set relative-to="workspace-view".
|
||||||
|
//
|
||||||
|
// inactive-gradient from="#505050" to="#808080" angle=45 relative-to="workspace-view"
|
||||||
|
}
|
||||||
|
|
||||||
|
// You can also add a border. It's similar to the focus ring, but always visible.
|
||||||
|
border {
|
||||||
|
// The settings are the same as for the focus ring.
|
||||||
|
// If you enable the border, you probably want to disable the focus ring.
|
||||||
|
// off
|
||||||
|
|
||||||
|
width 1
|
||||||
|
active-color "rgba(200,200,200,0.5)"
|
||||||
|
inactive-color "rgba(0,0,0,0.5)"
|
||||||
|
|
||||||
|
// Color of the border around windows that request your attention.
|
||||||
|
urgent-color "#9b0000"
|
||||||
|
|
||||||
|
// Gradients can use a few different interpolation color spaces.
|
||||||
|
// For example, this is a pastel rainbow gradient via in="oklch longer hue".
|
||||||
|
//
|
||||||
|
// active-gradient from="#e5989b" to="#ffb4a2" angle=45 relative-to="workspace-view" in="oklch longer hue"
|
||||||
|
|
||||||
|
// inactive-gradient from="#505050" to="#808080" angle=45 relative-to="workspace-view"
|
||||||
|
}
|
||||||
|
|
||||||
|
// You can enable drop shadows for windows.
|
||||||
|
shadow {
|
||||||
|
// Uncomment the next line to enable shadows.
|
||||||
|
// on
|
||||||
|
|
||||||
|
// By default, the shadow draws only around its window, and not behind it.
|
||||||
|
// Uncomment this setting to make the shadow draw behind its window.
|
||||||
|
//
|
||||||
|
// Note that niri has no way of knowing about the CSD window corner
|
||||||
|
// radius. It has to assume that windows have square corners, leading to
|
||||||
|
// shadow artifacts inside the CSD rounded corners. This setting fixes
|
||||||
|
// those artifacts.
|
||||||
|
//
|
||||||
|
// However, instead you may want to set prefer-no-csd and/or
|
||||||
|
// geometry-corner-radius. Then, niri will know the corner radius and
|
||||||
|
// draw the shadow correctly, without having to draw it behind the
|
||||||
|
// window. These will also remove client-side shadows if the window
|
||||||
|
// draws any.
|
||||||
|
//
|
||||||
|
// draw-behind-window true
|
||||||
|
|
||||||
|
// You can change how shadows look. The values below are in logical
|
||||||
|
// pixels and match the CSS box-shadow properties.
|
||||||
|
|
||||||
|
// Softness controls the shadow blur radius.
|
||||||
|
softness 30
|
||||||
|
|
||||||
|
// Spread expands the shadow.
|
||||||
|
spread 5
|
||||||
|
|
||||||
|
// Offset moves the shadow relative to the window.
|
||||||
|
offset x=0 y=5
|
||||||
|
|
||||||
|
// You can also change the shadow color and opacity.
|
||||||
|
color "#0007"
|
||||||
|
}
|
||||||
|
|
||||||
|
// Struts shrink the area occupied by windows, similarly to layer-shell panels.
|
||||||
|
// You can think of them as a kind of outer gaps. They are set in logical pixels.
|
||||||
|
// Left and right struts will cause the next window to the side to always be visible.
|
||||||
|
// Top and bottom struts will simply add outer gaps in addition to the area occupied by
|
||||||
|
// layer-shell panels and regular gaps.
|
||||||
|
struts {
|
||||||
|
// left 64
|
||||||
|
// right 64
|
||||||
|
// top 64
|
||||||
|
// bottom 64
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add lines like this to spawn processes at startup.
|
||||||
|
// Note that running niri as a session supports xdg-desktop-autostart,
|
||||||
|
// which may be more convenient to use.
|
||||||
|
// See the binds section below for more spawn examples.
|
||||||
|
|
||||||
|
// spawn-at-startup ""
|
||||||
|
|
||||||
|
// To run a shell command (with variables, pipes, etc.), use spawn-sh-at-startup:
|
||||||
|
spawn-sh-at-startup "systemctl --user start kanshi"
|
||||||
|
|
||||||
|
hotkey-overlay {
|
||||||
|
// Uncomment this line to disable the "Important Hotkeys" pop-up at startup.
|
||||||
|
skip-at-startup
|
||||||
|
}
|
||||||
|
|
||||||
|
// Uncomment this line to ask the clients to omit their client-side decorations if possible.
|
||||||
|
// If the client will specifically ask for CSD, the request will be honored.
|
||||||
|
// Additionally, clients will be informed that they are tiled, removing some client-side rounded corners.
|
||||||
|
// This option will also fix border/focus ring drawing behind some semitransparent windows.
|
||||||
|
// After enabling or disabling this, you need to restart the apps for this to take effect.
|
||||||
|
prefer-no-csd
|
||||||
|
|
||||||
|
// You can change the path where screenshots are saved.
|
||||||
|
// A ~ at the front will be expanded to the home directory.
|
||||||
|
// The path is formatted with strftime(3) to give you the screenshot date and time.
|
||||||
|
// screenshot-path "~/Pictures/Screenshots/Screenshot from %Y-%m-%d %H-%M-%S.png"
|
||||||
|
|
||||||
|
// You can also set this to null to disable saving screenshots to disk.
|
||||||
|
screenshot-path null
|
||||||
|
|
||||||
|
// Animation settings.
|
||||||
|
// The wiki explains how to configure individual animations:
|
||||||
|
// https://yalter.github.io/niri/Configuration:-Animations
|
||||||
|
animations {
|
||||||
|
// Uncomment to turn off all animations.
|
||||||
|
// off
|
||||||
|
|
||||||
|
// Slow down all animations by this factor. Values below 1 speed them up instead.
|
||||||
|
// slowdown 3.0
|
||||||
|
}
|
||||||
|
|
||||||
|
// Window rules let you adjust behavior for individual windows.
|
||||||
|
// Find more information on the wiki:
|
||||||
|
// https://yalter.github.io/niri/Configuration:-Window-Rules
|
||||||
|
|
||||||
|
// Work around WezTerm's initial configure bug
|
||||||
|
// by setting an empty default-column-width.
|
||||||
|
window-rule {
|
||||||
|
// This regular expression is intentionally made as specific as possible,
|
||||||
|
// since this is the default config, and we want no false positives.
|
||||||
|
// You can get away with just app-id="wezterm" if you want.
|
||||||
|
match app-id=r#"^org\.wezfurlong\.wezterm$"#
|
||||||
|
default-column-width {}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Open the Firefox picture-in-picture player as floating by default.
|
||||||
|
window-rule {
|
||||||
|
// This app-id regular expression will work for both:
|
||||||
|
// - host Firefox (app-id is "firefox")
|
||||||
|
// - Flatpak Firefox (app-id is "org.mozilla.firefox")
|
||||||
|
match app-id=r#"firefox$"# title="^Picture-in-Picture$"
|
||||||
|
open-floating true
|
||||||
|
}
|
||||||
|
|
||||||
|
// Example: block out two password managers from screen capture.
|
||||||
|
// (This example rule is commented out with a "/-" in front.)
|
||||||
|
/-window-rule {
|
||||||
|
match app-id=r#"^org\.keepassxc\.KeePassXC$"#
|
||||||
|
match app-id=r#"^org\.gnome\.World\.Secrets$"#
|
||||||
|
|
||||||
|
block-out-from "screen-capture"
|
||||||
|
|
||||||
|
// Use this instead if you want them visible on third-party screenshot tools.
|
||||||
|
// block-out-from "screencast"
|
||||||
|
}
|
||||||
|
|
||||||
|
// Example: enable rounded corners for all windows.
|
||||||
|
// (This example rule is commented out with a "/-" in front.)
|
||||||
|
/-window-rule {
|
||||||
|
geometry-corner-radius 12
|
||||||
|
clip-to-geometry true
|
||||||
|
}
|
||||||
|
|
||||||
|
binds {
|
||||||
|
// Keys consist of modifiers separated by + signs, followed by an XKB key name
|
||||||
|
// in the end. To find an XKB name for a particular key, you may use a program
|
||||||
|
// like wev.
|
||||||
|
//
|
||||||
|
// "Mod" is a special modifier equal to Super when running on a TTY, and to Alt
|
||||||
|
// when running as a winit window.
|
||||||
|
//
|
||||||
|
// Most actions that you can bind here can also be invoked programmatically with
|
||||||
|
// `niri msg action do-something`.
|
||||||
|
|
||||||
|
// Mod-Shift-/, which is usually the same as Mod-?,
|
||||||
|
// shows a list of important hotkeys.
|
||||||
|
Mod+Shift+Slash { show-hotkey-overlay; }
|
||||||
|
|
||||||
|
// Suggested binds for running programs: terminal, app launcher, screen locker.
|
||||||
|
Mod+Return hotkey-overlay-title="Kitty" { spawn "kitty"; }
|
||||||
|
Mod+Space hotkey-overlay-title="Launcher" { spawn-sh "dms ipc call spotlight toggle"; }
|
||||||
|
Super+Alt+L hotkey-overlay-title="Lock the Screen" { spawn-sh "dms ipc call lock lock"; }
|
||||||
|
|
||||||
|
Mod+F10 hotkey-overlay-title="Max Resolution" { spawn-sh "niri msg output DP-4 custom-mode 5120x1440@60"; }
|
||||||
|
Mod+F9 hotkey-overlay-title="Max Resolution" { spawn-sh "niri msg output DP-4 custom-mode 2560x1440@60"; }
|
||||||
|
|
||||||
|
|
||||||
|
// Example volume keys mappings for PipeWire & WirePlumber.
|
||||||
|
// The allow-when-locked=true property makes them work even when the session is locked.
|
||||||
|
// Using spawn-sh allows to pass multiple arguments together with the command.
|
||||||
|
// "-l 1.0" limits the volume to 100%.
|
||||||
|
XF86AudioRaiseVolume allow-when-locked=true { spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.1+ -l 1.0"; }
|
||||||
|
XF86AudioLowerVolume allow-when-locked=true { spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.1-"; }
|
||||||
|
XF86AudioMute allow-when-locked=true { spawn-sh "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"; }
|
||||||
|
XF86AudioMicMute allow-when-locked=true { spawn-sh "wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"; }
|
||||||
|
|
||||||
|
// Example media keys mapping using playerctl.
|
||||||
|
// This will work with any MPRIS-enabled media player.
|
||||||
|
XF86AudioPlay allow-when-locked=true { spawn-sh "playerctl play-pause"; }
|
||||||
|
XF86AudioStop allow-when-locked=true { spawn-sh "playerctl stop"; }
|
||||||
|
XF86AudioPrev allow-when-locked=true { spawn-sh "playerctl previous"; }
|
||||||
|
XF86AudioNext allow-when-locked=true { spawn-sh "playerctl next"; }
|
||||||
|
|
||||||
|
// Example brightness key mappings for brightnessctl.
|
||||||
|
// You can use regular spawn with multiple arguments too (to avoid going through "sh"),
|
||||||
|
// but you need to manually put each argument in separate "" quotes.
|
||||||
|
XF86MonBrightnessUp allow-when-locked=true { spawn "brightnessctl" "--class=backlight" "set" "+10%"; }
|
||||||
|
XF86MonBrightnessDown allow-when-locked=true { spawn "brightnessctl" "--class=backlight" "set" "10%-"; }
|
||||||
|
|
||||||
|
Mod+O repeat=false { toggle-overview; }
|
||||||
|
Mod+F14 repeat=false { toggle-overview; }
|
||||||
|
|
||||||
|
Mod+W repeat=false { close-window; }
|
||||||
|
|
||||||
|
Mod+Left { focus-column-left; }
|
||||||
|
Mod+Down { focus-window-down; }
|
||||||
|
Mod+Up { focus-window-up; }
|
||||||
|
Mod+Right { focus-column-right; }
|
||||||
|
Mod+H { focus-column-left; }
|
||||||
|
Mod+J { focus-window-down; }
|
||||||
|
Mod+K { focus-window-up; }
|
||||||
|
Mod+L { focus-column-right; }
|
||||||
|
|
||||||
|
Mod+Shift+Left { move-column-left; }
|
||||||
|
Mod+Shift+Down { move-window-down; }
|
||||||
|
Mod+Shift+Up { move-window-up; }
|
||||||
|
Mod+Shift+Right { move-column-right; }
|
||||||
|
Mod+Shift+H { move-column-left; }
|
||||||
|
Mod+Shift+J { move-window-down; }
|
||||||
|
Mod+Shift+K { move-window-up; }
|
||||||
|
Mod+Shift+L { move-column-right; }
|
||||||
|
|
||||||
|
// Alternative commands that move across workspaces when reaching
|
||||||
|
// the first or last window in a column.
|
||||||
|
// Mod+J { focus-window-or-workspace-down; }
|
||||||
|
// Mod+K { focus-window-or-workspace-up; }
|
||||||
|
// Mod+Ctrl+J { move-window-down-or-to-workspace-down; }
|
||||||
|
// Mod+Ctrl+K { move-window-up-or-to-workspace-up; }
|
||||||
|
|
||||||
|
Mod+Home { focus-column-first; }
|
||||||
|
Mod+End { focus-column-last; }
|
||||||
|
Mod+Ctrl+Home { move-column-to-first; }
|
||||||
|
Mod+Ctrl+End { move-column-to-last; }
|
||||||
|
|
||||||
|
Mod+Ctrl+Left { focus-monitor-left; }
|
||||||
|
Mod+Ctrl+Down { focus-monitor-down; }
|
||||||
|
Mod+Ctrl+Up { focus-monitor-up; }
|
||||||
|
Mod+Ctrl+Right { focus-monitor-right; }
|
||||||
|
Mod+Ctrl+H { focus-monitor-left; }
|
||||||
|
Mod+Ctrl+J { focus-monitor-down; }
|
||||||
|
Mod+Ctrl+K { focus-monitor-up; }
|
||||||
|
Mod+Ctrl+L { focus-monitor-right; }
|
||||||
|
|
||||||
|
Mod+Shift+Ctrl+Left { move-column-to-monitor-left; }
|
||||||
|
Mod+Shift+Ctrl+Down { move-column-to-monitor-down; }
|
||||||
|
Mod+Shift+Ctrl+Up { move-column-to-monitor-up; }
|
||||||
|
Mod+Shift+Ctrl+Right { move-column-to-monitor-right; }
|
||||||
|
Mod+Shift+Ctrl+H { move-column-to-monitor-left; }
|
||||||
|
Mod+Shift+Ctrl+J { move-column-to-monitor-down; }
|
||||||
|
Mod+Shift+Ctrl+K { move-column-to-monitor-up; }
|
||||||
|
Mod+Shift+Ctrl+L { move-column-to-monitor-right; }
|
||||||
|
|
||||||
|
// Alternatively, there are commands to move just a single window:
|
||||||
|
// Mod+Shift+Ctrl+Left { move-window-to-monitor-left; }
|
||||||
|
// ...
|
||||||
|
|
||||||
|
// And you can also move a whole workspace to another monitor:
|
||||||
|
// Mod+Shift+Ctrl+Left { move-workspace-to-monitor-left; }
|
||||||
|
// ...
|
||||||
|
|
||||||
|
Mod+Page_Down { focus-workspace-down; }
|
||||||
|
Mod+Page_Up { focus-workspace-up; }
|
||||||
|
Mod+U { focus-workspace-down; }
|
||||||
|
Mod+I { focus-workspace-up; }
|
||||||
|
Mod+Ctrl+Page_Down { move-column-to-workspace-down; }
|
||||||
|
Mod+Ctrl+Page_Up { move-column-to-workspace-up; }
|
||||||
|
Mod+Ctrl+U { move-column-to-workspace-down; }
|
||||||
|
Mod+Ctrl+I { move-column-to-workspace-up; }
|
||||||
|
|
||||||
|
// Alternatively, there are commands to move just a single window:
|
||||||
|
// Mod+Ctrl+Page_Down { move-window-to-workspace-down; }
|
||||||
|
// ...
|
||||||
|
|
||||||
|
Mod+Shift+Page_Down { move-workspace-down; }
|
||||||
|
Mod+Shift+Page_Up { move-workspace-up; }
|
||||||
|
Mod+Shift+U { move-workspace-down; }
|
||||||
|
Mod+Shift+I { move-workspace-up; }
|
||||||
|
|
||||||
|
// You can bind mouse wheel scroll ticks using the following syntax.
|
||||||
|
// These binds will change direction based on the natural-scroll setting.
|
||||||
|
//
|
||||||
|
// To avoid scrolling through workspaces really fast, you can use
|
||||||
|
// the cooldown-ms property. The bind will be rate-limited to this value.
|
||||||
|
// You can set a cooldown on any bind, but it's most useful for the wheel.
|
||||||
|
Mod+WheelScrollDown cooldown-ms=150 { focus-workspace-down; }
|
||||||
|
Mod+WheelScrollUp cooldown-ms=150 { focus-workspace-up; }
|
||||||
|
Mod+Ctrl+WheelScrollDown cooldown-ms=150 { move-column-to-workspace-down; }
|
||||||
|
Mod+Ctrl+WheelScrollUp cooldown-ms=150 { move-column-to-workspace-up; }
|
||||||
|
|
||||||
|
Mod+WheelScrollRight { focus-column-right; }
|
||||||
|
Mod+WheelScrollLeft { focus-column-left; }
|
||||||
|
Mod+Ctrl+WheelScrollRight { move-column-right; }
|
||||||
|
Mod+Ctrl+WheelScrollLeft { move-column-left; }
|
||||||
|
|
||||||
|
// Usually scrolling up and down with Shift in applications results in
|
||||||
|
// horizontal scrolling; these binds replicate that.
|
||||||
|
Mod+Shift+WheelScrollDown { focus-column-right; }
|
||||||
|
Mod+Shift+WheelScrollUp { focus-column-left; }
|
||||||
|
Mod+Ctrl+Shift+WheelScrollDown { move-column-right; }
|
||||||
|
Mod+Ctrl+Shift+WheelScrollUp { move-column-left; }
|
||||||
|
|
||||||
|
// Similarly, you can bind touchpad scroll "ticks".
|
||||||
|
// Touchpad scrolling is continuous, so for these binds it is split into
|
||||||
|
// discrete intervals.
|
||||||
|
// These binds are also affected by touchpad's natural-scroll, so these
|
||||||
|
// example binds are "inverted", since we have natural-scroll enabled for
|
||||||
|
// touchpads by default.
|
||||||
|
// Mod+TouchpadScrollDown { spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.02+"; }
|
||||||
|
// Mod+TouchpadScrollUp { spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.02-"; }
|
||||||
|
|
||||||
|
// You can refer to workspaces by index. However, keep in mind that
|
||||||
|
// niri is a dynamic workspace system, so these commands are kind of
|
||||||
|
// "best effort". Trying to refer to a workspace index bigger than
|
||||||
|
// the current workspace count will instead refer to the bottommost
|
||||||
|
// (empty) workspace.
|
||||||
|
//
|
||||||
|
// For example, with 2 workspaces + 1 empty, indices 3, 4, 5 and so on
|
||||||
|
// will all refer to the 3rd workspace.
|
||||||
|
Mod+Ctrl+1 { focus-column 1; }
|
||||||
|
Mod+Ctrl+2 { focus-column 2; }
|
||||||
|
Mod+Ctrl+3 { focus-column 3; }
|
||||||
|
Mod+Ctrl+4 { focus-column 4; }
|
||||||
|
Mod+Ctrl+5 { focus-column 5; }
|
||||||
|
|
||||||
|
Mod+1 { focus-workspace 1; }
|
||||||
|
Mod+2 { focus-workspace 2; }
|
||||||
|
Mod+3 { focus-workspace 3; }
|
||||||
|
Mod+4 { focus-workspace 4; }
|
||||||
|
Mod+5 { focus-workspace 5; }
|
||||||
|
Mod+6 { focus-workspace 6; }
|
||||||
|
Mod+7 { focus-workspace 7; }
|
||||||
|
Mod+8 { focus-workspace 8; }
|
||||||
|
Mod+9 { focus-workspace 9; }
|
||||||
|
Mod+Shift+1 { move-column-to-workspace 1; }
|
||||||
|
Mod+Shift+2 { move-column-to-workspace 2; }
|
||||||
|
Mod+Shift+3 { move-column-to-workspace 3; }
|
||||||
|
Mod+Shift+4 { move-column-to-workspace 4; }
|
||||||
|
Mod+Shift+5 { move-column-to-workspace 5; }
|
||||||
|
Mod+Shift+6 { move-column-to-workspace 6; }
|
||||||
|
Mod+Shift+7 { move-column-to-workspace 7; }
|
||||||
|
Mod+Shift+8 { move-column-to-workspace 8; }
|
||||||
|
Mod+Shift+9 { move-column-to-workspace 9; }
|
||||||
|
|
||||||
|
// Alternatively, there are commands to move just a single window:
|
||||||
|
// Mod+Ctrl+1 { move-window-to-workspace 1; }
|
||||||
|
|
||||||
|
// Switches focus between the current and the previous workspace.
|
||||||
|
// Mod+Tab { focus-workspace-previous; }
|
||||||
|
|
||||||
|
// The following binds move the focused window in and out of a column.
|
||||||
|
// If the window is alone, they will consume it into the nearby column to the side.
|
||||||
|
// If the window is already in a column, they will expel it out.
|
||||||
|
Mod+BracketLeft { consume-or-expel-window-left; }
|
||||||
|
Mod+BracketRight { consume-or-expel-window-right; }
|
||||||
|
|
||||||
|
// Consume one window from the right to the bottom of the focused column.
|
||||||
|
Mod+Comma { consume-window-into-column; }
|
||||||
|
// Expel the bottom window from the focused column to the right.
|
||||||
|
Mod+Period { expel-window-from-column; }
|
||||||
|
|
||||||
|
Mod+R { switch-preset-column-width; }
|
||||||
|
// Cycling through the presets in reverse order is also possible.
|
||||||
|
// Mod+R { switch-preset-column-width-back; }
|
||||||
|
Mod+Shift+R { switch-preset-window-height; }
|
||||||
|
Mod+Ctrl+R { reset-window-height; }
|
||||||
|
Mod+F { maximize-column; }
|
||||||
|
Mod+Shift+F { fullscreen-window; }
|
||||||
|
|
||||||
|
// Expand the focused column to space not taken up by other fully visible columns.
|
||||||
|
// Makes the column "fill the rest of the space".
|
||||||
|
Mod+Ctrl+F { expand-column-to-available-width; }
|
||||||
|
|
||||||
|
Mod+C { center-column; }
|
||||||
|
|
||||||
|
// Center all fully visible columns on screen.
|
||||||
|
Mod+Ctrl+C { center-visible-columns; }
|
||||||
|
|
||||||
|
// Finer width adjustments.
|
||||||
|
// This command can also:
|
||||||
|
// * set width in pixels: "1000"
|
||||||
|
// * adjust width in pixels: "-5" or "+5"
|
||||||
|
// * set width as a percentage of screen width: "25%"
|
||||||
|
// * adjust width as a percentage of screen width: "-10%" or "+10%"
|
||||||
|
// Pixel sizes use logical, or scaled, pixels. I.e. on an output with scale 2.0,
|
||||||
|
// set-column-width "100" will make the column occupy 200 physical screen pixels.
|
||||||
|
Mod+Minus { set-column-width "-10%"; }
|
||||||
|
Mod+Equal { set-column-width "+10%"; }
|
||||||
|
|
||||||
|
// Finer height adjustments when in column with other windows.
|
||||||
|
Mod+Shift+Minus { set-window-height "-10%"; }
|
||||||
|
Mod+Shift+Equal { set-window-height "+10%"; }
|
||||||
|
|
||||||
|
// Move the focused window between the floating and the tiling layout.
|
||||||
|
Mod+V { toggle-window-floating; }
|
||||||
|
Mod+Shift+V { switch-focus-between-floating-and-tiling; }
|
||||||
|
|
||||||
|
// Toggle tabbed column display mode.
|
||||||
|
// Windows in this column will appear as vertical tabs,
|
||||||
|
// rather than stacked on top of each other.
|
||||||
|
Mod+Tab { toggle-column-tabbed-display; }
|
||||||
|
|
||||||
|
// Actions to switch layouts.
|
||||||
|
// Note: if you uncomment these, make sure you do NOT have
|
||||||
|
// a matching layout switch hotkey configured in xkb options above.
|
||||||
|
// Having both at once on the same hotkey will break the switching,
|
||||||
|
// since it will switch twice upon pressing the hotkey (once by xkb, once by niri).
|
||||||
|
// Mod+Space { switch-layout "next"; }
|
||||||
|
// Mod+Shift+Space { switch-layout "prev"; }
|
||||||
|
|
||||||
|
Print { screenshot; }
|
||||||
|
Ctrl+Print { screenshot-screen; }
|
||||||
|
Alt+Print { screenshot-window; }
|
||||||
|
|
||||||
|
// Applications such as remote-desktop clients and software KVM switches may
|
||||||
|
// request that niri stops processing the keyboard shortcuts defined here
|
||||||
|
// so they may, for example, forward the key presses as-is to a remote machine.
|
||||||
|
// It's a good idea to bind an escape hatch to toggle the inhibitor,
|
||||||
|
// so a buggy application can't hold your session hostage.
|
||||||
|
//
|
||||||
|
// The allow-inhibiting=false property can be applied to other binds as well,
|
||||||
|
// which ensures niri always processes them, even when an inhibitor is active.
|
||||||
|
Mod+Escape allow-inhibiting=false { toggle-keyboard-shortcuts-inhibit; }
|
||||||
|
|
||||||
|
// The quit action will show a confirmation dialog to avoid accidental exits.
|
||||||
|
Mod+Shift+E { quit; }
|
||||||
|
Ctrl+Alt+Delete { quit; }
|
||||||
|
|
||||||
|
// Powers off the monitors. To turn them back on, do any input like
|
||||||
|
// moving the mouse or pressing any other key.
|
||||||
|
Mod+Shift+P { power-off-monitors; }
|
||||||
|
}
|
||||||
7
dotfiles/nvim/ftplugin/elixir.lua
Normal file
7
dotfiles/nvim/ftplugin/elixir.lua
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
require("nvchad.mappings")
|
||||||
|
|
||||||
|
local map = vim.keymap.set
|
||||||
|
|
||||||
|
map("n", "<leader>tr", function()
|
||||||
|
vim.lsp.codelens.run()
|
||||||
|
end, { desc = "Run codelense" })
|
||||||
7
dotfiles/nvim/ftplugin/rust.lua
Normal file
7
dotfiles/nvim/ftplugin/rust.lua
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
require("nvchad.mappings")
|
||||||
|
|
||||||
|
local map = vim.keymap.set
|
||||||
|
|
||||||
|
map("n", "<leader>ca", function()
|
||||||
|
vim.cmd.RustLsp("codeAction")
|
||||||
|
end, { silent = true, buffer = bufnr, desc = "LSP Code action" })
|
||||||
2
dotfiles/nvim/init.lua
Normal file
2
dotfiles/nvim/init.lua
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
require "init"
|
||||||
|
require "extraConfig"
|
||||||
24
dotfiles/nvim/lua/chadrc.lua
Normal file
24
dotfiles/nvim/lua/chadrc.lua
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
-- This file needs to have same structure as nvconfig.lua
|
||||||
|
-- https://github.com/NvChad/ui/blob/v3.0/lua/nvconfig.lua
|
||||||
|
-- Please read that file to know all available options :(
|
||||||
|
|
||||||
|
---@type ChadrcConfig
|
||||||
|
local M = {}
|
||||||
|
|
||||||
|
M.base46 = {
|
||||||
|
theme = "catppuccin",
|
||||||
|
|
||||||
|
-- hl_override = {
|
||||||
|
-- Comment = { italic = true },
|
||||||
|
-- ["@comment"] = { italic = true },
|
||||||
|
-- },
|
||||||
|
}
|
||||||
|
|
||||||
|
-- M.nvdash = { load_on_startup = true }
|
||||||
|
-- M.ui = {
|
||||||
|
-- tabufline = {
|
||||||
|
-- lazyload = false
|
||||||
|
-- }
|
||||||
|
--}
|
||||||
|
|
||||||
|
return M
|
||||||
21
dotfiles/nvim/lua/configs/conform.lua
Normal file
21
dotfiles/nvim/lua/configs/conform.lua
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
local options = {
|
||||||
|
formatters_by_ft = {
|
||||||
|
lua = { "stylua" },
|
||||||
|
elixir = { "mix" },
|
||||||
|
javascript = { "prettier" },
|
||||||
|
css = { "prettier" },
|
||||||
|
html = { "prettier" },
|
||||||
|
html = { "prettier" },
|
||||||
|
heex = { "mix" },
|
||||||
|
nix = { "nixfmt" },
|
||||||
|
json = { "prettier" },
|
||||||
|
},
|
||||||
|
|
||||||
|
format_on_save = {
|
||||||
|
-- These options will be passed to conform.format()
|
||||||
|
timeout_ms = 2000,
|
||||||
|
lsp_fallback = true,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
return options
|
||||||
47
dotfiles/nvim/lua/configs/lazy.lua
Normal file
47
dotfiles/nvim/lua/configs/lazy.lua
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
return {
|
||||||
|
defaults = { lazy = true },
|
||||||
|
install = { colorscheme = { "nvchad" } },
|
||||||
|
|
||||||
|
ui = {
|
||||||
|
icons = {
|
||||||
|
ft = "",
|
||||||
|
lazy = " ",
|
||||||
|
loaded = "",
|
||||||
|
not_loaded = "",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
performance = {
|
||||||
|
rtp = {
|
||||||
|
disabled_plugins = {
|
||||||
|
"2html_plugin",
|
||||||
|
"tohtml",
|
||||||
|
"getscript",
|
||||||
|
"getscriptPlugin",
|
||||||
|
"gzip",
|
||||||
|
"logipat",
|
||||||
|
"netrw",
|
||||||
|
"netrwPlugin",
|
||||||
|
"netrwSettings",
|
||||||
|
"netrwFileHandlers",
|
||||||
|
"matchit",
|
||||||
|
"tar",
|
||||||
|
"tarPlugin",
|
||||||
|
"rrhelper",
|
||||||
|
"spellfile_plugin",
|
||||||
|
"vimball",
|
||||||
|
"vimballPlugin",
|
||||||
|
"zip",
|
||||||
|
"zipPlugin",
|
||||||
|
"tutor",
|
||||||
|
"rplugin",
|
||||||
|
"syntax",
|
||||||
|
"synmenu",
|
||||||
|
"optwin",
|
||||||
|
"compiler",
|
||||||
|
"bugreport",
|
||||||
|
-- "ftplugin",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
28
dotfiles/nvim/lua/configs/lspconfig.lua
Normal file
28
dotfiles/nvim/lua/configs/lspconfig.lua
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
-- load defaults i.e lua_lsp
|
||||||
|
require("nvchad.configs.lspconfig").defaults()
|
||||||
|
|
||||||
|
local lspconfig = require("lspconfig")
|
||||||
|
|
||||||
|
-- lspconfig.elixirls.setup({
|
||||||
|
-- cmd = { "elixir-ls" },
|
||||||
|
-- })
|
||||||
|
|
||||||
|
-- EXAMPLE
|
||||||
|
local servers = { "html", "cssls" }
|
||||||
|
local nvlsp = require("nvchad.configs.lspconfig")
|
||||||
|
|
||||||
|
-- lsps with default config
|
||||||
|
for _, lsp in ipairs(servers) do
|
||||||
|
lspconfig[lsp].setup({
|
||||||
|
on_attach = nvlsp.on_attach,
|
||||||
|
on_init = nvlsp.on_init,
|
||||||
|
capabilities = nvlsp.capabilities,
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
|
-- configuring single server, example: typescript
|
||||||
|
-- lspconfig.ts_ls.setup {
|
||||||
|
-- on_attach = nvlsp.on_attach,
|
||||||
|
-- on_init = nvlsp.on_init,
|
||||||
|
-- capabilities = nvlsp.capabilities,
|
||||||
|
-- }
|
||||||
11
dotfiles/nvim/lua/extraConfig.lua
Normal file
11
dotfiles/nvim/lua/extraConfig.lua
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
require("telescope").setup({
|
||||||
|
extensions = {
|
||||||
|
fzf = {
|
||||||
|
fuzzy = true, -- false will only do exact matching
|
||||||
|
override_generic_sorter = true, -- override the generic sorter
|
||||||
|
override_file_sorter = true, -- override the file sorter
|
||||||
|
case_mode = "smart_case", -- or "ignore_case" or "respect_case"
|
||||||
|
-- the default case_mode is "smart_case"
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
37
dotfiles/nvim/lua/init.lua
Normal file
37
dotfiles/nvim/lua/init.lua
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
vim.g.base46_cache = vim.fn.stdpath("data") .. "/base46/"
|
||||||
|
vim.g.mapleader = " "
|
||||||
|
|
||||||
|
-- bootstrap lazy and all plugins
|
||||||
|
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
|
||||||
|
|
||||||
|
if not vim.uv.fs_stat(lazypath) then
|
||||||
|
local repo = "https://github.com/folke/lazy.nvim.git"
|
||||||
|
vim.fn.system({ "git", "clone", "--filter=blob:none", repo, "--branch=stable", lazypath })
|
||||||
|
end
|
||||||
|
|
||||||
|
vim.opt.rtp:prepend(lazypath)
|
||||||
|
|
||||||
|
local lazy_config = require("configs.lazy")
|
||||||
|
|
||||||
|
-- load plugins
|
||||||
|
require("lazy").setup({
|
||||||
|
{
|
||||||
|
"NvChad/NvChad",
|
||||||
|
lazy = false,
|
||||||
|
branch = "v2.5",
|
||||||
|
import = "nvchad.plugins",
|
||||||
|
},
|
||||||
|
|
||||||
|
{ import = "plugins" },
|
||||||
|
}, lazy_config)
|
||||||
|
|
||||||
|
-- load theme
|
||||||
|
dofile(vim.g.base46_cache .. "defaults")
|
||||||
|
dofile(vim.g.base46_cache .. "statusline")
|
||||||
|
|
||||||
|
require("options")
|
||||||
|
require("nvchad.autocmds")
|
||||||
|
|
||||||
|
vim.schedule(function()
|
||||||
|
require("mappings")
|
||||||
|
end)
|
||||||
54
dotfiles/nvim/lua/mappings.lua
Normal file
54
dotfiles/nvim/lua/mappings.lua
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
require("nvchad.mappings")
|
||||||
|
|
||||||
|
-- add yours here
|
||||||
|
|
||||||
|
local map = vim.keymap.set
|
||||||
|
local builtin = require("telescope.builtin")
|
||||||
|
local nomap = vim.keymap.del
|
||||||
|
local nvim_tmux_nav = require("nvim-tmux-navigation")
|
||||||
|
|
||||||
|
map("n", ";", ":", { desc = "CMD enter command mode" })
|
||||||
|
map("i", "jk", "<ESC>")
|
||||||
|
map("n", "<leader>tt", function()
|
||||||
|
require("base46").toggle_transparency()
|
||||||
|
end, { desc = "Toggle transparency" })
|
||||||
|
|
||||||
|
map("i", "<C-CR>", function()
|
||||||
|
vim.fn.feedkeys(vim.fn["copilot#Accept"](), "")
|
||||||
|
end, { desc = "Copilot Accept", silent = true, nowait = true, expr = true, noremap = true })
|
||||||
|
|
||||||
|
map("n", "@c", function()
|
||||||
|
require("CopilotChat").open()
|
||||||
|
end, { desc = "Copilot chat" })
|
||||||
|
|
||||||
|
map("n", "@p", function()
|
||||||
|
require("copilot.panel").open()
|
||||||
|
end, { desc = "Copilot chat" })
|
||||||
|
|
||||||
|
map("n", "@d", function()
|
||||||
|
require("copilot.panel").ask("Create documentation for the this code")
|
||||||
|
end, { desc = "Copilot chat" })
|
||||||
|
|
||||||
|
map("n", "<leader>si", function()
|
||||||
|
builtin.lsp_document_symbols()
|
||||||
|
end, { desc = "LSP Definitions" })
|
||||||
|
|
||||||
|
map("n", "<leader>sd", function()
|
||||||
|
builtin.lsp_definitions()
|
||||||
|
end, { desc = "LSP Definitions" })
|
||||||
|
|
||||||
|
map("n", "<leader>sr", function()
|
||||||
|
builtin.lsp_references()
|
||||||
|
end, { desc = "LSP References" })
|
||||||
|
|
||||||
|
map("n", "<leader>ss", function()
|
||||||
|
builtin.lsp_workspace_symbols()
|
||||||
|
end, { desc = "LSP workspace symbols" })
|
||||||
|
|
||||||
|
nomap("n", "<leader>h")
|
||||||
|
nomap("n", "<leader>v")
|
||||||
|
|
||||||
|
map("n", "<C-h>", nvim_tmux_nav.NvimTmuxNavigateLeft, { desc = "Navigate left" })
|
||||||
|
map("n", "<C-j>", nvim_tmux_nav.NvimTmuxNavigateDown, { desc = "Navigate down" })
|
||||||
|
map("n", "<C-k>", nvim_tmux_nav.NvimTmuxNavigateUp, { desc = "Navigate up" })
|
||||||
|
map("n", "<C-l>", nvim_tmux_nav.NvimTmuxNavigateRight, { desc = "Navigate right" })
|
||||||
7
dotfiles/nvim/lua/options.lua
Normal file
7
dotfiles/nvim/lua/options.lua
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
require("nvchad.options")
|
||||||
|
|
||||||
|
-- add yours here!
|
||||||
|
|
||||||
|
-- local o = vim.o
|
||||||
|
-- o.cursorlineopt ='both' -- to enable cursorline!
|
||||||
|
--
|
||||||
145
dotfiles/nvim/lua/plugins/base.lua
Normal file
145
dotfiles/nvim/lua/plugins/base.lua
Normal file
@@ -0,0 +1,145 @@
|
|||||||
|
return {
|
||||||
|
{ import = "nvchad.blink.lazyspec" },
|
||||||
|
{
|
||||||
|
"stevearc/conform.nvim",
|
||||||
|
event = "BufWritePre", -- uncomment for format on save
|
||||||
|
opts = require("configs.conform"),
|
||||||
|
},
|
||||||
|
-- These are some examples, uncomment them if you want to see them work!
|
||||||
|
{
|
||||||
|
"neovim/nvim-lspconfig",
|
||||||
|
config = function()
|
||||||
|
require("configs.lspconfig")
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"nvim-tree/nvim-tree.lua",
|
||||||
|
cmd = { "NvimTreeToggle", "NvimTreeFocus" },
|
||||||
|
opts = function()
|
||||||
|
return {
|
||||||
|
filters = { dotfiles = false },
|
||||||
|
disable_netrw = true,
|
||||||
|
hijack_cursor = true,
|
||||||
|
sync_root_with_cwd = true,
|
||||||
|
update_focused_file = {
|
||||||
|
enable = true,
|
||||||
|
update_root = false,
|
||||||
|
},
|
||||||
|
view = {
|
||||||
|
width = 30,
|
||||||
|
adaptive_size = true,
|
||||||
|
preserve_window_proportions = true,
|
||||||
|
},
|
||||||
|
renderer = {
|
||||||
|
root_folder_label = false,
|
||||||
|
highlight_git = true,
|
||||||
|
indent_markers = { enable = true },
|
||||||
|
icons = {
|
||||||
|
glyphs = {
|
||||||
|
default = "",
|
||||||
|
folder = {
|
||||||
|
default = "",
|
||||||
|
empty = "",
|
||||||
|
empty_open = "",
|
||||||
|
open = "",
|
||||||
|
symlink = "",
|
||||||
|
},
|
||||||
|
git = { unmerged = "" },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
-- {
|
||||||
|
-- "hrsh7th/nvim-cmp",
|
||||||
|
-- dependencies = {
|
||||||
|
-- {
|
||||||
|
-- "zbirenbaum/copilot-cmp",
|
||||||
|
-- config = function()
|
||||||
|
-- require("copilot_cmp").setup()
|
||||||
|
-- end,
|
||||||
|
-- },
|
||||||
|
-- },
|
||||||
|
-- opts = {
|
||||||
|
-- sources = {
|
||||||
|
-- { name = "nvim_lsp", group_index = 2 },
|
||||||
|
-- { name = "copilot", group_index = 2 },
|
||||||
|
-- { name = "luasnip", group_index = 2 },
|
||||||
|
-- { name = "buffer", group_index = 2 },
|
||||||
|
-- { name = "nvim_lua", group_index = 2 },
|
||||||
|
-- { name = "path", group_index = 2 },
|
||||||
|
-- },
|
||||||
|
-- },
|
||||||
|
-- },
|
||||||
|
{
|
||||||
|
"nvim-telescope/telescope-fzf-native.nvim",
|
||||||
|
build = "cmake -S. -Bbuild -DCMAKE_BUILD_TYPE=Release && cmake --build build --config Release",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"NeogitOrg/neogit",
|
||||||
|
dependencies = {
|
||||||
|
"nvim-lua/plenary.nvim",
|
||||||
|
"sindrets/diffview.nvim",
|
||||||
|
"nvim-telescope/telescope.nvim",
|
||||||
|
},
|
||||||
|
config = true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
lazy = false,
|
||||||
|
"CopilotC-Nvim/CopilotChat.nvim",
|
||||||
|
dependencies = {
|
||||||
|
{ "zbirenbaum/copilot.lua" }, -- or zbirenbaum/copilot.lua
|
||||||
|
{ "nvim-lua/plenary.nvim", branch = "master" }, -- for curl, log and async functions
|
||||||
|
},
|
||||||
|
build = "make tiktoken", -- Only on MacOS or Linux
|
||||||
|
opts = {
|
||||||
|
-- See Configuration section for options
|
||||||
|
},
|
||||||
|
-- See Commands section for default commands if you want to lazy load on them
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"zbirenbaum/copilot.lua",
|
||||||
|
cmd = "Copilot",
|
||||||
|
event = "InsertEnter",
|
||||||
|
config = function()
|
||||||
|
require("copilot").setup({
|
||||||
|
suggestion = { enabled = false },
|
||||||
|
panel = { enabled = false },
|
||||||
|
})
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"giuxtaposition/blink-cmp-copilot",
|
||||||
|
dependencies = {
|
||||||
|
{ "zbirenbaum/copilot.lua" },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
-- {
|
||||||
|
-- "zbirenbaum/copilot-cmp",
|
||||||
|
-- config = function()
|
||||||
|
-- require("copilot_cmp").setup()
|
||||||
|
-- end,
|
||||||
|
-- },
|
||||||
|
|
||||||
|
{
|
||||||
|
"nvim-treesitter/nvim-treesitter",
|
||||||
|
opts = {
|
||||||
|
ensure_installed = {
|
||||||
|
"vim",
|
||||||
|
"lua",
|
||||||
|
"vimdoc",
|
||||||
|
"html",
|
||||||
|
"css",
|
||||||
|
"elixir",
|
||||||
|
"rust",
|
||||||
|
"heex",
|
||||||
|
"javascript",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"alexghergh/nvim-tmux-navigation",
|
||||||
|
lazy = false,
|
||||||
|
},
|
||||||
|
}
|
||||||
33
dotfiles/nvim/lua/plugins/elixir.lua
Normal file
33
dotfiles/nvim/lua/plugins/elixir.lua
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
return {
|
||||||
|
{
|
||||||
|
"elixir-tools/elixir-tools.nvim",
|
||||||
|
version = "*",
|
||||||
|
event = { "BufReadPre", "BufNewFile" },
|
||||||
|
config = function()
|
||||||
|
local elixir = require("elixir")
|
||||||
|
local elixirls = require("elixir.elixirls")
|
||||||
|
|
||||||
|
elixir.setup({
|
||||||
|
nextls = { enable = true },
|
||||||
|
elixirls = {
|
||||||
|
enable = true,
|
||||||
|
settings = elixirls.settings({
|
||||||
|
dialyzerEnabled = false,
|
||||||
|
enableTestLenses = true,
|
||||||
|
}),
|
||||||
|
on_attach = function(client, bufnr)
|
||||||
|
vim.keymap.set("n", "<space>fp", ":ElixirFromPipe<cr>", { buffer = true, noremap = true })
|
||||||
|
vim.keymap.set("n", "<space>tp", ":ElixirToPipe<cr>", { buffer = true, noremap = true })
|
||||||
|
vim.keymap.set("v", "<space>em", ":ElixirExpandMacro<cr>", { buffer = true, noremap = true })
|
||||||
|
end,
|
||||||
|
},
|
||||||
|
projectionist = {
|
||||||
|
enable = true,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
end,
|
||||||
|
dependencies = {
|
||||||
|
"nvim-lua/plenary.nvim",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
7
dotfiles/nvim/lua/plugins/rust.lua
Normal file
7
dotfiles/nvim/lua/plugins/rust.lua
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
return {
|
||||||
|
{
|
||||||
|
"mrcjkb/rustaceanvim",
|
||||||
|
version = "^5", -- Recommended
|
||||||
|
lazy = false, -- This plugin is already lazy
|
||||||
|
},
|
||||||
|
}
|
||||||
7
dotfiles/ranger.conf
Normal file
7
dotfiles/ranger.conf
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
set preview_images true
|
||||||
|
set preview_images_method kitty
|
||||||
|
set draw_borders true
|
||||||
|
map ;e fm.execute_console('shell unzip %f')
|
||||||
|
map ;e fm.execute_console('shell gwenview %f')
|
||||||
|
|
||||||
|
|
||||||
66
dotfiles/tmux.conf
Normal file
66
dotfiles/tmux.conf
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
set-option -sa terminal-overrides ",xterm*:Tc"
|
||||||
|
set -g mouse on
|
||||||
|
|
||||||
|
unbind C-b
|
||||||
|
set -g prefix C-Space
|
||||||
|
bind C-Space send-prefix
|
||||||
|
|
||||||
|
# Vim style pane selection
|
||||||
|
bind h select-pane -L
|
||||||
|
bind j select-pane -D
|
||||||
|
bind k select-pane -U
|
||||||
|
bind l select-pane -R
|
||||||
|
|
||||||
|
# Start windows and panes at 1, not 0
|
||||||
|
set -g base-index 1
|
||||||
|
set -g pane-base-index 1
|
||||||
|
set-window-option -g pane-base-index 1
|
||||||
|
set-option -g renumber-windows on
|
||||||
|
|
||||||
|
# UseAlt-arrow keys without prefix key to switch panes
|
||||||
|
bind -n M-Left select-pane -L
|
||||||
|
bind -n M-Right select-pane -R
|
||||||
|
bind -n M-Up select-pane -U
|
||||||
|
bind -n M-Down select-pane -D
|
||||||
|
|
||||||
|
# Shift arrow to switch windows
|
||||||
|
bind -n S-Left previous-window
|
||||||
|
bind -n S-Right next-window
|
||||||
|
|
||||||
|
# Shift Alt vim keys to switch windows
|
||||||
|
bind -n M-H previous-window
|
||||||
|
bind -n M-L next-window
|
||||||
|
|
||||||
|
set -g @plugin 'dreamsofcode-io/catppuccin-tmux'
|
||||||
|
set -g @catppuccin_flavour 'mocha'
|
||||||
|
# set -g @plugin 'niksingh710/minimal-tmux-status'
|
||||||
|
|
||||||
|
set -g @plugin 'tmux-plugins/tpm'
|
||||||
|
set -g @plugin 'tmux-plugins/tmux-sensible'
|
||||||
|
set -g @plugin 'christoomey/vim-tmux-navigator'
|
||||||
|
set -g @plugin 'tmux-plugins/tmux-yank'
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
set -g status-bg default
|
||||||
|
set -g status-style bg=default
|
||||||
|
|
||||||
|
set -g status-left-length 100
|
||||||
|
set -g status-left-style default
|
||||||
|
set -g status-left " "
|
||||||
|
set -g status-right-length 100
|
||||||
|
set -g status-right-style default
|
||||||
|
set -g status-right " "
|
||||||
|
|
||||||
|
|
||||||
|
# set vi-mode
|
||||||
|
set-window-option -g mode-keys vi
|
||||||
|
# keybindings
|
||||||
|
bind-key -T copy-mode-vi v send-keys -X begin-selection
|
||||||
|
bind-key -T copy-mode-vi C-v send-keys -X rectangle-toggle
|
||||||
|
bind-key -T copy-mode-vi y send-keys -X copy-selection-and-cancel
|
||||||
|
|
||||||
|
bind-key b set-option status
|
||||||
|
|
||||||
|
bind '"' split-window -v -c "#{pane_current_path}"
|
||||||
|
bind % split-window -h -c "#{pane_current_path}"
|
||||||
731
flake.lock
generated
Normal file
731
flake.lock
generated
Normal file
@@ -0,0 +1,731 @@
|
|||||||
|
{
|
||||||
|
"nodes": {
|
||||||
|
"aquamarine": {
|
||||||
|
"inputs": {
|
||||||
|
"hyprutils": [
|
||||||
|
"hyprland",
|
||||||
|
"hyprutils"
|
||||||
|
],
|
||||||
|
"hyprwayland-scanner": [
|
||||||
|
"hyprland",
|
||||||
|
"hyprwayland-scanner"
|
||||||
|
],
|
||||||
|
"nixpkgs": [
|
||||||
|
"hyprland",
|
||||||
|
"nixpkgs"
|
||||||
|
],
|
||||||
|
"systems": [
|
||||||
|
"hyprland",
|
||||||
|
"systems"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1767024902,
|
||||||
|
"narHash": "sha256-sMdk6QkMDhIOnvULXKUM8WW8iyi551SWw2i6KQHbrrU=",
|
||||||
|
"owner": "hyprwm",
|
||||||
|
"repo": "aquamarine",
|
||||||
|
"rev": "b8a0c5ba5a9fbd2c660be7dd98bdde0ff3798556",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "hyprwm",
|
||||||
|
"repo": "aquamarine",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"firefox-keyfox-theme": {
|
||||||
|
"flake": false,
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1764929602,
|
||||||
|
"narHash": "sha256-Ri30xBBhdApdOhdzt0b+qWcpILM1RPmngUS2VW+V8As=",
|
||||||
|
"owner": "alfaaarex",
|
||||||
|
"repo": "keyfox",
|
||||||
|
"rev": "860cc570fc5b888a01fb6f0519a4c5dbfb356d9f",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "alfaaarex",
|
||||||
|
"repo": "keyfox",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"flake-compat": {
|
||||||
|
"flake": false,
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1767039857,
|
||||||
|
"narHash": "sha256-vNpUSpF5Nuw8xvDLj2KCwwksIbjua2LZCqhV1LNRDns=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "flake-compat",
|
||||||
|
"rev": "5edf11c44bc78a0d334f6334cdaf7d60d732daab",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "flake-compat",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"flake-utils": {
|
||||||
|
"inputs": {
|
||||||
|
"systems": "systems_3"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1731533236,
|
||||||
|
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"gitignore": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"hyprland",
|
||||||
|
"pre-commit-hooks",
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1709087332,
|
||||||
|
"narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=",
|
||||||
|
"owner": "hercules-ci",
|
||||||
|
"repo": "gitignore.nix",
|
||||||
|
"rev": "637db329424fd7e46cf4185293b9cc8c88c95394",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "hercules-ci",
|
||||||
|
"repo": "gitignore.nix",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"home-manager": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1768942641,
|
||||||
|
"narHash": "sha256-i25tkhqjsfo0YKz8To/+gzazW1v4f8qUGqJQ8OLrkqE=",
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "home-manager",
|
||||||
|
"rev": "9997de2f62d1875644f02ddf96cf485a4baecb6f",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "home-manager",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"hyprcursor": {
|
||||||
|
"inputs": {
|
||||||
|
"hyprlang": [
|
||||||
|
"hyprland",
|
||||||
|
"hyprlang"
|
||||||
|
],
|
||||||
|
"nixpkgs": [
|
||||||
|
"hyprland",
|
||||||
|
"nixpkgs"
|
||||||
|
],
|
||||||
|
"systems": [
|
||||||
|
"hyprland",
|
||||||
|
"systems"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1753964049,
|
||||||
|
"narHash": "sha256-lIqabfBY7z/OANxHoPeIrDJrFyYy9jAM4GQLzZ2feCM=",
|
||||||
|
"owner": "hyprwm",
|
||||||
|
"repo": "hyprcursor",
|
||||||
|
"rev": "44e91d467bdad8dcf8bbd2ac7cf49972540980a5",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "hyprwm",
|
||||||
|
"repo": "hyprcursor",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"hyprgraphics": {
|
||||||
|
"inputs": {
|
||||||
|
"hyprutils": [
|
||||||
|
"hyprland",
|
||||||
|
"hyprutils"
|
||||||
|
],
|
||||||
|
"nixpkgs": [
|
||||||
|
"hyprland",
|
||||||
|
"nixpkgs"
|
||||||
|
],
|
||||||
|
"systems": [
|
||||||
|
"hyprland",
|
||||||
|
"systems"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1766946335,
|
||||||
|
"narHash": "sha256-MRD+Jr2bY11MzNDfenENhiK6pvN+nHygxdHoHbZ1HtE=",
|
||||||
|
"owner": "hyprwm",
|
||||||
|
"repo": "hyprgraphics",
|
||||||
|
"rev": "4af02a3925b454deb1c36603843da528b67ded6c",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "hyprwm",
|
||||||
|
"repo": "hyprgraphics",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"hyprland": {
|
||||||
|
"inputs": {
|
||||||
|
"aquamarine": "aquamarine",
|
||||||
|
"hyprcursor": "hyprcursor",
|
||||||
|
"hyprgraphics": "hyprgraphics",
|
||||||
|
"hyprland-guiutils": "hyprland-guiutils",
|
||||||
|
"hyprland-protocols": "hyprland-protocols",
|
||||||
|
"hyprlang": "hyprlang",
|
||||||
|
"hyprutils": "hyprutils",
|
||||||
|
"hyprwayland-scanner": "hyprwayland-scanner",
|
||||||
|
"hyprwire": "hyprwire",
|
||||||
|
"nixpkgs": "nixpkgs",
|
||||||
|
"pre-commit-hooks": "pre-commit-hooks",
|
||||||
|
"systems": "systems",
|
||||||
|
"xdph": "xdph"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1768919552,
|
||||||
|
"narHash": "sha256-ixrDZEr5iwbzjGMbrknWSt8mb+EevYGZ0r291zo/KWg=",
|
||||||
|
"owner": "hyprwm",
|
||||||
|
"repo": "Hyprland",
|
||||||
|
"rev": "c44292c72339b3d7820ca7444d45bab7e34ec74e",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "hyprwm",
|
||||||
|
"repo": "Hyprland",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"hyprland-guiutils": {
|
||||||
|
"inputs": {
|
||||||
|
"aquamarine": [
|
||||||
|
"hyprland",
|
||||||
|
"aquamarine"
|
||||||
|
],
|
||||||
|
"hyprgraphics": [
|
||||||
|
"hyprland",
|
||||||
|
"hyprgraphics"
|
||||||
|
],
|
||||||
|
"hyprlang": [
|
||||||
|
"hyprland",
|
||||||
|
"hyprlang"
|
||||||
|
],
|
||||||
|
"hyprtoolkit": "hyprtoolkit",
|
||||||
|
"hyprutils": [
|
||||||
|
"hyprland",
|
||||||
|
"hyprutils"
|
||||||
|
],
|
||||||
|
"hyprwayland-scanner": [
|
||||||
|
"hyprland",
|
||||||
|
"hyprwayland-scanner"
|
||||||
|
],
|
||||||
|
"nixpkgs": [
|
||||||
|
"hyprland",
|
||||||
|
"nixpkgs"
|
||||||
|
],
|
||||||
|
"systems": [
|
||||||
|
"hyprland",
|
||||||
|
"systems"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1767023960,
|
||||||
|
"narHash": "sha256-R2HgtVS1G3KSIKAQ77aOZ+Q0HituOmPgXW9nBNkpp3Q=",
|
||||||
|
"owner": "hyprwm",
|
||||||
|
"repo": "hyprland-guiutils",
|
||||||
|
"rev": "c2e906261142f5dd1ee0bfc44abba23e2754c660",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "hyprwm",
|
||||||
|
"repo": "hyprland-guiutils",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"hyprland-plugins": {
|
||||||
|
"inputs": {
|
||||||
|
"hyprland": [
|
||||||
|
"hyprland"
|
||||||
|
],
|
||||||
|
"nixpkgs": [
|
||||||
|
"hyprland-plugins",
|
||||||
|
"hyprland",
|
||||||
|
"nixpkgs"
|
||||||
|
],
|
||||||
|
"systems": [
|
||||||
|
"hyprland-plugins",
|
||||||
|
"hyprland",
|
||||||
|
"systems"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1767723101,
|
||||||
|
"narHash": "sha256-jObY8O7OI+91hoE137APsDxm0235/Yx+HhFIip187zM=",
|
||||||
|
"owner": "hyprwm",
|
||||||
|
"repo": "hyprland-plugins",
|
||||||
|
"rev": "fef398ed5e4faf59bc43b915e46a75cfe8b16697",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "hyprwm",
|
||||||
|
"repo": "hyprland-plugins",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"hyprland-protocols": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"hyprland",
|
||||||
|
"nixpkgs"
|
||||||
|
],
|
||||||
|
"systems": [
|
||||||
|
"hyprland",
|
||||||
|
"systems"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1765214753,
|
||||||
|
"narHash": "sha256-P9zdGXOzToJJgu5sVjv7oeOGPIIwrd9hAUAP3PsmBBs=",
|
||||||
|
"owner": "hyprwm",
|
||||||
|
"repo": "hyprland-protocols",
|
||||||
|
"rev": "3f3860b869014c00e8b9e0528c7b4ddc335c21ab",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "hyprwm",
|
||||||
|
"repo": "hyprland-protocols",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"hyprlang": {
|
||||||
|
"inputs": {
|
||||||
|
"hyprutils": [
|
||||||
|
"hyprland",
|
||||||
|
"hyprutils"
|
||||||
|
],
|
||||||
|
"nixpkgs": [
|
||||||
|
"hyprland",
|
||||||
|
"nixpkgs"
|
||||||
|
],
|
||||||
|
"systems": [
|
||||||
|
"hyprland",
|
||||||
|
"systems"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1764612430,
|
||||||
|
"narHash": "sha256-54ltTSbI6W+qYGMchAgCR6QnC1kOdKXN6X6pJhOWxFg=",
|
||||||
|
"owner": "hyprwm",
|
||||||
|
"repo": "hyprlang",
|
||||||
|
"rev": "0d00dc118981531aa731150b6ea551ef037acddd",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "hyprwm",
|
||||||
|
"repo": "hyprlang",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"hyprtoolkit": {
|
||||||
|
"inputs": {
|
||||||
|
"aquamarine": [
|
||||||
|
"hyprland",
|
||||||
|
"hyprland-guiutils",
|
||||||
|
"aquamarine"
|
||||||
|
],
|
||||||
|
"hyprgraphics": [
|
||||||
|
"hyprland",
|
||||||
|
"hyprland-guiutils",
|
||||||
|
"hyprgraphics"
|
||||||
|
],
|
||||||
|
"hyprlang": [
|
||||||
|
"hyprland",
|
||||||
|
"hyprland-guiutils",
|
||||||
|
"hyprlang"
|
||||||
|
],
|
||||||
|
"hyprutils": [
|
||||||
|
"hyprland",
|
||||||
|
"hyprland-guiutils",
|
||||||
|
"hyprutils"
|
||||||
|
],
|
||||||
|
"hyprwayland-scanner": [
|
||||||
|
"hyprland",
|
||||||
|
"hyprland-guiutils",
|
||||||
|
"hyprwayland-scanner"
|
||||||
|
],
|
||||||
|
"nixpkgs": [
|
||||||
|
"hyprland",
|
||||||
|
"hyprland-guiutils",
|
||||||
|
"nixpkgs"
|
||||||
|
],
|
||||||
|
"systems": [
|
||||||
|
"hyprland",
|
||||||
|
"hyprland-guiutils",
|
||||||
|
"systems"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1764592794,
|
||||||
|
"narHash": "sha256-7CcO+wbTJ1L1NBQHierHzheQGPWwkIQug/w+fhTAVuU=",
|
||||||
|
"owner": "hyprwm",
|
||||||
|
"repo": "hyprtoolkit",
|
||||||
|
"rev": "5cfe0743f0e608e1462972303778d8a0859ee63e",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "hyprwm",
|
||||||
|
"repo": "hyprtoolkit",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"hyprutils": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"hyprland",
|
||||||
|
"nixpkgs"
|
||||||
|
],
|
||||||
|
"systems": [
|
||||||
|
"hyprland",
|
||||||
|
"systems"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1766253372,
|
||||||
|
"narHash": "sha256-1+p4Kw8HdtMoFSmJtfdwjxM4bPxDK9yg27SlvUMpzWA=",
|
||||||
|
"owner": "hyprwm",
|
||||||
|
"repo": "hyprutils",
|
||||||
|
"rev": "51a4f93ce8572e7b12b7284eb9e6e8ebf16b4be9",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "hyprwm",
|
||||||
|
"repo": "hyprutils",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"hyprwayland-scanner": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"hyprland",
|
||||||
|
"nixpkgs"
|
||||||
|
],
|
||||||
|
"systems": [
|
||||||
|
"hyprland",
|
||||||
|
"systems"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1763640274,
|
||||||
|
"narHash": "sha256-Uan1Nl9i4TF/kyFoHnTq1bd/rsWh4GAK/9/jDqLbY5A=",
|
||||||
|
"owner": "hyprwm",
|
||||||
|
"repo": "hyprwayland-scanner",
|
||||||
|
"rev": "f6cf414ca0e16a4d30198fd670ec86df3c89f671",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "hyprwm",
|
||||||
|
"repo": "hyprwayland-scanner",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"hyprwire": {
|
||||||
|
"inputs": {
|
||||||
|
"hyprutils": [
|
||||||
|
"hyprland",
|
||||||
|
"hyprutils"
|
||||||
|
],
|
||||||
|
"nixpkgs": [
|
||||||
|
"hyprland",
|
||||||
|
"nixpkgs"
|
||||||
|
],
|
||||||
|
"systems": [
|
||||||
|
"hyprland",
|
||||||
|
"systems"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1767473322,
|
||||||
|
"narHash": "sha256-RGOeG+wQHeJ6BKcsSB8r0ZU77g9mDvoQzoTKj2dFHwA=",
|
||||||
|
"owner": "hyprwm",
|
||||||
|
"repo": "hyprwire",
|
||||||
|
"rev": "d5e7d6b49fe780353c1cf9a1cf39fa8970bd9d11",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "hyprwm",
|
||||||
|
"repo": "hyprwire",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"kwin-effects-forceblur": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs"
|
||||||
|
],
|
||||||
|
"utils": "utils"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1755098995,
|
||||||
|
"narHash": "sha256-6FN7XEf27DenQHDIKjrjOW3tGIaJlyqRlXarmt1v+M0=",
|
||||||
|
"owner": "taj-ny",
|
||||||
|
"repo": "kwin-effects-forceblur",
|
||||||
|
"rev": "51a1d49d7fd7df3ce40ccf6ba4c4410cf6f510e1",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "taj-ny",
|
||||||
|
"repo": "kwin-effects-forceblur",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1767379071,
|
||||||
|
"narHash": "sha256-EgE0pxsrW9jp9YFMkHL9JMXxcqi/OoumPJYwf+Okucw=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "fb7944c166a3b630f177938e478f0378e64ce108",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "nixos-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs_2": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1768886240,
|
||||||
|
"narHash": "sha256-C2TjvwYZ2VDxYWeqvvJ5XPPp6U7H66zeJlRaErJKoEM=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "80e4adbcf8992d3fd27ad4964fbb84907f9478b0",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "nixos-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nvchad-starter": {
|
||||||
|
"flake": false,
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1753939018,
|
||||||
|
"narHash": "sha256-xdLr6tlU9uA+wu0pqha2br0fdVm+1MjgjbB5awz9ICU=",
|
||||||
|
"owner": "NvChad",
|
||||||
|
"repo": "starter",
|
||||||
|
"rev": "e3572e1f5e1c297212c3deeb17b7863139ce663e",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NvChad",
|
||||||
|
"ref": "main",
|
||||||
|
"repo": "starter",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nvchad4nix": {
|
||||||
|
"inputs": {
|
||||||
|
"flake-utils": "flake-utils",
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs"
|
||||||
|
],
|
||||||
|
"nvchad-starter": "nvchad-starter"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1768710268,
|
||||||
|
"narHash": "sha256-45Whm5k/sNiBzGJWKJvz50Z9NQVycXmM2bb0YBzsT9U=",
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "nix4nvchad",
|
||||||
|
"rev": "25267531fec57db1b3c55e6646c1ea8c9721bac6",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "nix4nvchad",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"pre-commit-hooks": {
|
||||||
|
"inputs": {
|
||||||
|
"flake-compat": "flake-compat",
|
||||||
|
"gitignore": "gitignore",
|
||||||
|
"nixpkgs": [
|
||||||
|
"hyprland",
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1767281941,
|
||||||
|
"narHash": "sha256-6MkqajPICgugsuZ92OMoQcgSHnD6sJHwk8AxvMcIgTE=",
|
||||||
|
"owner": "cachix",
|
||||||
|
"repo": "git-hooks.nix",
|
||||||
|
"rev": "f0927703b7b1c8d97511c4116eb9b4ec6645a0fa",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "cachix",
|
||||||
|
"repo": "git-hooks.nix",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"quickshell": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1769593411,
|
||||||
|
"narHash": "sha256-WW00FaBiUmQyxvSbefvgxIjwf/WmRrEGBbwMHvW/7uQ=",
|
||||||
|
"ref": "refs/heads/master",
|
||||||
|
"rev": "1e4d804e7f3fa7465811030e8da2bf10d544426a",
|
||||||
|
"revCount": 732,
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://git.outfoxxed.me/quickshell/quickshell"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://git.outfoxxed.me/quickshell/quickshell"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": {
|
||||||
|
"inputs": {
|
||||||
|
"firefox-keyfox-theme": "firefox-keyfox-theme",
|
||||||
|
"home-manager": "home-manager",
|
||||||
|
"hyprland": "hyprland",
|
||||||
|
"hyprland-plugins": "hyprland-plugins",
|
||||||
|
"kwin-effects-forceblur": "kwin-effects-forceblur",
|
||||||
|
"nixpkgs": "nixpkgs_2",
|
||||||
|
"nvchad4nix": "nvchad4nix",
|
||||||
|
"quickshell": "quickshell"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"systems": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1689347949,
|
||||||
|
"narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=",
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default-linux",
|
||||||
|
"rev": "31732fcf5e8fea42e59c2488ad31a0e651500f68",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default-linux",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"systems_2": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1681028828,
|
||||||
|
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default",
|
||||||
|
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"systems_3": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1681028828,
|
||||||
|
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default",
|
||||||
|
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"utils": {
|
||||||
|
"inputs": {
|
||||||
|
"systems": "systems_2"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1726560853,
|
||||||
|
"narHash": "sha256-X6rJYSESBVr3hBoH0WbKE5KvhPU5bloyZ2L4K60/fPQ=",
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"rev": "c1dfcf08411b08f6b8615f7d8971a2bfa81d5e8a",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"xdph": {
|
||||||
|
"inputs": {
|
||||||
|
"hyprland-protocols": [
|
||||||
|
"hyprland",
|
||||||
|
"hyprland-protocols"
|
||||||
|
],
|
||||||
|
"hyprlang": [
|
||||||
|
"hyprland",
|
||||||
|
"hyprlang"
|
||||||
|
],
|
||||||
|
"hyprutils": [
|
||||||
|
"hyprland",
|
||||||
|
"hyprutils"
|
||||||
|
],
|
||||||
|
"hyprwayland-scanner": [
|
||||||
|
"hyprland",
|
||||||
|
"hyprwayland-scanner"
|
||||||
|
],
|
||||||
|
"nixpkgs": [
|
||||||
|
"hyprland",
|
||||||
|
"nixpkgs"
|
||||||
|
],
|
||||||
|
"systems": [
|
||||||
|
"hyprland",
|
||||||
|
"systems"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1761431178,
|
||||||
|
"narHash": "sha256-xzjC1CV3+wpUQKNF+GnadnkeGUCJX+vgaWIZsnz9tzI=",
|
||||||
|
"owner": "hyprwm",
|
||||||
|
"repo": "xdg-desktop-portal-hyprland",
|
||||||
|
"rev": "4b8801228ff958d028f588f0c2b911dbf32297f9",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "hyprwm",
|
||||||
|
"repo": "xdg-desktop-portal-hyprland",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": "root",
|
||||||
|
"version": 7
|
||||||
|
}
|
||||||
79
flake.nix
Normal file
79
flake.nix
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
{
|
||||||
|
description = "Joes Nix Setup";
|
||||||
|
|
||||||
|
inputs = {
|
||||||
|
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||||
|
|
||||||
|
home-manager = {
|
||||||
|
url = "github:nix-community/home-manager";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
nvchad4nix = {
|
||||||
|
url = "github:nix-community/nix4nvchad";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
hyprland = {
|
||||||
|
url = "github:hyprwm/Hyprland";
|
||||||
|
};
|
||||||
|
hyprland-plugins = {
|
||||||
|
url = "github:hyprwm/hyprland-plugins";
|
||||||
|
inputs.hyprland.follows = "hyprland";
|
||||||
|
};
|
||||||
|
kwin-effects-forceblur = {
|
||||||
|
url = "github:taj-ny/kwin-effects-forceblur";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
|
||||||
|
quickshell = {
|
||||||
|
url = "git+https://git.outfoxxed.me/quickshell/quickshell";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
|
||||||
|
firefox-keyfox-theme = {
|
||||||
|
url = "github:alfaaarex/keyfox";
|
||||||
|
flake = false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
outputs =
|
||||||
|
{ self, nixpkgs, ... }@inputs:
|
||||||
|
{
|
||||||
|
nixosConfigurations = {
|
||||||
|
server = nixpkgs.lib.nixosSystem {
|
||||||
|
specialArgs = { inherit inputs; };
|
||||||
|
system = "x86_64-linux";
|
||||||
|
modules = [
|
||||||
|
./nixcore.nix
|
||||||
|
./locale.nix
|
||||||
|
./system.nix
|
||||||
|
];
|
||||||
|
};
|
||||||
|
specter = nixpkgs.lib.nixosSystem {
|
||||||
|
specialArgs = { inherit inputs; };
|
||||||
|
system = "x86_64-linux";
|
||||||
|
modules = [
|
||||||
|
./nixcore.nix
|
||||||
|
./terminal.nix
|
||||||
|
./system.nix
|
||||||
|
./laptop.nix
|
||||||
|
./hardware.specter.nix
|
||||||
|
./sound.nix
|
||||||
|
./locale.nix
|
||||||
|
./development_tools.nix
|
||||||
|
./desktop.nix
|
||||||
|
./user.nix
|
||||||
|
./fonts.nix
|
||||||
|
./networking.nix
|
||||||
|
./logi.nix
|
||||||
|
./home.nix
|
||||||
|
./dotfiles.nix
|
||||||
|
./qmk.nix
|
||||||
|
./bluetooth.nix
|
||||||
|
./monitor.nix
|
||||||
|
./personal_apps.nix
|
||||||
|
./greetd.nix
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
13
flakes/rust.nix
Normal file
13
flakes/rust.nix
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
{
|
||||||
|
description = "A simple rust environment";
|
||||||
|
inputs = { nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable"; };
|
||||||
|
outputs = { self, nixpkgs }:
|
||||||
|
let
|
||||||
|
system = "x86_64-linux";
|
||||||
|
pkgs = import nixpkgs { inherit system; };
|
||||||
|
in {
|
||||||
|
devShells.${system}.default = pkgs.mkShell {
|
||||||
|
packages = [ pkgs.rustc pkgs.cargo pkgs.rust-analyzer ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
37
fonts.nix
Normal file
37
fonts.nix
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
{
|
||||||
|
fonts.enableDefaultPackages = true;
|
||||||
|
fonts.packages = with pkgs; [
|
||||||
|
nerd-fonts.droid-sans-mono
|
||||||
|
nerd-fonts.fira-code
|
||||||
|
fira
|
||||||
|
jetbrains-mono
|
||||||
|
nerd-fonts.jetbrains-mono
|
||||||
|
iosevka
|
||||||
|
roboto
|
||||||
|
inter
|
||||||
|
source-code-pro
|
||||||
|
source-sans-pro
|
||||||
|
source-serif-pro
|
||||||
|
inconsolata
|
||||||
|
];
|
||||||
|
|
||||||
|
fonts.fontconfig = {
|
||||||
|
antialias = true;
|
||||||
|
cache32Bit = true;
|
||||||
|
hinting.enable = true;
|
||||||
|
hinting.autohint = true;
|
||||||
|
subpixel.rgba = "rgb";
|
||||||
|
defaultFonts = {
|
||||||
|
monospace = [ "Source Code Pro" ];
|
||||||
|
sansSerif = [ "Source Sans Pro" ];
|
||||||
|
serif = [ "Source Serif Pro" ];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
37
greetd.nix
Normal file
37
greetd.nix
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
{
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
inputs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
tuigreet = "${pkgs.tuigreet}/bin/tuigreet";
|
||||||
|
niri-session = "${pkgs.niri}/bin/niri-session";
|
||||||
|
hyprland-session = "${pkgs.hyprland}/share/wayland-sessions";
|
||||||
|
in
|
||||||
|
{
|
||||||
|
services.greetd = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
default_session = {
|
||||||
|
command = "${pkgs.tuigreet}/bin/tuigreet --sessions ${config.services.displayManager.sessionData.desktops}/share/xsessions:${config.services.displayManager.sessionData.desktops}/share/wayland-sessions --remember --remember-user-session";
|
||||||
|
user = "greeter";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# this is a life saver.
|
||||||
|
# literally no documentation about this anywhere.
|
||||||
|
# might be good to write about this...
|
||||||
|
# https://www.reddit.com/r/NixOS/comments/u0cdpi/tuigreet_with_xmonad_how/
|
||||||
|
systemd.services.greetd.serviceConfig = {
|
||||||
|
Type = "idle";
|
||||||
|
StandardInput = "tty";
|
||||||
|
StandardOutput = "tty";
|
||||||
|
StandardError = "journal"; # Without this errors will spam on screen
|
||||||
|
# Without these bootlogs will spam on screen
|
||||||
|
TTYReset = true;
|
||||||
|
TTYVHangup = true;
|
||||||
|
TTYVTDisallocate = true;
|
||||||
|
};
|
||||||
|
}
|
||||||
142
hardware.specter.nix
Normal file
142
hardware.specter.nix
Normal file
@@ -0,0 +1,142 @@
|
|||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
modulesPath,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
{
|
||||||
|
imports = [ (modulesPath + "/installer/scan/not-detected.nix") ];
|
||||||
|
|
||||||
|
boot.initrd.availableKernelModules = [
|
||||||
|
"nvme"
|
||||||
|
"xhci_pci"
|
||||||
|
"thunderbolt"
|
||||||
|
"usbhid"
|
||||||
|
"usb_storage"
|
||||||
|
"sd_mod"
|
||||||
|
];
|
||||||
|
boot.initrd.kernelModules = [ ];
|
||||||
|
boot.kernelModules = [ "kvm-amd" ];
|
||||||
|
# boot.extraModulePackages = [ config.boot.kernelPackages.exfat-nofuse ];
|
||||||
|
boot.extraModulePackages = [ ];
|
||||||
|
boot.loader.systemd-boot.enable = true;
|
||||||
|
boot.loader.efi.canTouchEfiVariables = true;
|
||||||
|
networking.hostName = "specter";
|
||||||
|
services.xserver.videoDrivers = [ "amdgpu" ];
|
||||||
|
|
||||||
|
fileSystems."/" = {
|
||||||
|
device = "/dev/disk/by-uuid/ec9bc14c-0c84-417a-87cc-86b463542958";
|
||||||
|
fsType = "ext4";
|
||||||
|
};
|
||||||
|
|
||||||
|
fileSystems."/boot" = {
|
||||||
|
device = "/dev/disk/by-uuid/DBDB-72C3";
|
||||||
|
fsType = "vfat";
|
||||||
|
options = [
|
||||||
|
"fmask=0022"
|
||||||
|
"dmask=0022"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
fileSystems."/home/joe/projects" = {
|
||||||
|
device = "/dev/disk/by-uuid/82f95a15-f3d0-4eb9-843d-9eab68491e7c";
|
||||||
|
fsType = "btrfs";
|
||||||
|
};
|
||||||
|
|
||||||
|
fileSystems."/home/joe/backup" = {
|
||||||
|
device = "/dev/disk/by-uuid/83503573-ddc4-4291-a515-b877f1d85c39";
|
||||||
|
fsType = "ext4";
|
||||||
|
options = [
|
||||||
|
"x-systemd.automount"
|
||||||
|
"noauto"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
# fileSystems."/home/joe/travel" = {
|
||||||
|
# device = "/dev/disk/by-uuid/0D7A-0971";
|
||||||
|
# fsType = "vfat";
|
||||||
|
# options = [
|
||||||
|
# "x-systemd.automount"
|
||||||
|
# "noauto"
|
||||||
|
# "nofail",
|
||||||
|
# "uid=1000"
|
||||||
|
# "gid=100"
|
||||||
|
# "dmask=007"
|
||||||
|
# "fmask=117"
|
||||||
|
# ];
|
||||||
|
# };
|
||||||
|
|
||||||
|
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
|
||||||
|
# (the default) this is the recommended approach. When using systemd-networkd it's
|
||||||
|
# still possible to use this option, but it's recommended to use it in conjunction
|
||||||
|
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
|
||||||
|
networking.useDHCP = lib.mkDefault true;
|
||||||
|
# networking.interfaces.wlp5s0.useDHCP = lib.mkDefault true;
|
||||||
|
|
||||||
|
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
||||||
|
hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
||||||
|
|
||||||
|
# Workaround for SuspendThenHibernate: https://lore.kernel.org/linux-kernel/20231106162310.85711-1-mario.limonciello@amd.com/
|
||||||
|
boot.kernelParams =
|
||||||
|
lib.optionals (lib.versionOlder config.boot.kernelPackages.kernel.version "6.8")
|
||||||
|
[ "rtc_cmos.use_acpi_alarm=1" ];
|
||||||
|
|
||||||
|
# AMD has better battery life with PPD over TLP:
|
||||||
|
# https://community.frame.work/t/responded-amd-7040-sleep-states/38101/13
|
||||||
|
services.power-profiles-daemon.enable = lib.mkDefault true;
|
||||||
|
services.upower.enable = true;
|
||||||
|
|
||||||
|
# Fix TRRS headphones missing a mic
|
||||||
|
# https://community.frame.work/t/headset-microphone-on-linux/12387/3
|
||||||
|
boot.extraModprobeConfig = lib.mkIf (lib.versionOlder pkgs.linux.version "6.6.8") ''
|
||||||
|
options snd-hda-intel model=dell-headset-multi
|
||||||
|
'';
|
||||||
|
|
||||||
|
# For fingerprint support
|
||||||
|
services.fprintd.enable = lib.mkDefault true;
|
||||||
|
# security.pam.services.login.fprintAuth = false;
|
||||||
|
|
||||||
|
# Custom udev rules
|
||||||
|
services.udev.extraRules = ''
|
||||||
|
# Ethernet expansion card support
|
||||||
|
ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="0bda", ATTR{idProduct}=="8156", ATTR{power/autosuspend}="20"
|
||||||
|
# LED MATRIX
|
||||||
|
# SUBSYSTEMS=="usb", ATTRS{idVendor}=="32ac", ATTRS{idProduct}=="0020", MODE="0660", TAG+="uaccess"
|
||||||
|
'';
|
||||||
|
|
||||||
|
services.pulseaudio.enable = false;
|
||||||
|
security.rtkit.enable = true;
|
||||||
|
services.pipewire = {
|
||||||
|
enable = true;
|
||||||
|
alsa.enable = true;
|
||||||
|
alsa.support32Bit = true;
|
||||||
|
pulse.enable = true;
|
||||||
|
# If you want to use JACK applications, uncomment this
|
||||||
|
#jack.enable = true;
|
||||||
|
|
||||||
|
# use the example session manager (no others are packaged yet so this is enabled by default,
|
||||||
|
# no need to redefine it in your config for now)
|
||||||
|
#media-session.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
# Needed for desktop environments to detect/manage display brightness
|
||||||
|
hardware.sensor.iio.enable = lib.mkDefault true;
|
||||||
|
hardware.keyboard.qmk.enable = lib.mkDefault true;
|
||||||
|
|
||||||
|
# Allow `services.libinput.touchpad.disableWhileTyping` to work correctly.
|
||||||
|
# Set unconditionally because libinput can also be configured dynamically via
|
||||||
|
# gsettings.
|
||||||
|
services.libinput.touchpad.disableWhileTyping = true;
|
||||||
|
environment.etc."libinput/local-overrides.quirks".text = ''
|
||||||
|
[Framework Laptop 16 Keyboard Module]
|
||||||
|
MatchName=Framework Laptop 16 Keyboard Module*
|
||||||
|
MatchUdevType=keyboard
|
||||||
|
MatchDMIModalias=dmi:*svnFramework:pnLaptop16*
|
||||||
|
AttrKeyboardIntegration=internal
|
||||||
|
'';
|
||||||
|
|
||||||
|
# Everything is updateable through fwupd
|
||||||
|
services.fwupd.enable = true;
|
||||||
|
}
|
||||||
41
home.nix
Normal file
41
home.nix
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
{
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
inputs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
|
||||||
|
imports = [
|
||||||
|
inputs.home-manager.nixosModules.default
|
||||||
|
];
|
||||||
|
|
||||||
|
home-manager = {
|
||||||
|
useGlobalPkgs = true;
|
||||||
|
users.joe = {
|
||||||
|
home.stateVersion = "18.09";
|
||||||
|
xdg.enable = true;
|
||||||
|
|
||||||
|
xdg.desktopEntries.kitty_overlay = {
|
||||||
|
name = "Kitty Overlay";
|
||||||
|
genericName = "Kitten Overlay";
|
||||||
|
exec = "kitten quick-access-terminal";
|
||||||
|
terminal = false;
|
||||||
|
categories = [
|
||||||
|
"Application"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
xdg.desktopEntries.mongodb_compass = {
|
||||||
|
name = "MongoDB Compass (libsecret)";
|
||||||
|
genericName = "MongoDB GUI";
|
||||||
|
exec = "mongodb-compass --password-store=\"gnome-libsecret\" --ignore-additional-command-line-flags";
|
||||||
|
terminal = false;
|
||||||
|
categories = [
|
||||||
|
"Application"
|
||||||
|
"Database"
|
||||||
|
"Development"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
62
laptop.nix
Normal file
62
laptop.nix
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
let
|
||||||
|
emacsWithPackages = (pkgs.emacsPackagesFor pkgs.emacs30-pgtk).emacsWithPackages;
|
||||||
|
myemacs = emacsWithPackages (epkgs: [ epkgs.mu4e ]);
|
||||||
|
in
|
||||||
|
{
|
||||||
|
|
||||||
|
services.pcscd.enable = true;
|
||||||
|
services.fwupd.enable = true;
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
brightnessctl
|
||||||
|
ghostscript
|
||||||
|
fprintd
|
||||||
|
font-awesome
|
||||||
|
myemacs
|
||||||
|
virtiofsd
|
||||||
|
rocmPackages.rocm-smi
|
||||||
|
];
|
||||||
|
|
||||||
|
users.users.joe.packages = with pkgs; [
|
||||||
|
system76-keyboard-configurator
|
||||||
|
(import ./scripts/sat-connect.nix { inherit pkgs; })
|
||||||
|
];
|
||||||
|
|
||||||
|
programs.gnupg.agent = {
|
||||||
|
enable = true;
|
||||||
|
enableSSHSupport = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
services.acpid = {
|
||||||
|
enable = true;
|
||||||
|
handlers.lidClosed = {
|
||||||
|
event = "button/lid \\w+ close";
|
||||||
|
action = ''
|
||||||
|
cat /sys/class/backlight/amdgpu_bl2/device/enabled
|
||||||
|
if grep -Fxq disabled /sys/class/backlight/amdgpu_bl2/device/enabled
|
||||||
|
then
|
||||||
|
echo "Lid closed. Disabling fprintd."
|
||||||
|
systemctl stop fprintd
|
||||||
|
ln -s /dev/null /run/systemd/transient/fprintd.service
|
||||||
|
systemctl daemon-reload
|
||||||
|
fi
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
handlers.lidOpen = {
|
||||||
|
event = "button/lid \\w+ open";
|
||||||
|
action = ''
|
||||||
|
if ! $(systemctl is-active --quiet fprintd); then
|
||||||
|
echo "Lid open. Enabling fprintd."
|
||||||
|
rm -f /run/systemd/transient/fprintd.service
|
||||||
|
systemctl daemon-reload
|
||||||
|
systemctl start fprintd
|
||||||
|
fi
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
22
locale.nix
Normal file
22
locale.nix
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
{
|
||||||
|
time.timeZone = "America/Chicago";
|
||||||
|
i18n.defaultLocale = "en_US.UTF-8";
|
||||||
|
i18n.extraLocaleSettings = {
|
||||||
|
LC_ADDRESS = "en_US.UTF-8";
|
||||||
|
LC_IDENTIFICATION = "en_US.UTF-8";
|
||||||
|
LC_MEASUREMENT = "en_US.UTF-8";
|
||||||
|
LC_MONETARY = "en_US.UTF-8";
|
||||||
|
LC_NAME = "en_US.UTF-8";
|
||||||
|
LC_NUMERIC = "en_US.UTF-8";
|
||||||
|
LC_PAPER = "en_US.UTF-8";
|
||||||
|
LC_TELEPHONE = "en_US.UTF-8";
|
||||||
|
LC_TIME = "en_US.UTF-8";
|
||||||
|
};
|
||||||
|
}
|
||||||
79
logi.nix
Normal file
79
logi.nix
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
{ pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
# Install logiops package
|
||||||
|
environment.systemPackages = [ pkgs.logiops ];
|
||||||
|
|
||||||
|
# Create systemd service
|
||||||
|
systemd.services.logiops = {
|
||||||
|
description = "An unofficial userspace driver for HID++ Logitech devices";
|
||||||
|
serviceConfig = {
|
||||||
|
Type = "simple";
|
||||||
|
ExecStart = "${pkgs.logiops}/bin/logid";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# Configuration for logiops
|
||||||
|
environment.etc."logid.cfg".text = ''
|
||||||
|
devices: ({
|
||||||
|
name: "Wireless Mouse MX Master 3";
|
||||||
|
smartshift: {
|
||||||
|
on: true;
|
||||||
|
threshold: 12;
|
||||||
|
};
|
||||||
|
hiresscroll: {
|
||||||
|
hires: true;
|
||||||
|
target: false;
|
||||||
|
};
|
||||||
|
dpi: 1200;
|
||||||
|
buttons: ({
|
||||||
|
cid: 0xc3;
|
||||||
|
action = {
|
||||||
|
type: "Gestures";
|
||||||
|
gestures: ({
|
||||||
|
direction: "Left";
|
||||||
|
mode: "OnRelease";
|
||||||
|
action = {
|
||||||
|
type = "Keypress";
|
||||||
|
keys: ["KEY_F15"];
|
||||||
|
};
|
||||||
|
}, {
|
||||||
|
direction: "Right";
|
||||||
|
mode: "OnRelease";
|
||||||
|
action = {
|
||||||
|
type = "Keypress";
|
||||||
|
keys: ["KEY_F16"];
|
||||||
|
};
|
||||||
|
}, {
|
||||||
|
direction: "Down";
|
||||||
|
mode: "OnRelease";
|
||||||
|
action = {
|
||||||
|
type: "Keypress";
|
||||||
|
keys: ["KEY_F17"];
|
||||||
|
};
|
||||||
|
}, {
|
||||||
|
direction: "Up";
|
||||||
|
mode: "OnRelease";
|
||||||
|
action = {
|
||||||
|
type: "Keypress";
|
||||||
|
keys: ["KEY_F18"];
|
||||||
|
};
|
||||||
|
}, {
|
||||||
|
direction: "None";
|
||||||
|
mode: "OnRelease";
|
||||||
|
action = {
|
||||||
|
type = "Keypress";
|
||||||
|
keys: ["KEY_F14"];
|
||||||
|
};
|
||||||
|
});
|
||||||
|
};
|
||||||
|
}, {
|
||||||
|
cid: 0xc4;
|
||||||
|
action = {
|
||||||
|
type: "Keypress";
|
||||||
|
keys: ["KEY_F19"];
|
||||||
|
};
|
||||||
|
});
|
||||||
|
});
|
||||||
|
'';
|
||||||
|
}
|
||||||
54
monitor.nix
Normal file
54
monitor.nix
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
services.logind.settings.Login = {
|
||||||
|
HandleLidSwitch = "suspend";
|
||||||
|
HandleLidSwitchDocked = "ignore";
|
||||||
|
HandleLidSwitchExternalPower = "suspend";
|
||||||
|
};
|
||||||
|
|
||||||
|
home-manager.users.joe = {
|
||||||
|
services.kanshi = {
|
||||||
|
systemdTarget = "";
|
||||||
|
enable = true;
|
||||||
|
settings = [
|
||||||
|
{
|
||||||
|
profile.name = "undocked";
|
||||||
|
# profile.exec = "";
|
||||||
|
profile.outputs = [
|
||||||
|
{
|
||||||
|
criteria = "eDP-2";
|
||||||
|
status = "enable";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
profile.name = "docked";
|
||||||
|
# profile.exec = "";
|
||||||
|
profile.outputs = [
|
||||||
|
{
|
||||||
|
criteria = "eDP-2";
|
||||||
|
status = "disable";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
criteria = "DP-4";
|
||||||
|
status = "enable";
|
||||||
|
position = "0,0";
|
||||||
|
# mode = "5120x1440@60Hz";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
systemd.user.services.kanshi = {
|
||||||
|
enable = true;
|
||||||
|
description = "kanshi daemon";
|
||||||
|
wantedBy = [ ];
|
||||||
|
after = [ ];
|
||||||
|
serviceConfig = {
|
||||||
|
Type = "simple";
|
||||||
|
ExecStart = "${pkgs.kanshi}/bin/kanshi -c kanshi_config_file";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
15
networking.nix
Normal file
15
networking.nix
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
{
|
||||||
|
networking.extraHosts = "";
|
||||||
|
# fileSystems."/home/joe/media" = {
|
||||||
|
# device = "nas.5sigma.net:/share/media";
|
||||||
|
# fsType = "nfs";
|
||||||
|
# options = [ "x-systemd.automount" "noauto" "nofail" ];
|
||||||
|
# };
|
||||||
|
}
|
||||||
28
nixcore.nix
Normal file
28
nixcore.nix
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
{
|
||||||
|
system.stateVersion = "23.11"; # Did you read the comment?
|
||||||
|
nixpkgs.config.allowUnfree = true;
|
||||||
|
nix.settings.experimental-features = [
|
||||||
|
"nix-command"
|
||||||
|
"flakes"
|
||||||
|
];
|
||||||
|
nix.settings.trusted-users = [
|
||||||
|
"root"
|
||||||
|
"joe"
|
||||||
|
];
|
||||||
|
boot.tmp.cleanOnBoot = true;
|
||||||
|
users.users.joe.packages = with pkgs; [
|
||||||
|
(import ./scripts/rebuild.nix { inherit pkgs; })
|
||||||
|
(import ./scripts/rebuild-boot.nix { inherit pkgs; })
|
||||||
|
(import ./scripts/rebuild-dry.nix { inherit pkgs; })
|
||||||
|
(import ./scripts/nixupdate.nix { inherit pkgs; })
|
||||||
|
(import ./scripts/nixclean.nix { inherit pkgs; })
|
||||||
|
];
|
||||||
|
|
||||||
|
}
|
||||||
94
personal_apps.nix
Normal file
94
personal_apps.nix
Normal file
@@ -0,0 +1,94 @@
|
|||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
inputs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
virtualisation.docker.enable = true;
|
||||||
|
virtualisation.libvirtd.enable = true;
|
||||||
|
security.polkit.enable = true;
|
||||||
|
programs.virt-manager.enable = true;
|
||||||
|
|
||||||
|
services = {
|
||||||
|
gvfs.enable = true;
|
||||||
|
printing.enable = true;
|
||||||
|
printing.drivers = [ pkgs.brlaser ];
|
||||||
|
};
|
||||||
|
|
||||||
|
programs.steam.enable = true;
|
||||||
|
users.users.joe.packages = with pkgs; [
|
||||||
|
element-desktop
|
||||||
|
handbrake
|
||||||
|
luajitPackages.luarocks_bootstrap
|
||||||
|
texliveFull
|
||||||
|
darktable
|
||||||
|
qcad
|
||||||
|
spotify
|
||||||
|
octaveFull
|
||||||
|
gimp
|
||||||
|
inkscape
|
||||||
|
libreoffice-still
|
||||||
|
freecad
|
||||||
|
ocs-url
|
||||||
|
pandoc
|
||||||
|
teams-for-linux
|
||||||
|
krita
|
||||||
|
zoom-us
|
||||||
|
discord
|
||||||
|
proxmox-backup-client
|
||||||
|
blender
|
||||||
|
playerctl
|
||||||
|
gnucash
|
||||||
|
nomachine-client
|
||||||
|
proton-pass-cli
|
||||||
|
mattermost-desktop
|
||||||
|
font-awesome
|
||||||
|
];
|
||||||
|
|
||||||
|
# systemd.services."backup" = {
|
||||||
|
# script = ''
|
||||||
|
# export PBS_REPOSITORY='backup@pbs!workstation-backup@backup.5sigma.net:main'
|
||||||
|
# export PBS_PASSWORD='edd3be5c-2c75-4832-82f4-c1027361ae8d'
|
||||||
|
# ${pkgs.proxmox-backup-client}/bin/proxmox-backup-client backup nix.pxar:/home/joe/.config/nix projects.pxar:/home/joe/projects;
|
||||||
|
# '';
|
||||||
|
# serviceConfig = {
|
||||||
|
# Type = "oneshot";
|
||||||
|
# User = "joe";
|
||||||
|
# };
|
||||||
|
# wantedBy = [ "default.target" ];
|
||||||
|
# };
|
||||||
|
#
|
||||||
|
# systemd.timers."backup" = {
|
||||||
|
# enable = true;
|
||||||
|
# wantedBy = [ "timers.target" ];
|
||||||
|
# timerConfig = {
|
||||||
|
# OnBootSec = "15m";
|
||||||
|
# OnUnitActiveSec = "1d";
|
||||||
|
# Unit = "backup.service";
|
||||||
|
# };
|
||||||
|
# };
|
||||||
|
|
||||||
|
# EMAIL CHECKING
|
||||||
|
# systemd.timers."mail-check" = {
|
||||||
|
# enable = true;
|
||||||
|
# wantedBy = [ "timers.target" ];
|
||||||
|
# timerConfig = {
|
||||||
|
# OnBootSec = "5m";
|
||||||
|
# OnUnitActiveSec = "5m";
|
||||||
|
# Unit = "mail-check.service";
|
||||||
|
# };
|
||||||
|
# };
|
||||||
|
|
||||||
|
# systemd.services."mail-check" = {
|
||||||
|
# script = ''
|
||||||
|
# ${pkgs.isync}/bin/mbsync -a
|
||||||
|
# '';
|
||||||
|
# serviceConfig = {
|
||||||
|
# Type = "oneshot";
|
||||||
|
# User = "joe";
|
||||||
|
# };
|
||||||
|
# wantedBy = [ "default.target" ];
|
||||||
|
# };
|
||||||
|
}
|
||||||
18
qmk.nix
Normal file
18
qmk.nix
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
{
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
via
|
||||||
|
vial
|
||||||
|
fprintd
|
||||||
|
qmk
|
||||||
|
qmk_hid
|
||||||
|
];
|
||||||
|
hardware.keyboard.qmk.enable = lib.mkDefault true;
|
||||||
|
services.udev.packages = [ pkgs.via ];
|
||||||
|
}
|
||||||
34
scripts/new-elixir.nix
Normal file
34
scripts/new-elixir.nix
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
{ pkgs }:
|
||||||
|
|
||||||
|
pkgs.writeShellScriptBin "new-elixir" ''
|
||||||
|
nix-shell -p elixir --run "mix new $1 --sup"
|
||||||
|
cd $1
|
||||||
|
echo '
|
||||||
|
{
|
||||||
|
description = "$1";
|
||||||
|
|
||||||
|
inputs = { nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable"; };
|
||||||
|
|
||||||
|
outputs = { self, nixpkgs }:
|
||||||
|
let
|
||||||
|
system = "x86_64-linux";
|
||||||
|
pkgs = import nixpkgs { inherit system; };
|
||||||
|
erlang = pkgs.beam.packages.erlang_26.erlang;
|
||||||
|
elixir = pkgs.beam.packages.erlang_26.elixir;
|
||||||
|
in {
|
||||||
|
devShells.''${system}.default = pkgs.mkShell {
|
||||||
|
packages = [
|
||||||
|
pkgs.fswatch
|
||||||
|
erlang
|
||||||
|
elixir
|
||||||
|
pkgs.inotify-tools
|
||||||
|
pkgs.lexical
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
|
' > flake.nix
|
||||||
|
echo 'use flake' > .envrc
|
||||||
|
direnv allow
|
||||||
|
git init
|
||||||
|
''
|
||||||
8
scripts/nixclean.nix
Normal file
8
scripts/nixclean.nix
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
{ pkgs }:
|
||||||
|
|
||||||
|
pkgs.writeShellScriptBin "nixclean" ''
|
||||||
|
nix-collect-garbage -d
|
||||||
|
sudo -v
|
||||||
|
sudo nix-collect-garbage -d
|
||||||
|
rebuild
|
||||||
|
''
|
||||||
9
scripts/nixupdate.nix
Normal file
9
scripts/nixupdate.nix
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
{ pkgs }:
|
||||||
|
|
||||||
|
pkgs.writeShellScriptBin "nixupdate" ''
|
||||||
|
cd /home/joe/.config/nix
|
||||||
|
nix flake update
|
||||||
|
sudo -v
|
||||||
|
sudo nixos-rebuild --flake .#$hostname boot
|
||||||
|
sudo reboot
|
||||||
|
''
|
||||||
7
scripts/rebuild-boot.nix
Normal file
7
scripts/rebuild-boot.nix
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
{ pkgs }:
|
||||||
|
|
||||||
|
pkgs.writeShellScriptBin "rebuild-boot" ''
|
||||||
|
sudo -v
|
||||||
|
cd /home/joe/.config/nix
|
||||||
|
sudo nixos-rebuild --flake .#$hostname boot
|
||||||
|
''
|
||||||
7
scripts/rebuild-dry.nix
Normal file
7
scripts/rebuild-dry.nix
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
{ pkgs }:
|
||||||
|
|
||||||
|
pkgs.writeShellScriptBin "rebuild-dry" ''
|
||||||
|
sudo -v
|
||||||
|
cd /home/joe/.config/nix
|
||||||
|
sudo nixos-rebuild --flake .#$hostname dry-build
|
||||||
|
''
|
||||||
7
scripts/rebuild.nix
Normal file
7
scripts/rebuild.nix
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
{ pkgs }:
|
||||||
|
|
||||||
|
pkgs.writeShellScriptBin "rebuild" ''
|
||||||
|
sudo -v
|
||||||
|
cd /home/joe/.config/nix
|
||||||
|
sudo nixos-rebuild --flake .#$hostname switch
|
||||||
|
''
|
||||||
7
scripts/sat-connect.nix
Normal file
7
scripts/sat-connect.nix
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
{ pkgs }:
|
||||||
|
|
||||||
|
# nmcli dev wifi connect SIGMASat password `gpg -dq /home/joe/.wifi-password.gpg`
|
||||||
|
pkgs.writeShellScriptBin "sat-connect" ''
|
||||||
|
nmcli dev wifi list
|
||||||
|
nmcli dev wifi connect SIGMASat password itsallstars
|
||||||
|
''
|
||||||
5
scripts/tat.nix
Normal file
5
scripts/tat.nix
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
{ pkgs }:
|
||||||
|
|
||||||
|
pkgs.writeShellScriptBin "tat" ''
|
||||||
|
tmux new -A -s $(basename $(pwd))
|
||||||
|
''
|
||||||
13
sound.nix
Normal file
13
sound.nix
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
pavucontrol
|
||||||
|
alsa-utils
|
||||||
|
pamixer
|
||||||
|
];
|
||||||
|
}
|
||||||
16
system.nix
Normal file
16
system.nix
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
|
||||||
|
{
|
||||||
|
services = {
|
||||||
|
devmon.enable = true;
|
||||||
|
openssh.enable = true;
|
||||||
|
rpcbind.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
networking.networkmanager.enable = true;
|
||||||
|
}
|
||||||
169
terminal.nix
Normal file
169
terminal.nix
Normal file
@@ -0,0 +1,169 @@
|
|||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
{
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
util-linux
|
||||||
|
rclone
|
||||||
|
neovim
|
||||||
|
fd
|
||||||
|
jq
|
||||||
|
btop
|
||||||
|
lshw
|
||||||
|
gnupg
|
||||||
|
git
|
||||||
|
git-lfs
|
||||||
|
ranger
|
||||||
|
nixfmt
|
||||||
|
aspell
|
||||||
|
aspellDicts.en
|
||||||
|
aspellDicts.en-computers
|
||||||
|
aspellDicts.en-science
|
||||||
|
fishPlugins.done
|
||||||
|
fishPlugins.fzf-fish
|
||||||
|
fishPlugins.forgit
|
||||||
|
killall
|
||||||
|
nodejs
|
||||||
|
libtool
|
||||||
|
grc
|
||||||
|
fzf
|
||||||
|
ispell
|
||||||
|
fishPlugins.grc
|
||||||
|
unzip
|
||||||
|
ripgrep
|
||||||
|
usbutils
|
||||||
|
sqlite
|
||||||
|
silver-searcher
|
||||||
|
bat
|
||||||
|
exfatprogs
|
||||||
|
eza
|
||||||
|
screen
|
||||||
|
libsecret
|
||||||
|
cmake
|
||||||
|
gnumake
|
||||||
|
gcc
|
||||||
|
lazygit
|
||||||
|
];
|
||||||
|
|
||||||
|
programs.git = {
|
||||||
|
package = pkgs.gitFull;
|
||||||
|
enable = true;
|
||||||
|
config = {
|
||||||
|
user = {
|
||||||
|
email = "joe@5sigma.io";
|
||||||
|
};
|
||||||
|
# credential.helper = "libsecret";
|
||||||
|
};
|
||||||
|
# aliases = {
|
||||||
|
# aa = "add --all";
|
||||||
|
# c = "commit";
|
||||||
|
# co = "checkout";
|
||||||
|
# st = "status";
|
||||||
|
# };
|
||||||
|
};
|
||||||
|
|
||||||
|
programs.dconf.enable = true;
|
||||||
|
programs.partition-manager.enable = true;
|
||||||
|
|
||||||
|
environment.variables = {
|
||||||
|
EDITOR = "nvim";
|
||||||
|
ERL_AFLAGS = "-kernel shell_history enabled";
|
||||||
|
};
|
||||||
|
environment.sessionVariables.NIXOS_OZONE_WL = "1";
|
||||||
|
|
||||||
|
users.users.joe.shell = pkgs.nushell;
|
||||||
|
|
||||||
|
home-manager.users.joe = {
|
||||||
|
programs = {
|
||||||
|
starship = {
|
||||||
|
enableNushellIntegration = true;
|
||||||
|
enableFishIntegration = true;
|
||||||
|
enableBashIntegration = true;
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
add_newline = true;
|
||||||
|
character = {
|
||||||
|
success_symbol = "[➜](bold green)";
|
||||||
|
error_symbol = "[➜](bold red)";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
zoxide = {
|
||||||
|
enable = true;
|
||||||
|
enableFishIntegration = true;
|
||||||
|
enableNushellIntegration = true;
|
||||||
|
};
|
||||||
|
carapace = {
|
||||||
|
enable = true;
|
||||||
|
enableNushellIntegration = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
direnv = {
|
||||||
|
enable = true;
|
||||||
|
enableFishIntegration = true;
|
||||||
|
enableNushellIntegration = true;
|
||||||
|
enableBashIntegration = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
nushell = {
|
||||||
|
enable = true;
|
||||||
|
# The config.nu can be anywhere you want if you like to edit your Nushell with Nu
|
||||||
|
configFile.source = ./dotfiles/config.nu;
|
||||||
|
# for editing directly to config.nu
|
||||||
|
extraConfig = ''
|
||||||
|
let carapace_completer = {|spans|
|
||||||
|
carapace $spans.0 nushell ...$spans | from json
|
||||||
|
}
|
||||||
|
$env.config = {
|
||||||
|
show_banner: false,
|
||||||
|
completions: {
|
||||||
|
case_sensitive: false #
|
||||||
|
quick: true
|
||||||
|
partial: true
|
||||||
|
algorithm: "fuzzy"
|
||||||
|
external: {
|
||||||
|
enable: true
|
||||||
|
max_results: 100
|
||||||
|
completer: $carapace_completer # check 'carapace_completer'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$env.PATH = ($env.PATH |
|
||||||
|
split row (char esep) |
|
||||||
|
prepend /home/myuser/.apps |
|
||||||
|
append /usr/bin/env
|
||||||
|
)
|
||||||
|
'';
|
||||||
|
shellAliases = {
|
||||||
|
cat = "bat --theme ansi";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
programs = {
|
||||||
|
fish = {
|
||||||
|
enable = true;
|
||||||
|
shellAliases = {
|
||||||
|
ls = "eza";
|
||||||
|
cat = "bat --theme ansi";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
# programs.bash = {
|
||||||
|
# interactiveShellInit = ''
|
||||||
|
# if [[ $(${pkgs.procps}/bin/ps --no-header --pid=$PPID --format=comm) != "fish" && -z ''${BASH_EXECUTION_STRING} ]]
|
||||||
|
# then
|
||||||
|
# shopt -q login_shell && LOGIN_OPTION='--login' || LOGIN_OPTION=""
|
||||||
|
# exec ${pkgs.fish}/bin/fish $LOGIN_OPTION
|
||||||
|
# fi
|
||||||
|
# '';
|
||||||
|
# };
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user