aboutsummaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
Diffstat (limited to 'modules')
-rw-r--r--modules/default.nix8
-rw-r--r--modules/foot.nix63
-rw-r--r--modules/global.nix51
-rw-r--r--modules/nvim/default.nix47
-rw-r--r--modules/nvim/keybinds.lua41
-rw-r--r--modules/nvim/settings.lua50
-rw-r--r--modules/sway/default.nix251
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
+ '';
+ };
+ };
+}
+