diff --git a/hosts/nb-01.cloonar.com/channel b/hosts/nb-01.cloonar.com/channel new file mode 100644 index 0000000..425c774 --- /dev/null +++ b/hosts/nb-01.cloonar.com/channel @@ -0,0 +1 @@ +https://channels.nixos.org/nixos-24.05 diff --git a/hosts/nb-01.cloonar.com/configuration.nix b/hosts/nb-01.cloonar.com/configuration.nix new file mode 100644 index 0000000..4ff51d1 --- /dev/null +++ b/hosts/nb-01.cloonar.com/configuration.nix @@ -0,0 +1,227 @@ +# Edit this configuration file to define what should be installed on +# your system. Help is available in the configuration.nix(5) man page +# and in the NixOS manual (accessible by running ‘nixos-help’). + +{ config, pkgs, ... }: +let + unstable = import { config = { allowUnfree = true; }; }; +in { + nixpkgs.config.allowUnfree = true; + + imports = + [ # Include the results of the hardware scan. + # ./modules/clevis.nix + ./utils/bento.nix + + ./utils/modules/sops.nix + ./utils/modules/nur.nix + ./modules/sway/sway.nix + # ./modules/gnome.nix + ./modules/printer.nix + ./modules/nvim/default.nix + ./utils/modules/autoupgrade.nix + + ./users + + ./hardware-configuration.nix + ]; + + nixpkgs.overlays = [ + (import ./utils/overlays/packages.nix) + ]; + + # nixpkgs.config.permittedInsecurePackages = [ + # "openssl-1.1.1v" + # "electron-24.8.6" + # ]; + + fonts.packages = with pkgs; [ + open-sans + ]; + + virtualisation.waydroid.enable = true; + + # security.sudo.wheelNeedsPassword = false; + # services.clevis.uuid = "7435d48f-f942-485b-9817-328ad3fc0b93"; + + # nixos cross building qemu + boot.binfmt.emulatedSystems = [ "aarch64-linux" ]; + boot.supportedFilesystems = [ "ntfs" ]; + boot.plymouth.enable = true; + boot.plymouth.theme = "breeze"; + boot.kernelParams = ["quiet"]; + # boot.loader.systemd-boot.netbootxyz.enable = true; + # boot.plymouth.themePackages = [ pkgs.nixos-bgrt-plymouth ]; + # boot.plymouth.theme = "nixos-bgrt"; + # allow hibernation + security.protectKernelImage = false; + + sops.defaultSopsFile = ./secrets.yaml; + sops.age.keyFile = "/var/lib/sops-nix/key.txt"; + sops.age.generateKey = true; + + sops.secrets.epicenter_vpn_ca = {}; + sops.secrets.epicenter_vpn_cert = {}; + sops.secrets.epicenter_vpn_key = {}; + sops.secrets.wg_private_key = {}; + sops.secrets.wg_preshared_key = {}; + sops.secrets.wg-cloonar-key = {}; + + virtualisation.docker.enable = true; + # virtualisation.virtualbox.host = { + # enable = true; + # enableExtensionPack = true; + # }; + + networking.hostName = "cl-nb-01"; # Define your hostname. + networking.resolvconf.enable = true; + networking.networkmanager.enable = true; # Easiest to use and most distros use this by default. + networking.extraHosts = '' + 10.25.0.25 archive.zeichnemit.at + 5.9.131.26 old.epicenter.works + # 10.25.0.25 epicenter.works en.epicenter.works + 127.0.0.1 wohnservice.local mieterhilfe.local wohnpartner.local wohnberatung.local wienbautvor.local wienwohntbesser.local + 127.0.0.1 wohnservice-wien.local mieterhilfe.local wohnpartner-wien.local wohnberatung-wien.local wienbautvor.local wienwohntbesser.local + 127.0.0.1 diabetes.local + 127.0.0.1 test.cloonar.com + ''; + + services.xserver = { + enable = true; + excludePackages = [ pkgs.xterm ]; + displayManager.gdm.enable = true; + displayManager.gdm.wayland = true; + # displayManager.sddm.enable = true; + displayManager.sessionPackages = [ pkgs.sway ]; + displayManager.defaultSession = "sway"; + libinput.enable = true; + }; + + # Set your time zone. + time.timeZone = "Europe/Vienna"; + console.keyMap = "de"; + + users.users.dominik = { + isNormalUser = true; + extraGroups = [ "wheel" "disk" "video" "audio" "mysql" "docker" "vboxusers" "networkmanager" "onepassword" "onepassword-cli" "dialout" ]; # Enable ‘sudo’ for the user. + }; + + environment.systemPackages = with pkgs; [ + bento + vim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default. + wget + docker-compose + drone-cli + wireguard-tools + wineWowPackages.stable + wineWowPackages.fonts + winetricks + git-filter-repo + ykfde + nix-prefetch-git + unstable.rustdesk-flutter + ]; + + environment.variables = { + TERMINAL_COMMAND = "alacritty"; + }; + + services.blueman.enable = true; + + # services.printing.enable = true; + # services.printing.drivers = [ pkgs.brlaser ]; + + services.mysql = { + enable = true; + package = pkgs.mariadb; + ensureUsers = [ + { + name = "dominik"; + ensurePermissions = { + "*.*" = "ALL PRIVILEGES"; + }; + } + ]; + }; + + system.stateVersion = "22.11"; # Did you read the comment? + + security.polkit.enable = true; + systemd = { + user.services.polkit-gnome-authentication-agent-1 = { + description = "polkit-gnome-authentication-agent-1"; + wantedBy = [ "graphical-session.target" ]; + wants = [ "graphical-session.target" ]; + after = [ "graphical-session.target" ]; + serviceConfig = { + Type = "simple"; + ExecStart = "${pkgs.polkit_gnome}/libexec/polkit-gnome-authentication-agent-1"; + Restart = "on-failure"; + RestartSec = 1; + TimeoutStopSec = 10; + }; + }; + }; + + + networking.firewall = { + allowedUDPPorts = [ 51820 ]; # Clients and peers can use the same port, see listenport + # if packets are still dropped, they will show up in dmesg + logReversePathDrops = true; + # wireguard trips rpfilter up + extraCommands = '' + ip46tables -t mangle -I nixos-fw-rpfilter -p udp -m udp --sport 51820 -j RETURN + ip46tables -t mangle -I nixos-fw-rpfilter -p udp -m udp --dport 51820 -j RETURN + ''; + extraStopCommands = '' + ip46tables -t mangle -D nixos-fw-rpfilter -p udp -m udp --sport 51820 -j RETURN || true + ip46tables -t mangle -D nixos-fw-rpfilter -p udp -m udp --dport 51820 -j RETURN || true + ''; + }; + networking.wireguard.interfaces = { + wg0 = { + # Determines the IP address and subnet of the client's end of the tunnel interface. + ips = [ "10.42.98.201/32" ]; + # Path to the private key file. + # + # Note: The private key can also be included inline via the privateKey option, + # but this makes the private key world-readable; thus, using privateKeyFile is + # recommended. + # publicKey: YdlRGsjh4hS3OMJI+t6SZ2eGXKbs0wZBXWudHW4NyS8= + privateKeyFile = config.sops.secrets.wg-cloonar-key.path; + + peers = [ + { + publicKey = "TKQVDmBnf9av46kQxLQSBDhAeaK8r1zh8zpU64zuc1Q="; + allowedIPs = [ "10.42.96.0/20" "10.14.0.0/16" "10.25.0.0/16" ]; + endpoint = "vpn.cloonar.com:51820"; # ToDo: route to endpoint not automatically configured https://wiki.archlinux.org/index.php/WireGuard#Loop_routing https://discourse.nixos.org/t/solved-minimal-firewall-setup-for-wireguard-client/7577 + persistentKeepalive = 25; + } + ]; + }; + }; + + # Facial recognition "Windows hello" + # services.ir-toggle.enable = true; + # services.howdy = { + # enable = true; + # device = "/dev/video2"; + # }; + nix = { + settings.auto-optimise-store = true; + # autoOptimiseStore = true; + gc = { + automatic = true; + dates = "weekly"; + options = "--delete-older-than 30d"; + }; + # Free up to 1GiB whenever there is less than 100MiB left. + extraOptions = '' + min-free = ${toString (100 * 1024 * 1024)} + max-free = ${toString (1024 * 1024 * 1024)} + ''; + }; + + +} + diff --git a/hosts/nb-01.cloonar.com/hardware-configuration.nix b/hosts/nb-01.cloonar.com/hardware-configuration.nix new file mode 100644 index 0000000..0f9cca6 --- /dev/null +++ b/hosts/nb-01.cloonar.com/hardware-configuration.nix @@ -0,0 +1,72 @@ +# Do not modify this file! It was generated by ‘nixos-generate-config’ +# and may be overwritten by future invocations. Please make changes +# to /etc/nixos/configuration.nix instead. +{ config, lib, pkgs, modulesPath, ... }: +{ + imports = [ + (modulesPath + "/installer/scan/not-detected.nix") + ]; + + boot.loader.systemd-boot.enable = true; + boot.loader.efi.canTouchEfiVariables = true; + boot.initrd.availableKernelModules = [ "vfat" "nls_cp437" "nls_iso8859-1" "usbhid" "xhci_pci" "thunderbolt" "nvme" "usb_storage" "sd_mod" "rtsx_pci_sdmmc" ]; + boot.initrd.kernelModules = [ ]; + boot.kernelModules = [ "amdgpu" ]; + boot.kernelParams = [ "resume=/swap/swapfile" "resume_offset=533760" "psi=1" ]; + boot.resumeDevice = "/dev/disk/by-uuid/92284909-c5dd-4e0f-ab22-64157c8175cb"; + boot.extraModulePackages = [ ]; + + fileSystems."/" = + { device = "/dev/disk/by-uuid/92284909-c5dd-4e0f-ab22-64157c8175cb"; + fsType = "btrfs"; + options = [ "subvol=root" ]; + }; + + boot.initrd = { + luks.devices."nixos-enc" = { + crypttabExtraOpts = [ "fido2-device=auto" ]; + device = "/dev/disk/by-uuid/7435d48f-f942-485b-9817-328ad3fc0b93"; + }; + systemd.enable = true; + }; + + fileSystems."/home" = + { device = "/dev/disk/by-uuid/92284909-c5dd-4e0f-ab22-64157c8175cb"; + fsType = "btrfs"; + options = [ "subvol=home" ]; + }; + + fileSystems."/boot" = + { device = "/dev/disk/by-uuid/C281-E509"; + fsType = "vfat"; + }; + + fileSystems."/swap" = + { device = "/dev/disk/by-uuid/92284909-c5dd-4e0f-ab22-64157c8175cb"; + fsType = "btrfs"; + options = [ "subvol=swap" ]; + }; + + swapDevices = [{ + device = "/swap/swapfile"; + size = (1024 * 16); + }]; + + # Enables DHCP on each ethernet and wireless interface. In case of scripted networking + # (the default) this is the recommended approach. When using systemd-networkd it's + # still possible to use this option, but it's recommended to use it in conjunction + # with explicit per-interface declarations with `networking.interfaces..useDHCP`. + networking.useDHCP = lib.mkDefault true; + # networking.interfaces.wlp52s0.useDHCP = lib.mkDefault true; + + powerManagement.cpuFreqGovernor = lib.mkDefault "powersave"; + hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; + + hardware.opengl = { + enable = true; + extraPackages = with pkgs; [ + vaapiVdpau + libvdpau-va-gl + ]; + }; +} diff --git a/hosts/nb-01.cloonar.com/modules/nvim/config/bufferline.lua b/hosts/nb-01.cloonar.com/modules/nvim/config/bufferline.lua new file mode 100644 index 0000000..a792254 --- /dev/null +++ b/hosts/nb-01.cloonar.com/modules/nvim/config/bufferline.lua @@ -0,0 +1,221 @@ +local function is_ft(b, ft) + return vim.bo[b].filetype == ft +end + +local function diagnostics_indicator(num, _, diagnostics, _) + local result = {} + local symbols = { + error = Icons.diagnostics.Error, + warning = Icons.diagnostics.Warning, + info = Icons.diagnostics.Information, + } + for name, count in pairs(diagnostics) do + if symbols[name] and count > 0 then + table.insert(result, symbols[name] .. " " .. count) + end + end + result = table.concat(result, " ") + return #result > 0 and result or "" +end + +local function custom_filter(buf, buf_nums) + local logs = vim.tbl_filter(function(b) + return is_ft(b, "log") + end, buf_nums) + if vim.tbl_isempty(logs) then + return true + end + local tab_num = vim.fn.tabpagenr() + local last_tab = vim.fn.tabpagenr "$" + local is_log = is_ft(buf, "log") + if last_tab == 1 then + return true + end + -- only show log buffers in secondary tabs + return (tab_num == last_tab and is_log) or (tab_num ~= last_tab and not is_log) +end + + +local config = { + active = true, + on_config_done = nil, + keymap = { + normal_mode = {}, + }, + highlights = { + background = { + italic = true, + }, + buffer_selected = { + bold = true, + }, + }, + options = { + mode = "buffers", -- set to "tabs" to only show tabpages instead + numbers = "none", -- can be "none" | "ordinal" | "buffer_id" | "both" | function + close_command = function(bufnr) -- can be a string | function, see "Mouse actions" + buf_kill("bd", bufnr, false) + end, + right_mouse_command = "vert sbuffer %d", -- can be a string | function, see "Mouse actions" + left_mouse_command = "buffer %d", -- can be a string | function, see "Mouse actions" + middle_mouse_command = nil, -- can be a string | function, see "Mouse actions" + indicator = { + icon = Icons.ui.BoldLineLeft, -- this should be omitted if indicator style is not 'icon' + style = "icon", -- can also be 'underline'|'none', + }, + buffer_close_icon = Icons.ui.Close, + modified_icon = Icons.ui.Circle, + close_icon = Icons.ui.BoldClose, + left_trunc_marker = Icons.ui.ArrowCircleLeft, + right_trunc_marker = Icons.ui.ArrowCircleRight, + --- name_formatter can be used to change the buffer's label in the bufferline. + --- Please note some names can/will break the + --- bufferline so use this at your discretion knowing that it has + --- some limitations that will *NOT* be fixed. + name_formatter = function(buf) -- buf contains a "name", "path" and "bufnr" + -- remove extension from markdown files for example + if buf.name:match "%.md" then + return vim.fn.fnamemodify(buf.name, ":t:r") + end + end, + max_name_length = 18, + max_prefix_length = 15, -- prefix used when a buffer is de-duplicated + truncate_names = true, -- whether or not tab names should be truncated + tab_size = 18, + diagnostics = "nvim_lsp", + diagnostics_update_in_insert = false, + diagnostics_indicator = diagnostics_indicator, + -- NOTE: this will be called a lot so don't do any heavy processing here + custom_filter = custom_filter, + offsets = { + { + filetype = "undotree", + text = "Undotree", + highlight = "PanelHeading", + padding = 1, + }, + { + filetype = "NvimTree", + text = "Explorer", + highlight = "PanelHeading", + padding = 1, + }, + { + filetype = "DiffviewFiles", + text = "Diff View", + highlight = "PanelHeading", + padding = 1, + }, + { + filetype = "flutterToolsOutline", + text = "Flutter Outline", + highlight = "PanelHeading", + }, + { + filetype = "packer", + text = "Packer", + highlight = "PanelHeading", + padding = 1, + }, + }, + color_icons = true, -- whether or not to add the filetype icon highlights + show_buffer_icons = true, -- disable filetype icons for buffers + show_buffer_close_icons = true, + show_close_icon = false, + show_tab_indicators = true, + persist_buffer_sort = true, -- whether or not custom sorted buffers should persist + -- can also be a table containing 2 custom separators + -- [focused and unfocused]. eg: { '|', '|' } + separator_style = "thin", + enforce_regular_tabs = false, + always_show_bufferline = false, + hover = { + enabled = false, -- requires nvim 0.8+ + delay = 200, + reveal = { "close" }, + }, + sort_by = "id", + }, +} + +--require('keymappings').load(config.keymap) + +require("bufferline").setup({ + options = config.options, + highlights = config.highlights, +}) + +--stylua: ignore + +-- Common kill function for bdelete and bwipeout +-- credits: based on bbye and nvim-bufdel +---@param kill_command? string defaults to "bd" +---@param bufnr? number defaults to the current buffer +---@param force? boolean defaults to false +function buf_kill(kill_command, bufnr, force) + kill_command = kill_command or "bd" + + local bo = vim.bo + local api = vim.api + local fmt = string.format + local fnamemodify = vim.fn.fnamemodify + + if bufnr == 0 or bufnr == nil then + bufnr = api.nvim_get_current_buf() + end + + local bufname = api.nvim_buf_get_name(bufnr) + + if not force then + local warning + if bo[bufnr].modified then + warning = fmt([[No write since last change for (%s)]], fnamemodify(bufname, ":t")) + elseif api.nvim_buf_get_option(bufnr, "buftype") == "terminal" then + warning = fmt([[Terminal %s will be killed]], bufname) + end + if warning then + vim.ui.input({ + prompt = string.format([[%s. Close it anyway? [y]es or [n]o (default: no): ]], warning), + }, function(choice) + if choice:match "ye?s?" then force = true end + end) + if not force then return end + end + end + + -- Get list of windows IDs with the buffer to close + local windows = vim.tbl_filter(function(win) + return api.nvim_win_get_buf(win) == bufnr + end, api.nvim_list_wins()) + + if force then + kill_command = kill_command .. "!" + end + + -- Get list of active buffers + local buffers = vim.tbl_filter(function(buf) + return api.nvim_buf_is_valid(buf) and bo[buf].buflisted + end, api.nvim_list_bufs()) + + -- If there is only one buffer (which has to be the current one), vim will + -- create a new buffer on :bd. + -- For more than one buffer, pick the previous buffer (wrapping around if necessary) + if #buffers > 1 and #windows > 0 then + for i, v in ipairs(buffers) do + if v == bufnr then + local prev_buf_idx = i == 1 and (#buffers - 1) or (i - 1) + local prev_buffer = buffers[prev_buf_idx] + for _, win in ipairs(windows) do + api.nvim_win_set_buf(win, prev_buffer) + end + end + end + end + + -- Check if buffer still exists, to ensure the target buffer wasn't killed + -- due to options like bufhidden=wipe. + if api.nvim_buf_is_valid(bufnr) and bo[bufnr].buflisted then + vim.cmd(string.format("%s %d", kill_command, bufnr)) + end +end + diff --git a/hosts/nb-01.cloonar.com/modules/nvim/config/copilot.lua b/hosts/nb-01.cloonar.com/modules/nvim/config/copilot.lua new file mode 100644 index 0000000..32ad2ea --- /dev/null +++ b/hosts/nb-01.cloonar.com/modules/nvim/config/copilot.lua @@ -0,0 +1,2 @@ +vim.api.nvim_set_keymap('i', '', 'copilot#Accept("")', { expr=true, noremap = true, silent = true }) +vim.g.copilot_no_tab_map = true diff --git a/hosts/nb-01.cloonar.com/modules/nvim/config/icons.lua b/hosts/nb-01.cloonar.com/modules/nvim/config/icons.lua new file mode 100644 index 0000000..7f1e70a --- /dev/null +++ b/hosts/nb-01.cloonar.com/modules/nvim/config/icons.lua @@ -0,0 +1,155 @@ +Icons = { + kind = { + Array = "", + Boolean = "蘒", + Class = "", + Color = "", + Constant = "", + Constructor = "", + Enum = "", + EnumMember = "", + Event = "", + Field = "", + File = "", + Folder = "", + Function = "", + Interface = "", + Key = "", + Keyword = "", + Method = "", + Module = "", + Namespace = "", + Null = "ﳠ", + Number = "", + Object = "", + Operator = "", + Package = "", + Property = "", + Reference = "", + Snippet = "", + String = "", + Struct = "", + Text = "", + TypeParameter = "", + Unit = "", + Value = "", + Variable = "", + }, + git = { + LineAdded = "", + LineModified = "", + LineRemoved = "", + FileDeleted = "", + FileIgnored = "◌", + FileRenamed = "➜", + FileStaged = "S", + FileUnmerged = "", + FileUnstaged = "", + FileUntracked = "U", + Diff = "", + Repo = "", + Octoface = "", + Branch = "", + }, + ui = { + ArrowCircleDown = "", + ArrowCircleLeft = "", + ArrowCircleRight = "", + ArrowCircleUp = "", + BoldArrowDown = "", + BoldArrowLeft = "", + BoldArrowRight = "", + BoldArrowUp = "", + BoldClose = "", + BoldDividerLeft = "", + BoldDividerRight = "", + BoldLineLeft = "▎", + BookMark = "", + BoxChecked = "", + Bug = "", + Stacks = " ", + Scopes = "", + Watches = "", + DebugConsole = " ", + Calendar = "", + Check = "", + ChevronRight = ">", + ChevronShortDown = "", + ChevronShortLeft = "", + ChevronShortRight = "", + ChevronShortUp = "", + Circle = "", + Close = "", + CloudDownload = "", + Code = "", + Comment = "", + Dashboard = "", + DividerLeft = "", + DividerRight = "", + DoubleChevronRight = "»", + Ellipsis = "…", + EmptyFolder = "", + EmptyFolderOpen = "", + File = "", + FileSymlink = "", + Files = "", + FindFile = "", + FindText = "", + Fire = "", + Folder = "", + FolderOpen = "", + FolderSymlink = "", + Forward = "", + Gear = "", + History = "", + Lightbulb = "", + LineLeft = "▏", + LineMiddle = "│", + List = "", + Lock = "", + NewFile = "", + Note = "", + Package = "", + Pencil = "", + Plus = "", + Project = "", + Search = "", + SignIn = "", + SignOut = "", + Tab = "", + Table = "", + Target = "", + Telescope = "", + Text = "", + Tree = "", + Triangle = "契", + TriangleShortArrowDown = "", + TriangleShortArrowLeft = "", + TriangleShortArrowRight = "", + TriangleShortArrowUp = "", + }, + diagnostics = { + BoldError = "", + Error = "", + BoldWarning = "", + Warning = "", + BoldInformation = "", + Information = "", + BoldQuestion = "", + Question = "", + BoldHint = "", + Hint = "", + Debug = "", + Trace = "✎", + }, + misc = { + Robot = "ﮧ", + Squirrel = "", + Tag = "", + Watch = "", + Smiley = "ﲃ", + Package = "", + CircuitBoard = "", + }, +} + diff --git a/hosts/nb-01.cloonar.com/modules/nvim/config/init.lua b/hosts/nb-01.cloonar.com/modules/nvim/config/init.lua new file mode 100644 index 0000000..bf2ede8 --- /dev/null +++ b/hosts/nb-01.cloonar.com/modules/nvim/config/init.lua @@ -0,0 +1,58 @@ +-- vim.opt.expandtab = true +-- vim.opt.hidden = true +-- vim.opt.incsearch = true +-- vim.opt.mouse = "a" +-- vim.opt.number = true +-- vim.opt.shiftwidth = 2 +-- vim.opt.splitbelow = true +-- vim.opt.splitright = true +-- vim.opt.signcolumn = "yes:3" +-- vim.opt.tabstop = 2 +-- vim.opt.timeoutlen = 0 +-- vim.wo.wrap = false +-- vim.opt.exrc = true +-- vim.cmd("syntax on") + +vim.opt.backup = false -- creates a backup file +vim.opt.clipboard = "unnamedplus" -- allows neovim to access the system clipboard +vim.opt.cmdheight = 2 -- more space in the neovim command line for displaying messages +vim.opt.colorcolumn = "99999" -- fixes indentline for now +vim.opt.completeopt = { "menuone", "noselect" } +vim.opt.conceallevel = 0 -- so that `` is visible in markdown files +vim.opt.fileencoding = "utf-8" -- the encoding written to a file +vim.opt.foldmethod = "manual" -- folding set to "expr" for treesitter based folding +vim.opt.foldexpr = "" -- set to "nvim_treesitter#foldexpr()" for treesitter based folding +vim.opt.guifont = "monospace:h17" -- the font used in graphical neovim applications +vim.opt.hidden = true -- required to keep multiple buffers and open multiple buffers +vim.opt.hlsearch = true -- highlight all matches on previous search pattern +vim.opt.ignorecase = true -- ignore case in search patterns +vim.opt.mouse = "a" -- allow the mouse to be used in neovim +vim.opt.pumheight = 10 -- pop up menu height +vim.opt.showmode = false -- we don't need to see things like -- INSERT -- anymore +vim.opt.showtabline = 2 -- always show tabs +vim.opt.smartcase = true -- smart case +vim.opt.smartindent = true -- make indenting smarter again +vim.opt.splitbelow = true -- force all horizontal splits to go below current window +vim.opt.splitright = true -- force all vertical splits to go to the right of current window +vim.opt.swapfile = false -- creates a swapfile +vim.opt.termguicolors = true -- set term gui colors (most terminals support this) +vim.opt.timeoutlen = 100 -- time to wait for a mapped sequence to complete (in milliseconds) +vim.opt.title = true -- set the title of window to the value of the titlestring +vim.opt.titlestring = "%<%F%=%l/%L - nvim" -- what the title of the window will be set to +vim.opt.undodir = vim.fn.stdpath "cache" .. "/undo" +vim.opt.undofile = true -- enable persistent undo +vim.opt.updatetime = 300 -- faster completion +vim.opt.writebackup = false -- if a file is being edited by another program (or was written to file while editing with another program) it is not allowed to be edited +vim.opt.expandtab = true -- convert tabs to spaces +vim.opt.shiftwidth = 2 -- the number of spaces inserted for each indentation +vim.opt.tabstop = 2 -- insert 2 spaces for a tab +vim.opt.cursorline = true -- highlight the current line +vim.opt.number = true -- set numbered lines +vim.opt.relativenumber = false -- set relative numbered lines +vim.opt.numberwidth = 4 -- set number column width to 2 {default 4} +vim.opt.signcolumn = "yes" -- always show the sign column otherwise it would shift the text each time +vim.opt.wrap = false -- display lines as one long line +vim.opt.spell = false +vim.opt.spelllang = "en" +vim.opt.scrolloff = 8 -- is one of my fav +vim.opt.sidescrolloff = 8 diff --git a/hosts/nb-01.cloonar.com/modules/nvim/config/keymappings.lua b/hosts/nb-01.cloonar.com/modules/nvim/config/keymappings.lua new file mode 100644 index 0000000..c320f74 --- /dev/null +++ b/hosts/nb-01.cloonar.com/modules/nvim/config/keymappings.lua @@ -0,0 +1,145 @@ +local generic_opts_any = { noremap = true, silent = true } + +local generic_opts = { + insert_mode = generic_opts_any, + normal_mode = generic_opts_any, + visual_mode = generic_opts_any, + visual_block_mode = generic_opts_any, + command_mode = generic_opts_any, + term_mode = { silent = true }, +} + +local mode_adapters = { + insert_mode = "i", + normal_mode = "n", + term_mode = "t", + visual_mode = "v", + visual_block_mode = "x", + command_mode = "c", +} + +---@class Keys +---@field insert_mode table +---@field normal_mode table +---@field terminal_mode table +---@field visual_mode table +---@field visual_block_mode table +---@field command_mode table + +local defaults = { + insert_mode = { + -- Move current line / block with Alt-j/k ala vscode. + [""] = ":m .+1==gi", + -- Move current line / block with Alt-j/k ala vscode. + [""] = ":m .-2==gi", + -- navigation + [""] = "k", + [""] = "j", + [""] = "h", + [""] = "l", + }, + + normal_mode = { + -- Better window movement + [""] = "h", + [""] = "j", + [""] = "k", + [""] = "l", + + -- Resize with arrows + [""] = ":resize -2", + [""] = ":resize +2", + [""] = ":vertical resize -2", + [""] = ":vertical resize +2", + + -- Move current line / block with Alt-j/k a la vscode. + [""] = ":m .+1==", + [""] = ":m .-2==", + + -- QuickFix + ["]q"] = ":cnext", + ["[q"] = ":cprev", + [""] = ":call QuickFixToggle()", + }, + + term_mode = { + -- Terminal window navigation + [""] = "h", + [""] = "j", + [""] = "k", + [""] = "l", + }, + + visual_mode = { + -- Better indenting + ["<"] = ""] = ">gv", + + -- ["p"] = '"0p', + -- ["P"] = '"0P', + }, + + visual_block_mode = { + -- Move current line / block with Alt-j/k ala vscode. + [""] = ":m '>+1gv-gv", + [""] = ":m '<-2gv-gv", + }, + + command_mode = { + -- navigate tab completion with and + -- runs conditionally + [""] = { 'pumvisible() ? "\\" : "\\"', { expr = true, noremap = true } }, + [""] = { 'pumvisible() ? "\\" : "\\"', { expr = true, noremap = true } }, + }, +} + +if vim.fn.has "mac" == 1 then + defaults.normal_mode[""] = defaults.normal_mode[""] + defaults.normal_mode[""] = defaults.normal_mode[""] + defaults.normal_mode[""] = defaults.normal_mode[""] + defaults.normal_mode[""] = defaults.normal_mode[""] + Log:debug "Activated mac keymappings" +end + +function set_keymaps(mode, key, val) + local opt = generic_opts[mode] or generic_opts_any + if type(val) == "table" then + opt = val[2] + val = val[1] + end + if val then + vim.keymap.set(mode, key, val, opt) + else + pcall(vim.api.nvim_del_keymap, mode, key) + end +end + +function load_mode(mode, keymaps) + mode = mode_adapters[mode] or mode + for k, v in pairs(keymaps) do + set_keymaps(mode, k, v) + end +end + +function load(keymaps) + keymaps = keymaps or {} + for mode, mapping in pairs(keymaps) do + load_mode(mode, mapping) + end +end + +function load_defaults() + load(get_defaults()) + keys = keys or {} + for idx, _ in pairs(defaults) do + if not keys[idx] then + keys[idx] = {} + end + end +end + +function get_defaults() + return defaults +end + +load_defaults() diff --git a/hosts/nb-01.cloonar.com/modules/nvim/config/lspconfig.lua b/hosts/nb-01.cloonar.com/modules/nvim/config/lspconfig.lua new file mode 100644 index 0000000..ba32f57 --- /dev/null +++ b/hosts/nb-01.cloonar.com/modules/nvim/config/lspconfig.lua @@ -0,0 +1,45 @@ +local status, lspc = pcall(require, 'lspconfig') +if (not status) then return end + +lspc.clangd.setup{} + +local buf_map = function(bufnr, mode, lhs, rhs, opts) + vim.api.nvim_buf_set_keymap(bufnr, mode, lhs, rhs, opts or { + silent = true, + }) +end + +local protocol = require('vim.lsp.protocol') + +local on_attach = function(client, buffnr) + if client.server.capabilities.documentFormattingProvider then + vimapi.nvim_create_autocmd("BufWritePre", { + group = vim.api.nvim_create_augroup("format", { clear = true }), + buffer = buffnr, + callback = function() vim.lsp.buf.formatting_seq_sync() end + }) + end +end + +local capabilities = vim.lsp.protocol.make_client_capabilities() +capabilities.textDocument.completion.completionItem.snippetSupport = true +capabilities = require('cmp_nvim_lsp').default_capabilities(capabilities) + +local servers = { 'tsserver', 'lua', 'cssls', 'yamlls', 'intelephense' } +for _, lsp in pairs(servers) do + require('lspconfig')[lsp].setup { + -- on_attach = on_attach, + capabilities = capabilities, + } +end + +lspc.yamlls.setup({ + settings = { + yaml = { + keyOrdering = false, + }, + }, +}); + + +-- lspc.intelephense.setup() diff --git a/hosts/nb-01.cloonar.com/modules/nvim/config/nvim-cmp.lua b/hosts/nb-01.cloonar.com/modules/nvim/config/nvim-cmp.lua new file mode 100644 index 0000000..13bff54 --- /dev/null +++ b/hosts/nb-01.cloonar.com/modules/nvim/config/nvim-cmp.lua @@ -0,0 +1,73 @@ +local has_words_before = function() + local line, col = unpack(vim.api.nvim_win_get_cursor(0)) + return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match("%s") == nil +end + +local feedkey = function(key, mode) + vim.api.nvim_feedkeys(vim.api.nvim_replace_termcodes(key, true, true, true), mode, true) +end + +local cmp = require("cmp") +local lspkind = require("lspkind") + +cmp.setup({ + sources = { + { name = "nvim_lsp" }, + { name = "cmp_tabnine" }, + { name = "treesitter" }, + { name = "buffer" }, + { name = "path" }, + { name = "vsnip" }, + -- { name = "copilot" }, + }, + + snippet = { + expand = function(args) + vim.fn["vsnip#anonymous"](args.body) + end, + }, + + formatting = { + format = lspkind.cmp_format({ + with_text = true, + menu = { + buffer = "[Buf]", + nvim_lsp = "[LSP]", + nvim_lua = "[Lua]", + latex_symbols = "[Latex]", + treesitter = "[TS]", + cmp_tabnine = "[TN]", + vsnip = "[Snip]", + }, + }), + }, + + mapping = { + [""] = cmp.mapping.confirm({ select = true }), + [""] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_next_item() + elseif vim.fn["vsnip#available"](1) == 1 then + feedkey("(vsnip-expand-or-jump)", "") + elseif has_words_before() then + cmp.complete() + else + fallback() + end + end, { + "i", + "s", + }), + + [""] = cmp.mapping(function() + if cmp.visible() then + cmp.select_prev_item() + elseif vim.fn["vsnip#jumpable"](-1) == 1 then + feedkey("(vsnip-jump-prev)", "") + end + end, { + "i", + "s", + }), + }, +}) diff --git a/hosts/nb-01.cloonar.com/modules/nvim/config/project.lua b/hosts/nb-01.cloonar.com/modules/nvim/config/project.lua new file mode 100644 index 0000000..f56e374 --- /dev/null +++ b/hosts/nb-01.cloonar.com/modules/nvim/config/project.lua @@ -0,0 +1,41 @@ +config = { + ---@usage set to false to disable project.nvim. + --- This is on by default since it's currently the expected behavior. + active = true, + + on_config_done = nil, + + ---@usage set to true to disable setting the current-woriking directory + --- Manual mode doesn't automatically change your root directory, so you have + --- the option to manually do so using `:ProjectRoot` command. + manual_mode = false, + + ---@usage Methods of detecting the root directory + --- Allowed values: **"lsp"** uses the native neovim lsp + --- **"pattern"** uses vim-rooter like glob pattern matching. Here + --- order matters: if one is not detected, the other is used as fallback. You + --- can also delete or rearangne the detection methods. + -- detection_methods = { "lsp", "pattern" }, -- NOTE: lsp detection will get annoying with multiple langs in one project + detection_methods = { "pattern" }, + + ---@usage patterns used to detect root dir, when **"pattern"** is in detection_methods + patterns = { ".git", "_darcs", ".hg", ".bzr", ".svn", "Makefile", "package.json", "pom.xml" }, + + ---@ Show hidden files in telescope when searching for files in a project + show_hidden = false, + + ---@usage When set to false, you will get a message when project.nvim changes your directory. + -- When set to false, you will get a message when project.nvim changes your directory. + silent_chdir = true, + + ---@usage list of lsp client names to ignore when using **lsp** detection. eg: { "efm", ... } + ignore_lsp = {}, +} + +local status_ok, project = pcall(require, "project_nvim") +if not status_ok then + return +end + +project.setup(config) + diff --git a/hosts/nb-01.cloonar.com/modules/nvim/config/telescope.lua b/hosts/nb-01.cloonar.com/modules/nvim/config/telescope.lua new file mode 100644 index 0000000..8ca6d9e --- /dev/null +++ b/hosts/nb-01.cloonar.com/modules/nvim/config/telescope.lua @@ -0,0 +1,148 @@ +local function get_pickers(actions) + return { + find_files = { + theme = "dropdown", + hidden = true, + previewer = false, + }, + live_grep = { + --@usage don't include the filename in the search results + only_sort_text = true, + theme = "dropdown", + }, + grep_string = { + only_sort_text = true, + theme = "dropdown", + }, + buffers = { + theme = "dropdown", + previewer = false, + initial_mode = "normal", + mappings = { + i = { + [""] = actions.delete_buffer, + }, + n = { + ["dd"] = actions.delete_buffer, + }, + }, + }, + planets = { + show_pluto = true, + show_moon = true, + }, + git_files = { + theme = "dropdown", + hidden = true, + previewer = false, + show_untracked = true, + }, + lsp_references = { + theme = "dropdown", + initial_mode = "normal", + }, + lsp_definitions = { + theme = "dropdown", + initial_mode = "normal", + }, + lsp_declarations = { + theme = "dropdown", + initial_mode = "normal", + }, + lsp_implementations = { + theme = "dropdown", + initial_mode = "normal", + }, + } +end + +local ok, actions = pcall(require, "telescope.actions") +if not ok then + return +end + +local config = { + prompt_prefix = " ", + selection_caret = " ", + entry_prefix = " ", + initial_mode = "insert", + selection_strategy = "reset", + sorting_strategy = "descending", + layout_strategy = "horizontal", + layout_config = { + width = 0.75, + preview_cutoff = 120, + horizontal = { + preview_width = function(_, cols, _) + if cols < 120 then + return math.floor(cols * 0.8) + end + return math.floor(cols * 0.8) + end, + mirror = false, + }, + vertical = { mirror = false }, + }, + vimgrep_arguments = { + "rg", + "--color=never", + "--no-heading", + "--with-filename", + "--line-number", + "--column", + "--smart-case", + "--hidden", + "--glob=!.git/", + }, + ---@usage Mappings are fully customizable. Many familiar mapping patterns are setup as defaults. + mappings = { + i = { + [""] = actions.move_selection_next, + [""] = actions.move_selection_previous, + [""] = actions.close, + [""] = actions.cycle_history_next, + [""] = actions.cycle_history_prev, + [""] = actions.smart_send_to_qflist + actions.open_qflist, + [""] = actions.select_default, + }, + n = { + [""] = actions.move_selection_next, + [""] = actions.move_selection_previous, + [""] = actions.smart_send_to_qflist + actions.open_qflist, + }, + }, + pickers = get_pickers(actions), + file_ignore_patterns = {}, + path_display = { "smart" }, + winblend = 0, + border = {}, + borderchars = { "─", "│", "─", "│", "╭", "╮", "╯", "╰" }, + color_devicons = true, + set_env = { ["COLORTERM"] = "truecolor" }, -- default = nil, + extensions = { + fzf = { + fuzzy = true, -- false will only do exact matching + override_generic_sorter = true, -- override the generic sorter + override_file_sorter = true, -- override the file sorter + case_mode = "smart_case", -- or "ignore_case" or "respect_case" + }, + }, +} + + +local previewers = require "telescope.previewers" +local sorters = require "telescope.sorters" + +config = vim.tbl_extend("keep", { + file_previewer = previewers.vim_buffer_cat.new, + grep_previewer = previewers.vim_buffer_vimgrep.new, + qflist_previewer = previewers.vim_buffer_qflist.new, + file_sorter = sorters.get_fuzzy_file, + generic_sorter = sorters.get_generic_fuzzy_sorter, +}, config) + +local telescope = require "telescope" +telescope.setup(config) + +require("telescope").load_extension "projects" +require("telescope").load_extension "fzf" diff --git a/hosts/nb-01.cloonar.com/modules/nvim/config/terminal.lua b/hosts/nb-01.cloonar.com/modules/nvim/config/terminal.lua new file mode 100644 index 0000000..164f7b8 --- /dev/null +++ b/hosts/nb-01.cloonar.com/modules/nvim/config/terminal.lua @@ -0,0 +1,133 @@ +local config = { + active = true, + on_config_done = nil, + -- size can be a number or function which is passed the current terminal + size = 60, + open_mapping = [[]], + hide_numbers = true, -- hide the number column in toggleterm buffers + shade_filetypes = {}, + shade_terminals = true, + shading_factor = 2, -- the degree by which to darken to terminal colour, default: 1 for dark backgrounds, 3 for light + start_in_insert = true, + insert_mappings = true, -- whether or not the open mapping applies in insert mode + persist_size = false, + -- direction = 'vertical' | 'horizontal' | 'window' | 'float', + direction = "float", + close_on_exit = true, -- close the terminal window when the process exits + shell = vim.o.shell, -- change the default shell + -- This field is only relevant if direction is set to 'float' + float_opts = { + -- The border key is *almost* the same as 'nvim_win_open' + -- see :h nvim_win_open for details on borders however + -- the 'curved' border is a custom border type + -- not natively supported but implemented in this plugin. + -- border = 'single' | 'double' | 'shadow' | 'curved' | ... other options supported by win open + border = "curved", + -- width = , + -- height = , + winblend = 0, + highlights = { + border = "Normal", + background = "Normal", + }, + }, + -- Add executables on the config.lua + -- { exec, keymap, name} + -- lvim.builtin.terminal.execs = {{}} to overwrite + -- lvim.builtin.terminal.execs[#lvim.builtin.terminal.execs+1] = {"gdb", "tg", "GNU Debugger"} + -- TODO: pls add mappings in which key and refactor this + execs = { + { vim.o.shell, "", "Horizontal Terminal", "horizontal", 0.3 }, + { vim.o.shell, "", "Vertical Terminal", "vertical", 0.4 }, + { vim.o.shell, "", "Float Terminal", "float", nil }, + }, +} + +--- Get current buffer size +---@return {width: number, height: number} +local function get_buf_size() + local cbuf = vim.api.nvim_get_current_buf() + local bufinfo = vim.tbl_filter(function(buf) + return buf.bufnr == cbuf + end, vim.fn.getwininfo(vim.api.nvim_get_current_win()))[1] + if bufinfo == nil then + return { width = -1, height = -1 } + end + return { width = bufinfo.width, height = bufinfo.height } +end + +--- Get the dynamic terminal size in cells +---@param direction number +---@param size integer +---@return integer +local function get_dynamic_terminal_size(direction, size) + size = size or config.size + if direction ~= "vertical" and tostring(size):find(".", 1, true) then + size = math.min(size, 1.0) + local buf_sizes = get_buf_size() + local buf_size = direction == "horizontal" and buf_sizes.height or buf_sizes.width + return buf_size * size + else + return size + end +end + +Add_exec = function(opts) + local binary = opts.cmd:match "(%S+)" + if vim.fn.executable(binary) ~= 1 then + Log:debug("Skipping configuring executable " .. binary .. ". Please make sure it is installed properly.") + return + end + + vim.keymap.set({ "n", "t" }, opts.keymap, function() + M._exec_toggle { cmd = opts.cmd, count = opts.count, direction = opts.direction, size = opts.size() } + end, { desc = opts.label, noremap = true, silent = true }) +end + +local terminal = require "toggleterm" +terminal.setup(config) + +for i, exec in pairs(config.execs) do + local direction = exec[4] or config.direction + + local opts = { + cmd = exec[1], + keymap = exec[2], + label = exec[3], + -- NOTE: unable to consistently bind id/count <= 9, see #2146 + count = i + 100, + direction = direction, + size = function() + return get_dynamic_terminal_size(direction, exec[5]) + end, + } + + Add_exec(opts) +end + +_exec_toggle = function(opts) + local Terminal = require("toggleterm.terminal").Terminal + local term = Terminal:new { cmd = opts.cmd, count = opts.count, direction = opts.direction } + term:toggle(opts.size, opts.direction) +end + +Lazygit_toggle = function() + local Terminal = require("toggleterm.terminal").Terminal + local lazygit = Terminal:new { + cmd = "lazygit", + hidden = true, + direction = "float", + float_opts = { + border = "none", + width = 100000, + height = 100000, + }, + on_open = function(_) + vim.cmd "startinsert!" + end, + on_close = function(_) end, + count = 99, + } + lazygit:toggle() +end + diff --git a/hosts/nb-01.cloonar.com/modules/nvim/config/theming.lua b/hosts/nb-01.cloonar.com/modules/nvim/config/theming.lua new file mode 100644 index 0000000..eb3f6ac --- /dev/null +++ b/hosts/nb-01.cloonar.com/modules/nvim/config/theming.lua @@ -0,0 +1,18 @@ +-- set colorscheme +vim.cmd 'set termguicolors' + +require("catppuccin").setup() + +vim.cmd [[colorscheme dracula]] + +-- enable colorizer +require'colorizer'.setup() + +-- set sign +vim.cmd 'sign define DiagnosticSignError text= linehl= texthl=DiagnosticSignError numhl=' +vim.cmd 'sign define DiagnosticSignHint text= linehl= texthl=DiagnosticSignHint numhl=' +vim.cmd 'sign define DiagnosticSignInfo text= linehl= texthl=DiagnosticSignInfo numhl=' +vim.cmd 'sign define DiagnosticSignWarn text= linehl= texthl=DiagnosticSignWarn numhl=' + +-- set lightline theme to horizon +vim.g.lightline = { colorscheme = "dracula" } diff --git a/hosts/nb-01.cloonar.com/modules/nvim/config/treesitter-textobjects.lua b/hosts/nb-01.cloonar.com/modules/nvim/config/treesitter-textobjects.lua new file mode 100644 index 0000000..8f2c6d6 --- /dev/null +++ b/hosts/nb-01.cloonar.com/modules/nvim/config/treesitter-textobjects.lua @@ -0,0 +1,14 @@ +require'nvim-treesitter.configs'.setup { + textobjects = { + select = { + enable = true, + keymaps = { + -- You can use the capture groups defined in textobjects.scm + ["af"] = "@function.outer", + ["if"] = "@function.inner", + ["ac"] = "@class.outer", + ["ic"] = "@class.inner", + }, + }, + }, +} diff --git a/hosts/nb-01.cloonar.com/modules/nvim/config/treesitter.lua b/hosts/nb-01.cloonar.com/modules/nvim/config/treesitter.lua new file mode 100644 index 0000000..1f33ef0 --- /dev/null +++ b/hosts/nb-01.cloonar.com/modules/nvim/config/treesitter.lua @@ -0,0 +1,30 @@ +require("nvim-treesitter.configs").setup({ + highlight = { + enable = true, + disable = {}, + }, + rainbow = { + enable = true, + extended_mode = true, + }, + autotag = { + enable = true, + }, + context_commentstring = { + enable = true, + }, + incremental_selection = { + enable = true, + keymaps = { + init_selection = "gnn", + node_incremental = "grn", + scope_incremental = "grc", + node_decremental = "grm", + }, + }, +}) + +-- breaks highlight +-- vim.cmd([[set foldmethod=expr]]) +-- vim.cmd([[set foldlevel=10]]) +-- vim.cmd([[set foldexpr=nvim_treesitter#foldexpr()]]) \ No newline at end of file diff --git a/hosts/nb-01.cloonar.com/modules/nvim/config/utils.lua b/hosts/nb-01.cloonar.com/modules/nvim/config/utils.lua new file mode 100644 index 0000000..ec15d39 --- /dev/null +++ b/hosts/nb-01.cloonar.com/modules/nvim/config/utils.lua @@ -0,0 +1,28 @@ +-- null-ls +local nb = require('null-ls').builtins + +require('null-ls').setup({ + sources = { + nb.formatting.alejandra, + nb.code_actions.statix, + nb.diagnostics.cppcheck, + nb.diagnostics.deadnix, + nb.diagnostics.statix, + nb.diagnostics.eslint, + nb.completion.spell, + }, +}) + +require("gitsigns").setup() + +-- autopairs +require('nvim-autopairs').setup{} + +require('todo-comments').setup{} + +-- copy to system clipboard +vim.api.nvim_set_keymap( 'v', 'y', '"+y', {noremap = true}) +vim.api.nvim_set_keymap( 'n', 'y', ':%+y', {noremap = true}) + +-- paste from system clipboard +vim.api.nvim_set_keymap( 'n', 'p', '"+p', {noremap = true}) diff --git a/hosts/nb-01.cloonar.com/modules/nvim/config/which-key.lua b/hosts/nb-01.cloonar.com/modules/nvim/config/which-key.lua new file mode 100644 index 0000000..6b67e89 --- /dev/null +++ b/hosts/nb-01.cloonar.com/modules/nvim/config/which-key.lua @@ -0,0 +1,148 @@ +vim.g.mapleader = " " + +local function smart_quit() + local bufnr = vim.api.nvim_get_current_buf() + local modified = vim.api.nvim_buf_get_option(bufnr, "modified") + if modified then + vim.ui.input({ + prompt = "You have unsaved changes. Quit anyway? (y/n) ", + }, function(input) + if input == "y" then + vim.cmd "q!" + end + end) + else + vim.cmd "q!" + end +end + +local function find_project_files() + local _, builtin = pcall(require, "telescope.builtin") + local ok = pcall(builtin.git_files) + + if not ok then + builtin.find_files() + end +end + +local wk = require("which-key") + +wk.setup({}) + +wk.register({ + [""] = { + + [";"] = { "Alpha", "Dashboard" }, + ["w"] = { "w!", "Save" }, + ["q"] = { "smart_quit()", "Quit" }, + ["/"] = { "(comment_toggle_linewise_current)", "Comment toggle current line" }, + ["c"] = { "BufferKill", "Close Buffer" }, + ["f"] = { find_project_files, "Find File" }, + ["h"] = { "nohlsearch", "No Highlight" }, + ["t"] = { "TodoTelescope keywords=TODO,FIX", "Find TODO,FIX" }, + b = { + name = "Buffers", + j = { "BufferLinePick", "Jump" }, + f = { "Telescope buffers", "Find" }, + b = { "BufferLineCyclePrev", "Previous" }, + n = { "BufferLineCycleNext", "Next" }, + -- w = { "BufferWipeout", "Wipeout" }, -- TODO: implement this for bufferline + e = { + "BufferLinePickClose", + "Pick which buffer to close", + }, + h = { "BufferLineCloseLeft", "Close all to the left" }, + l = { + "BufferLineCloseRight", + "Close all to the right", + }, + D = { + "BufferLineSortByDirectory", + "Sort by directory", + }, + L = { + "BufferLineSortByExtension", + "Sort by language", + }, + }, + -- " Available Debug Adapters: + -- " https://microsoft.github.io/debug-adapter-protocol/implementors/adapters/ + -- " Adapter configuration and installation instructions: + -- " https://github.com/mfussenegger/nvim-dap/wiki/Debug-Adapter-installation + -- " Debug Adapter protocol: + -- " https://microsoft.github.io/debug-adapter-protocol/ + -- " Debugging + g = { + name = "Git", + g = { Lazygit_toggle, "Lazygit" }, + j = { "lua require 'gitsigns'.next_hunk({navigation_message = false})", "Next Hunk" }, + k = { "lua require 'gitsigns'.prev_hunk({navigation_message = false})", "Prev Hunk" }, + l = { "lua require 'gitsigns'.blame_line()", "Blame" }, + p = { "lua require 'gitsigns'.preview_hunk()", "Preview Hunk" }, + r = { "lua require 'gitsigns'.reset_hunk()", "Reset Hunk" }, + R = { "lua require 'gitsigns'.reset_buffer()", "Reset Buffer" }, + s = { "lua require 'gitsigns'.stage_hunk()", "Stage Hunk" }, + u = { + "lua require 'gitsigns'.undo_stage_hunk()", + "Undo Stage Hunk", + }, + o = { "Telescope git_status", "Open changed file" }, + b = { "Telescope git_branches", "Checkout branch" }, + c = { "Telescope git_commits", "Checkout commit" }, + C = { + "Telescope git_bcommits", + "Checkout commit(for current file)", + }, + d = { + "Gitsigns diffthis HEAD", + "Git Diff", + }, + }, + l = { + name = "LSP", + a = { "lua vim.lsp.buf.code_action()", "Code Action" }, + d = { "Telescope diagnostics bufnr=0 theme=get_ivy", "Buffer Diagnostics" }, + w = { "Telescope diagnostics", "Diagnostics" }, + -- f = { require("lvim.lsp.utils").format, "Format" }, + i = { "LspInfo", "Info" }, + I = { "Mason", "Mason Info" }, + j = { + vim.diagnostic.goto_next, + "Next Diagnostic", + }, + k = { + vim.diagnostic.goto_prev, + "Prev Diagnostic", + }, + l = { vim.lsp.codelens.run, "CodeLens Action" }, + q = { vim.diagnostic.setloclist, "Quickfix" }, + r = { vim.lsp.buf.rename, "Rename" }, + s = { "Telescope lsp_document_symbols", "Document Symbols" }, + S = { + "Telescope lsp_dynamic_workspace_symbols", + "Workspace Symbols", + }, + e = { "Telescope quickfix", "Telescope Quickfix" }, + }, + + + a = { "lua require('telescope.builtin').lsp_code_actions()", "Code Actions" }, + d = { "lua require('telescope.builtin').lsp_document_diagnostics()", "LSP Diagnostics" }, + k = { "lua vim.lsp.buf.signature_help()", "Signature Help" }, + P = { "lua require'telescope'.extensions.projects.projects{}", "Signature Help" }, + } +}) + +wk.register( + { + ["/"] = { "(comment_toggle_linewise_visual)", "Comment toggle linewise (visual)" }, + }, + { + mode = "v", -- VISUAL mode + prefix = "", + buffer = nil, -- Global mappings. Specify a buffer number for buffer local mappings + silent = true, -- use `silent` when creating keymaps + noremap = true, -- use `noremap` when creating keymaps + nowait = true, -- use `nowait` when creating keymaps + } +) diff --git a/hosts/nb-01.cloonar.com/modules/nvim/default.nix b/hosts/nb-01.cloonar.com/modules/nvim/default.nix new file mode 100644 index 0000000..4a37415 --- /dev/null +++ b/hosts/nb-01.cloonar.com/modules/nvim/default.nix @@ -0,0 +1,90 @@ +{ pkgs, ... }: +{ + environment.variables = { EDITOR = "vim"; }; + + environment.systemPackages = with pkgs; [ + nodePackages.typescript-language-server + sumneko-lua-language-server + nodePackages.intelephense + nodePackages.vscode-css-languageserver-bin + nodePackages.yaml-language-server + gopls + lazygit + ripgrep + (neovim.override { + vimAlias = true; + configure = { + packages.myPlugins = with pkgs.vimPlugins; { + start = [ + bufferline-nvim + catppuccin-nvim + cmp-buffer + cmp-nvim-lsp + cmp-path + cmp-spell + cmp-treesitter + cmp-vsnip + comment-nvim + copilot-vim + copilot-lua + copilot-cmp + # CopilotChat-nvim + dracula-vim + friendly-snippets + gitsigns-nvim + lightline-vim + lspkind-nvim + neogit + null-ls-nvim + nvim-autopairs + nvim-cmp + nvim-colorizer-lua + nvim-lspconfig + nvim-tree-lua + pkgs.vimPlugins.nvim-treesitter.withAllGrammars + # (nvim-treesitter.withPlugins (_: pkgs.tree-sitter.allGrammars)) + plenary-nvim + project-nvim + rainbow-delimiters-nvim + telescope-fzf-native-nvim + telescope-nvim + todo-comments-nvim + toggleterm-nvim + vim-floaterm + vim-sneak + vim-vsnip + which-key-nvim + ]; + opt = []; + }; + customRC = let + luaRequire = module: + builtins.readFile (builtins.toString + ./config + + "/${module}.lua"); + luaConfig = builtins.concatStringsSep "\n" (map luaRequire [ + "init" + "keymappings" + "copilot" + "icons" + "lspconfig" + "nvim-cmp" + "theming" + "project" + "telescope" + "terminal" + "treesitter" + "treesitter-textobjects" + "utils" + "bufferline" + "which-key" + ]); + in '' + lua << EOF + ${luaConfig} + EOF + ''; + }; + } + )]; +} diff --git a/hosts/nb-01.cloonar.com/modules/printer.nix b/hosts/nb-01.cloonar.com/modules/printer.nix new file mode 100644 index 0000000..c7e1e90 --- /dev/null +++ b/hosts/nb-01.cloonar.com/modules/printer.nix @@ -0,0 +1,25 @@ +{ lib, pkgs, ... }: +let +in { + services.printing.enable = true; + # services.printing.drivers = [ pkgs.brlaser ]; + # services.avahi.enable = true; + # services.avahi.nssmdns = true; + # services.avahi.openFirewall = true; + + hardware.printers = { + ensureDefaultPrinter = "Cloonar"; + ensurePrinters = [ + { + name = "epicenter.works"; + deviceUri = "ipp://mercury.epicenter.intra/ipp/print"; + model = "everywhere"; + } + { + name = "Cloonar"; + deviceUri = "ipp://brn30055c566237.cloonar.multimedia/ipp/print"; + model = "everywhere"; + } + ]; + }; +} diff --git a/hosts/nb-01.cloonar.com/modules/sway/directory-studio-nix b/hosts/nb-01.cloonar.com/modules/sway/directory-studio-nix new file mode 100644 index 0000000..9633b42 --- /dev/null +++ b/hosts/nb-01.cloonar.com/modules/sway/directory-studio-nix @@ -0,0 +1,7 @@ + +{ pkgs, ... }: +{ + environment.systemPackages = [ + pkgs.apache-directory-studio + ]; +} diff --git a/hosts/nb-01.cloonar.com/modules/sway/foot.ini b/hosts/nb-01.cloonar.com/modules/sway/foot.ini new file mode 100644 index 0000000..fb137ca --- /dev/null +++ b/hosts/nb-01.cloonar.com/modules/sway/foot.ini @@ -0,0 +1,200 @@ +# -*- conf -*- + +# shell=$SHELL (if set, otherwise user's default shell from /etc/passwd) +# term=foot (or xterm-256color if built with -Dterminfo=disabled) +# login-shell=no + +# app-id=foot # globally set wayland app-id. Default values are "foot" and "footclient" for desktop and server mode +# title=foot +# locked-title=no + +# font=monospace:size=12 +# font-bold= +# font-italic= +# font-bold-italic= +# font-size-adjustment=0.5 +# line-height= +# letter-spacing=0 +# horizontal-letter-offset=0 +# vertical-letter-offset=0 +# underline-offset= +# underline-thickness= +# box-drawings-uses-font-glyphs=no +dpi-aware=yes + +# initial-window-size-pixels=700x500 # Or, +# initial-window-size-chars= +# initial-window-mode=windowed +# pad=0x0 # optionally append 'center' +# resize-delay-ms=100 + +# notify=notify-send -a ${app-id} -i ${app-id} ${title} ${body} + +# bold-text-in-bright=no +# word-delimiters=,│`|:"'()[]{}<> +# selection-target=primary +# workers= +# utmp-helper=/usr/lib/utempter/utempter # When utmp backend is ‘libutempter’ (Linux) +# utmp-helper=/usr/libexec/ulog-helper # When utmp backend is ‘ulog’ (FreeBSD) + +[environment] +# name=value + +[bell] +# urgent=no +# notify=no +# command= +# command-focused=no + +[scrollback] +# lines=1000 +# multiplier=3.0 +# indicator-position=relative +# indicator-format="" + +[url] +# launch=xdg-open ${url} +# label-letters=sadfjklewcmpgh +# osc8-underline=url-mode +# protocols=http, https, ftp, ftps, file, gemini, gopher +# uri-characters=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.,~:;/?#@!$&%*+="'()[] + +[cursor] +# style=block +# color= +# blink=no +# beam-thickness=1.5 +# underline-thickness= + +[mouse] +# hide-when-typing=no +# alternate-scroll-mode=yes + +[colors] +# alpha=1.0 +background=282a36 +foreground=f8f8f2 + +## Normal/regular colors (color palette 0-7) +regular0=21222c # black +regular1=ff5555 # red +regular2=50fa7b # green +regular3=f1fa8c # yellow +regular4=bd93f9 # blue +regular5=ff79c6 # magenta +regular6=8be9fd # cyan +regular7=f8f8f2 # white + +## Bright colors (color palette 8-15) +bright0=6272a4 # bright black +bright1=ff6e6e # bright red +bright2=69ff94 # bright green +bright3=ffffa5 # bright yellow +bright4=d6acff # bright blue +bright5=ff92df # bright magenta +bright6=a4ffff # bright cyan +bright7=ffffff # bright white + +## dimmed colors (see foot.ini(5) man page) +# dim0= +# ... +# dim7= + +## The remaining 256-color palette +# 16 = <256-color palette #16> +# ... +# 255 = <256-color palette #255> + +## Misc colors +# selection-foreground= +# selection-background= +# jump-labels= # black-on-yellow +# scrollback-indicator= # black-on-bright-blue +# search-box-no-match= # black-on-red +# search-box-match= # black-on-yellow +# urls= + +[csd] +# preferred=server +# size=26 +# font= +# color= +# hide-when-maximized=no +# double-click-to-maximize=yes +# border-width=0 +# border-color= +# button-width=26 +# button-color= +# button-minimize-color= +# button-maximize-color= +# button-close-color= + +[key-bindings] +# scrollback-up-page=Shift+Page_Up +# scrollback-up-half-page=none +# scrollback-up-line=none +# scrollback-down-page=Shift+Page_Down +# scrollback-down-half-page=none +# scrollback-down-line=none +# clipboard-copy=Control+Shift+c XF86Copy +# clipboard-paste=Control+Shift+v XF86Paste +# primary-paste=Shift+Insert +# search-start=Control+Shift+r +# font-increase=Control+plus Control+equal Control+KP_Add +# font-decrease=Control+minus Control+KP_Subtract +# font-reset=Control+0 Control+KP_0 +# spawn-terminal=Control+Shift+n +# minimize=none +# maximize=none +# fullscreen=none +# pipe-visible=[sh -c "xurls | fuzzel | xargs -r firefox"] none +# pipe-scrollback=[sh -c "xurls | fuzzel | xargs -r firefox"] none +# pipe-selected=[xargs -r firefox] none +# show-urls-launch=Control+Shift+o +# show-urls-copy=none +# show-urls-persistent=none +# prompt-prev=Control+Shift+z +# prompt-next=Control+Shift+x +# unicode-input=Control+Shift+u +# noop=none + +[search-bindings] +# cancel=Control+g Control+c Escape +# commit=Return +# find-prev=Control+r +# find-next=Control+s +# cursor-left=Left Control+b +# cursor-left-word=Control+Left Mod1+b +# cursor-right=Right Control+f +# cursor-right-word=Control+Right Mod1+f +# cursor-home=Home Control+a +# cursor-end=End Control+e +# delete-prev=BackSpace +# delete-prev-word=Mod1+BackSpace Control+BackSpace +# delete-next=Delete +# delete-next-word=Mod1+d Control+Delete +# extend-to-word-boundary=Control+w +# extend-to-next-whitespace=Control+Shift+w +# clipboard-paste=Control+v Control+Shift+v Control+y XF86Paste +# primary-paste=Shift+Insert +# unicode-input=none + +[url-bindings] +# cancel=Control+g Control+c Control+d Escape +# toggle-url-visible=t + +[text-bindings] +# \x03=Mod4+c # Map Super+c -> Ctrl+c + +[mouse-bindings] +# selection-override-modifiers=Shift +# primary-paste=BTN_MIDDLE +# select-begin=BTN_LEFT +# select-begin-block=Control+BTN_LEFT +# select-extend=BTN_RIGHT +# select-extend-character-wise=Control+BTN_RIGHT +# select-word=BTN_LEFT-2 +# select-word-whitespace=Control+BTN_LEFT-2 +# select-row=BTN_LEFT-3 + +# vim: ft=dosini diff --git a/hosts/nb-01.cloonar.com/modules/sway/parsec.nix b/hosts/nb-01.cloonar.com/modules/sway/parsec.nix new file mode 100644 index 0000000..83d603d --- /dev/null +++ b/hosts/nb-01.cloonar.com/modules/sway/parsec.nix @@ -0,0 +1,17 @@ +{ pkgs, ... }: + +let + unstable = import (fetchTarball https://nixos.org/channels/nixos-unstable/nixexprs.tar.xz) { + config = { allowUnfree = true; }; + }; + parsecDesktopItem = pkgs.makeDesktopItem { + name = "parsec"; + desktopName = "Parsec Gaming"; + exec = "parsecd"; + }; +in { + environment.systemPackages = with pkgs; [ + unstable.parsec-bin + parsecDesktopItem + ]; +} diff --git a/hosts/nb-01.cloonar.com/modules/sway/signal-work.nix b/hosts/nb-01.cloonar.com/modules/sway/signal-work.nix new file mode 100644 index 0000000..ed43b2e --- /dev/null +++ b/hosts/nb-01.cloonar.com/modules/sway/signal-work.nix @@ -0,0 +1,16 @@ + +{ pkgs, ... }: + +let + signalWorkDesktopItem = pkgs.makeDesktopItem { + name = "signal-work"; + desktopName = "Signal with work profile"; + icon = "signal-desktop"; + exec = "signal-desktop --user-data-dir=/home/dominik/.config/Signal-work -- %u"; + }; +in { + environment.systemPackages = [ + pkgs.signal-desktop + signalWorkDesktopItem + ]; +} diff --git a/hosts/nb-01.cloonar.com/modules/sway/social.nix b/hosts/nb-01.cloonar.com/modules/sway/social.nix new file mode 100644 index 0000000..148a862 --- /dev/null +++ b/hosts/nb-01.cloonar.com/modules/sway/social.nix @@ -0,0 +1,11 @@ +{ pkgs, ... }: + +let + socialDesktopItem = pkgs.makeDesktopItem { + name = "social"; + desktopName = "Firefox browser with social profile"; + exec = "firefox -P social"; + }; +in { + environment.systemPackages = [ socialDesktopItem ]; +} diff --git a/hosts/nb-01.cloonar.com/modules/sway/sway.conf b/hosts/nb-01.cloonar.com/modules/sway/sway.conf new file mode 100644 index 0000000..b4018c1 --- /dev/null +++ b/hosts/nb-01.cloonar.com/modules/sway/sway.conf @@ -0,0 +1,356 @@ +# Oxide theme +# +# Author: Diki Ananta Repository: https://github.com/dikiaap/dotfiles +# License: MIT +# i3 config file (v4) + +# font for window titles and bar +font pango:Source Sans Pro 10 + +# use win key +set $mod Mod4 + +# use these keys for focus, movement, and resize directions +set $left h +set $down j +set $up k +set $right l + +# define names for workspaces +set $ws1 "1: " +set $ws2 "2: " +set $ws3 "3: " +set $ws4 "4: " +set $ws5 "5: " +set $ws6 "6: " +set $ws7 "7: " +set $ws8 "8: " +set $ws9 "9: " +set $ws10 "10: " + +# assign workspaces to primary monitor +workspace $ws1 output primary +workspace $ws2 output primary +workspace $ws3 output primary +workspace $ws4 output primary +workspace $ws5 output primary +workspace $ws6 output primary +workspace $ws7 output primary +workspace $ws8 output primary +workspace $ws9 output primary + +# use $mod+Mouse to drag floating windows to their wanted position +floating_modifier $mod + +# control focused window when follows the mouse movements +focus_follows_mouse no + +# window border settings +default_border none +default_floating_border none + +# hiding borders adjacent to the screen edges +hide_edge_borders none + +# set popups during fullscreen mode +popup_during_fullscreen smart + +# start a terminal +#bindsym $mod+Return workspace $ws1; exec --no-startup-id alacritty +# bindsym $mod+Return workspace $ws1; exec alacritty -t alacritty-sway +bindsym $mod+Return workspace $ws1; exec foot -c /etc/xdg/foot/foot.ini -T terminal-sway + +# start a program launcher +# bindsym $mod+d exec --no-startup-id wofi -s /etc/wofi/style.css --show drun --lines 5 --columns 1 -t alacritty +# bindsym $mod+d exec alacritty --class=launcher -e env TERMINAL_COMMAND="alacritty -e" sway-launcher-desktop +bindsym $mod+d exec foot -a launcher -e env TERMINAL_COMMAND="foot -c /etc/xdg/foot/foot.ini -e" sway-launcher-desktop +#bindsym $mod+d exec --no-startup-id bemenu +#bindsym $mod+d exec --no-startup-id i3-dmenu-desktop --dmenu="dmenu -i -fn 'Source Sans Pro-10' -nb '#212121' -sb '#2b83a6' -sf '#ffffff' +#bindsym $mod+d exec --no-startup-id bemenu --dmenu="dmenu -i -fn 'Source Sans Pro-10' -nb '#212121' -sb '#2b83a6' -sf '#ffffff' + +# start an explorer +bindsym $mod+e exec --no-startup-id pcmanfm + +# switching window with win+tab +bindsym $mod+Tab exec --no-startup-id wofi -show window + +# kill focused window +bindsym $mod+Shift+q kill + +# change keyboard layout +bindsym $mod+i swaymsg input "*" us +bindsym $mod+Shift+i swaymsg input "*" de + +# change focus +bindsym $mod+$left focus left +bindsym $mod+$down focus down +bindsym $mod+$up focus up +bindsym $mod+$right focus right + +# alternatively, you can use the cursor keys: +bindsym $mod+Left focus left +bindsym $mod+Down focus down +bindsym $mod+Up focus up +bindsym $mod+Right focus right + +# move focused window +bindsym $mod+Shift+$left move left +bindsym $mod+Shift+$down move down +bindsym $mod+Shift+$up move up +bindsym $mod+Shift+$right move right + +# alternatively, you can use the cursor keys: +bindsym $mod+Shift+Left move left +bindsym $mod+Shift+Down move down +bindsym $mod+Shift+Up move up +bindsym $mod+Shift+Right move right + +# split in horizontal orientation +bindsym $mod+c split h + +# split in vertical orientation +bindsym $mod+v split v + +# enter fullscreen mode for the focused container +bindsym $mod+f fullscreen toggle + +# change container layout +bindsym $mod+s layout stacking +bindsym $mod+w layout tabbed +bindsym $mod+p layout toggle split + +# toggle tiling / floating +# bindsym $mod+Shift+space floating toggle + +# change focus between tiling / floating windows +# bindsym $mod+space focus mode_toggle + +# focus the parent container +bindsym $mod+a focus parent + +# focus the child container +bindsym $mod+Shift+a focus child + +# move the currently focused window to the scratchpad +bindsym $mod+Shift+minus move scratchpad + +# show the next scratchpad window or hide the focused scratchpad window +bindsym $mod+minus scratchpad show + +# move focused floating window to the current position of the cursor +bindsym $mod+Shift+m move position mouse + +# set a window to stick to the glass +bindsym $mod+Shift+s sticky toggle + +# sticky preview for media +bindsym $mod+Shift+p fullscreen disable; floating enable; resize set 350 px 197 px; sticky enable; move window to position 1006 px 537 px + +# shortcut to change window border +bindsym $mod+t border normal 0 +bindsym $mod+y border pixel 1 +bindsym $mod+u border none + +# switch to workspace + +bindcode $mod+10 workspace $ws1 +bindcode $mod+11 workspace $ws2 +bindcode $mod+12 workspace $ws3 +bindcode $mod+13 workspace $ws4 +bindcode $mod+14 workspace $ws5 +bindcode $mod+15 workspace $ws6 +bindcode $mod+16 workspace $ws7 +bindcode $mod+17 workspace $ws8 +bindcode $mod+18 workspace $ws9 +bindcode $mod+19 workspace $ws10 + +# move focused container to workspace +bindcode $mod+Shift+10 move container to workspace $ws1 +bindcode $mod+Shift+11 move container to workspace $ws2 +bindcode $mod+Shift+12 move container to workspace $ws3 +bindcode $mod+Shift+13 move container to workspace $ws4 +bindcode $mod+Shift+14 move container to workspace $ws5 +bindcode $mod+Shift+15 move container to workspace $ws6 +bindcode $mod+Shift+16 move container to workspace $ws7 +bindcode $mod+Shift+17 move container to workspace $ws8 +bindcode $mod+Shift+18 move container to workspace $ws9 +bindcode $mod+Shift+19 move container to workspace $ws10 + +# shortcut applications +bindsym $mod+F1 exec gkamus +bindsym $mod+F2 workspace $ws2; exec subl +bindsym $mod+F3 workspace $ws3; exec chromium-browser +bindsym $mod+F4 workspace $ws4; exec pcmanfm +bindsym $mod+F5 workspace $ws5; exec evince +bindsym $mod+F6 workspace $ws6; exec audacious +bindsym $mod+F7 workspace $ws7; exec gcolor2 +bindsym $mod+F8 workspace $ws8; exec telegram +bindsym $mod+F9 workspace $ws9; exec go-for-it +bindsym Print exec --no-startup-id gnome-screenshot +bindcode $mod+9 exec swaylock --image ~/.wallpaper.jpg +bindsym Ctrl+Shift+Space exec 1password --quick-access +bindsym $mod+Space exec rofi-rbw --menu-keybindings ctrl+p:copy:password + +# volume +bindsym XF86AudioLowerVolume exec amixer -q sset Master 5%- unmute +bindsym XF86AudioRaiseVolume exec amixer -q sset Master 5%+ unmute +bindsym XF86AudioMute exec amixer -q sset Master toggle + +# touchpad +# bindsym XF86NotificationCenter exec swaymsg input type:touchpad events toggle enabled disabled + +# set brightness logarithmically by factor 1.4 +# .72 is just slightly bigger than 1 / 1.4 +bindsym --locked XF86MonBrightnessUp exec light -S "$(light -G | awk '{ print int(($1 + .72) * 1.4) }')" +bindsym --locked XF86MonBrightnessDown exec light -S "$(light -G | awk '{ print int($1 / 1.4) }')" + +# reload the configuration file +bindsym $mod+Shift+c reload + +# restart i3 inplace +bindsym $mod+Shift+r restart + +# manage i3 session +bindsym $mod+Shift+e exec swaynag --background f1fa8c --border ffb86c --border-bottom-size 0 --button-background ffb86c --button-text 282a36 -t warning -f "pango:Hack 9" -m "Do you really want to exit?" -B "  Exit " "swaymsg exit" -B "  Lock " "pkill swaynag && swaylock --image ~/.wallpaper.jpg" -B "  Reboot " "pkill swaynag && reboot" -B "  Shutdown " "pkill swaynag && shutdown -h now" -B " Suspend " "pkill swaynag && systemctl suspend" + +# resize window +bindsym $mod+r mode "  " +mode "  " { + # pressing left and up will shrink the window's width and height + # pressing right and down will grow the window's width and height + bindsym $left resize shrink width 10 px or 10 ppt + bindsym $down resize grow height 10 px or 10 ppt + bindsym $up resize shrink height 10 px or 10 ppt + bindsym $right resize grow width 10 px or 10 ppt + + # same bindings, but for the arrow keys + bindsym Left resize shrink width 10 px or 10 ppt + bindsym Down resize grow height 10 px or 10 ppt + bindsym Up resize shrink height 10 px or 10 ppt + bindsym Right resize grow width 10 px or 10 ppt + + # back to normal: Enter or win+r + bindsym Return mode "default" + bindsym $mod+r mode "default" +} + +# set specific windows to floating mode +for_window [window_role="app"] floating enable +#for_window [window_role="pop-up"] floating enable +for_window [window_role="task_dialog"] floating enable +for_window [title="Preferences$"] floating enable +for_window [class="Gkamus"] floating enable +for_window [class="Go-for-it"] floating enable +for_window [class="Lightdm-gtk-greeter-settings"] floating enable +for_window [class="Lxappearance"] floating enable +for_window [class="Menu"] floating enable +for_window [class="Nm-connection-editor"] floating enable +for_window [class="Software-properties-gtk"] floating enable +for_window [app_id="launcher"] floating enable + +# set specific windows to tabbed mode +#for_window [class="Rambox"]tabbed +#for_window [class="Signal"]tabbed + +# assign program to workspace +assign [title="terminal-sway"] → $ws1 +# assign [app_id="Alacritty" title="^(?!alacritty-sway)$"] → $ws2 +assign [app_id="foot" title="^(?!terminal-sway)$"] → $ws2 +assign [app_id="chromium"] → $ws3 +assign [app_id="firefox"] → $ws3 +assign [app_id="librewolf"] → $ws3 +assign [app_id="pcmanfm"] → $ws4 +assign [app_id="libreoffice-calc"] → $ws5 +assign [app_id="libreoffice-writer"] → $ws5 +assign [class="vlc"] → $ws6 +assign [class="Gimp"] → $ws7 +assign [class="Signal"] → $ws8 +assign [app_id="social"] → $ws8 +assign [app_id="thunderbird"] → $ws8 +assign [class="Lightdm-gtk-greeter-settings"] → $ws10 +assign [class="Software-properties-gtk"] → $ws10 + +# class border backgr. text indicator child_border +client.focused #2b83a6 #2b83a6 #ffffff #dddddd #2b83a6 +client.focused_inactive #212121 #212121 #86888c #292d2e #5a5a5a +client.unfocused #212121 #212121 #86888c #292d2e #5a5a5a +client.urgent #d64e4e #d64e4e #ffffff #d64e4e #d64e4e +client.placeholder #212121 #0c0c0c #ffffff #212121 #262626 +client.background #212121 + +bar { + swaybar_command waybar +} + +# gaps +smart_gaps on +gaps inner 12 +gaps outer 0 + +# startup applications +exec /run/wrappers/bin/gnome-keyring-daemon --start --daemonize +exec dbus-sway-environment +exec configure-gtk +exec nm-applet --indicator +exec alacritty -t alacritty-sway +exec signal-desktop +exec firefox --name=social -p social +exec thunderbird +exec firefox +exec nextcloud +exec cryptomator +exec swayidle \ + before-sleep 'loginctl lock-session $XDG_SESSION_ID' \ + lock 'swaylock --image ~/.wallpaper.jpg' \ + timeout 180 'swaylock --screenshots --effect-blur 7x5' \ + timeout 1800 'systemctl suspend' +exec dunst +#exec --no-startup-id swaybg -c "#000000" -m fill -i ~/.config/wallpaper/wot.jpg +# exec --no-startup-id gnome-keyring-daemon --start --components=pkcs11,secrets,ssh +exec 'sleep 2; swaymsg workspace $ws8; swaymsg layout tabbed' +exec mako --default-timeout=5000 + +# wallpaper +output eDP-1 scale 1.5 +output eDP-1 bg ~/.wallpaper.jpg fill +output DP-4 bg ~/.wallpaper.jpg fill +output DP-5 bg ~/.wallpaper.jpg fill + +input * xkb_layout "de" +input * xkb_variant "colemak,,typewriter" +input * xkb_options "grp:win_space_toggle" +input "MANUFACTURER1 Keyboard" xkb_model "pc101" + +# notebook +set $laptop eDP-1 +# bindswitch --reload --locked lid:on output $laptop disable +# bindswitch --reload lid:off output $laptop enable + +# A lock command used in several places +set $lock_script swaylock + +# A sleep command used in several places. +# We leave a bit of time for locking to happen before putting the system to sleep +set $sleep $lock_script && sleep 3 && systemctl suspend + +# Triggers a short notification +set $notify dunstify --timeout 1500 + +# Set your laptop screen name +set $laptop_screen 'eDP-1' + +# Clamshell mode or lock & sleep +# This is a if/else statement: [ outputs_count == 1 ] && true || false +# bindswitch --locked lid:on exec '[ $(swaymsg -t get_outputs | grep name | wc -l) == 1 ] && ($sleep) || swaymsg output $laptop_screen disable' +bindswitch --locked lid:on exec 'swaymsg output $laptop_screen disable' +bindswitch --locked lid:off output $laptop_screen enable + +# disable xwayland +#xwayland disable + +# Touchpad +input type:touchpad { +tap enabled +natural_scroll enabled +} + diff --git a/hosts/nb-01.cloonar.com/modules/sway/sway.nix b/hosts/nb-01.cloonar.com/modules/sway/sway.nix new file mode 100644 index 0000000..f0904b3 --- /dev/null +++ b/hosts/nb-01.cloonar.com/modules/sway/sway.nix @@ -0,0 +1,143 @@ +{ config, pkgs, lib, ... }: + +with lib; + +let + cfg = config.cloonar.sway; + + dbus-sway-environment = pkgs.writeTextFile { + name = "dbus-sway-environment"; + destination = "/bin/dbus-sway-environment"; + executable = true; + + text = '' + dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP=sway + systemctl --user stop pipewire pipewire-media-session xdg-desktop-portal xdg-desktop-portal-wlr + systemctl --user start pipewire pipewire-media-session xdg-desktop-portal xdg-desktop-portal-wlr + ''; + }; + + sway-conf = builtins.readFile ./sway.conf + cfg.additionalConfig; + unstable = import { config = { allowUnfree = true; }; }; +in { + imports = [ + ./social.nix + ./signal-work.nix + ./parsec.nix + ./thunderbird.nix + ]; + + options.cloonar.sway = { + additionalConfig = mkOption { + type = types.str; + default = ""; + description = lib.mdDoc '' + Additional sway config + ''; + }; + }; + + config = { + hardware.sane.enable = true; + hardware.pulseaudio.enable = false; + + virtualisation.virtualbox.host.enable = true; + users.extraGroups.vboxusers.members = [ "dominik" ]; + + services.gnome.gnome-keyring.enable = true; + + environment.systemPackages = with pkgs; [ + alsaUtils + apache-directory-studio + bitwarden + bitwarden-cli + rofi-rbw-wayland + cryptomator + + brave + chromium + firefox + vivaldi + + unstable.cura + freecad + openscad + + dbus-sway-environment + ddev + dracula-theme + foot + gcc + git + glib + gimp + gnome.seahorse + gnome3.adwaita-icon-theme + go + grim + hunspell + hunspellDicts.de_DE + hunspellDicts.en_US + jmeter + libreoffice + mako + mqttui + networkmanagerapplet + nextcloud-client + onlyoffice-bin + pavucontrol + pcmanfm + pinentry + rbw + rofi-rbw + slurp + sway + sway-launcher-desktop + swayidle + swaylock + thunderbird + unzip + vlc + waybar + wayland + wl-clipboard + wofi + wtype + yubikey-manager-qt + ]; + + programs.light.enable = true; + + fonts.packages = with pkgs; [ + noto-fonts + noto-fonts-cjk + noto-fonts-emoji + nerdfonts + ]; + + security.rtkit.enable = true; + services.pipewire = { + enable = true; + alsa.enable = true; + alsa.support32Bit = true; + pulse.enable = true; + jack.enable = true; + }; + + programs.sway = { + enable = true; + wrapperFeatures.gtk = true; + extraOptions = [ + "--unsupported-gpu" + ]; + }; + + environment.etc = { + "sway/config".text = sway-conf; + "wofi/style.css".text = builtins.readFile ./wofi.css; + "xdg/waybar/config".text = builtins.readFile ./waybar.conf; + "xdg/waybar/style.css".text = builtins.readFile ./waybar.css; + "xdg/foot/foot.ini".text = builtins.readFile ./foot.ini; + }; + }; +} diff --git a/hosts/nb-01.cloonar.com/modules/sway/thunderbird.nix b/hosts/nb-01.cloonar.com/modules/sway/thunderbird.nix new file mode 100644 index 0000000..c757970 --- /dev/null +++ b/hosts/nb-01.cloonar.com/modules/sway/thunderbird.nix @@ -0,0 +1,40 @@ + +{ pkgs, ... }: +let + thunderbirdWorkDesktopItem = pkgs.makeDesktopItem { + name = "thunderbird-work"; + desktopName = "Thunderbird Work"; + icon = "thunderbird"; + exec = "thunderbird -p work"; + }; + thunderbirdCloonarDesktopItem = pkgs.makeDesktopItem { + name = "thunderbird-cloonar"; + desktopName = "Thunderbird Cloonar"; + icon = "thunderbird"; + exec = "thunderbird -p cloonar"; + }; +in +{ + + # nixpkgs.overlays = [ + # (self: super: + # { + # thunderbird-bin-unwrapped = super.thunderbird-bin-unwrapped.overrideAttrs ( old: rec { + # version = "112.0b7"; + # name = "thunderbird-bin"; + # src = super.fetchurl { + # url = "https://download-installer.cdn.mozilla.net/pub/thunderbird/releases/${version}/linux-x86_64/en-US/thunderbird-${version}.tar.bz2"; + # sha256 = "30d23df34834096a79261439d5ea6d78d44921f0218893f100596ee6296cd806"; + # }; + # }); + # } + # ) + # ]; + environment.systemPackages = [ + # (import ../../pkgs/thunderbird.nix) + pkgs.thunderbird + # pkgs.thunderbird-bin-unwrapped + thunderbirdWorkDesktopItem + thunderbirdCloonarDesktopItem + ]; +} diff --git a/hosts/nb-01.cloonar.com/modules/sway/waybar.conf b/hosts/nb-01.cloonar.com/modules/sway/waybar.conf new file mode 100644 index 0000000..504fae6 --- /dev/null +++ b/hosts/nb-01.cloonar.com/modules/sway/waybar.conf @@ -0,0 +1,132 @@ +// -*- mode: json -*- + +{ +"layer": "top", +"position": "top", + +"modules-left": [ +"sway/workspaces", +"custom/right-arrow-dark" +], +"modules-center": [ +"custom/left-arrow-dark", +"clock#1", +"custom/left-arrow-light", +"custom/left-arrow-dark", +"clock#2", +"custom/right-arrow-dark", +"custom/right-arrow-light", +"clock#3", +"custom/right-arrow-dark" +], +"modules-right": [ +"custom/left-arrow-dark", +"network", +"custom/left-arrow-light", +"custom/left-arrow-dark", +"pulseaudio", +"custom/left-arrow-light", +"custom/left-arrow-dark", +"memory", +"custom/left-arrow-light", +"custom/left-arrow-dark", +"cpu", +"custom/left-arrow-light", +"custom/left-arrow-dark", +"battery", +"custom/left-arrow-light", +"custom/left-arrow-dark", +"disk", +"custom/left-arrow-light", +"custom/left-arrow-dark", +"tray" +], + +"custom/left-arrow-dark": { +"format": "", +"tooltip": false +}, +"custom/left-arrow-light": { +"format": "", +"tooltip": false +}, +"custom/right-arrow-dark": { +"format": "", +"tooltip": false +}, +"custom/right-arrow-light": { +"format": "", +"tooltip": false +}, + +"sway/workspaces": { +"disable-scroll": true, +"format": "{name}" +}, + +"clock#1": { +"format": "{:%a}", +"tooltip": false +}, +"clock#2": { +"format": "{:%H:%M}", +"tooltip": false +}, +"clock#3": { +"format": "{:%d.%m}", +"tooltip": false +}, + + "pulseaudio": { + "format": "{icon}{volume}%", + "format-muted": "ﱝ", + "format-icons": { + "phone": ["奄", "奔", "墳"], + "default": ["奄", "奔", "墳"] + }, + "scroll-step": 5, + "on-click": "pavucontrol", + "tooltip": false + }, + "network": { + // "interface": "wlp2*", // (Optional) To force the use of this interface + "format-wifi": "{essid} ({signalStrength}%) ", + "format-ethernet": "{ipaddr}/{cidr} ", + "tooltip-format": "{ifname} via {gwaddr} ", + "format-linked": "{ifname} (No IP) ", + "format-disconnected": "Disconnected ", + "format-alt": "{ifname}: {ipaddr}/{cidr}" + }, +"memory": { +"interval": 5, +"format": "{}%" +}, +"cpu": { +"interval": 5, +"format": "﬙{usage:2}%" +}, +"battery": { +"states": { +"good": 95, +"warning": 30, +"critical": 15 +}, +"format": "{icon} {capacity}%", +"format-icons": [ +"", +"", +"", +"", +"" +] +}, +"disk": { +"interval": 5, +"format": "{percentage_used:2}%", +"path": "/home/" +}, +"tray": { +"icon-size": 20 +} +} + diff --git a/hosts/nb-01.cloonar.com/modules/sway/waybar.css b/hosts/nb-01.cloonar.com/modules/sway/waybar.css new file mode 100644 index 0000000..c927754 --- /dev/null +++ b/hosts/nb-01.cloonar.com/modules/sway/waybar.css @@ -0,0 +1,79 @@ +* { + font-size: 20px; + font-family: monospace; +} + +window#waybar { + background: #282a36; + color: #f8f8f2; +} + +#custom-right-arrow-dark, +#custom-left-arrow-dark { + color: #252525; +} +#custom-right-arrow-light, +#custom-left-arrow-light { + color: #282a36; + background: #252525; +} + +#workspaces, +#clock.1, +#clock.2, +#clock.3, +#network, +#pulseaudio, +#memory, +#cpu, +#battery, +#disk, +#tray { + background: #252525; +} + +#workspaces button { + padding: 0 2px; + color: #f8f8f2; +} +#workspaces button.focused { + color: #50fa7b; +} +#workspaces button:hover { + box-shadow: inherit; + text-shadow: inherit; +} +#workspaces button:hover { + background: #252525; + border: #252525; + padding: 0 3px; +} + +#network { + color: #8be9fd; +} +#pulseaudio { + color: #6272a4; +} +#memory { + color: #f8f8f2; +} +#cpu { + color: #bd93f9; +} +#battery { + color: #f1fa8c; +} +#disk { + color: #ffb86c; +} + +#clock, +#network, +#pulseaudio, +#memory, +#cpu, +#battery, +#disk { + padding: 0 10px; +} diff --git a/hosts/nb-01.cloonar.com/modules/sway/wofi.css b/hosts/nb-01.cloonar.com/modules/sway/wofi.css new file mode 100644 index 0000000..322997f --- /dev/null +++ b/hosts/nb-01.cloonar.com/modules/sway/wofi.css @@ -0,0 +1,40 @@ +window { + margin: 0px; + border: 1px solid #bd93f9; + background-color: #282a36; +} + +#input { + margin: 5px; + border: none; + color: #f8f8f2; + background-color: #44475a; +} + +#inner-box { + margin: 5px; + border: none; + background-color: #282a36; +} + +#outer-box { + margin: 5px; + border: none; + background-color: #282a36; +} + +#scroll { + margin: 0px; + border: none; +} + +#text { + margin: 5px; + border: none; + color: #f8f8f2; +} + +#entry:selected { + background-color: #44475a; +} + diff --git a/hosts/nb-01.cloonar.com/secrets.yaml b/hosts/nb-01.cloonar.com/secrets.yaml new file mode 100644 index 0000000..7757ff8 --- /dev/null +++ b/hosts/nb-01.cloonar.com/secrets.yaml @@ -0,0 +1,35 @@ +epicenter_vpn_ca: ENC[AES256_GCM,data:DUvpuL92zpQkK0auXGdHDw+f5gzjMARMroBknmgR+eq1LV5aISdA0XOCw7d3VFpMtHY+tPM4pDEWlnGJDoHDJBSFAUdmbLkDq2DvoDR1RBbsidmlXpvu7UnL4OyCgrN9G3I65HQmCh64/453T0Y5MZKUiFZXn9SZJgOU3h0qOnAiIKTQADXmUo6imhLuUdPxjwiLkNp8zHNystbfUuZkF15J+TXV9yndy/E8E4sFs4uysK9E+VM84v0q75zTf48cheE+cBGI9xOP5QMvSND6MloyGYUTPZOiQyz8M9AmJObvQFryysKf5Q1W1GBiTz9FVuSsr1IM7meljdBYwfxQaA5MurdsXVFYfdRgL6NyL5x7WOd367pgtBBwuVyT+cygg5ITIBc6YTuT8thp/q0BsJkq1OdVQrLa4PK12Tg2IOUg2Za/tLJxxiNWqs1gAmTWEIGAeJWmNgCZAjJIISwTGcdbpdWqhjAEgaaLf9ZD0hUXQ5MmSO+KXzP7lIGgqCXoMEc7W7rn3R2VkIrvaVgCBK3psTg6+CxoPQwnYbUKgPLG7ys54eECJyRfc8YPH1957Q67pYkVD166ZP/sDJfplOGH19QyFnaaSLRLoXCAfWuO72NwO/fSljN4+pmB6Ev1cRCe4mXicz7TTqGG740VOam/JW4OJCrnHVs67cs9/MsVSNZOsI+x44TKJjaFph4onaodDh5P7e52IkfRnHnjK6FjEvYPasUr9YDqUR3ucHxhD9UqvINDwhp3L/zyFb2HRuO1KzEQLzmG96xiJpJxBVl8GOTeNrK2owOf6cCuh6o3iPaAFjFok26gI1ujX/mPbBigOxB6S0cLOLoA7oA+E6L22nsoYdIwjU4b6Y/DQvndgsZFnycLsSA4TRYHUH1Q51fGU3S/zAlB66rYchsw3JqODD51axxEdo5uu/2a6K9c8BSDo+stHBPmGvty6IorhM+17IGwSVrnxBFbSICja/Mi9eHmkUuUQWaXe5iWiNGYOIe0Xsbu4PQANhDE0f4U1LboVdI46uVhBV36zLSRJ5hUYARdmaz+aUSfNSE20xwCQiqd4U1cb2W6ZRER5WOfNFa8LCjk1YyhDY1yKCbo5tZrYZtmo4T47EuH/2uyW9vPtDlAhpZWmJJ0LEbZMhl9hIEAgGYmhnxPIVItJWHgq4O+YavYWvu1qgbdBC/FZJ8xx0uSy48oKCbuTUbIBUHQ37/6wp+IC+FAoYc2CDgCKzYvYjGrjMr+l/bhWE6KqI2DE/8yG4sOZIyrKNOYRq/aqDRkaeu96bLSYZECoLpohEKRNLTFQ+J8btjGX+xak0HRNEX9bxx8Zs3ml8mDKfh11uy05zPMVU4jaLrc5VtvmNdCg1EffbtEIRhi88aP5K2flRLxvSsYODd8iisqJ3CEqa8/C/FoHhWqgs7vk9UeRs46CJjGQ2Nx7UeQhAK8ey8FwqqSPQ6hp6jFnAv5ha583GZm3G8CsapajioHOpNcyYRhUW/ekdQ1E7DafOLRRO0hdWws8fsP/96uuWJ1Ir1ec2pepmh8s9zCZl/CKSU6+PUjX03Y9buZDnAYao5nDFsF5hgi2nLCTRbHnCh/S5C4NL/Lss2gi/9HdQUWr3KNONgoGbdRNS4MHtK/t9MtxQT8FOS54fM76XLygYZhQEQuDHUr3vaihOPKXncPNx+M4IGd+tsOoGADfpZk7W4OLd5jl8OiCulKvmRXzGCrmyofifh6XBE/EDa97j4eXt/fZPhUh+kv7i39mLKiccPUqpq9WYA/pqlMc84PAsewRerk3Z7jygFb2oX8LwYX2vDer565q+74n/y+oqz/CQ7jypoGBC8f9a16h2e2ZuvjQZ2sUdBB0xKwmLHC5mXLRkJYZ8Myt0Bzp0iVnC8P,iv:0GfL3sG36nsg/4BPw32kKMB78TmbN+mLq/mqEFp0yas=,tag:x+kxJsS+Fn7VO3MlOmqgwQ==,type:str] +epicenter_vpn_cert: ENC[AES256_GCM,data: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,iv:MVId1jgmyhY/iUxnjca5IpYwlzUAsa6Nwchg52AKgRc=,tag:1RASj3dFAYVNphJ4zjXxtA==,type:str] +epicenter_vpn_key: ENC[AES256_GCM,data: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,iv:pB/cNgmHi14ugi6kd+J6poWXX79LMHiiakNa03ibZ0Q=,tag:nLfjOesXDm5/QtwHznJROw==,type:str] +wg_private_key: ENC[AES256_GCM,data:A80vGf9aMxowC2xME4FIVTmKpSRLNB2tWiUQeP1v8vCRk6Gt8BKYOuXYt04=,iv:vr7qvfr78syrI5pIytjLouPwZcw4xvBTvEUzzv7ibnQ=,tag:qjALlFkd8JocLJqMKFERaw==,type:str] +wg_preshared_key: ENC[AES256_GCM,data:bhXoD95ahDRawoHd5Z35FY0G6Xv0PHwWJf300fHQ5jNsGN1TQKHsIswx8YI=,iv:fBsIWkVZUt8pahuO9daaRBIEEIWsSnFW5Velj9uP2ZY=,tag:RvbCYhnRv0OrjTxjsNFW6g==,type:str] +wg-cloonar-key: ENC[AES256_GCM,data:ZMEeIZApOD0ij3nPMZeQRwJ4MwVx0sHu08F+m/u6IMHBGid5YwMgxZ7qbLk=,iv:OfIZ9TqBLjToIQi7zRUBATrynBtu0bzXeGVI/EAUPhQ=,tag:mJICT/ak5U76JE/IxJsCKw==,type:str] +sops: + kms: [] + gcp_kms: [] + azure_kv: [] + hc_vault: [] + age: + - recipient: age16veg3fmvpfm7a89a9fc8dvvsxmsthlm70nfxqspr6t8vnf9wkcwsvdq38d + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBmTVMrSENXV213bThlL2xj + Rkw3Z2R0bCsxN05OaVE5VHpjN2VDMWNJWno0Ck1WQURoNXRMWGlVK2R5TThRSmNy + T3NJUVpDaUx2Rm5peVlZakMvQkdZaUkKLS0tIENLVlBEUWRWTlVIMnV4cG05OUQ1 + UFZ1MTBkTHNMNEVUVzJuNU56WjI0aXMK79Z5+OMEp/ZR9OkFxnjAnOXDcJaagOkL + iSMvU4cD+GMQZCMVMCRAxuPQEaTcCIiZcCxkyVeod4GRA0MdwIGCsA== + -----END AGE ENCRYPTED FILE----- + - recipient: age1v6p8dan2t3w9h94fz4flldl32082j3s9x6zqq7u5j66keth9aphsd6pvch + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBYaWtOVWZzdGtCTFZ6T0N1 + UEdFdWJEeW5BTzVsMU0wd3pwTnl6WFZRMkI0CkRRRWtNK0prVmFad09SNXV1WTV0 + dlhjR3JubVY3b05WTFZvQXhoTGZwWU0KLS0tIFAyTS9HMnNiYnVsUklhbzdjUkxv + bWRUTk9VTTQ5TU5MZnU1bitUa0dzYncK4Sp/tVHlYjFON9W665DJ7a4ARl8Nie7l + g1eGwOGIb6+V6zXVb4uBAMTsKBFVerggYuwYepXc/n7UQT4iBjdWaQ== + -----END AGE ENCRYPTED FILE----- + lastmodified: "2022-11-30T08:33:24Z" + mac: ENC[AES256_GCM,data:/vJdDVpv+iM66wANeLLl+CPtg2j1OCyKlGHhsQQT/RphUj4IlIsjKj+j59lmM6bRBfebTTRt1scFgz8CCPoyfSH0KrAyPLPs1SPxZT6Le87PkmO2rfH0MpNCrBDUdtpMgKs+kbxSzbqnh6X3+juXnOL3oUB3K0cdF6hAr4cP5xU=,iv:3IxaC/8y8FwKxO3mPP7f/byjYih3O6zZU6HJK2cAPvw=,tag:g8crhgnYs670wLPcC3HIhw==,type:str] + pgp: [] + unencrypted_suffix: _unencrypted + version: 3.7.3 diff --git a/hosts/nb-01.cloonar.com/users/default.nix b/hosts/nb-01.cloonar.com/users/default.nix new file mode 100644 index 0000000..96def77 --- /dev/null +++ b/hosts/nb-01.cloonar.com/users/default.nix @@ -0,0 +1,16 @@ +{ config, pkgs, ... }: +let + home-manager = builtins.fetchTarball "https://github.com/nix-community/home-manager/archive/release-24.05.tar.gz"; + + +in +{ + imports = [ + (import "${home-manager}/nixos") + ./dominik.nix + ]; + + home-manager.sharedModules = [ + "${builtins.fetchTarball "https://github.com/Mic92/sops-nix/archive/master.tar.gz"}/modules/home-manager/sops.nix" + ]; +} diff --git a/hosts/nb-01.cloonar.com/users/dominik.nix b/hosts/nb-01.cloonar.com/users/dominik.nix new file mode 100644 index 0000000..83315a3 --- /dev/null +++ b/hosts/nb-01.cloonar.com/users/dominik.nix @@ -0,0 +1,378 @@ +{ config, lib, pkgs, ... }: +let + thunderbirdSettings = { + "extensions.activeThemeID" = "thunderbird-compact-dark@mozilla.org"; + "browser.theme.content-theme" = 0; + "browser.theme.toolbar-theme" = 0; + "calendar.alarms.showmissed" = false; + "mail.uidensity" = 2; + "mail.inline_attachments" = false; + "mail.folder.views.version" = 1; + "calendar.list.sortOrder" = "cloonar-personal"; + "calendar.ui.version" = 3; + "calendar.timezone.local" = "Europe/Vienna"; + "calendar.week.start" = 1; + }; + + thunderbirdCalendarPersonal = { + "calendar.registry.cloonar-personal.cache.enabled" = true; + "calendar.registry.cloonar-personal.calendar-main-in-composite" = true; + "calendar.registry.cloonar-personal.color" = "#232323"; + "calendar.registry.cloonar-personal.disabled" = false; + "calendar.registry.cloonar-personal.forceEmailScheduling" = true; + "calendar.registry.cloonar-personal.imip.identity.key" = "id6"; + "calendar.registry.cloonar-personal.name" = "Personal"; + "calendar.registry.cloonar-personal.readOnly" = false; + "calendar.registry.cloonar-personal.refreshInterval" = 30; + "calendar.registry.cloonar-personal.suppressAlarms" = false; + "calendar.registry.cloonar-personal.type" = "caldav"; + "calendar.registry.cloonar-personal.uri" = "https://cloud.cloonar.com/remote.php/dav/calendars/dominik.polakovics@cloonar.com/personal/"; + "calendar.registry.cloonar-personal.username" = "dominik.polakovics@cloonar.com"; + }; + thunderbirdCalendarEpicenterEmployees = { + "calendar.registry.epicenter-employees.cache.enabled" = true; + "calendar.registry.epicenter-employees.calendar-main-in-composite" = true; + "calendar.registry.epicenter-employees.color" = "#e774ca"; + "calendar.registry.epicenter-employees.disabled" = true; + "calendar.registry.epicenter-employees.forceEmailScheduling" = true; + "calendar.registry.epicenter-employees.name" = "epicenter.works-Employees (admin)"; + "calendar.registry.epicenter-employees.readOnly" = false; + "calendar.registry.epicenter-employees.refreshInterval" = 30; + "calendar.registry.epicenter-employees.suppressAlarms" = true; + "calendar.registry.epicenter-employees.type" = "caldav"; + "calendar.registry.epicenter-employees.uri" = "https://cloud.epicenter.works/remote.php/dav/calendars/razormind/akvorrat-employees_shared_by_admin/"; + "calendar.registry.epicenter-employees.username" = "razormind"; + }; + + thunderbirdContactsPersonal = { + "ldap_2.servers.Contacts.carddav.token" = "http://sabre.io/ns/sync/325"; + "ldap_2.servers.Contacts.carddav.url" = "https://cloud.cloonar.com/remote.php/dav/addressbooks/users/dominik.polakovics@cloonar.com/contacts/"; + "ldap_2.servers.Contacts.carddav.username" = "dominik.polakovics@cloonar.com"; + "ldap_2.servers.Contacts.description" = "Contacts"; + "ldap_2.servers.Contacts.dirType" = 102; + "ldap_2.servers.Contacts.filename" = "abook-1.sqlite"; + "ldap_2.servers.Contacts.uid" = "68fb463c-1c2d-4f39-be37-bbb6ecb97e63"; + "ldap_2.servers.history.uid" = "01df0056-319d-47ac-93ff-b24b978c0902"; + "ldap_2.servers.pab.uid" = "3a7c1bff-18ec-4500-9ae2-098b5fdbaeaa"; + }; + + firefoxSettings = { + "browser.startup.homepage" = "https://start.duckduckgo.com"; + "browser.startup.page" = 1; + "browser.startup.homepage_override.mstone" = "ignore"; + "extensions.autoDisableScopes" = 0; + "app.normandy.first_run" = false; + "browser.download.panel.shown" = true; + "devtools.cache.disabled" = true; + "devtools.toolbox.host" = "right"; + "browser.uiCustomization.state" = "{\"placements\":{\"widget-overflow-fixed-list\":[],\"unified-extensions-area\":[],\"nav-bar\":[\"back-button\",\"forward-button\",\"stop-reload-button\",\"urlbar-container\",\"downloads-button\",\"screenshot-button\",\"ublock0_raymondhill_net-browser-action\",\"jid1-mnnxcxisbpnsxq_jetpack-browser-action\",\"_d634138d-c276-4fc8-924b-40a0ea21d284_-browser-action\",\"_446900e4-71c2-419f-a6a7-df9c091e268b_-browser-action\",\"_testpilot-containers-browser-action\",\"unified-extensions-button\"],\"toolbar-menubar\":[\"menubar-items\"],\"TabsToolbar\":[\"firefox-view-button\",\"tabbrowser-tabs\",\"new-tab-button\",\"alltabs-button\"],\"PersonalToolbar\":[\"import-button\",\"personal-bookmarks\"]},\"seen\":[\"save-to-pocket-button\",\"_d634138d-c276-4fc8-924b-40a0ea21d284_-browser-action\",\"_testpilot-containers-browser-action\",\"_446900e4-71c2-419f-a6a7-df9c091e268b_-browser-action\",\"ublock0_raymondhill_net-browser-action\",\"jid1-mnnxcxisbpnsxq_jetpack-browser-action\",\"developer-button\"],\"dirtyAreaCache\":[\"unified-extensions-area\",\"nav-bar\",\"PersonalToolbar\"],\"currentVersion\":20,\"newElementCount\":3}"; + }; + + firefoxExtensions = with pkgs.nur.repos.rycee.firefox-addons; [ + bitwarden + multi-account-containers + onepassword-password-manager + privacy-badger + ublock-origin + ]; +in +{ + home-manager.users.dominik = { lib, pkgs, ... }: { + /* The home.stateVersion option does not have a default and must be set */ + home.stateVersion = "24.05"; + home.enableNixpkgsReleaseCheck = false; + /* Here goes the rest of your home-manager config, e.g. home.packages = [ pkgs.foo ]; */ + programs.git = { + + enable = true; + package = pkgs.gitAndTools.gitFull; + userName = "Dominik Polakovics"; + userEmail = "dominik.polakovics@cloonar.com"; + # signing = { + # key = "dominik.polakovics@cloonar.com"; + # signByDefault = false; + # }; + iniContent = { + # Branch with most recent change comes first + branch.sort = "-committerdate"; + # Remember and auto-resolve merge conflicts + # https://git-scm.com/book/en/v2/Git-Tools-Rerere + rerere.enabled = true; + }; + }; + + programs.thunderbird = { + enable = true; + profiles = { + private = { + isDefault = true; + settings = lib.mkMerge [ + thunderbirdSettings + thunderbirdCalendarPersonal + thunderbirdContactsPersonal + ]; + }; + cloonar = { + settings = lib.mkMerge [ + thunderbirdSettings + thunderbirdCalendarPersonal + thunderbirdContactsPersonal + ]; + }; + work = { + settings = lib.mkMerge [ + thunderbirdSettings + thunderbirdCalendarPersonal + thunderbirdCalendarEpicenterEmployees + thunderbirdContactsPersonal + ]; + }; + }; + }; + + accounts.email.accounts = { + "dominik@superbros.tv" = { + primary = true; + realName = "Dominik Polakovics"; + address = "dominik@superbros.tv"; + userName = "dominik@superbros.tv"; + imap = { + host = "imap.cloonar.com"; + port = 993; + }; + smtp = { + host = "mail.cloonar.com"; + port = 587; + tls = { + enable = true; + useStartTls = true; + }; + }; + thunderbird = { + enable = true; + profiles = [ "private" "cloonar" "work" ]; + }; + }; + "office@cloonar.com" = { + realName = "Cloonar"; + address = "office@cloonar.com"; + userName = "office@cloonar.com"; + imap = { + host = "imap.cloonar.com"; + port = 993; + }; + smtp = { + host = "mail.cloonar.com"; + port = 587; + tls = { + enable = true; + useStartTls = true; + }; + }; + thunderbird = { + enable = true; + profiles = [ "cloonar" "work" ]; + }; + }; + "dominik.polakovics@cloonar.com" = { + realName = "Dominik Polakovics"; + address = "dominik.polakovics@cloonar.com"; + userName = "dominik.polakovics@cloonar.com"; + imap = { + host = "imap.cloonar.com"; + port = 993; + }; + smtp = { + host = "mail.cloonar.com"; + port = 587; + tls = { + enable = true; + useStartTls = true; + }; + }; + thunderbird = { + enable = true; + profiles = [ "cloonar" "work" ]; + }; + }; + "dominik.polakovics@epicenter.works" = { + realName = "Dominik Polakovics"; + address = "dominik.polakovics@epicenter.works"; + userName = "dominik.polakovics@epicenter.works"; + imap = { + host = "mail.epicenter.works"; + port = 993; + }; + smtp = { + host = "mail.epicenter.works"; + port = 587; + tls = { + enable = true; + useStartTls = true; + }; + }; + thunderbird = { + enable = true; + profiles = [ "work" ]; + }; + }; + }; + + programs.firefox = { + enable = true; + profiles = { + default = { + id = 0; + isDefault = true; + settings = firefoxSettings; + search.default = "DuckDuckGo"; + search.privateDefault = "DuckDuckGo"; + extensions = firefoxExtensions; + }; + social = { + id = 1; + settings = firefoxSettings; + search.default = "DuckDuckGo"; + search.privateDefault = "DuckDuckGo"; + containersForce = true; + containers = { + "private" = { + color = "green"; + icon = "fingerprint"; + id = 1; + }; + "cloonar" = { + color = "purple"; + icon = "briefcase"; + id = 2; + }; + "epicenter.works" = { + color = "blue"; + icon = "briefcase"; + id = 3; + }; + }; + extensions = firefoxExtensions; + }; + }; + }; + + /* Setup development projects */ + home.activation.projects = lib.hm.dag.entryAfter ["writeBoundary"] '' + PATH="${pkgs.git}/bin:${pkgs.openssh}/bin:$PATH" + set +eu + git clone gitea@git.cloonar.com:Cloonar/nixos.git ~/projects/cloonar/cloonar-nixos 2>/dev/null + git clone gitea@git.cloonar.com:Cloonar/website.git ~/projects/cloonar/cloonar-website 2>/dev/null + git clone gitea@git.cloonar.com:Cloonar/wohnservice-wien-typo3.git ~/projects/cloonar/wohnservice-wien 2>/dev/null + git clone gitea@git.cloonar.com:Cloonar/gbv-aktuell.git ~/projects/cloonar/gbv-aktuell 2>/dev/null + git clone gitea@git.cloonar.com:Paraclub/api.git ~/projects/cloonar/paraclub/paraclub-api 2>/dev/null + git clone gitea@git.cloonar.com:Paraclub/frontend.git ~/projects/cloonar/paraclub/paraclub-frontend 2>/dev/null + git clone gitea@git.cloonar.com:Paraclub/website.git ~/projects/cloonar/paraclub/paraclub-website 2>/dev/null + git clone gitea@git.cloonar.com:Paraclub/module.git ~/projects/cloonar/paraclub/paraclub-module 2>/dev/null + git clone gitea@git.cloonar.com:Cloonar/amz-api.git ~/projects/cloonar/amz/amz-api 2>/dev/null + git clone gitea@git.cloonar.com:Cloonar/amz-frontend.git ~/projects/cloonar/amz/amz-frontend 2>/dev/null + git clone gitea@git.cloonar.com:myhidden.life/web.git ~/projects/myhidden.life/myhidden.life-web 2>/dev/null + + git clone git@gitlab.epicenter.works:epicenter.works/campaigntool.git ~/projects/epicenter.works/campaigntool 2>/dev/null + git clone git@gitlab.epicenter.works:epicenter.works/website.git ~/projects/epicenter.works/epicenter.works 2>/dev/null + git clone git@gitlab.epicenter.works:epicenter.works/nixos.git ~/projects/epicenter.works/epicenter-nixos 2>/dev/null + git clone git@github.com:AKVorrat/spenden.akvorrat.at.git ~/projects/epicenter.works/spenden.akvorrat.at 2>/dev/null + git clone git@github.com:AKVorrat/dearmep-website.git ~/projects/epicenter.works/dearmep-website 2>/dev/null + set -eu + ''; + + home.activation.nvim-project = lib.hm.dag.entryAfter ["writeBoundary"] '' + PATH="${pkgs.coreutils}/bin:$PATH" + if [ ! -e "~/.local/share/nvim/project_nvim/project_history" ] ; then +cat > ~/.local/share/nvim/project_nvim/project_history << EOL +/home/dominik/projects/cloonar/cloonar-nixos +/home/dominik/projects/cloonar/cloonar-website +/home/dominik/projects/cloonar/wohnservice-wien +/home/dominik/projects/cloonar/gbv-aktuell +/home/dominik/projects/cloonar/paraclub/paraclub-api +/home/dominik/projects/cloonar/paraclub/paraclub-frontend +/home/dominik/projects/cloonar/paraclub/paraclub-website +/home/dominik/projects/cloonar/paraclub/paraclub-module +/home/dominik/projects/cloonar/amz/amz-api +/home/dominik/projects/cloonar/amz/amz-frontend +/home/dominik/projects/myhidden.life/myhidden.life-web +/home/dominik/projects/epicenter.works/campaigntool +/home/dominik/projects/epicenter.works/epicenter.works +/home/dominik/projects/epicenter.works/epicenter-nixos +/home/dominik/projects/epicenter.works/spenden.akvorrat.at +/home/dominik/projects/epicenter.works/dearmep-website +EOL + fi + ''; + + /* Setup nextcloud folders */ + home.activation.nextcloud = lib.hm.dag.entryAfter ["writeBoundary"] '' + set +eu + ${pkgs.coreutils}/bin/mkdir ~/cloud.cloonar.com + ${pkgs.coreutils}/bin/mkdir ~/cloud.epicenter.works + set -eu + ''; + + programs.ssh = { + enable = true; + matchBlocks = { + "git.cloonar.com" = { + user = "git"; + identityFile = "~/.ssh/id_rsa"; + identitiesOnly = true; + }; + "gitlab.epicenter.works" = { + user = "git"; + identityFile = "~/.ssh/id_rsa"; + identitiesOnly = true; + }; + "tools.epicenter.works" = { + user = "root"; + identityFile = "~/.ssh/epicenter.id_rsa"; + }; + "*.epicenter.works !tools.epicenter.works" = { + user = "dominik"; + identityFile = "~/.ssh/epicenter.id_rsa"; + }; + "*.dearmep.eu" = { + user = "root"; + identityFile = "~/.ssh/epicenter.id_rsa"; + }; + "*.akvorrat.at" = { + user = "dominik"; + setEnv = { + TERM = "xterm-256color"; + }; + identityFile = "~/.ssh/epicenter.id_rsa"; + }; + "*.cloonar.com" = { + user = "root"; + }; + "*.cloonar.smart" = { + user = "root"; + }; + "*.wsw.at" = { + user = "wswdpolakovics"; + setEnv = { + TERM = "xterm-256color"; + }; + }; + "*.nycro.net" = { + user = "hilgenberg-gmbh.de_kk33i9d2xv"; # prod + #user = "hilgenberg.gmbh.de_pci2n5aqzt"; # stage + setEnv = { + TERM = "xterm-256color"; + }; + }; + "amz-websrv-01.amz.at" = { + user = "ebs"; + }; + "u149513.your-backup.de" = { + user = "u149513"; + # user = "u149513-sub2"; # fw.cloonar.com + port = 23; + }; + }; + }; + }; +} diff --git a/hosts/nb-01.cloonar.com/utils b/hosts/nb-01.cloonar.com/utils new file mode 120000 index 0000000..6b18391 --- /dev/null +++ b/hosts/nb-01.cloonar.com/utils @@ -0,0 +1 @@ +../../utils \ No newline at end of file diff --git a/hosts/nb-new.cloonar.com/configuration.nix b/hosts/nb-new.cloonar.com/configuration.nix index 79428f9..d710b4d 100644 --- a/hosts/nb-new.cloonar.com/configuration.nix +++ b/hosts/nb-new.cloonar.com/configuration.nix @@ -90,6 +90,17 @@ in { 127.0.0.1 test.cloonar.com ''; + services.xserver = { + enable = true; + excludePackages = [ pkgs.xterm ]; + displayManager.gdm.enable = true; + displayManager.gdm.wayland = true; + # displayManager.sddm.enable = true; + displayManager.sessionPackages = [ pkgs.sway ]; + displayManager.defaultSession = "sway"; + libinput.enable = true; + }; + # Set your time zone. time.timeZone = "Europe/Vienna"; console.keyMap = "de"; diff --git a/hosts/nb-new.cloonar.com/modules/sway/sddm-theme.conf b/hosts/nb-new.cloonar.com/modules/sway/sddm-theme.conf deleted file mode 100644 index c2ca9a6..0000000 --- a/hosts/nb-new.cloonar.com/modules/sway/sddm-theme.conf +++ /dev/null @@ -1,3 +0,0 @@ -background=/nix/persist/system/wallpaper.png -backgroundFillMode=Image.Pad -backgroundFill=#252525 diff --git a/hosts/nb-new.cloonar.com/modules/sway/sway.conf b/hosts/nb-new.cloonar.com/modules/sway/sway.conf index 8f7e2f0..b4018c1 100644 --- a/hosts/nb-new.cloonar.com/modules/sway/sway.conf +++ b/hosts/nb-new.cloonar.com/modules/sway/sway.conf @@ -187,7 +187,7 @@ bindsym $mod+F7 workspace $ws7; exec gcolor2 bindsym $mod+F8 workspace $ws8; exec telegram bindsym $mod+F9 workspace $ws9; exec go-for-it bindsym Print exec --no-startup-id gnome-screenshot -bindcode $mod+9 exec swaylock -c 252525 -s center -i ~/.wallpaper.png +bindcode $mod+9 exec swaylock --image ~/.wallpaper.jpg bindsym Ctrl+Shift+Space exec 1password --quick-access bindsym $mod+Space exec rofi-rbw --menu-keybindings ctrl+p:copy:password @@ -211,7 +211,7 @@ bindsym $mod+Shift+c reload bindsym $mod+Shift+r restart # manage i3 session -bindsym $mod+Shift+e exec swaynag --background f1fa8c --border ffb86c --border-bottom-size 0 --button-background ffb86c --button-text 282a36 -t warning -f "pango:Hack 9" -m "Do you really want to exit?" -B "  Exit " "swaymsg exit" -B "  Lock " "pkill swaynag && swaylock -c 252525 -s center -i ~/.wallpaper.png" -B "  Reboot " "pkill swaynag && reboot" -B "  Shutdown " "pkill swaynag && shutdown -h now" -B " Suspend " "pkill swaynag && systemctl suspend" +bindsym $mod+Shift+e exec swaynag --background f1fa8c --border ffb86c --border-bottom-size 0 --button-background ffb86c --button-text 282a36 -t warning -f "pango:Hack 9" -m "Do you really want to exit?" -B "  Exit " "swaymsg exit" -B "  Lock " "pkill swaynag && swaylock --image ~/.wallpaper.jpg" -B "  Reboot " "pkill swaynag && reboot" -B "  Shutdown " "pkill swaynag && shutdown -h now" -B " Suspend " "pkill swaynag && systemctl suspend" # resize window bindsym $mod+r mode "  " @@ -301,8 +301,8 @@ exec nextcloud exec cryptomator exec swayidle \ before-sleep 'loginctl lock-session $XDG_SESSION_ID' \ - lock 'swaylock -c 252525 -s center -i ~/.wallpaper.png' \ - timeout 180 'swaylock -c 252525 -s center -i ~/.wallpaper.png' \ + lock 'swaylock --image ~/.wallpaper.jpg' \ + timeout 180 'swaylock --screenshots --effect-blur 7x5' \ timeout 1800 'systemctl suspend' exec dunst #exec --no-startup-id swaybg -c "#000000" -m fill -i ~/.config/wallpaper/wot.jpg @@ -312,12 +312,9 @@ exec mako --default-timeout=5000 # wallpaper output eDP-1 scale 1.5 -output eDP-1 bg #282a36 solid_color -output eDP-1 bg ~/.wallpaper.png center -output DP-4 bg #282a36 solid_color -output DP-4 bg ~/.wallpaper.png center -output DP-5 bg #282a36 solid_color -output DP-5 bg ~/.wallpaper.png center +output eDP-1 bg ~/.wallpaper.jpg fill +output DP-4 bg ~/.wallpaper.jpg fill +output DP-5 bg ~/.wallpaper.jpg fill input * xkb_layout "de" input * xkb_variant "colemak,,typewriter" diff --git a/hosts/nb-new.cloonar.com/modules/sway/sway.nix b/hosts/nb-new.cloonar.com/modules/sway/sway.nix index d6caf79..20fa44a 100644 --- a/hosts/nb-new.cloonar.com/modules/sway/sway.nix +++ b/hosts/nb-new.cloonar.com/modules/sway/sway.nix @@ -3,6 +3,8 @@ with lib; let + cfg = config.cloonar.sway; + dbus-sway-environment = pkgs.writeTextFile { name = "dbus-sway-environment"; destination = "/bin/dbus-sway-environment"; @@ -15,9 +17,7 @@ let ''; }; - sway-conf = builtins.readFile ./sway.conf + '' - exec swaybg -m center -c 252525 -i ~/.wallpaper.png - ''; + sway-conf = builtins.readFile ./sway.conf + cfg.additionalConfig; unstable = import (fetchTarball https://nixos.org/channels/nixos-unstable/nixexprs.tar.xz) { config = { allowUnfree = true; }; }; @@ -29,139 +29,117 @@ in { ./thunderbird.nix ]; - hardware.sane.enable = true; - hardware.pulseaudio.enable = false; - - virtualisation.virtualbox.host.enable = true; - users.extraGroups.vboxusers.members = [ "dominik" ]; - - services.gnome.gnome-keyring.enable = true; - - services.displayManager.defaultSession = "sway"; - services.displayManager.sddm = { - enable = true; - wayland.enable = true; - theme = "where_is_my_sddm_theme_qt5"; + options.cloonar.sway = { + additionalConfig = mkOption { + type = types.str; + default = ""; + description = lib.mdDoc '' + Additional sway config + ''; + }; }; - # services.xserver = { - # enable = true; - # excludePackages = [ pkgs.xterm ]; - # displayManager.gdm.enable = true; - # displayManager.gdm.wayland = true; - # # displayManager.sddm.enable = true; - # displayManager.sessionPackages = [ pkgs.sway ]; - # displayManager.defaultSession = "sway"; - # libinput.enable = true; - # }; + config = { + hardware.sane.enable = true; + hardware.pulseaudio.enable = false; - environment.systemPackages = with pkgs; [ - alsaUtils - apache-directory-studio - bitwarden - bitwarden-cli - rofi-rbw-wayland - cryptomator + virtualisation.virtualbox.host.enable = true; + users.extraGroups.vboxusers.members = [ "dominik" ]; - brave - chromium - firefox - vivaldi + services.gnome.gnome-keyring.enable = true; - unstable.cura - freecad - openscad + environment.systemPackages = with pkgs; [ + alsaUtils + apache-directory-studio + bitwarden + bitwarden-cli + rofi-rbw-wayland + cryptomator - (unstable.where-is-my-sddm-theme.override { - themeConfig.General = { - showUsersByDefault = true; - background = "/nix/persist/system/wallpaper.png"; - backgroundFill = "#252525"; - backgroundFillMode="Image.Pad"; - passwordInputWidth = 0.25; - passwordInputBackground = "#60ffffff"; - passwordFontSize = 28; - sessionsFontSize=24; - usersFontSize=32; - }; - variants = ["qt5"]; - }) + brave + chromium + firefox + vivaldi - dbus-sway-environment - ddev - dracula-theme - foot - gcc - git - glib - gimp - gnome.seahorse - gnome3.adwaita-icon-theme - go - grim - hunspell - hunspellDicts.de_DE - hunspellDicts.en_US - jmeter - libreoffice - mako - mqttui - networkmanagerapplet - nextcloud-client - onlyoffice-bin - pavucontrol - pcmanfm - pinentry - rbw - rofi-rbw - slurp - sway - swaybg - sway-launcher-desktop - swayidle - swaylock - thunderbird - unzip - vlc - waybar - wayland - wl-clipboard - wofi - wtype - yubikey-manager-qt - ]; + unstable.cura + freecad + openscad - programs.light.enable = true; - - fonts.packages = with pkgs; [ - noto-fonts - noto-fonts-cjk - noto-fonts-emoji - nerdfonts - ]; - - security.rtkit.enable = true; - services.pipewire = { - enable = true; - alsa.enable = true; - alsa.support32Bit = true; - pulse.enable = true; - jack.enable = true; - }; - - programs.sway = { - enable = true; - wrapperFeatures.gtk = true; - extraOptions = [ - "--unsupported-gpu" + dbus-sway-environment + ddev + dracula-theme + foot + gcc + git + glib + gimp + gnome.seahorse + gnome3.adwaita-icon-theme + go + grim + hunspell + hunspellDicts.de_DE + hunspellDicts.en_US + jmeter + libreoffice + mako + mqttui + networkmanagerapplet + nextcloud-client + onlyoffice-bin + pavucontrol + pcmanfm + pinentry + rbw + rofi-rbw + slurp + sway + sway-launcher-desktop + swayidle + swaylock + thunderbird + unzip + vlc + waybar + wayland + wl-clipboard + wofi + wtype + yubikey-manager-qt ]; - }; - environment.etc = { - "sway/config".text = sway-conf; - "wofi/style.css".text = builtins.readFile ./wofi.css; - "xdg/waybar/config".text = builtins.readFile ./waybar.conf; - "xdg/waybar/style.css".text = builtins.readFile ./waybar.css; - "xdg/foot/foot.ini".text = builtins.readFile ./foot.ini; + programs.light.enable = true; + + fonts.packages = with pkgs; [ + noto-fonts + noto-fonts-cjk + noto-fonts-emoji + nerdfonts + ]; + + security.rtkit.enable = true; + services.pipewire = { + enable = true; + alsa.enable = true; + alsa.support32Bit = true; + pulse.enable = true; + jack.enable = true; + }; + + programs.sway = { + enable = true; + wrapperFeatures.gtk = true; + extraOptions = [ + "--unsupported-gpu" + ]; + }; + + environment.etc = { + "sway/config".text = sway-conf; + "wofi/style.css".text = builtins.readFile ./wofi.css; + "xdg/waybar/config".text = builtins.readFile ./waybar.conf; + "xdg/waybar/style.css".text = builtins.readFile ./waybar.css; + "xdg/foot/foot.ini".text = builtins.readFile ./foot.ini; + }; }; } diff --git a/hosts/nb-new.cloonar.com/users/configs/wallpaper.jpg b/hosts/nb-new.cloonar.com/users/configs/wallpaper.jpg deleted file mode 100644 index f58a38c..0000000 Binary files a/hosts/nb-new.cloonar.com/users/configs/wallpaper.jpg and /dev/null differ diff --git a/hosts/nb-new.cloonar.com/users/configs/wallpaper.png b/hosts/nb-new.cloonar.com/users/configs/wallpaper.png deleted file mode 100644 index 701bbb8..0000000 Binary files a/hosts/nb-new.cloonar.com/users/configs/wallpaper.png and /dev/null differ diff --git a/hosts/nb-new.cloonar.com/users/dominik.nix b/hosts/nb-new.cloonar.com/users/dominik.nix index 12b5d0c..ac5421f 100644 --- a/hosts/nb-new.cloonar.com/users/dominik.nix +++ b/hosts/nb-new.cloonar.com/users/dominik.nix @@ -109,9 +109,9 @@ in gtk = { enable = true; - gtk2.extraConfig = '' - gtk-application-prefer-dark-theme=1; - ''; + gtk2.extraConfig = { + "gtk-application-prefer-dark-theme" = true; + }; gtk3.extraConfig = { "gtk-application-prefer-dark-theme" = true; }; @@ -316,12 +316,8 @@ in home.activation.symlinks = lib.hm.dag.entryAfter ["writeBoundary"] '' PATH="${pkgs.git}/bin:${pkgs.openssh}/bin:$PATH" set +eu - if [ ! -L ~/Documents ]; then - ln -s /home/dominik/.local/share/Cryptomator/mnt/Documents ~/Documents - fi - if [ ! -L ~/Downloads ]; then - ln -s /home/dominik/.local/share/Cryptomator/mnt/Downloads ~/Downloads - fi + ln -s /home/dominik/.local/share/Cryptomator/mnt/Documents ~/Documents + ln -s /home/dominik/.local/share/Cryptomator/mnt/Downloads ~/Downloads set -eu ''; @@ -349,8 +345,6 @@ in set -eu ''; - home.file.".wallpaper.jpg".source = ./configs/wallpaper.jpg; - home.file.".wallpaper.png".source = ./configs/wallpaper.png; home.file.".local/share/nvim/project_nvim/project_history".source = ./configs/project_history; home.file.".config/Cryptomator/settings.json".source = ./configs/cryptomator.json; diff --git a/todos.md b/todos.md index 80be43f..89fd01c 100644 --- a/todos.md +++ b/todos.md @@ -1,5 +1 @@ move modules for hosts into respecting hosts directory so not every host gets rebuilded when one module changes -change sddm theme -add yubikey -change playmouth theme -look into secure boot