diff options
| author | schererleander <leander@schererleander.de> | 2025-04-29 16:59:25 +0200 |
|---|---|---|
| committer | schererleander <leander@schererleander.de> | 2025-04-29 16:59:25 +0200 |
| commit | db88d50e8924cba8b424c0ea7546b81baccd9c5c (patch) | |
| tree | 44b2b1082c587b47fb1f08d620ee707ddd4adf27 /modules/home-manager | |
| parent | 539b3e2836e4e7177e65b3df10a4bfe68f9f4d23 (diff) | |
initial commit
Diffstat (limited to 'modules/home-manager')
| -rw-r--r-- | modules/home-manager/default.nix | 13 | ||||
| -rw-r--r-- | modules/home-manager/emacs.nix | 13 | ||||
| -rw-r--r-- | modules/home-manager/foot.nix | 48 | ||||
| -rw-r--r-- | modules/home-manager/git.nix | 23 | ||||
| -rw-r--r-- | modules/home-manager/neovim/default.nix | 57 | ||||
| -rw-r--r-- | modules/home-manager/neovim/lua/autocmds.lua | 8 | ||||
| -rw-r--r-- | modules/home-manager/neovim/lua/keymaps.lua | 0 | ||||
| -rw-r--r-- | modules/home-manager/neovim/lua/options.lua | 45 | ||||
| -rw-r--r-- | modules/home-manager/neovim/lua/plugins.lua | 268 | ||||
| -rw-r--r-- | modules/home-manager/nextcloud.nix | 39 | ||||
| -rw-r--r-- | modules/home-manager/spicetify.nix | 21 | ||||
| -rw-r--r-- | modules/home-manager/sway.nix | 104 | ||||
| -rw-r--r-- | modules/home-manager/tmux.nix | 14 | ||||
| -rw-r--r-- | modules/home-manager/vencord.nix | 22 | ||||
| -rw-r--r-- | modules/home-manager/waybar.nix | 72 | ||||
| -rw-r--r-- | modules/home-manager/zsh.nix | 29 |
16 files changed, 776 insertions, 0 deletions
diff --git a/modules/home-manager/default.nix b/modules/home-manager/default.nix new file mode 100644 index 0000000..9e5a958 --- /dev/null +++ b/modules/home-manager/default.nix @@ -0,0 +1,13 @@ +{ pkgs, lib, ... }: { + imports = [ + ./git.nix + ./zsh.nix + ./foot.nix + ./sway.nix + ./tmux.nix + ./emacs.nix + ./waybar.nix + ./neovim/default.nix + ./nextcloud.nix + ]; +} diff --git a/modules/home-manager/emacs.nix b/modules/home-manager/emacs.nix new file mode 100644 index 0000000..47192a4 --- /dev/null +++ b/modules/home-manager/emacs.nix @@ -0,0 +1,13 @@ +{ config, lib, pkgs, ... }: + +let + cfg = config.emacs; +in { + options.emacs.enable = lib.mkEnableOption "Enable emacs and setup"; + config = lib.mkIf cfg.enable { + programs.emacs = { + enable = true; + package = pkgs.emacs; + }; + }; +} diff --git a/modules/home-manager/foot.nix b/modules/home-manager/foot.nix new file mode 100644 index 0000000..107b7bb --- /dev/null +++ b/modules/home-manager/foot.nix @@ -0,0 +1,48 @@ +{ config, lib, pkgs, ... }: + +let + cfg = config.foot; +in { + options.foot.enable = lib.mkEnableOption "Enable and configure the Foot terminal emulator"; + + config = lib.mkIf cfg.enable { + home.packages = with pkgs; [ + ibm-plex + ]; + + programs.foot = { + enable = true; + settings = { + main = { + pad = "10x10"; + font = "IBM Plex Mono:size=10"; + line-height = 12; + }; + + colors = { + background = "000000"; + foreground = "f8f8f6"; + + regular0 = "232a2d"; + regular1 = "e57474"; + regular2 = "8ccf7e"; + regular3 = "e5c76b"; + regular4 = "67b0e8"; + regular5 = "c47fd5"; + regular6 = "6cbfbf"; + regular7 = "b3b9b8"; + + bright0 = "2d3437"; + bright1 = "ef7e7e"; + bright2 = "96d988"; + bright3 = "f4d67a"; + bright4 = "71baf2"; + bright5 = "ce89df"; + bright6 = "67cbe7"; + bright7 = "bdc3c2"; + }; + }; + }; + }; +} + diff --git a/modules/home-manager/git.nix b/modules/home-manager/git.nix new file mode 100644 index 0000000..2e44a34 --- /dev/null +++ b/modules/home-manager/git.nix @@ -0,0 +1,23 @@ +{ config, lib, pkgs, ... }: + +let + cfg = config.git; +in { + options.git.enable = lib.mkEnableOption "Enable and configure Git"; + + config = lib.mkIf cfg.enable { + programs.git = { + enable = true; + userName = "schererleander"; + userEmail = "leander@schererleander.de"; + + extraConfig = '' + [alias] + co = checkout + br = branch + st = status + ''; + }; + }; +} + diff --git a/modules/home-manager/neovim/default.nix b/modules/home-manager/neovim/default.nix new file mode 100644 index 0000000..415861a --- /dev/null +++ b/modules/home-manager/neovim/default.nix @@ -0,0 +1,57 @@ +{ config, lib, pkgs, ... }: + +let + cfg = config.neovim; +in { + options.neovim.enable = lib.mkEnableOption "Enable and setup neovim"; + + config = lib.mkIf cfg.enable { + xdg.configFile."nvim/lua".source = pkgs.lib.mkForce ./lua; + + programs.neovim = { + enable = true; + vimAlias = true; + + extraPackages = with pkgs; [ + lua-language-server + ]; + + plugins = with pkgs.vimPlugins; [ + lazy-nvim + nvim-lspconfig + friendly-snippets + telescope-nvim + + (nvim-treesitter.withPlugins (plugins: with plugins; [ + tree-sitter-bash + tree-sitter-c + tree-sitter-json + tree-sitter-lua + tree-sitter-python + tree-sitter-nix + tree-sitter-vim + tree-sitter-vimdoc + tree-sitter-yaml + tree-sitter-markdown + tree-sitter-markdown_inline + ])) + ]; + + extraLuaConfig = '' + vim.g.mapleader = " " + vim.g.maplocalleader = "\\" + + require('options') + require('keymaps') + require('plugins') + require('autocmds') + ''; + }; + + home.sessionVariables = rec { + EDITOR = "nvim"; + GIT_EDITOR = EDITOR; + }; + }; +} + diff --git a/modules/home-manager/neovim/lua/autocmds.lua b/modules/home-manager/neovim/lua/autocmds.lua new file mode 100644 index 0000000..f7e6923 --- /dev/null +++ b/modules/home-manager/neovim/lua/autocmds.lua @@ -0,0 +1,8 @@ +vim.cmd('highlight WinSeparator guibg=None ctermbg=None') +vim.cmd('highlight VertSplit guibg=NONE ctermbg=NONE') +-- hide background lsp coloum +vim.cmd('highlight SignColumn guibg=NONE ctermbg=None') + +-- transparent background +vim.cmd('highlight Normal guibg=NONE ctermbg=NONE') +vim.cmd('highlight NormalNC guibg=NONE ctermbg=NONE') diff --git a/modules/home-manager/neovim/lua/keymaps.lua b/modules/home-manager/neovim/lua/keymaps.lua new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/modules/home-manager/neovim/lua/keymaps.lua diff --git a/modules/home-manager/neovim/lua/options.lua b/modules/home-manager/neovim/lua/options.lua new file mode 100644 index 0000000..891668f --- /dev/null +++ b/modules/home-manager/neovim/lua/options.lua @@ -0,0 +1,45 @@ +local options = { + list = false, + backup = false, -- creates a backup file + clipboard = "unnamedplus", -- allows neovim to access the system clipboard + conceallevel = 2, -- so that `` is visible in markdown files + fileencoding = "utf-8", -- the encoding written to a file + hidden = true, -- required to keep multiple buffers and open multiple buffers + hlsearch = true, -- highlight all matches on previous search pattern + ignorecase = true, -- ignore case in search patterns + mouse = "a", -- allow the mouse to be used in neovim + laststatus = 3, + showmode = false, -- we don't need to see things like -- INSERT -- anymore + smartcase = true, -- smart case + smartindent = true, -- make indenting smarter again + splitbelow = true, -- force all horizontal splits to go below current window ↕️ + splitright = true, -- force all vertical splits to go to the right of current window ↔️ + swapfile = false, -- creates a swapfile + termguicolors = true, -- set term gui colors (most terminals support this) + timeoutlen = 100, -- time to wait for a mapped sequence to complete (in milliseconds) + undofile = true, -- enable persistent undo + updatetime = 300, -- faster completion (4000ms default) ⚡ + writebackup = false, -- if a file is being edited by another program, it is not allowed to be edited + expandtab = true, -- use tabs instead of spaces ␣ + pumheight = 10, + cmdheight = 2, + shiftwidth = 2, -- the number of spaces inserted for each indentation + tabstop = 2, -- insert 2 spaces for a tab ⇥ + cursorline = false, -- highlight the current line (disabled for now) + number = false, -- set numbered lines + relativenumber = false, -- set relative numbered lines + numberwidth = 4, -- set number column width to 2 (default 4) + wrap = false, -- display lines as one long lines +} + +vim.opt.shortmess:append 'c' + +for k, v in pairs(options) do + vim.opt[k] = v +end + +vim.wo.list = false +vim.cmd 'set whichwrap+=<,>,[,],h,l' + +-- lazy load +vim.loader.enable() diff --git a/modules/home-manager/neovim/lua/plugins.lua b/modules/home-manager/neovim/lua/plugins.lua new file mode 100644 index 0000000..7c2d956 --- /dev/null +++ b/modules/home-manager/neovim/lua/plugins.lua @@ -0,0 +1,268 @@ +require("lazy").setup({ + { + "ellisonleao/gruvbox.nvim", + priority = 1000, + config = function () + require("gruvbox").setup({}) + vim.cmd("colorscheme gruvbox") + end + }, + + { + "hrsh7th/nvim-cmp", + dependencies = { + "neovim/nvim-lspconfig", + "hrsh7th/cmp-nvim-lsp", + "hrsh7th/cmp-buffer", + "hrsh7th/cmp-path", + "hrsh7th/cmp-cmdline", + "L3MON4D3/LuaSnip", + "onsails/lspkind-nvim" + }, + config = function() + local signs = { + Error = " ", + Warn = " ", + Hint = " ", + Info = " ", + } + for type, icon in pairs(signs) do + local hl = "DiagnosticSign" .. type + vim.fn.sign_define(hl, { text = icon, texthl = hl, numhl = hl }) + end + + local capabilities = require("cmp_nvim_lsp").default_capabilities() + + local on_attach = function(client, bufnr) + local opts = { noremap = true, silent = true, buffer = bufnr } + vim.keymap.set("n", "gd", vim.lsp.buf.definition, opts) + vim.keymap.set("n", "K", vim.lsp.buf.hover, opts) + vim.keymap.set("n", "gi", vim.lsp.buf.implementation, opts) + vim.keymap.set("n", "<C-k>", vim.lsp.buf.signature_help, opts) + vim.keymap.set("n", "<leader>wa", vim.lsp.buf.add_workspace_folder, opts) + vim.keymap.set("n", "<leader>wr", vim.lsp.buf.remove_workspace_folder, opts) + vim.keymap.set("n", "<leader>wl", function() + print(vim.inspect(vim.lsp.buf.list_workspace_folders())) + end, opts) + vim.keymap.set("n", "<leader>D", vim.lsp.buf.type_definition, opts) + vim.keymap.set("n", "<leader>rn", vim.lsp.buf.rename, opts) + vim.keymap.set("n", "<leader>ca", vim.lsp.buf.code_action, opts) + vim.keymap.set("n", "gr", vim.lsp.buf.references, opts) + vim.keymap.set("n", "<leader>e", vim.diagnostic.open_float, opts) + vim.keymap.set("n", "[d", vim.diagnostic.goto_prev, opts) + vim.keymap.set("n", "]d", vim.diagnostic.goto_next, opts) + vim.keymap.set("n", "<leader>q", vim.diagnostic.setloclist, opts) + end + + local lspconfig = require("lspconfig") + + lspconfig.lua_ls.setup({ + capabilities = capabilities, + on_attach = on_attach, + settings = { + Lua = { + diagnostics = { + globals = { "vim" }, + }, + workspace = { + library = vim.api.nvim_get_runtime_file("", true), + }, + telemetry = { + enable = false, + }, + }, + }, + }) + + local cmp = require("cmp") + local luasnip = require("luasnip") + local lspkind = require("lspkind") + require("luasnip.loaders.from_vscode").lazy_load() + + cmp.setup({ + snippet = { + expand = function(args) + luasnip.lsp_expand(args.body) + end, + }, + mapping = cmp.mapping.preset.insert({ + ["<C-d>"] = cmp.mapping.scroll_docs(-4), + ["<C-f>"] = cmp.mapping.scroll_docs(4), + ["<C-Space>"] = cmp.mapping.complete(), + ["<C-e>"] = cmp.mapping.close(), + ["<CR>"] = cmp.mapping.confirm({ + behavior = cmp.ConfirmBehavior.Replace, + select = true, + }), + ["<Tab>"] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_next_item() + elseif luasnip.expand_or_jumpable() then + luasnip.expand_or_jump() + else + fallback() + end + end, { "i", "s" }), + ["<S-Tab>"] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_prev_item() + elseif luasnip.jumpable(-1) then + luasnip.jump(-1) + else + fallback() + end + end, { "i", "s" }), + }), + formatting = { + format = lspkind.cmp_format({ + mode = "symbol_text", + maxwidth = 50, + ellipsis_char = "..." + }), + }, + sources = { + { name = "nvim_lsp" }, + { name = "luasnip" }, + { name = "buffer" }, + { name = "path" }, + }, + }) + + cmp.setup.filetype('gitcommit', { + sources = cmp.config.sources({ + { name = 'buffer' }, + }) + }) + + cmp.setup.cmdline(':', { + mapping = cmp.mapping.preset.cmdline(), + sources = cmp.config.sources({ + { name = 'path' } + }, { + { name = 'cmdline' } + }) + }) + end, + }, + + { + "nvim-treesitter/nvim-treesitter", + build = ":TSUpdate", + event = "BufRead", + config = function() + require("nvim-treesitter.configs").setup({ + auto_install = true, + ensure_installed = { "c", "lua", "vim", "python", "java", "javascript", "typescript", "css", "html" }, + highlight = { enable = true, use_languagetree = true }, + indent = { enable = true }, + }) + end, + }, + + { + "nvim-tree/nvim-tree.lua", + enabled = false, + config = function() + require("nvim-tree").setup({ + view = { width = 20, side = "left" }, + disable_netrw = true, + hijack_cursor = true, + update_cwd = true, + hijack_directories = { auto_open = true }, + renderer = { + root_folder_label = false, + indent_markers = { + enable = true, + icons = { corner = "└ ", edge = "│ ", none = " " }, + }, + }, + }) + end, + }, + + { + "nvim-telescope/telescope.nvim", + dependencies = { "nvim-lua/plenary.nvim" }, + keys = { + { "<C-s>", ":silent Telescope current_buffer_fuzzy_find<CR>", desc = "Open Telescope" }, + }, + config = function() + require("telescope").setup({ + defaults = { mapping = {} }, + pickers = {}, + extensions = {}, + }) + end, + }, + + { + "lewis6991/gitsigns.nvim", + config = function() + require("gitsigns").setup() + end, + }, + + { + "echasnovski/mini.nvim", + version = false, + dependencies = { "nvim-tree/nvim-web-devicons" }, + config = function() + require("mini.starter").setup({ + header = table.concat({ + " /l、 ", + "(゚、 。 7 ", + " l ~ ヽ ", + " じしf_,)ノ ", + }, "\n"), + footer = "", + content_hooks = { + require("mini.starter").gen_hook.adding_bullet("» "), + require("mini.starter").gen_hook.aligning("center", "center"), + }, + }) + end, + }, + + { + "windwp/nvim-autopairs", + event = "InsertEnter", + config = function() + require("nvim-autopairs").setup {} + end, + }, + + { + "tamton-aquib/staline.nvim", + dependencies = { "nvim-tree/nvim-web-devicons" }, + config = function() + require("staline").setup { + sections = { + left = { 'file_name', 'branch' }, + mid = { 'lsp' }, + right = { 'line_column' }, + }, + special_table = { + NvimTree = { 'NvimTree', ' ' }, + packer = { 'Packer', ' ' }, + starter = { '', '' }, + lazy = { '', '' }, + mason = { '', '' }, + }, + lsp_symbols = { + Error = " ", + Info = " ", + Warn = " ", + Hint = "", + }, + defaults = { + true_colors = true, + line_column = ' ☰ %l/%L %c', + branch_symbol = " ", + exclude_fts = { 'NvimTree' }, + }, + } + vim.cmd('highlight Statusline guibg=none') + vim.cmd('highlight StatuslineNC guibg=none') + end, + }, +}) diff --git a/modules/home-manager/nextcloud.nix b/modules/home-manager/nextcloud.nix new file mode 100644 index 0000000..6e8774f --- /dev/null +++ b/modules/home-manager/nextcloud.nix @@ -0,0 +1,39 @@ +{ config, lib, pkgs, ... }: + +let + cfg = config.nextcloud; +in { + options.nextcloud.enable = lib.mkEnableOption "Enable nextcloud and setup"; + config = lib.mkIf cfg.enable { + home.file.".netrc".text = ''default + login exmaple + password test123 + ''; + + home.packages = pkgs.nextcloud-client; + + systemd.user = { + services.nextcloud-autosync = { + Unit = { + Description = "Auto sync Nextcloud"; + After = "network-online.target"; + }; + Service = { + Type = "simple"; + ExecStart = "${pkgs.nextcloud-client}/bin/nextcloudcmd -h -n https://cloud.schererleander.de"; + TimeoutStopSec = "180"; + KillMode = "process"; + KillSignal = "SIGINT"; + }; + Install.WantedBy = ["multi-user.target"]; + }; + timers.nextcloud-autosync = { + Unit.Description = "Automatic sync files with Nextcloud when booted up after 5 minutes then rerun every 60 minutes"; + Timer.OnBootSec = "5min"; + Timer.OnUnitActiveSec = "60min"; + Install.WantedBy = ["multi-user.target" "timers.target"]; + }; + startServices = true; + }; + }; +} diff --git a/modules/home-manager/spicetify.nix b/modules/home-manager/spicetify.nix new file mode 100644 index 0000000..e331ad3 --- /dev/null +++ b/modules/home-manager/spicetify.nix @@ -0,0 +1,21 @@ +{ config, lib, pkgs, inputs, ... }: +let + cfg = config.spicetify; + spicePkgs = inputs.spicetify-nix.packages.${pkgs.system}.default; +in { + options.spicetify.enable = lib.mkEnableOption "Enable and configure Spicetify"; + config = lib.mkIf cfg.enable { + programs.spicetify = { + enable = true; + enabledSnippets = with spicePkgs.snippets; [ + pointer + sonicDancing + modernScrollbar + nyanCatProgressBar + declutterNowPlayingBar + ]; + theme = spicePkgs.themes.sleek; + colorScheme = "coral"; + }; + }; +} diff --git a/modules/home-manager/sway.nix b/modules/home-manager/sway.nix new file mode 100644 index 0000000..77f1138 --- /dev/null +++ b/modules/home-manager/sway.nix @@ -0,0 +1,104 @@ +{ config, lib, pkgs, ... }: + +let + cfg = config.sway; +in { + options.sway.enable = lib.mkEnableOption "Enable sway and setup"; + config = lib.mkIf cfg.enable { + home.packages = with pkgs; [ + wmenu + swaybg + wl-clipboard + playerctl + ]; + + xdg = { + portal = { + enable = true; + extraPortals = with pkgs; [ + xdg-desktop-portal-wlr + xdg-desktop-portal-gtk + ]; + }; + }; + + wayland.windowManager.sway = { + enable = true; + config = { + input = { + "*" = { + xkb_layout = "de"; + }; + }; + output = { + DP-1 = { + resolution = "1920x1080@240Hz"; + bg = "/etc/nixos/jaison-lin-2WHTac8jVA8-unsplash.jpg fill"; + }; + }; + gaps = { + inner = 15; + }; + window = { + titlebar = false; + border = 0; + }; + keybindings = let + mod = "Mod4"; + in + lib.mkOptionDefault { + "${mod}+Return" = "exec ${pkgs.foot}/bin/foot"; + "${mod}+q" = "kill"; + "${mod}+d" = "exec exec ${pkgs.wmenu}/bin/wmenu-run -b -N 000000"; + "${mod}+Shift+e" = "exec swaynag -t warning -m 'You pressed the exit shortcut. Do you really want to exit sway? This will end your Wayland session.' -B 'Yes, exit sway' 'swaymsg exit'"; + "${mod}+Tab" = "workspace back_and_forth"; + "${mod}+1" = "workspace number 1"; + "${mod}+2" = "workspace number 2"; + "${mod}+3" = "workspace number 3"; + "${mod}+4" = "workspace number 4"; + "${mod}+5" = "workspace number 5"; + "${mod}+6" = "workspace number 6"; + "${mod}+7" = "workspace number 7"; + "${mod}+8" = "workspace number 8"; + "${mod}+9" = "workspace number 9"; + "${mod}+0" = "workspace number 10"; + + "${mod}+Shift+1" = "move container to workspace number 1"; + "${mod}+Shift+2" = "move container to workspace number 2"; + "${mod}+Shift+3" = "move container to workspace number 3"; + "${mod}+Shift+4" = "move container to workspace number 4"; + "${mod}+Shift+5" = "move container to workspace number 5"; + "${mod}+Shift+6" = "move container to workspace number 6"; + "${mod}+Shift+7" = "move container to workspace number 7"; + "${mod}+Shift+8" = "move container to workspace number 8"; + "${mod}+Shift+9" = "move container to workspace number 9"; + "${mod}+Shift+0" = "move container to workspace number 10"; + + "${mod}+b" = "splith"; + "${mod}+v" = "splitv"; + "${mod}+f" = "fullscreen"; + "${mod}+Shift+space" = "floating toggle"; + + "XF86AudioPlay" = "exec playerctl play-pause"; + "XF86AudioPrev" = "exec playerctl previous"; + "XF86AudioNext" = "exec playerctl next"; + + "XF86AudioRaiseVolume" = "exec wpctl set-volume @DEFAULT_AUDIO_DEVICE@ +5%"; + "XF86AudioLowerVolume" = "exec wpctl set-volume @DEFAULT_AUDIO_DEVICE@ -5%"; + "XF86AudioMute" = "exec wpctl set-mute @DEFAULT_AUDIO_DEVICE@ toggle"; + }; + defaultWorkspace = "workspace number 1"; + bars = [{ + "command" = "${pkgs.waybar}/bin/waybar"; + }]; + }; + checkConfig = false; + wrapperFeatures.base = true; + wrapperFeatures.gtk = true; + }; + + home.sessionVariables = { + XDG_CURRENT_DESKTOP = "wayland"; + }; + }; +} diff --git a/modules/home-manager/tmux.nix b/modules/home-manager/tmux.nix new file mode 100644 index 0000000..c4bfefc --- /dev/null +++ b/modules/home-manager/tmux.nix @@ -0,0 +1,14 @@ +{ config, lib, pkgs, ... }: + +let + cfg = config.tmux; +in { + options.tmux.enable = lib.mkEnableOption "Enable and configure Tmux"; + + config = lib.mkIf cfg.enable { + programs.tmux = { + enable = true; + }; + }; +} + diff --git a/modules/home-manager/vencord.nix b/modules/home-manager/vencord.nix new file mode 100644 index 0000000..8b085c4 --- /dev/null +++ b/modules/home-manager/vencord.nix @@ -0,0 +1,22 @@ +{ config, lib, pkgs, inputs, ... }: + +let + cfg = config.nixcord; +in { + options.nixcord.enable = lib.mkEnableOption "Enable nixord and setup"; + config = lib.mkIf cfg.enable { + programs.nixcord = { + enable = true; + config = { + themeLinks = [ + "https://github.com/TheCommieAxolotl/BetterDiscord-Stuff/blob/main/Ultra/Ultra.theme.css" + ]; + frameless = true; + plugins = { + alwaysAnimate.enable = true; + clearURLs.enable = true; + }; + }; + }; + }; +} diff --git a/modules/home-manager/waybar.nix b/modules/home-manager/waybar.nix new file mode 100644 index 0000000..6a54d0d --- /dev/null +++ b/modules/home-manager/waybar.nix @@ -0,0 +1,72 @@ +{ config, lib, pkgs, ... }: + +let + cfg = config.waybar; +in { + options.waybar.enable = lib.mkEnableOption "Enable and configure Waybar"; + + config = lib.mkIf cfg.enable { + programs.waybar = { + enable = true; + settings = { + mainBar = { + height = 20; + layer = "top"; + position = "bottom"; + tray = { spacing = 10; }; + modules-center = [ "sway/window" ]; + modules-left = [ "sway/workspaces" "sway/mode" ]; + modules-right = [ + "pulseaudio" + "clock" + "tray" + ]; + clock = { + format-alt = "{:%Y-%m-%d}"; + tooltip-format = "{:%Y-%m-%d | %H:%M}"; + }; + pulseaudio = { + format = "{volume}% {icon} {format_source}"; + format-bluetooth = "{volume}% {icon} {format_source}"; + format-bluetooth-muted = " {icon} {format_source}"; + format-icons = { + car = ""; + default = [ "" "" "" ]; + handsfree = ""; + headphones = ""; + headset = ""; + phone = ""; + portable = ""; + }; + format-muted = " {format_source}"; + format-source = "{volume}% "; + format-source-muted = ""; + on-click = "pavucontrol"; + }; + }; + }; + style = '' + * { + border: none; + border-radius: 0; + font-family: monospace; + font-size: 12px; + } + + window#waybar { + background: #000000; + } + + #workspaces button { + padding-left: 5px; + padding-right: 5px; + } + + #clock, #pulseaudio, #tray { + padding-left: 5px; + padding-right: 5px; + } + ''; + }; + }; +} diff --git a/modules/home-manager/zsh.nix b/modules/home-manager/zsh.nix new file mode 100644 index 0000000..9dab7d8 --- /dev/null +++ b/modules/home-manager/zsh.nix @@ -0,0 +1,29 @@ +{ config, lib, pkgs, ... }: + +let + cfg = config.zsh; +in { + options.zsh.enable = lib.mkEnableOption "Enable zsh and configure"; + + config = lib.mkIf cfg.enable { + programs.zsh = { + enable = true; + autosuggestion.enable = true; + historySubstringSearch.enable = true; + plugins = [ + { + name = "pure"; + src = "${pkgs.pure-prompt}/share/zsh/site-functions"; + } + { + name = "zsh-completions"; + src = "${pkgs.zsh-completions}/share/zsh/site-functions"; + } + { + name = "fast-syntax-highlighting"; + src = "${pkgs.zsh-fast-syntax-highlighting}/share/zsh/site-functions"; + } + ]; + }; + }; +} |
