diff options
Diffstat (limited to 'modules')
52 files changed, 1310 insertions, 0 deletions
diff --git a/modules/default.nix b/modules/default.nix new file mode 100644 index 0000000..7845368 --- /dev/null +++ b/modules/default.nix @@ -0,0 +1,9 @@ +{ ... }: + +{ + imports = [ + ./desktop + ./shell + ./tools + ]; +} diff --git a/modules/desktop/default.nix b/modules/desktop/default.nix new file mode 100644 index 0000000..e15cd53 --- /dev/null +++ b/modules/desktop/default.nix @@ -0,0 +1,11 @@ +{ lib, config, ... }: + +{ + imports = [ + ./popup-manager + ./status-bar + ./terminal + ./window-manager + ./xresources + ]; +} diff --git a/modules/desktop/popup-manager/default.nix b/modules/desktop/popup-manager/default.nix new file mode 100644 index 0000000..8c82ea7 --- /dev/null +++ b/modules/desktop/popup-manager/default.nix @@ -0,0 +1,7 @@ +{ lib, ... }: + +{ + imports = [ + ./rofi + ]; +} diff --git a/modules/desktop/popup-manager/rofi/default.nix b/modules/desktop/popup-manager/rofi/default.nix new file mode 100644 index 0000000..fdf7d3e --- /dev/null +++ b/modules/desktop/popup-manager/rofi/default.nix @@ -0,0 +1,13 @@ +{ config, lib, ... }: + +{ + options = { + rofi.enable = lib.mkEnableOption "Enables rofi."; + }; + + config = lib.mkIf config.rofi.enable { + programs.rofi.enable = true; + programs.rofi.font = "FiraCode Nerd Font 16"; + programs.rofi.theme = import ./theme/default.nix config; + }; +} diff --git a/modules/desktop/popup-manager/rofi/theme/default.nix b/modules/desktop/popup-manager/rofi/theme/default.nix new file mode 100644 index 0000000..b0b8173 --- /dev/null +++ b/modules/desktop/popup-manager/rofi/theme/default.nix @@ -0,0 +1,21 @@ +config: + +with config.scheme.withHashtag; +builtins.toFile "theme.rasi" +'' +${builtins.readFile ./theme.rasi} +configuration { + font: "${config.programs.rofi.font}"; +} + +* { + bg: ${base00}; + bg-alt: ${base01}; + fg: ${base07}; + fg-alt: ${base03}; +} + +window { + border-color: ${base03}; +} +'' diff --git a/modules/desktop/popup-manager/rofi/theme/theme.rasi b/modules/desktop/popup-manager/rofi/theme/theme.rasi new file mode 100644 index 0000000..9d808b9 --- /dev/null +++ b/modules/desktop/popup-manager/rofi/theme/theme.rasi @@ -0,0 +1,76 @@ +configuration { + drun { + display-name: " "; + } + + run { + display-name: " "; + } + + window { + display-name: " "; + } + + ssh { + display-name: " "; + } + + timeout { + delay: 10; + action: "kb-cancel"; + } +} + +* { + border: 1; + margin: 0; + padding: 0; + spacing: 0; + + background-color: @bg; + text-color: @fg; +} + +window { + transparency: "real"; +} + +mainbox { + children: [inputbar, listview]; +} + +inputbar { + background-color: @bg-alt; + children: [prompt, entry]; +} + +entry { + background-color: inherit; + padding: 12px 3px; +} + +prompt { + background-color: inherit; + padding: 12px; +} + +listview { + lines: 8; +} + +element { + children: [element-text]; +} + +element-icon { + padding: 10px 10px; +} + +element-text { + padding: 10px 10px; + text-color: @fg-alt; +} + +element-text selected { + text-color: @fg; +} diff --git a/modules/desktop/status-bar/default.nix b/modules/desktop/status-bar/default.nix new file mode 100644 index 0000000..124c830 --- /dev/null +++ b/modules/desktop/status-bar/default.nix @@ -0,0 +1,7 @@ +{ lib, ... }: + +{ + imports = [ + ./polybar + ]; +} diff --git a/modules/desktop/status-bar/polybar/bars/main.nix b/modules/desktop/status-bar/polybar/bars/main.nix new file mode 100644 index 0000000..630664d --- /dev/null +++ b/modules/desktop/status-bar/polybar/bars/main.nix @@ -0,0 +1,28 @@ +config: + +with config.scheme.withHashtag; +{ + width = "100%"; + height = 30; + radius = 3; + fixed-center = false; + + background = "${base00}"; + foreground = "${base05}"; + + line-size = 3; + line-color = "${base08}"; + + border-size = 4; + padding-left = 2; + padding-right = 2; + + module-margin-left = 2; + module-margin-right = 2; + + font-0 = "FiraCode Nerd Font:pixelsize=16;3"; + + modules-left = "bspwm"; + modules-center = "xwindow"; + modules-right = "memory cpu battery time date kernel-version"; +} diff --git a/modules/desktop/status-bar/polybar/default.nix b/modules/desktop/status-bar/polybar/default.nix new file mode 100644 index 0000000..11f4f1a --- /dev/null +++ b/modules/desktop/status-bar/polybar/default.nix @@ -0,0 +1,24 @@ +{ config, lib, ... }: + +{ + options = { + polybar.enable = lib.mkEnableOption "Enables polybar."; + }; + + config = lib.mkIf config.polybar.enable { + services.polybar.enable = true; + services.polybar.script = "polybar main &"; + + services.polybar.config = { + "bar/main" = import ./bars/main.nix config; + "module/xwindow" = import ./modules/xwindow.nix config; + "module/bspwm" = import ./modules/bspwm.nix config; + "module/cpu" = import ./modules/cpu.nix config; + "module/memory" = import ./modules/memory.nix config; + "module/date" = import ./modules/date.nix config; + "module/time" = import ./modules/time.nix config; + "module/battery" = import ./modules/battery.nix config; + "module/kernel-version" = import ./modules/kernel-version.nix config; + }; + }; +} diff --git a/modules/desktop/status-bar/polybar/modules/battery.nix b/modules/desktop/status-bar/polybar/modules/battery.nix new file mode 100644 index 0000000..9860c3c --- /dev/null +++ b/modules/desktop/status-bar/polybar/modules/battery.nix @@ -0,0 +1,36 @@ +config: + +with config.scheme.withHashtag; +{ + type = "internal/battery"; + battery = "BAT0"; + adapter = "ADP1"; + + format-charging = "<animation-charging> <label-charging>"; + format-discharging = "<ramp-capacity> <label-discharging>"; + format-full-prefix = "%{F${base0B}}%{F-}"; + + ramp-capacity-0 = "%{F${base0C}}%{F-}"; + ramp-capacity-1 = "%{F${base0C}}%{F-}"; + ramp-capacity-2 = "%{F${base0C}}%{F-}"; + ramp-capacity-3 = "%{F${base0C}}%{F-}"; + ramp-capacity-4 = "%{F${base0C}}%{F-}"; + ramp-capacity-5 = "%{F${base0C}}%{F-}"; + ramp-capacity-6 = "%{F${base0C}}%{F-}"; + ramp-capacity-7 = "%{F${base0C}}%{F-}"; + ramp-capacity-8 = "%{F${base0C}}%{F-}"; + ramp-capacity-9 = "%{F${base0C}}%{F-}"; + + animation-charging-0 = "%{F${base0C}}%{F-}"; + animation-charging-1 = "%{F${base0C}}%{F-}"; + animation-charging-2 = "%{F${base0C}}%{F-}"; + animation-charging-3 = "%{F${base0C}}%{F-}"; + animation-charging-4 = "%{F${base0C}}%{F-}"; + animation-charging-5 = "%{F${base0C}}%{F-}"; + animation-charging-6 = "%{F${base0C}}%{F-}"; + animation-charging-7 = "%{F${base0C}}%{F-}"; + animation-charging-8 = "%{F${base0C}}%{F-}"; + animation-charging-9 = "%{F${base0C}}%{F-}"; + + animation-charging-framerate = 750; +} diff --git a/modules/desktop/status-bar/polybar/modules/bspwm.nix b/modules/desktop/status-bar/polybar/modules/bspwm.nix new file mode 100644 index 0000000..7ec5c6d --- /dev/null +++ b/modules/desktop/status-bar/polybar/modules/bspwm.nix @@ -0,0 +1,22 @@ +config: + +with config.scheme.withHashtag; +{ + type = "internal/bspwm"; + + label-focused = "%index%"; + label-focused-background = "${base01}"; + label-focused-underline = "${base0D}"; + label-focused-padding = 2; + + label-occupied = "%index%"; + label-occupied-padding = 2; + + label-urgent = "%index%!"; + label-urgent-background = "${base08}"; + label-urgent-padding = 2; + + label-empty = "%index%"; + label-empty-foreground = "${base03}"; + label-empty-padding = 2; +} diff --git a/modules/desktop/status-bar/polybar/modules/cpu.nix b/modules/desktop/status-bar/polybar/modules/cpu.nix new file mode 100644 index 0000000..f118990 --- /dev/null +++ b/modules/desktop/status-bar/polybar/modules/cpu.nix @@ -0,0 +1,9 @@ +config: + +with config.scheme.withHashtag; +{ + type = "internal/cpu"; + interval = 2; + format-prefix = "%{F${base09}} %{F-}"; + label = "%percentage%%"; +} diff --git a/modules/desktop/status-bar/polybar/modules/date.nix b/modules/desktop/status-bar/polybar/modules/date.nix new file mode 100644 index 0000000..11a5934 --- /dev/null +++ b/modules/desktop/status-bar/polybar/modules/date.nix @@ -0,0 +1,10 @@ +config: + +with config.scheme.withHashtag; +{ + type = "internal/date"; + interval = 60; + date = "%d/%m/%Y"; + label = "%date%"; + format-prefix = "%{F${base0B}} %{F-}"; +} diff --git a/modules/desktop/status-bar/polybar/modules/kernel-version.nix b/modules/desktop/status-bar/polybar/modules/kernel-version.nix new file mode 100644 index 0000000..a900264 --- /dev/null +++ b/modules/desktop/status-bar/polybar/modules/kernel-version.nix @@ -0,0 +1,10 @@ +config: + +with config.scheme.withHashtag; +{ + type = "custom/script"; + exec = "uname -r"; + interval = 1024; + format-prefix = "%{F${base03}} %{F-}"; + label = "%output%"; +} diff --git a/modules/desktop/status-bar/polybar/modules/memory.nix b/modules/desktop/status-bar/polybar/modules/memory.nix new file mode 100644 index 0000000..1aff8a3 --- /dev/null +++ b/modules/desktop/status-bar/polybar/modules/memory.nix @@ -0,0 +1,9 @@ +config: + +with config.scheme.withHashtag; +{ + type = "internal/memory"; + interval = 2; + format-prefix = "%{F${base0A}} %{F-}"; + label = "%percentage_used%%"; +} diff --git a/modules/desktop/status-bar/polybar/modules/time.nix b/modules/desktop/status-bar/polybar/modules/time.nix new file mode 100644 index 0000000..e4c7cbe --- /dev/null +++ b/modules/desktop/status-bar/polybar/modules/time.nix @@ -0,0 +1,10 @@ +config: + +with config.scheme.withHashtag; +{ + type = "internal/date"; + interval = 30; + time = "%H:%M"; + label = "%time%"; + format-prefix = "%{F${base0C}} %{F-}"; +} diff --git a/modules/desktop/status-bar/polybar/modules/xwindow.nix b/modules/desktop/status-bar/polybar/modules/xwindow.nix new file mode 100644 index 0000000..23245ba --- /dev/null +++ b/modules/desktop/status-bar/polybar/modules/xwindow.nix @@ -0,0 +1,7 @@ +config: + +with config.scheme.withHashtag; +{ + type = "internal/xwindow"; + label = "%title:0:30:...%"; +} diff --git a/modules/desktop/terminal/alacritty/default.nix b/modules/desktop/terminal/alacritty/default.nix new file mode 100644 index 0000000..0fe56e0 --- /dev/null +++ b/modules/desktop/terminal/alacritty/default.nix @@ -0,0 +1,78 @@ +{ pkgs, config, lib, ... }: + +{ + options = { + alacritty.enable = lib.mkEnableOption "Enables alacritty."; + }; + + config = lib.mkIf config.alacritty.enable { + programs.alacritty.enable = true; + + programs.alacritty.settings = { + window = { + opacity = 1.0; + padding = { + x = 4; + y = 0; + }; + decorations = "full"; + }; + + font = { + normal = { + family = "Fira Code Nerd Font"; + style = "Retina"; + }; + bold = { + family = "Fira Code Nerd Font"; + style = "Bold"; + }; + italic = { + family = "Fira Code Nerd Font"; + }; + size = 16.0; + }; + + colors = with config.scheme; { + primary = { + background = "0x${base00}"; + foreground = "0x${base05}"; + }; + normal = { + black = "0x${base00}"; + red = "0x${base08}"; + green = "0x${base0B}"; + yellow = "0x${base0A}"; + blue = "0x${base0D}"; + magenta = "0x${base0E}"; + cyan = "0x${base0C}"; + white = "0x${base05}"; + }; + bright = { + black = "0x${base03}"; + red = "0x${base08}"; + green = "0x${base0B}"; + yellow = "0x${base0A}"; + blue = "0x${base0D}"; + magenta = "0x${base0E}"; + cyan = "0x${base0C}"; + white = "0x${base07}"; + }; + dim = { + black = "0x${base01}"; + red = "0x${base08}"; + green = "0x${base0B}"; + yellow = "0x${base0A}"; + blue = "0x${base0D}"; + magenta = "0x${base0E}"; + cyan = "0x${base0C}"; + white = "0x${base04}"; + }; + }; + + shell = { + program = "${pkgs.zsh}/bin/zsh"; + }; + }; + }; +} diff --git a/modules/desktop/terminal/default.nix b/modules/desktop/terminal/default.nix new file mode 100644 index 0000000..6a0cfc8 --- /dev/null +++ b/modules/desktop/terminal/default.nix @@ -0,0 +1,7 @@ +{ lib, ... }: + +{ + imports = [ + ./alacritty + ]; +} diff --git a/modules/desktop/window-manager/bspwm/bspwmrc b/modules/desktop/window-manager/bspwm/bspwmrc new file mode 100644 index 0000000..8a3a35a --- /dev/null +++ b/modules/desktop/window-manager/bspwm/bspwmrc @@ -0,0 +1,3 @@ +for monitor in $(xrandr -q | grep -w 'connected' | cut -d' ' -f1); do + bspc monitor "$monitor" -d '1' '2' '3' '4' '5' '6' +done diff --git a/modules/desktop/window-manager/bspwm/default.nix b/modules/desktop/window-manager/bspwm/default.nix new file mode 100644 index 0000000..643d78b --- /dev/null +++ b/modules/desktop/window-manager/bspwm/default.nix @@ -0,0 +1,38 @@ +{ config, lib, ... }: + +{ + options = { + bspwm.enable = lib.mkEnableOption "Enables bspwm."; + }; + + config = lib.mkIf config.bspwm.enable { + xsession.windowManager.bspwm.enable = true; + + xsession.windowManager.bspwm.settings = with config.scheme.withHashtag; { + window_gap = 5; + split_ratio = 0.5; + single_monocle = true; + borderless_monocle = false; + gapless_monocle = false; + focus_follows_pointer = true; + pointer_follows_focus = false; + pointer_motion_interval = 40; + pointer_modifier = "mod1"; # alt key + pointer_action1 = "resize_side"; + pointer_action2 = "move"; + pointer_action3 = "resize_corner"; + normal_border_color = base02; + active_border_color = base02; + focused_border_color = base03; + }; + + xsession.windowManager.bspwm.rules = { + "popup" = { + state = "floating"; + sticky = true; + }; + }; + + xsession.windowManager.bspwm.extraConfig = builtins.readFile ./bspwmrc; + }; +} diff --git a/modules/desktop/window-manager/default.nix b/modules/desktop/window-manager/default.nix new file mode 100644 index 0000000..6e9b9f8 --- /dev/null +++ b/modules/desktop/window-manager/default.nix @@ -0,0 +1,8 @@ +{ lib, ... }: + +{ + imports = [ + ./bspwm + ./sxhkd + ]; +} diff --git a/modules/desktop/window-manager/sxhkd/default.nix b/modules/desktop/window-manager/sxhkd/default.nix new file mode 100644 index 0000000..29261b9 --- /dev/null +++ b/modules/desktop/window-manager/sxhkd/default.nix @@ -0,0 +1,79 @@ +{ pkgs, config, lib, ... }: + +{ + options = { + sxhkd.enable = lib.mkEnableOption "Enables sxhkd."; + }; + + config = lib.mkIf config.sxhkd.enable { + services.sxhkd.enable = true; + + services.sxhkd.keybindings = + let + modKey = "alt"; + createKeybinding = keybinding: description: "# ${description}\n${modKey} + ${keybinding}"; + in { + ${(createKeybinding + "s" + "Show keybindings.")} + = pkgs.writeShellScript + "show-keybindings.sh" + (builtins.readFile ./scripts/show-keybindings.sh); + + ${(createKeybinding + "r" + "Launch rofi.")} + = "rofi -show run"; + + ${(createKeybinding + "t" + "Launch terminal.")} + = "alacritty"; + + ${(createKeybinding + "f" + "Launch File Explorer.")} + = "alacritty -t 'File Explorer' --class 'popup' -e lf"; + + ${(createKeybinding + "q" + "Kill current window.")} + = "bspc node -c"; + + ${(createKeybinding + "{1-9,0}" + "Switch workspace.")} + = "bspc desktop -f {1-9,10}"; + + ${(createKeybinding + "shift + {1-9,0}" + "Move window to workspace.")} + = "bspc node -d {1-9,10} --follow"; + + ${(createKeybinding + "{n,d,m}" + "Set current window mode (tiled, floating, fullscreen).")} + = "bspc node focused -t {tiled,floating,fullscreen}"; + + ${(createKeybinding + "{_,shift + }{h,j,k,l}" + "Navigate between windows.")} + = "bspc node --{focus,swap} {west,south,north,east}"; + + # the indentation for each line is required to work with the help prompt + ${(createKeybinding + "ctrl + {h,j,k,l}" + "Resize current window.")} + = '' + {bspc node @parent/second -z left -20 0; \ + bspc node @parent/first -z right -20 0, \ + bspc node @parent/second -z top 0 +20; \ + bspc node @parent/first -z bottom 0 +20, \ + bspc node @parent/first -z bottom 0 -20; \ + bspc node @parent/second -z top 0 -20, \ + bspc node @parent/first -z right +20 0; \ + bspc node @parent/second -z left +20 0} + ''; + }; + }; +} diff --git a/modules/desktop/window-manager/sxhkd/scripts/show-keybindings.sh b/modules/desktop/window-manager/sxhkd/scripts/show-keybindings.sh new file mode 100644 index 0000000..db7863d --- /dev/null +++ b/modules/desktop/window-manager/sxhkd/scripts/show-keybindings.sh @@ -0,0 +1,13 @@ +#!/bin/sh +SXHKD_CONFIG="$HOME/.config/sxhkd/sxhkdrc" + +awk ' + /^#/ { + desc = substr($0, 3) + } + /^[[:alnum:]]/ { + cmd = $0 + getline + print cmd " : " desc + } +' "$SXHKD_CONFIG" | rofi -dmenu -i -p "Keybindings" diff --git a/modules/desktop/xresources/default.nix b/modules/desktop/xresources/default.nix new file mode 100644 index 0000000..65eb812 --- /dev/null +++ b/modules/desktop/xresources/default.nix @@ -0,0 +1,7 @@ +{ lib, ... }: + +{ + imports = [ + ./xinit + ]; +} diff --git a/modules/desktop/xresources/xinit/default.nix b/modules/desktop/xresources/xinit/default.nix new file mode 100644 index 0000000..f5069fa --- /dev/null +++ b/modules/desktop/xresources/xinit/default.nix @@ -0,0 +1,14 @@ +{ lib, config, ... }: + +{ + options = { + xinit.enable = lib.mkEnableOption "Enables xinit."; + }; + + config = lib.mkIf config.xinit.enable { + home.file.".xinitrc" = { + source = ./xinitrc; + executable = true; + }; + }; +} diff --git a/modules/desktop/xresources/xinit/xinitrc b/modules/desktop/xresources/xinit/xinitrc new file mode 100644 index 0000000..2ac4486 --- /dev/null +++ b/modules/desktop/xresources/xinit/xinitrc @@ -0,0 +1,4 @@ +#!/bin/sh +polybar main & +sxhkd & +exec bspwm diff --git a/modules/shell/bash/default.nix b/modules/shell/bash/default.nix new file mode 100644 index 0000000..f26e3d8 --- /dev/null +++ b/modules/shell/bash/default.nix @@ -0,0 +1,13 @@ +{ config, lib, ... }: + +{ + options = { + bash.enable = lib.mkEnableOption "Enables bash."; + }; + + config = lib.mkIf config.bash.enable { + programs.bash.enable = true; + programs.bash.historyFile = "${config.xdg.cacheHome}/bash/history"; + home.file."${config.xdg.cacheHome}/bash/histroy".text = ""; # Create the cache directory and histroy file + }; +} diff --git a/modules/shell/default.nix b/modules/shell/default.nix new file mode 100644 index 0000000..e4c3964 --- /dev/null +++ b/modules/shell/default.nix @@ -0,0 +1,8 @@ +{ lib, config, ... }: + +{ + imports = [ + ./bash + ./zsh + ]; +} diff --git a/modules/shell/zsh/default.nix b/modules/shell/zsh/default.nix new file mode 100644 index 0000000..b4ea77a --- /dev/null +++ b/modules/shell/zsh/default.nix @@ -0,0 +1,15 @@ +{ config, lib, ... }: + +{ + options = { + zsh.enable = lib.mkEnableOption "Enables zsh."; + }; + + config = lib.mkIf config.zsh.enable { + programs.zsh.enable = true; + programs.zsh.dotDir = ".config/zsh"; + programs.zsh.history.path = "${config.xdg.cacheHome}/zsh/history"; + programs.zsh.initExtra = builtins.readFile ./zshrc; + programs.zsh.shellAliases = config.programs.bash.shellAliases; + }; +} diff --git a/modules/shell/zsh/zshrc b/modules/shell/zsh/zshrc new file mode 100644 index 0000000..528bf68 --- /dev/null +++ b/modules/shell/zsh/zshrc @@ -0,0 +1,19 @@ +setopt PROMPT_SUBST + +autoload -U colors && colors + +autoload -Uz vcs_info +precmd() { vcs_info } + +zstyle ':vcs_info:git:*' formats ' %F{yellow}[%F{cyan}%b %c%F{blue}%a%F{yellow}]' +zstyle ':vcs_info:git:*' actionformats ' %F{yellow}[%F{cyan}%b %c%F{blue}%a%F{yellow}]' + +zstyle ':vcs_info:*+set-message:*' hooks git-untracked git-dirty + +zstyle ':vcs_info:git:*' check-for-changes true +zstyle ':vcs_info:git:*' stagedstr '%F{green}✓%f' +zstyle ':vcs_info:git:*' unstagedstr '%F{red}✗%f' +zstyle ':vcs_info:git:*' aheadstr '%F{blue}⬆%f' +zstyle ':vcs_info:git:*' behindstr '%F{yellow}⬇%f' +PROMPT='%F{red}╭──[%F{green}%m%F{red}@%F{blue}%n%F{red}] %F{magenta}%~%f${vcs_info_msg_0_}%F{red} +╰─>%f ' diff --git a/modules/tools/default.nix b/modules/tools/default.nix new file mode 100644 index 0000000..bf96557 --- /dev/null +++ b/modules/tools/default.nix @@ -0,0 +1,11 @@ +{ lib, config, ... }: + +{ + imports = [ + ./editor + ./file-manager + ./git + ./system-monitor + ./viewer + ]; +} diff --git a/modules/tools/editor/default.nix b/modules/tools/editor/default.nix new file mode 100644 index 0000000..1a146bf --- /dev/null +++ b/modules/tools/editor/default.nix @@ -0,0 +1,7 @@ +{ lib, config, ... }: + +{ + imports = [ + ./neovim + ]; +} diff --git a/modules/tools/editor/neovim/default.nix b/modules/tools/editor/neovim/default.nix new file mode 100644 index 0000000..e06ec88 --- /dev/null +++ b/modules/tools/editor/neovim/default.nix @@ -0,0 +1,43 @@ +{ pkgs, config, lib, ... }: + +{ + options = { + neovim.enable = lib.mkEnableOption "Enables neovim."; + }; + + config = lib.mkIf config.neovim.enable { + programs.neovim.enable = true; + programs.neovim.viAlias = true; + programs.neovim.vimAlias = true; + programs.neovim.vimdiffAlias = true; + programs.neovim.defaultEditor = true; + + programs.neovim.extraPackages = with pkgs; [ + gcc # Required for treesitter + ]; + + programs.neovim.extraLuaConfig = + '' + ${builtins.readFile ./options.lua} + ${builtins.readFile ./keybindings.lua} + + -- Plugins configuration + ${builtins.readFile ./plugins/comment.lua} + ${builtins.readFile ./plugins/lualine.lua} + ${import ./plugins/treesitter.nix config} + ${builtins.readFile ./plugins/base16.lua} + ${builtins.readFile ./plugins/nvim-tree.lua} + ''; + + programs.neovim.plugins = with pkgs.vimPlugins; [ + comment-nvim + lualine-nvim + nvim-treesitter + nvim-web-devicons + nvim-tree-lua + (base16-vim.overrideAttrs (old: { + patchPhase = "ln -s ${config.scheme base16-vim} colors/base16-scheme.vim"; + })) + ]; + }; +} diff --git a/modules/tools/editor/neovim/keybindings.lua b/modules/tools/editor/neovim/keybindings.lua new file mode 100644 index 0000000..3e8e0fa --- /dev/null +++ b/modules/tools/editor/neovim/keybindings.lua @@ -0,0 +1,8 @@ +-- Navigate splits +vim.keymap.set("n", "<C-h>", ":wincmd h<CR>", { silent = true }); +vim.keymap.set("n", "<C-j>", ":wincmd j<CR>", { silent = true }); +vim.keymap.set("n", "<C-k>", ":wincmd k<CR>", { silent = true }); +vim.keymap.set("n", "<C-l>", ":wincmd l<CR>", { silent = true }); + +-- NvimTree +vim.keymap.set("n", "<C-n>", ":NvimTreeToggle<CR>", { silent = true }); diff --git a/modules/tools/editor/neovim/options.lua b/modules/tools/editor/neovim/options.lua new file mode 100644 index 0000000..b1fe9cb --- /dev/null +++ b/modules/tools/editor/neovim/options.lua @@ -0,0 +1,21 @@ +vim.g.mapleader = " "; +vim.g.maplocalleader = " "; + +vim.o.clipboard = "unnamedplus"; + +vim.o.number = true; +vim.o.list = true; +vim.o.listchars = "tab:| ,trail:_,lead:_"; + +vim.o.laststatus = 3; + +vim.o.signcolumn = "auto"; +vim.opt.fillchars = { eob = " " }; + +vim.o.tabstop = 2; +vim.o.shiftwidth = 2; +vim.o.expandtab = false; + +vim.o.updatetime = 300; + +vim.o.mouse = "a"; diff --git a/modules/tools/editor/neovim/plugins/base16.lua b/modules/tools/editor/neovim/plugins/base16.lua new file mode 100644 index 0000000..9843b76 --- /dev/null +++ b/modules/tools/editor/neovim/plugins/base16.lua @@ -0,0 +1,6 @@ +vim.o.termguicolors = true; +vim.opt.termguicolors = true; +vim.o.background = "dark"; +vim.g.base16colorspace = 256 +vim.cmd.colorscheme("base16-scheme"); +vim.api.nvim_set_hl(0, "LineNr", { link = "Normal" }); -- disable the background of line numbers diff --git a/modules/tools/editor/neovim/plugins/comment.lua b/modules/tools/editor/neovim/plugins/comment.lua new file mode 100644 index 0000000..9086261 --- /dev/null +++ b/modules/tools/editor/neovim/plugins/comment.lua @@ -0,0 +1 @@ +require("Comment").setup(); diff --git a/modules/tools/editor/neovim/plugins/lualine.lua b/modules/tools/editor/neovim/plugins/lualine.lua new file mode 100644 index 0000000..ba2eda6 --- /dev/null +++ b/modules/tools/editor/neovim/plugins/lualine.lua @@ -0,0 +1,5 @@ +require("lualine").setup { + options = { + globalstatus = true, + }, +}; diff --git a/modules/tools/editor/neovim/plugins/nvim-tree.lua b/modules/tools/editor/neovim/plugins/nvim-tree.lua new file mode 100644 index 0000000..c6c4102 --- /dev/null +++ b/modules/tools/editor/neovim/plugins/nvim-tree.lua @@ -0,0 +1,13 @@ +require("nvim-tree").setup { + filters = { + enable = false + }, + renderer = { + indent_markers = { + enable = true + }, + root_folder_label = function(path) + return vim.fn.fnamemodify(path, ":t") + end, + }, +}; diff --git a/modules/tools/editor/neovim/plugins/treesitter.nix b/modules/tools/editor/neovim/plugins/treesitter.nix new file mode 100644 index 0000000..05f1f2a --- /dev/null +++ b/modules/tools/editor/neovim/plugins/treesitter.nix @@ -0,0 +1,13 @@ +config: + +'' +require("nvim-treesitter.configs").setup { + auto_install = true, + highlight = { + enable = true, + }, + parser_install_dir = "${config.xdg.dataHome}/nvim", +}; + +vim.opt.runtimepath:append("${config.xdg.dataHome}/nvim"); +'' diff --git a/modules/tools/file-manager/default.nix b/modules/tools/file-manager/default.nix new file mode 100644 index 0000000..d127a66 --- /dev/null +++ b/modules/tools/file-manager/default.nix @@ -0,0 +1,8 @@ +{ lib, config, ... }: + +{ + imports = [ + ./lf + ./lsd + ]; +} diff --git a/modules/tools/file-manager/lf/default.nix b/modules/tools/file-manager/lf/default.nix new file mode 100644 index 0000000..00784cf --- /dev/null +++ b/modules/tools/file-manager/lf/default.nix @@ -0,0 +1,21 @@ +{ config, pkgs, lib, ... }: + +{ + options = { + lf.enable = lib.mkEnableOption "Enables lf."; + }; + + config = lib.mkIf config.lf.enable { + programs.lf.enable = true; + programs.lf.settings = { + hidden = true; + }; + programs.lf.previewer.source = pkgs.writeShellScript + "previewer.sh" + (builtins.readFile ./scripts/previewer.sh); + + programs.lf.extraConfig = "set icons"; + + xdg.configFile."lf/icons".source = ./icons; + }; +} diff --git a/modules/tools/file-manager/lf/icons b/modules/tools/file-manager/lf/icons new file mode 100644 index 0000000..2e9d8a2 --- /dev/null +++ b/modules/tools/file-manager/lf/icons @@ -0,0 +1,334 @@ +# vim:ft=conf + +# These examples require Nerd Fonts or a compatible font to be used. +# See https://www.nerdfonts.com for more information. + +# file types (with matching order) +ln # LINK +or # ORPHAN +tw t # STICKY_OTHER_WRITABLE +ow # OTHER_WRITABLE +st t # STICKY +di # DIR +pi p # FIFO +so s # SOCK +bd b # BLK +cd c # CHR +su u # SETUID +sg g # SETGID +ex # EXEC +fi # FILE + +# file extensions (vim-devicons) +*.styl +*.sass +*.scss +*.htm +*.html +*.slim +*.haml +*.ejs +*.css +*.less +*.md +*.mdx +*.markdown +*.rmd +*.json +*.webmanifest +*.js +*.mjs +*.jsx +*.rb +*.gemspec +*.rake +*.php +*.py +*.pyc +*.pyo +*.pyd +*.coffee +*.mustache +*.hbs +*.conf +*.ini +*.yml +*.yaml +*.toml +*.bat +*.mk +*.jpg +*.jpeg +*.bmp +*.png +*.webp +*.gif +*.ico +*.twig +*.cpp +*.c++ +*.cxx +*.cc +*.cp +*.c +*.cs +*.h +*.hh +*.hpp +*.hxx +*.hs +*.lhs +*.nix +*.lua +*.java +*.sh +*.fish +*.bash +*.zsh +*.ksh +*.csh +*.awk +*.ps1 +*.ml λ +*.mli λ +*.diff +*.db +*.sql +*.dump +*.clj +*.cljc +*.cljs +*.edn +*.scala +*.go +*.dart +*.xul +*.sln +*.suo +*.pl +*.pm +*.t +*.rss +'*.f#' +*.fsscript +*.fsx +*.fs +*.fsi +*.rs +*.rlib +*.d +*.erl +*.hrl +*.ex +*.exs +*.eex +*.leex +*.heex +*.vim +*.ai +*.psd +*.psb +*.ts +*.tsx +*.jl +*.pp +*.vue +*.elm +*.swift +*.xcplayground +*.tex +*.r +*.rproj +*.sol +*.pem + +# file names (vim-devicons) (case-insensitive not supported in lf) +*gruntfile.coffee +*gruntfile.js +*gruntfile.ls +*gulpfile.coffee +*gulpfile.js +*gulpfile.ls +*mix.lock +*dropbox +*.ds_store +*.gitconfig +*.gitignore +*.gitattributes +*.gitlab-ci.yml +*.bashrc +*.zshrc +*.zshenv +*.zprofile +*.vimrc +*.gvimrc +*_vimrc +*_gvimrc +*.bashprofile +*favicon.ico +*license +*node_modules +*react.jsx +*procfile +*dockerfile +*docker-compose.yml +*docker-compose.yaml +*compose.yml +*compose.yaml +*rakefile +*config.ru +*gemfile +*makefile +*cmakelists.txt +*robots.txt + +# file names (case-sensitive adaptations) +*Gruntfile.coffee +*Gruntfile.js +*Gruntfile.ls +*Gulpfile.coffee +*Gulpfile.js +*Gulpfile.ls +*Dropbox +*.DS_Store +*LICENSE +*React.jsx +*Procfile +*Dockerfile +*Docker-compose.yml +*Docker-compose.yaml +*Rakefile +*Gemfile +*Makefile +*CMakeLists.txt + +# file patterns (file name adaptations) +*jquery.min.js +*angular.min.js +*backbone.min.js +*require.min.js +*materialize.min.js +*materialize.min.css +*mootools.min.js +*vimrc +Vagrantfile + +# archives or compressed (extensions from dircolors defaults) +*.tar +*.tgz +*.arc +*.arj +*.taz +*.lha +*.lz4 +*.lzh +*.lzma +*.tlz +*.txz +*.tzo +*.t7z +*.zip +*.z +*.dz +*.gz +*.lrz +*.lz +*.lzo +*.xz +*.zst +*.tzst +*.bz2 +*.bz +*.tbz +*.tbz2 +*.tz +*.deb +*.rpm +*.jar +*.war +*.ear +*.sar +*.rar +*.alz +*.ace +*.zoo +*.cpio +*.7z +*.rz +*.cab +*.wim +*.swm +*.dwm +*.esd + +# image formats (extensions from dircolors defaults) +*.jpg +*.jpeg +*.mjpg +*.mjpeg +*.gif +*.bmp +*.pbm +*.pgm +*.ppm +*.tga +*.xbm +*.xpm +*.tif +*.tiff +*.png +*.svg +*.svgz +*.mng +*.pcx +*.mov +*.mpg +*.mpeg +*.m2v +*.mkv +*.webm +*.ogm +*.mp4 +*.m4v +*.mp4v +*.vob +*.qt +*.nuv +*.wmv +*.asf +*.rm +*.rmvb +*.flc +*.avi +*.fli +*.flv +*.gl +*.dl +*.xcf +*.xwd +*.yuv +*.cgm +*.emf +*.ogv +*.ogx + +# audio formats (extensions from dircolors defaults) +*.aac +*.au +*.flac +*.m4a +*.mid +*.midi +*.mka +*.mp3 +*.mpc +*.ogg +*.ra +*.wav +*.oga +*.opus +*.spx +*.xspf + +# other formats +*.pdf diff --git a/modules/tools/file-manager/lf/scripts/previewer.sh b/modules/tools/file-manager/lf/scripts/previewer.sh new file mode 100644 index 0000000..407e0a0 --- /dev/null +++ b/modules/tools/file-manager/lf/scripts/previewer.sh @@ -0,0 +1,3 @@ +#!/bin/sh +unset COLORTERM +bat -pp --line-range=:500 --color=always "$1" diff --git a/modules/tools/file-manager/lsd/default.nix b/modules/tools/file-manager/lsd/default.nix new file mode 100644 index 0000000..0f57e6b --- /dev/null +++ b/modules/tools/file-manager/lsd/default.nix @@ -0,0 +1,17 @@ +{ pkgs, lib, config, ... }: + +{ + options = { + lsd.enable = lib.mkEnableOption "Enables lsd."; + }; + + config = lib.mkIf config.lsd.enable { + programs.lsd.enable = true; + programs.lsd.enableAliases = true; + programs.bash.shellAliases."tree" = "${pkgs.lsd}/bin/lsd -a --tree"; + + programs.lsd.settings = { + icons.separator = " "; + }; + }; +} diff --git a/modules/tools/git/default.nix b/modules/tools/git/default.nix new file mode 100644 index 0000000..7396cb8 --- /dev/null +++ b/modules/tools/git/default.nix @@ -0,0 +1,20 @@ +{ lib, config, ... }: + +{ + options = { + git.enable = lib.mkEnableOption "Enables git."; + }; + + config = lib.mkIf config.git.enable { + programs.git.enable = true; + programs.git.userEmail = "54011232+arpitchakladar@users.noreply.github.com"; + programs.git.userName = "Arpit Chakladar"; + programs.git.extraConfig = { + credential.helper = "store --file ${config.xdg.cacheHome}/git/credential"; + core.askPass = ""; + }; + + # The base directory of the credential file must exist + home.activation.createGitCacheDirectory = lib.hm.dag.entryAfter [ "writeBoundary" ] "mkdir -p ${config.xdg.cacheHome}/git"; + }; +} diff --git a/modules/tools/system-monitor/default.nix b/modules/tools/system-monitor/default.nix new file mode 100644 index 0000000..a5b569c --- /dev/null +++ b/modules/tools/system-monitor/default.nix @@ -0,0 +1,7 @@ +{ ... }: + +{ + imports = [ + ./htop + ]; +} diff --git a/modules/tools/system-monitor/htop/default.nix b/modules/tools/system-monitor/htop/default.nix new file mode 100644 index 0000000..f27174a --- /dev/null +++ b/modules/tools/system-monitor/htop/default.nix @@ -0,0 +1,12 @@ +{ pkgs, lib, config, ... }: + +{ + options = { + htop.enable = lib.mkEnableOption "Enables htop."; + }; + + config = lib.mkIf config.htop.enable { + programs.htop.enable = true; + programs.htop.package = pkgs.htop-vim; + }; +} diff --git a/modules/tools/viewer/bat/default.nix b/modules/tools/viewer/bat/default.nix new file mode 100644 index 0000000..cc01f82 --- /dev/null +++ b/modules/tools/viewer/bat/default.nix @@ -0,0 +1,14 @@ +{ config, lib, ... }: + +{ + options = { + bat.enable = lib.mkEnableOption "Enables bat."; + }; + + config = lib.mkIf config.bat.enable { + programs.bat.enable = true; + programs.bat.config.theme = "customTheme"; + xdg.configFile."bat/themes/customTheme.tmTheme".text + = import ./theme.nix config; + }; +} diff --git a/modules/tools/viewer/bat/theme.nix b/modules/tools/viewer/bat/theme.nix new file mode 100644 index 0000000..e345ee4 --- /dev/null +++ b/modules/tools/viewer/bat/theme.nix @@ -0,0 +1,124 @@ +config: + +with config.scheme.withHashtag; +'' +<?xml version="1.0" encoding="UTF-8"?> +<plist version="1.0"> +<dict> + <key>name</key> + <string>customTheme</string> + <key>settings</key> + <array> + <!-- General Colors --> + <dict> + <key>settings</key> + <dict> + <key>background</key> + <string>#0F1419</string> <!-- Background (base00) --> + <key>foreground</key> + <string>#E6E1CF</string> <!-- Foreground (base05) --> + <key>caret</key> + <string>#F3F4F5</string> <!-- Caret (base07) --> + <key>invisibles</key> + <string>#3E4B59</string> <!-- Invisibles (base03) --> + <key>lineHighlight</key> + <string>#272D38</string> <!-- Line highlight (base02) --> + <key>selection</key> + <string>#3E4B59</string> <!-- Selection (base03) --> + </dict> + </dict> + + <!-- Syntax-Specific Colors --> + <dict> + <key>scope</key> + <string>comment</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#BFBDB6</string> <!-- Comments (base04) --> + </dict> + </dict> + + <dict> + <key>scope</key> + <string>string</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#FFB454</string> <!-- Strings (base0A) --> + </dict> + </dict> + + <dict> + <key>scope</key> + <string>constant.numeric</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#FF8F40</string> <!-- Numbers (base09) --> + </dict> + </dict> + + <dict> + <key>scope</key> + <string>variable</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#F07178</string> <!-- Variables (base08) --> + </dict> + </dict> + + <dict> + <key>scope</key> + <string>keyword</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#59C2FF</string> <!-- Keywords (base0D) --> + </dict> + </dict> + + <dict> + <key>scope</key> + <string>support.function</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#D2A6FF</string> <!-- Functions (base0E) --> + </dict> + </dict> + + <dict> + <key>scope</key> + <string>constant.language</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#B8CC52</string> <!-- Constants (base0B) --> + </dict> + </dict> + + <dict> + <key>scope</key> + <string>entity.name.tag</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#95E6CB</string> <!-- Tags (base0C) --> + </dict> + </dict> + + <dict> + <key>scope</key> + <string>invalid</string> + <key>settings</key> + <dict> + <key>foreground</key> + <string>#E6B673</string> <!-- Invalid (base0F) --> + </dict> + </dict> + </array> +</dict> +</plist> +'' diff --git a/modules/tools/viewer/default.nix b/modules/tools/viewer/default.nix new file mode 100644 index 0000000..dde782b --- /dev/null +++ b/modules/tools/viewer/default.nix @@ -0,0 +1,7 @@ +{ lib, config, ... }: + +{ + imports = [ + ./bat + ]; +} |
