diff options
| author | Stefan Weigl-Bosker <stefan@s00.xyz> | 2025-02-22 19:11:05 -0500 |
|---|---|---|
| committer | Stefan Weigl-Bosker <stefan@s00.xyz> | 2025-02-22 19:11:05 -0500 |
| commit | 1049601e0b07627ef967d1092adc04022598648b (patch) | |
| tree | 8ebb4f2ec21a3870df418b493fa417cf210e68da /modules | |
| parent | 980b1f75b6935694b5def72a3bcc119f78e878b0 (diff) | |
| download | home-1049601e0b07627ef967d1092adc04022598648b.tar.gz | |
started flake config
Diffstat (limited to 'modules')
| -rw-r--r-- | modules/default.nix | 8 | ||||
| -rw-r--r-- | modules/foot.nix | 63 | ||||
| -rw-r--r-- | modules/global.nix | 51 | ||||
| -rw-r--r-- | modules/nvim/default.nix | 47 | ||||
| -rw-r--r-- | modules/nvim/keybinds.lua | 41 | ||||
| -rw-r--r-- | modules/nvim/settings.lua | 50 | ||||
| -rw-r--r-- | modules/sway/default.nix | 251 |
7 files changed, 511 insertions, 0 deletions
diff --git a/modules/default.nix b/modules/default.nix new file mode 100644 index 0000000..65bf42a --- /dev/null +++ b/modules/default.nix @@ -0,0 +1,8 @@ +{ ... }: +{ + imports = [ + ./foot.nix + ./sway + ./nvim + ]; +} diff --git a/modules/foot.nix b/modules/foot.nix new file mode 100644 index 0000000..07ef2ce --- /dev/null +++ b/modules/foot.nix @@ -0,0 +1,63 @@ +{ config, lib, pkgs, ... }: +let + inherit lib config; + cfg = config.modules.foot; +in +{ + options.modules.foot = { + enable = lib.mkEnableOption "foot"; + }; + + config = { + programs.foot = { + enable = cfg.enable; + server = { + enable = true; + }; + settings = { + main = { + font="ComicShannsMono Nerd Font Mono:size=12"; + title="term"; + resize-by-cells="no"; + pad="0x0 center"; + }; + + desktop-notifications.command = "notify-send -a \${app-id} -i \${app-id} \${title} \${body}"; + url.label-letters="arstneio"; + + cursor = { + style="block"; + blink="no"; + color="0f0f0f cacaca"; + }; + + colors = { + foreground="cacaca"; + background="0f0f0f"; + regular0="0f0f0f"; + regular1="ac8a8c"; + regular2="8aac8b"; + regular3="aca98a"; + regular4="8f8aac"; + regular5="ac8aac"; + regular6="8aabac"; + regular7="cacaca"; + bright0="262626 "; + bright1="c49ea0 "; + bright2="9ec49f "; + bright3="c4c19e "; + bright4="a39ec4 "; + bright5="c49ec4 "; + bright6="9ec3c4 "; + bright7="f5f5f5 "; + "16"="ceb188"; + "17"="ac8a8c"; + "18"="191919"; + "19"="262626"; + "20"="ac8a8c"; + "21"="e7e7e7"; + }; + }; + }; + }; +} diff --git a/modules/global.nix b/modules/global.nix new file mode 100644 index 0000000..309159a --- /dev/null +++ b/modules/global.nix @@ -0,0 +1,51 @@ +{ config, lib, pkgs, ...}: +let + cfg = config.modules.global; +in +{ + imports = [ ./default.nix ]; + + options.modules.global = with lib.options; { + notNixOS = mkOption { + type = lib.types.bool; + default = false; + description = "Whether nix is running outside of NixOS."; + }; + wayland = mkEnableOption "Wayland"; + }; + + config = { + modules = { + global.wayland = true; + foot.enable = true; + sway = { + enable = true; + package = if cfg.noNixOS then + config.lib.nixGL.wrap pkgs.sway else pkgs.sway; + }; + }; + + programs = { + home-manager.enable = true; + }; + + targets.genericLinux.enable = cfg.notNixOS; + + home = { + username = "stefan"; + homeDirectory = "/home/stefan"; + stateVersion = "24.11"; + + packages = with pkgs; [ + nerd-fonts.comic-shanns-mono + ] ++ (lib.optional cfg.notNixOS nixgl.auto.nixGLDefault) + ++ (lib.optionals cfg.wayland + [ + wl-clipboard + mako + wmenu + ]); + }; + + }; +} diff --git a/modules/nvim/default.nix b/modules/nvim/default.nix new file mode 100644 index 0000000..54f9d53 --- /dev/null +++ b/modules/nvim/default.nix @@ -0,0 +1,47 @@ +{ config, lib, pkgs, ...}: +let + cfg = config.modules.nvim; + lua = str: "lua << EOF\n${str}\nEOF\n"; + luaImport = file: "lua << EOF\n${builtins.readFile file}\nEOF\n"; +in +{ + options.modules.nvim = { + }; + + config = { + programs.neovim = { + enable = true; + defaultEditor = true; + viAlias = true; + vimAlias = true; + vimdiffAlias = true; + plugins = with pkgs.vimPlugins; [ + { + plugin = nvim-lspconfig; + config = let + servers = [ + { name = "clangd"; } + ]; + in lua(pkgs.lib.strings.concatStrings (pkgs.lib.lists.forEach servers (s: "require('lspconfig')['${s.name}'].setup(${s.config or "{}"})\n"))); + } + + (nvim-treesitter.withPlugins (p: with p; [ + tree-sitter-nix + tree-sitter-c + tree-sitter-lua + tree-sitter-zig + tree-sitter-markdown + tree-sitter-markdown-inline + ])) + + base16-nvim + telescope-nvim + telescope-fzf-native-nvim + ]; + extraLuaConfig = '' + ${builtins.readFile ./settings.lua} + ${builtins.readFile ./keybinds.lua} + ''; + }; + }; +} diff --git a/modules/nvim/keybinds.lua b/modules/nvim/keybinds.lua new file mode 100644 index 0000000..1c1c512 --- /dev/null +++ b/modules/nvim/keybinds.lua @@ -0,0 +1,41 @@ +local map = vim.keymap.set + +local function nmap(lhs, rhs, opts) + map('n', lhs, rhs, opts) +end + +local function swap(mode, bind1, bind2) + local tmp=bind1 + map(mode, bind1, bind2) + map(mode, bind2, tmp) +end + +local function swapnv(bind1, bind2) + swap({'n', 'v'}, bind1, bind2) +end + +swapnv('m', 'h') +swapnv('n', 'j') +swapnv('e', 'k') +swapnv('i', 'l') + +swapnv('M', 'H') +swapnv('N', 'J') +--swapnv('E', 'K') +swapnv('I', 'L') + +nmap('<leader>tn', ':tabnew<CR>', { desc = "Open a new tab" }) +nmap('<leader>tc', ':tabc<CR>', { desc = "Close the current tab" }) +nmap('<leader>tm', ':tabp<CR>', { desc = "Go to previous tab" }) +nmap('<leader>ti', ':tabn<CR>', { desc = "Go to next tab" }) + +nmap('<leader>wv', ':vne<CR>', { desc = "Create vertical split" }) +nmap('<leader>wh', ':new<CR>', { desc = "Create horizontal split" }) +nmap('<leader>wc', ':clo<CR>', { desc = "Close current window" }) + +nmap('<leader>wm', '<C-w><C-h>', { desc = "Focus window left of the current one" }) +nmap('<leader>wn', '<C-w><C-j>', { desc = "Focus window below the current one" }) +nmap('<leader>we', '<C-w><C-k>', { desc = "Focus window above the current one" }) +nmap('<leader>wi', '<C-w><C-l>', { desc = "Focus window right of the current one" }) + +nmap('<leader>fo', '<cmd>Telescope find_files<CR>', { silent = true }) diff --git a/modules/nvim/settings.lua b/modules/nvim/settings.lua new file mode 100644 index 0000000..816757c --- /dev/null +++ b/modules/nvim/settings.lua @@ -0,0 +1,50 @@ +vim.g.mapleader = ' ' + +vim.o.number = true +vim.o.relativenumber = true +vim.o.splitright = true +vim.o.splitbelow = true +vim.o.scrolloff = 15 +vim.o.wrap = false +vim.o.lbr = true +vim.o.shortmess = vim.o.shortmess .. "I" +vim.o.termguicolors = true +vim.opt.fillchars = {eob = " "} +--vim.o.smd = false +--vim.opt.laststatus = 3 +vim.opt.pumheight = 6 +vim.opt.shiftwidth = 8 +vim.opt.tabstop = 8 +vim.opt.expandtab = true +vim.o.mouse="" +vim.o.guicursor="" +vim.o.swapfile=false + +vim.cmd[[ + colorscheme base16-mountain + hi LineNr guifg=#ceb188 + hi LineNrAbove guifg=#262626 + hi LineNrBelow guifg=#262626 + hi CursorLineNr guifg=#ceb188 guibg=#191919 gui=bold + hi FloatBorder guifg=#4c4c4c + hi Pmenu guibg=#0d0d0d + hi PmenuSel guibg=#191919 guifg=#cacaca + hi WinBar guifg=#4c4c4c + hi WinSeparator guifg=#191919 + + " status line + hi StatusLine guibg=#191919 guifg=#4c4c4c + hi StatuslineInactive guibg=#191919 guifg=#4c4c4c gui=NONE + hi StatuslineAccent guifg=#0f0f0f guibg=#aca98a gui=bold + hi StatuslineInsertAccent guifg=#0f0f0f guibg=#8aabac gui=bold + hi StatuslineVisualAccent guifg=#0f0f0f guibg=#8f8aac gui=bold + hi StatuslineReplaceAccent guifg=#0f0f0f guibg=#ac8a8c gui=bold + hi StatuslineTerminalAccent guifg=#0f0f0f guibg=#ac8a8c gui=bold + hi StatuslineCommandAccent guifg=#0f0f0f guibg=#8aac8b gui=bold + hi StatuslineFileIcon guibg=#191919 guifg=#8f8aac + hi StatuslineInfo guibg=#191919 guifg=#4c4c4c + hi LspError guibg=#191919 guifg=#c49ea0 + hi LspWarn guibg=#191919 guifg=#8f8aac + hi LspInfo guibg=#191919 guifg=#8f8aac + hi LspHint guibg=#191919 guifg=#8aabac +]] diff --git a/modules/sway/default.nix b/modules/sway/default.nix new file mode 100644 index 0000000..e6abd2c --- /dev/null +++ b/modules/sway/default.nix @@ -0,0 +1,251 @@ +{ config, lib, pkgs, ... }: +let + cfg = config.modules.sway; +in +{ + options.modules.sway = { + enable = lib.mkEnableOption "sway"; + package = lib.mkOption { + type = with lib.types; nullOr package; + default = pkgs.sway; + }; + }; + config = { + wayland.windowManager.sway = lib.mkIf cfg.enable { + enable = true; + package = config.lib.nixGL.wrap pkgs.sway; + config = rec { + modifier = "Mod1"; + + left = "m"; + down = "n"; + up = "e"; + right = "i"; + + fonts = { + names = [ "ComicShannsMono Nerd Font Mono" ]; # material + size = 11.0; + }; + + terminal = "foot"; + menu = "wmenu-run -n 4c4c4c -N 0d0d0d -s 8aac8b -S 0d0d0d -l 10"; + + defaultWorkspace = "workspace number 1"; + + input = { + "type:keyboard" = { + xkb_layout = "us"; + xkb_variant = "colemak_dh"; + }; + "type:touchpad" = { + dwt = "enabled"; # turn off if u are a gamer + tap = "enabled"; + middle_emulation = "enabled"; + }; + }; + + output = { + "*" = { + bg = "#0d0d0d solid_color"; + }; + "eDP-1" = { + mode = "2880x1920@120.00Hz"; + scale = "2.0"; + }; + }; + + colors = { + background = "#0f0f0f"; + focused = { + border = "#191919" ; + background = "#191919"; + text = "#ac8aac"; + indicator = "#282a2e"; + childBorder = "#8aac8b"; + }; + focusedInactive = { + border = "#191919"; + background = "#191919"; + text = "#ac8aac"; + indicator = "#282a2e"; + childBorder = "#191919"; + }; + unfocused = { + border = "#191919"; + background = "#191919"; + text = "#4c4c4c"; + indicator = "#0f0f0f"; + childBorder = "#191919"; + }; + }; + + bars = [{ + statusCommand = "i3status"; + mode = "hide"; + hiddenState = "hide"; + fonts = { + names = [ "ComicShannsMono Nerd Font Mono" ]; + size = "10.0"; + }; + extraConfig = '' + modifier ${modifier} + ''; + colors = { + background = "#0d0d0d"; + statusline = "#cacaca"; + focusedWorkspace = { + border = "#0d0d0d"; + background = "#0d0d0d"; + text = "#ac8aac"; + }; + activeWorkspace = { + border = "#0d0d0d"; + background = "#0d0d0d"; + text = "#4c4c4c"; + }; + inactiveWorkspace = { + border = "#0d0d0d"; + background = "#0d0d0d"; + text = "#4c4c4c"; + }; + bindingMode = { + border = "#0d0d0d"; + background = "#0d0d0d"; + text = "#ac8aac"; + }; + }; + }]; + + focus = { + followMouse = false; + wrapping = "force"; + }; + + window = { + border = 1; + hideEdgeBorders = "--i3 smart"; + commands = [ + { + command = "mark --add \"prop:$$PROP:\""; + criteria = { + shell = "."; + }; + } + { + command = "splith"; + criteria = { + con_mark = "^prop.*:newcont:"; + }; + } + { + command = "layout tabbed"; + criteria = { + con_mark = "^prop.*:tabbed:"; + }; + } + { + command = "mark --toggle \"prop:$$PROP:\" ; set $$PROP none"; + criteria = { + con_mark = "^prop:"; + }; + } + ]; + }; + + keybindings = { + "${modifier}+Return" = "exec ${terminal}"; + "${modifier}+Shift+w" = "exec browser"; + "${modifier}+d" = "exec ${menu}"; + + "${modifier}+Shift+c" = "kill"; + + "${modifier}+Shift+r" = "reload"; + "${modifier}+Shift+q" = "exec swaynag -t warning -m 'do you really want to exit?' -B 'yes, exit' 'exit-sway'"; + + "${modifier}+${left}" = "focus left"; + "${modifier}+${down}" = "focus down"; + "${modifier}+${up}" = "focus up"; + "${modifier}+${right}" = "focus right"; + + "${modifier}+a" = "focus parent"; + "${modifier}+s" = "focus child"; + + "${modifier}+Shift+${left}" = "move left"; + "${modifier}+Shift+${down}" = "move down"; + "${modifier}+Shift+${up}" = "move up"; + "${modifier}+Shift+${right}" = "move right"; + + "${modifier}+r" = "mode resize"; + + "${modifier}+1" = "workspace number 1"; + "${modifier}+2" = "workspace number 2"; + "${modifier}+3" = "workspace number 3"; + "${modifier}+4" = "workspace number 4"; + "${modifier}+5" = "workspace number 5"; + "${modifier}+6" = "workspace number 6"; + "${modifier}+7" = "workspace number 7"; + "${modifier}+8" = "workspace number 8"; + "${modifier}+9" = "workspace number 9"; + "${modifier}+0" = "workspace number 0"; + + "${modifier}+Shift+1" = "move container to workspace number 1"; + "${modifier}+Shift+2" = "move container to workspace number 2"; + "${modifier}+Shift+3" = "move container to workspace number 3"; + "${modifier}+Shift+4" = "move container to workspace number 4"; + "${modifier}+Shift+5" = "move container to workspace number 5"; + "${modifier}+Shift+6" = "move container to workspace number 6"; + "${modifier}+Shift+7" = "move container to workspace number 7"; + "${modifier}+Shift+8" = "move container to workspace number 8"; + "${modifier}+Shift+9" = "move container to workspace number 9"; + "${modifier}+Shift+0" = "move container to workspace number 0"; + + "${modifier}+Shift+minus" = "move scratchpad"; + "${modifier}+minus" = "scratchpad show"; + + "${modifier}+h" = "splith"; + "${modifier}+v" = "splitv"; + + "${modifier}+Shift+s" = "layout stacking"; + "${modifier}+w" = "layout tabbed"; + "${modifier}+t" = "layout toggle split"; + "${modifier}+Shift+space" = "floating toggle"; + "${modifier}+space" = "focus mode_toggle"; + + "${modifier}+Shift+f" = "fullscreen"; + "--locked XF86AudioRaiseVolume" = "exec volumectl -d -u up"; + "--locked XF86AudioLowerVolume" = "exec volumectl -d -u down"; + "--locked XF86AudioMute" = "exec volumectl -d toggle-mute"; + "--locked XF86AudioMicMute" = "exec volumectl -d -m toggle-mute"; + "--locked XF86MonBrightnessDown" = "exec lightctl -d down"; + "--locked XF86MonBrightnessUp" = "exec lightctl -d up"; + }; + + startup = [ + { command = "foot -s"; } + { command = "wayneko --layer bottom --follow-pointer true --background-colour 0xcacaca --outline-colour 0x0f0f0f"; } + { command = "pipewire"; always = true; } # TODO need to fix this instead of running a new session every time + { command = "mpd"; } + { command = "mpdscribble"; } + { command = "avizo-service"; } # disable if on nixos or systemd + ]; + + seat = { + "*" = { + hide_cursor = "1500"; + xcursor_theme = "Adwaita 18"; + }; + }; + }; + + extraConfigEarly = '' + set $PROP none + ''; + + extraConfig = '' + title_align center + default_border pixel 1 + ''; + }; + }; +} + |