aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore0
-rw-r--r--README.md16
-rw-r--r--alacritty/default.nix77
-rw-r--r--bash/default.nix6
-rw-r--r--bspwm/bspwmrc5
-rw-r--r--bspwm/default.nix22
-rw-r--r--flake.lock315
-rw-r--r--flake.nix26
-rw-r--r--git/default.nix10
-rw-r--r--home.nix50
-rw-r--r--lf/default.nix10
-rw-r--r--nvim/colorscheme.nix43
-rw-r--r--nvim/default.nix37
-rw-r--r--nvim/keybindings.lua8
-rw-r--r--nvim/options.lua23
-rw-r--r--nvim/plugins/comment.lua1
-rw-r--r--nvim/plugins/lualine/default.nix6
-rw-r--r--nvim/plugins/lualine/init.lua6
-rw-r--r--nvim/plugins/lualine/theme.nix15
-rw-r--r--nvim/plugins/nvim-tree.lua13
-rw-r--r--polybar/bars/main.nix28
-rw-r--r--polybar/default.nix17
-rw-r--r--polybar/modules/battery.nix23
-rw-r--r--polybar/modules/bspwm.nix22
-rw-r--r--polybar/modules/cpu.nix9
-rw-r--r--polybar/modules/date.nix10
-rw-r--r--polybar/modules/kernel-version.nix10
-rw-r--r--polybar/modules/memory.nix9
-rw-r--r--polybar/modules/time.nix10
-rw-r--r--polybar/modules/xwindow.nix7
-rw-r--r--rofi/default.nix9
-rw-r--r--rofi/theme.nix89
-rw-r--r--stylix/default.nix5
-rw-r--r--sxhkd/default.nix24
-rw-r--r--xresources/default.nix8
-rw-r--r--xresources/xinitrc4
-rw-r--r--zsh/default.nix10
-rw-r--r--zsh/zshrc4
38 files changed, 987 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/.gitignore
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..4b7c359
--- /dev/null
+++ b/README.md
@@ -0,0 +1,16 @@
+# home-manager-config
+My personal home manager configurations.
+
+## Packages
+| Name | Description |
+|-----------|----------------------------|
+| git | version control system |
+| neovim | Text editor |
+| alacritty | Terminal emulator |
+| sxhkd | X hotkey daemon |
+| bspwm | Widnow manager |
+| polybar | Status bar |
+| zsh | Shell |
+| lf | Terminal file manager |
+| rofi | Application launcher |
+| nerdfonts | Font with glphs |
diff --git a/alacritty/default.nix b/alacritty/default.nix
new file mode 100644
index 0000000..b4dd846
--- /dev/null
+++ b/alacritty/default.nix
@@ -0,0 +1,77 @@
+{ pkgs, config, ... }:
+
+{
+ programs.alacritty = {
+ enable = true;
+
+ 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.lib.stylix.colors; {
+ 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/bash/default.nix b/bash/default.nix
new file mode 100644
index 0000000..c0c17c7
--- /dev/null
+++ b/bash/default.nix
@@ -0,0 +1,6 @@
+{ ... }:
+
+{
+ programs.bash.enable = true;
+ programs.bash.historyFile = "$HOME/.cache/bash/history";
+}
diff --git a/bspwm/bspwmrc b/bspwm/bspwmrc
new file mode 100644
index 0000000..b163ad2
--- /dev/null
+++ b/bspwm/bspwmrc
@@ -0,0 +1,5 @@
+for monitor in $(xrandr -q | grep -w 'connected' | cut -d' ' -f1); do
+ bspc monitor "$monitor" -d '1' '2' '3' '4' '5' '6'
+done
+
+bspc rule -a "File Explorer" state=floating sticky
diff --git a/bspwm/default.nix b/bspwm/default.nix
new file mode 100644
index 0000000..a45b1e8
--- /dev/null
+++ b/bspwm/default.nix
@@ -0,0 +1,22 @@
+{ ... }:
+
+{
+ xsession.windowManager.bspwm = {
+ enable = true;
+ settings = {
+ window_gap = 5;
+ split_ratio = 0.51;
+ single_monocle = true;
+ borderless_monocle = false;
+ gapless_monocle = false;
+ focus_follows_pointer = true;
+ pointer_follows_focus = false;
+ pointer_motion_interval = 5;
+ pointer_modifier = "mod4";
+ pointer_action1 = "move";
+ pointer_action2 = "resize_side";
+ pointer_action3 = "resize_corner";
+ };
+ extraConfig = builtins.readFile ./bspwmrc;
+ };
+}
diff --git a/flake.lock b/flake.lock
new file mode 100644
index 0000000..802e0b5
--- /dev/null
+++ b/flake.lock
@@ -0,0 +1,315 @@
+{
+ "nodes": {
+ "base16": {
+ "inputs": {
+ "fromYaml": "fromYaml"
+ },
+ "locked": {
+ "lastModified": 1708890466,
+ "narHash": "sha256-LlrC09LoPi8OPYOGPXegD72v+//VapgAqhbOFS3i8sc=",
+ "owner": "SenchoPens",
+ "repo": "base16.nix",
+ "rev": "665b3c6748534eb766c777298721cece9453fdae",
+ "type": "github"
+ },
+ "original": {
+ "owner": "SenchoPens",
+ "repo": "base16.nix",
+ "type": "github"
+ }
+ },
+ "base16-fish": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1622559957,
+ "narHash": "sha256-PebymhVYbL8trDVVXxCvZgc0S5VxI7I1Hv4RMSquTpA=",
+ "owner": "tomyun",
+ "repo": "base16-fish",
+ "rev": "2f6dd973a9075dabccd26f1cded09508180bf5fe",
+ "type": "github"
+ },
+ "original": {
+ "owner": "tomyun",
+ "repo": "base16-fish",
+ "type": "github"
+ }
+ },
+ "base16-foot": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1696725948,
+ "narHash": "sha256-65bz2bUL/yzZ1c8/GQASnoiGwaF8DczlxJtzik1c0AU=",
+ "owner": "tinted-theming",
+ "repo": "base16-foot",
+ "rev": "eedbcfa30de0a4baa03e99f5e3ceb5535c2755ce",
+ "type": "github"
+ },
+ "original": {
+ "owner": "tinted-theming",
+ "repo": "base16-foot",
+ "type": "github"
+ }
+ },
+ "base16-helix": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1720809814,
+ "narHash": "sha256-numb3xigRGnr/deF7wdjBwVg7fpbTH7reFDkJ75AJkY=",
+ "owner": "tinted-theming",
+ "repo": "base16-helix",
+ "rev": "34f41987bec14c0f3f6b2155c19787b1f6489625",
+ "type": "github"
+ },
+ "original": {
+ "owner": "tinted-theming",
+ "repo": "base16-helix",
+ "type": "github"
+ }
+ },
+ "base16-kitty": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1665001328,
+ "narHash": "sha256-aRaizTYPpuWEcvoYE9U+YRX+Wsc8+iG0guQJbvxEdJY=",
+ "owner": "kdrag0n",
+ "repo": "base16-kitty",
+ "rev": "06bb401fa9a0ffb84365905ffbb959ae5bf40805",
+ "type": "github"
+ },
+ "original": {
+ "owner": "kdrag0n",
+ "repo": "base16-kitty",
+ "type": "github"
+ }
+ },
+ "base16-tmux": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1696725902,
+ "narHash": "sha256-wDPg5elZPcQpu7Df0lI5O8Jv4A3T6jUQIVg63KDU+3Q=",
+ "owner": "tinted-theming",
+ "repo": "base16-tmux",
+ "rev": "c02050bebb60dbb20cb433cd4d8ce668ecc11ba7",
+ "type": "github"
+ },
+ "original": {
+ "owner": "tinted-theming",
+ "repo": "base16-tmux",
+ "type": "github"
+ }
+ },
+ "base16-vim": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1716150083,
+ "narHash": "sha256-ZMhnNmw34ogE5rJZrjRv5MtG3WaqKd60ds2VXvT6hEc=",
+ "owner": "tinted-theming",
+ "repo": "base16-vim",
+ "rev": "6e955d704d046b0dc3e5c2d68a2a6eeffd2b5d3d",
+ "type": "github"
+ },
+ "original": {
+ "owner": "tinted-theming",
+ "repo": "base16-vim",
+ "type": "github"
+ }
+ },
+ "flake-compat": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1673956053,
+ "narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=",
+ "owner": "edolstra",
+ "repo": "flake-compat",
+ "rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9",
+ "type": "github"
+ },
+ "original": {
+ "owner": "edolstra",
+ "repo": "flake-compat",
+ "type": "github"
+ }
+ },
+ "flake-utils": {
+ "inputs": {
+ "systems": [
+ "stylix",
+ "systems"
+ ]
+ },
+ "locked": {
+ "lastModified": 1710146030,
+ "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=",
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a",
+ "type": "github"
+ },
+ "original": {
+ "owner": "numtide",
+ "repo": "flake-utils",
+ "type": "github"
+ }
+ },
+ "fromYaml": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1689549921,
+ "narHash": "sha256-iX0pk/uB019TdBGlaJEWvBCfydT6sRq+eDcGPifVsCM=",
+ "owner": "SenchoPens",
+ "repo": "fromYaml",
+ "rev": "11fbbbfb32e3289d3c631e0134a23854e7865c84",
+ "type": "github"
+ },
+ "original": {
+ "owner": "SenchoPens",
+ "repo": "fromYaml",
+ "type": "github"
+ }
+ },
+ "gnome-shell": {
+ "flake": false,
+ "locked": {
+ "lastModified": 1713702291,
+ "narHash": "sha256-zYP1ehjtcV8fo+c+JFfkAqktZ384Y+y779fzmR9lQAU=",
+ "owner": "GNOME",
+ "repo": "gnome-shell",
+ "rev": "0d0aadf013f78a7f7f1dc984d0d812971864b934",
+ "type": "github"
+ },
+ "original": {
+ "owner": "GNOME",
+ "ref": "46.1",
+ "repo": "gnome-shell",
+ "type": "github"
+ }
+ },
+ "home-manager": {
+ "inputs": {
+ "nixpkgs": [
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1726357542,
+ "narHash": "sha256-p4OrJL2weh0TRtaeu1fmNYP6+TOp/W2qdaIJxxQay4c=",
+ "owner": "nix-community",
+ "repo": "home-manager",
+ "rev": "e524c57b1fa55d6ca9d8354c6ce1e538d2a1f47f",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nix-community",
+ "repo": "home-manager",
+ "type": "github"
+ }
+ },
+ "home-manager_2": {
+ "inputs": {
+ "nixpkgs": [
+ "stylix",
+ "nixpkgs"
+ ]
+ },
+ "locked": {
+ "lastModified": 1724435763,
+ "narHash": "sha256-UNky3lJNGQtUEXT2OY8gMxejakSWPTfWKvpFkpFlAfM=",
+ "owner": "nix-community",
+ "repo": "home-manager",
+ "rev": "c2cd2a52e02f1dfa1c88f95abeb89298d46023be",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nix-community",
+ "repo": "home-manager",
+ "type": "github"
+ }
+ },
+ "nixpkgs": {
+ "locked": {
+ "lastModified": 1726243404,
+ "narHash": "sha256-sjiGsMh+1cWXb53Tecsm4skyFNag33GPbVgCdfj3n9I=",
+ "owner": "nixos",
+ "repo": "nixpkgs",
+ "rev": "345c263f2f53a3710abe117f28a5cb86d0ba4059",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nixos",
+ "ref": "nixos-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "nixpkgs_2": {
+ "locked": {
+ "lastModified": 1725194671,
+ "narHash": "sha256-tLGCFEFTB5TaOKkpfw3iYT9dnk4awTP/q4w+ROpMfuw=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "b833ff01a0d694b910daca6e2ff4a3f26dee478c",
+ "type": "github"
+ },
+ "original": {
+ "owner": "NixOS",
+ "ref": "nixpkgs-unstable",
+ "repo": "nixpkgs",
+ "type": "github"
+ }
+ },
+ "root": {
+ "inputs": {
+ "home-manager": "home-manager",
+ "nixpkgs": "nixpkgs",
+ "stylix": "stylix"
+ }
+ },
+ "stylix": {
+ "inputs": {
+ "base16": "base16",
+ "base16-fish": "base16-fish",
+ "base16-foot": "base16-foot",
+ "base16-helix": "base16-helix",
+ "base16-kitty": "base16-kitty",
+ "base16-tmux": "base16-tmux",
+ "base16-vim": "base16-vim",
+ "flake-compat": "flake-compat",
+ "flake-utils": "flake-utils",
+ "gnome-shell": "gnome-shell",
+ "home-manager": "home-manager_2",
+ "nixpkgs": "nixpkgs_2",
+ "systems": "systems"
+ },
+ "locked": {
+ "lastModified": 1726170940,
+ "narHash": "sha256-sobkRkGBaMX9pD0bwU1iVPWi0WtQvZqlHyl1YtvNDio=",
+ "owner": "danth",
+ "repo": "stylix",
+ "rev": "35233f929629c8eb64e939e35260fc8347f94df9",
+ "type": "github"
+ },
+ "original": {
+ "owner": "danth",
+ "repo": "stylix",
+ "type": "github"
+ }
+ },
+ "systems": {
+ "locked": {
+ "lastModified": 1681028828,
+ "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
+ "owner": "nix-systems",
+ "repo": "default",
+ "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
+ "type": "github"
+ },
+ "original": {
+ "owner": "nix-systems",
+ "repo": "default",
+ "type": "github"
+ }
+ }
+ },
+ "root": "root",
+ "version": 7
+}
diff --git a/flake.nix b/flake.nix
new file mode 100644
index 0000000..7824c4b
--- /dev/null
+++ b/flake.nix
@@ -0,0 +1,26 @@
+{
+ description = "Home Manager configuration of arpit";
+
+ inputs = {
+ nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
+ home-manager = {
+ url = "github:nix-community/home-manager";
+ inputs.nixpkgs.follows = "nixpkgs";
+ };
+ stylix.url = "github:danth/stylix";
+ };
+
+ outputs = { nixpkgs, home-manager, stylix, ... }:
+ let
+ system = "x86_64-linux";
+ pkgs = nixpkgs.legacyPackages.${system};
+ in {
+ homeConfigurations."arpit" = home-manager.lib.homeManagerConfiguration {
+ inherit pkgs;
+ modules = [
+ ./home.nix
+ stylix.homeManagerModules.stylix
+ ];
+ };
+ };
+}
diff --git a/git/default.nix b/git/default.nix
new file mode 100644
index 0000000..32e74d4
--- /dev/null
+++ b/git/default.nix
@@ -0,0 +1,10 @@
+{ ... }:
+
+{
+ programs.git = {
+ enable = true;
+ userEmail = "54011232+arpitchakladar@users.noreply.github.com";
+ userName = "Arpit Chakladar";
+ extraConfig.credential.helper = "store --file ~/.cache/git/credential";
+ };
+}
diff --git a/home.nix b/home.nix
new file mode 100644
index 0000000..091054a
--- /dev/null
+++ b/home.nix
@@ -0,0 +1,50 @@
+{ config, pkgs, ... }:
+
+{
+ imports = [
+ ./stylix/default.nix
+ ./bspwm/default.nix
+ ./sxhkd/default.nix
+ ./polybar/default.nix
+ ./git/default.nix
+ ./xresources/default.nix
+ ./zsh/default.nix
+ ./bash/default.nix
+ ./alacritty/default.nix
+ ./nvim/default.nix
+ ./lf/default.nix
+ ./rofi/default.nix
+ ];
+ # Home Manager needs a bit of information about you and the paths it should
+ # manage.
+ home.username = "arpit";
+ home.homeDirectory = "/home/arpit";
+
+ # This value determines the Home Manager release that your configuration is
+ # compatible with. This helps avoid breakage when a new Home Manager release
+ # introduces backwards incompatible changes.
+ #
+ # You should not change this value, even if you update Home Manager. If you do
+ # want to update the value, then make sure to first check the Home Manager
+ # release notes.
+ home.stateVersion = "23.11"; # Please read the comment before changing.
+
+ home.packages = with pkgs; [
+ git
+ neovim
+ alacritty
+ sxhkd
+ bspwm
+ polybar
+ zsh
+ lf
+ rofi
+ (nerdfonts.override { fonts = [ "FiraCode" ]; })
+ ];
+
+ home.sessionVariables = {
+ EDITOR = "nvim";
+ };
+
+ programs.home-manager.enable = true;
+}
diff --git a/lf/default.nix b/lf/default.nix
new file mode 100644
index 0000000..74c5fd4
--- /dev/null
+++ b/lf/default.nix
@@ -0,0 +1,10 @@
+{ ... }:
+
+{
+ programs.lf = {
+ enable = true;
+ settings = {
+ hidden = true;
+ };
+ };
+}
diff --git a/nvim/colorscheme.nix b/nvim/colorscheme.nix
new file mode 100644
index 0000000..d053324
--- /dev/null
+++ b/nvim/colorscheme.nix
@@ -0,0 +1,43 @@
+# Using the stylix to have a consistent colorscheme
+config:
+
+with config.lib.stylix.colors.withHashtag;
+''
+-- Apply the color scheme
+vim.cmd("highlight clear")
+vim.cmd("syntax reset")
+
+-- Set terminal colors
+vim.g.terminal_color_0 = "${base00}"
+vim.g.terminal_color_1 = "${base08}"
+vim.g.terminal_color_2 = "${base0B}"
+vim.g.terminal_color_3 = "${base0A}"
+vim.g.terminal_color_4 = "${base0D}"
+vim.g.terminal_color_5 = "${base0E}"
+vim.g.terminal_color_6 = "${base0C}"
+vim.g.terminal_color_7 = "${base05}"
+vim.g.terminal_color_8 = "${base03}"
+vim.g.terminal_color_9 = "${base08}"
+vim.g.terminal_color_10 = "${base0B}"
+vim.g.terminal_color_11 = "${base0A}"
+vim.g.terminal_color_12 = "${base0D}"
+vim.g.terminal_color_13 = "${base0E}"
+vim.g.terminal_color_14 = "${base0C}"
+vim.g.terminal_color_15 = "${base07}"
+
+-- Set highlight groups
+vim.api.nvim_set_hl(0, "Normal", { fg = "${base05}", bg = "${base00}" })
+vim.api.nvim_set_hl(0, "Comment", { fg = "${base03}", bg = "${base00}", italic = true })
+vim.api.nvim_set_hl(0, "Constant", { fg = "${base09}" })
+vim.api.nvim_set_hl(0, "String", { fg = "${base0B}" })
+vim.api.nvim_set_hl(0, "Identifier", { fg = "${base08}" })
+vim.api.nvim_set_hl(0, "Function", { fg = "${base0D}" })
+vim.api.nvim_set_hl(0, "Statement", { fg = "${base0E}" })
+vim.api.nvim_set_hl(0, "Keyword", { fg = "${base0E}" })
+vim.api.nvim_set_hl(0, "Type", { fg = "${base0A}" })
+vim.api.nvim_set_hl(0, "Special", { fg = "${base0C}" })
+vim.api.nvim_set_hl(0, "PreProc", { fg = "${base0A}" })
+vim.api.nvim_set_hl(0, "Underlined", { fg = "${base0B}", underline = true })
+vim.api.nvim_set_hl(0, "Error", { fg = "${base08}", bg = "${base00}", bold = true })
+vim.api.nvim_set_hl(0, "Todo", { fg = "${base0A}", bg = "${base00}", bold = true })
+''
diff --git a/nvim/default.nix b/nvim/default.nix
new file mode 100644
index 0000000..f2589ae
--- /dev/null
+++ b/nvim/default.nix
@@ -0,0 +1,37 @@
+{ pkgs, config, ... }:
+
+{
+ programs.neovim =
+ let
+ toLua = str: "lua << EOF\n${str}\nEOF\n";
+ toLuaFile = file: "lua << EOF\n${builtins.readFile file}\nEOF\n";
+ in {
+ enable = true;
+ viAlias = true;
+ vimAlias = true;
+ vimdiffAlias = true;
+
+ extraLuaConfig = ''
+${import ./colorscheme.nix config}
+${builtins.readFile ./options.lua}
+${builtins.readFile ./keybindings.lua}
+'';
+ plugins = with pkgs.vimPlugins; [
+ {
+ plugin = comment-nvim;
+ config = toLuaFile ./plugins/comment.lua;
+ }
+
+ {
+ plugin = lualine-nvim;
+ config = toLua (import ./plugins/lualine/default.nix config);
+ }
+
+ nvim-web-devicons
+ {
+ plugin = nvim-tree-lua;
+ config = toLuaFile ./plugins/nvim-tree.lua;
+ }
+ ];
+ };
+}
diff --git a/nvim/keybindings.lua b/nvim/keybindings.lua
new file mode 100644
index 0000000..d952736
--- /dev/null
+++ b/nvim/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/nvim/options.lua b/nvim/options.lua
new file mode 100644
index 0000000..2897a69
--- /dev/null
+++ b/nvim/options.lua
@@ -0,0 +1,23 @@
+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.opt.fillchars = { eob = " " }
+
+vim.o.signcolumn = "auto"
+
+vim.o.tabstop = 2
+vim.o.shiftwidth = 2
+vim.o.expandtab = false
+
+vim.o.updatetime = 300
+
+vim.o.termguicolors = true
+
+vim.o.mouse = "a"
diff --git a/nvim/plugins/comment.lua b/nvim/plugins/comment.lua
new file mode 100644
index 0000000..9086261
--- /dev/null
+++ b/nvim/plugins/comment.lua
@@ -0,0 +1 @@
+require("Comment").setup();
diff --git a/nvim/plugins/lualine/default.nix b/nvim/plugins/lualine/default.nix
new file mode 100644
index 0000000..b6be39e
--- /dev/null
+++ b/nvim/plugins/lualine/default.nix
@@ -0,0 +1,6 @@
+config:
+
+''
+${import ./theme.nix config}
+${builtins.readFile ./init.lua}
+''
diff --git a/nvim/plugins/lualine/init.lua b/nvim/plugins/lualine/init.lua
new file mode 100644
index 0000000..36acda4
--- /dev/null
+++ b/nvim/plugins/lualine/init.lua
@@ -0,0 +1,6 @@
+require("lualine").setup {
+ options = {
+ globalstatus = true,
+ theme = theme
+ }
+}
diff --git a/nvim/plugins/lualine/theme.nix b/nvim/plugins/lualine/theme.nix
new file mode 100644
index 0000000..26c420e
--- /dev/null
+++ b/nvim/plugins/lualine/theme.nix
@@ -0,0 +1,15 @@
+config:
+
+with config.lib.stylix.colors.withHashtag;
+''
+local theme = {
+ normal = {
+ a = { fg = "${base07}", bg = "${base0D}", gui = "bold" },
+ b = { fg = "${base05}", bg = "${base01}" },
+ c = { fg = "${base03}", bg = "${base00}" },
+ },
+ insert = { a = { fg = "${base07}", bg = "${base0B}", gui = "bold" } },
+ visual = { a = { fg = "${base07}", bg = "${base0C}", gui = "bold" } },
+ replace = { a = { fg = "${base07}", bg = "${base08}", gui = "bold" } },
+ command = { a = { fg = "${base07}", bg = "${base0A}", gui = "bold" } },
+}''
diff --git a/nvim/plugins/nvim-tree.lua b/nvim/plugins/nvim-tree.lua
new file mode 100644
index 0000000..1aa2e6e
--- /dev/null
+++ b/nvim/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/polybar/bars/main.nix b/polybar/bars/main.nix
new file mode 100644
index 0000000..74213d1
--- /dev/null
+++ b/polybar/bars/main.nix
@@ -0,0 +1,28 @@
+config:
+
+with config.lib.stylix.colors.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/polybar/default.nix b/polybar/default.nix
new file mode 100644
index 0000000..7bc1231
--- /dev/null
+++ b/polybar/default.nix
@@ -0,0 +1,17 @@
+{ config, ... }:
+
+{
+ services.polybar.enable = true;
+ services.polybar.script = "polybar main &";
+ services.polybar.config = with config.lib.stylix.colors.withHashtag; {
+ "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/polybar/modules/battery.nix b/polybar/modules/battery.nix
new file mode 100644
index 0000000..1bb1264
--- /dev/null
+++ b/polybar/modules/battery.nix
@@ -0,0 +1,23 @@
+config:
+
+with config.lib.stylix.colors.withHashtag;
+{
+ type = "internal/battery";
+ battery = "BAT0";
+ adapter = "ADP1";
+ full-at = "98";
+
+ format-charging = "<animation-charging> <label-charging>";
+ format-discharging = "<ramp-capacity> <label-discharging>";
+ format-full-prefix = "%{F${base0B}}󱊣%{F-}";
+ label-full = "%percentage_used%%";
+
+ ramp-capacity-0 = "%{F${base0C}}󱊡%{F-}";
+ ramp-capacity-1 = "%{F${base0C}}󱊢%{F-}";
+ ramp-capacity-2 = "%{F${base0C}}󱊣%{F-}";
+
+ animation-charging-0 = "%{F${base0C}}󱊡%{F-}";
+ animation-charging-1 = "%{F${base0C}}󱊢%{F-}";
+ animation-charging-2 = "%{F${base0C}}󱊣%{F-}";
+ animation-charging-framerate = 750;
+}
diff --git a/polybar/modules/bspwm.nix b/polybar/modules/bspwm.nix
new file mode 100644
index 0000000..2bb32c5
--- /dev/null
+++ b/polybar/modules/bspwm.nix
@@ -0,0 +1,22 @@
+config:
+
+with config.lib.stylix.colors.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/polybar/modules/cpu.nix b/polybar/modules/cpu.nix
new file mode 100644
index 0000000..d130d07
--- /dev/null
+++ b/polybar/modules/cpu.nix
@@ -0,0 +1,9 @@
+config:
+
+with config.lib.stylix.colors.withHashtag;
+{
+ type = "internal/cpu";
+ interval = 2;
+ format-prefix = "%{F${base09}} %{F-}";
+ label = "%percentage%%";
+}
diff --git a/polybar/modules/date.nix b/polybar/modules/date.nix
new file mode 100644
index 0000000..4cba926
--- /dev/null
+++ b/polybar/modules/date.nix
@@ -0,0 +1,10 @@
+config:
+
+with config.lib.stylix.colors.withHashtag;
+{
+ type = "internal/date";
+ interval = 60;
+ date = "%d/%m/%Y";
+ label = "%date%";
+ format-prefix = "%{F${base0B}} %{F-}";
+}
diff --git a/polybar/modules/kernel-version.nix b/polybar/modules/kernel-version.nix
new file mode 100644
index 0000000..d858617
--- /dev/null
+++ b/polybar/modules/kernel-version.nix
@@ -0,0 +1,10 @@
+config:
+
+with config.lib.stylix.colors.withHashtag;
+{
+ type = "custom/script";
+ exec = "uname -r";
+ interval = 1024;
+ format-prefix = "%{F${base03}} %{F-}";
+ label = "%output%";
+}
diff --git a/polybar/modules/memory.nix b/polybar/modules/memory.nix
new file mode 100644
index 0000000..230286f
--- /dev/null
+++ b/polybar/modules/memory.nix
@@ -0,0 +1,9 @@
+config:
+
+with config.lib.stylix.colors.withHashtag;
+{
+ type = "internal/memory";
+ interval = 2;
+ format-prefix = "%{F${base0A}} %{F-}";
+ label = "%percentage_used%%";
+}
diff --git a/polybar/modules/time.nix b/polybar/modules/time.nix
new file mode 100644
index 0000000..fde01de
--- /dev/null
+++ b/polybar/modules/time.nix
@@ -0,0 +1,10 @@
+config:
+
+with config.lib.stylix.colors.withHashtag;
+{
+ type = "internal/date";
+ interval = 30;
+ time = "%H:%M";
+ label = "%time%";
+ format-prefix = "%{F${base0C}} %{F-}";
+}
diff --git a/polybar/modules/xwindow.nix b/polybar/modules/xwindow.nix
new file mode 100644
index 0000000..7a242d0
--- /dev/null
+++ b/polybar/modules/xwindow.nix
@@ -0,0 +1,7 @@
+config:
+
+with config.lib.stylix.colors.withHashtag;
+{
+ type = "internal/xwindow";
+ label = "%title:0:30:...%";
+}
diff --git a/rofi/default.nix b/rofi/default.nix
new file mode 100644
index 0000000..136550f
--- /dev/null
+++ b/rofi/default.nix
@@ -0,0 +1,9 @@
+{ config, ... }:
+
+{
+ programs.rofi = {
+ enable = true;
+ font = "FiraCode Nerd Font 16";
+ theme = import ./theme.nix config;
+ };
+}
diff --git a/rofi/theme.nix b/rofi/theme.nix
new file mode 100644
index 0000000..dfac2c3
--- /dev/null
+++ b/rofi/theme.nix
@@ -0,0 +1,89 @@
+config:
+
+with config.lib.stylix.colors.withHashtag;
+builtins.toFile "theme.rasi"
+''
+ configuration {
+ font: "${config.programs.rofi.font}";
+
+ 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;
+
+ bg: ${base00};
+ bg-alt: ${base01};
+ fg: ${base05};
+ fg-alt: ${base04};
+
+ 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/stylix/default.nix b/stylix/default.nix
new file mode 100644
index 0000000..ed30880
--- /dev/null
+++ b/stylix/default.nix
@@ -0,0 +1,5 @@
+{ pkgs, ... }:
+
+{
+ stylix.base16Scheme = "${pkgs.base16-schemes}/share/themes/classic-dark.yaml";
+}
diff --git a/sxhkd/default.nix b/sxhkd/default.nix
new file mode 100644
index 0000000..b17bdc0
--- /dev/null
+++ b/sxhkd/default.nix
@@ -0,0 +1,24 @@
+{ ... }:
+
+{
+ services.sxhkd = {
+ enable = true;
+ keybindings = {
+ "super + r" = "rofi -show run";
+ "super + t" = "alacritty";
+ "super + q" = "bspc node -c";
+ "super + {1-9,0}" = "bspc desktop -f {1-9,10}";
+ # resize windows
+ "super + alt + {h,j,k,l}" = ''
+ {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/xresources/default.nix b/xresources/default.nix
new file mode 100644
index 0000000..34f986c
--- /dev/null
+++ b/xresources/default.nix
@@ -0,0 +1,8 @@
+{ ... }:
+
+{
+ home.file.".xinitrc" = {
+ source = ./xinitrc;
+ executable = true;
+ };
+}
diff --git a/xresources/xinitrc b/xresources/xinitrc
new file mode 100644
index 0000000..2ac4486
--- /dev/null
+++ b/xresources/xinitrc
@@ -0,0 +1,4 @@
+#!/bin/sh
+polybar main &
+sxhkd &
+exec bspwm
diff --git a/zsh/default.nix b/zsh/default.nix
new file mode 100644
index 0000000..ba93024
--- /dev/null
+++ b/zsh/default.nix
@@ -0,0 +1,10 @@
+{ ... }:
+
+{
+ programs.zsh = {
+ enable = true;
+ dotDir = ".config/zsh";
+ history.path = "$HOME/.cache/zsh/history";
+ initExtra = builtins.readFile ./zshrc;
+ };
+}
diff --git a/zsh/zshrc b/zsh/zshrc
new file mode 100644
index 0000000..dc0c250
--- /dev/null
+++ b/zsh/zshrc
@@ -0,0 +1,4 @@
+PROMPT='%F{red}%B┌[%b%F{green}%m%F{red}%B@%b%F{cyan}%n %F{blue}%~%F{red}%B]
+%F{red}└>%b%f '
+
+autoload -U colors && colors