flake: reformat all
Some checks failed
nix / check (push) Failing after 31s

new: packages: bonvim, nixvim configuration of neovim
remove: config: hyprland -> declarative
remove: config: nvim
nixosModules: structure with categories
new: configurations: concept of preconfigured modules
catarina: disable papermc server
catarina: hydra server
flake: hydraJobs outputs
This commit is contained in:
L-Nafaryus 2024-07-08 15:07:24 +05:00
parent 26088b3368
commit 008b4ad3a4
Signed by: L-Nafaryus
GPG Key ID: 553C97999B363D38
53 changed files with 4126 additions and 3205 deletions

4
.editorconfig Normal file
View File

@ -0,0 +1,4 @@
indent_style = "space"
indent_size = 4
end_of_line = "cr"
charset = "utf-8"

View File

@ -1,14 +1,16 @@
{ self, nixpkgs, ... }: {
let self,
nixpkgs,
...
}: let
forAllSystems = nixpkgs.lib.genAttrs ["x86_64-linux"]; forAllSystems = nixpkgs.lib.genAttrs ["x86_64-linux"];
nixpkgsFor = forAllSystems (system: import nixpkgs {inherit system;}); nixpkgsFor = forAllSystems (system: import nixpkgs {inherit system;});
in
in forAllSystems(system: let forAllSystems (system: let
pkgs = nixpkgsFor.${system}; pkgs = nixpkgsFor.${system};
bonfire = self; bonfire = self;
bonfire-lib = self.lib; bonfire-lib = self.lib;
bonfire-pkgs = self.packages.${system}; bonfire-pkgs = self.packages.${system};
in { in {
}) })

View File

@ -1,31 +0,0 @@
[user]
name = L-Nafaryus
email = l.nafaryus@gmail.com
signingKey = 86F1EA98B48FFB19
[commit]
gpgsign = true
[tag]
gpgsign = true
[init]
defaultBranch = master
[diff]
submodule = log
[color]
diff = auto
status = auto
branch = auto
[core]
quotePath = false
commitGraph = true
whitespace = trailing-space
[receive]
advertisePushOptions = true
[gc]
writeCommitGraph = true
[alias]
lg = log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit
[filter "lfs"]
required = true
clean = git-lfs clean -- %f
smudge = git-lfs smudge -- %f
process = git-lfs filter-process

View File

@ -1,281 +0,0 @@
# #######################################################################################
# AUTOGENERATED HYPR CONFIG.
# PLEASE USE THE CONFIG PROVIDED IN THE GIT REPO /examples/hypr.conf AND EDIT IT,
# OR EDIT THIS ONE ACCORDING TO THE WIKI INSTRUCTIONS.
# #######################################################################################
autogenerated = 0 # remove this line to remove the warning
# This is an example Hyprland config file.
# Refer to the wiki for more information.
# https://wiki.hyprland.org/Configuring/Configuring-Hyprland/
# Please note not all available settings / options are set here.
# For a full list, see the wiki
# You can split this configuration into multiple files
# Create your files separately and then link them to this file like this:
# source = ~/.config/hypr/myColors.conf
################
### MONITORS ###
################
# See https://wiki.hyprland.org/Configuring/Monitors/
monitor = desc:AOC Q27B3MA 17ZPAHA006135, 2560x1440@75, 0x0, auto
monitor = desc:AOC Q27G2G3R3B 137P4HA000540, 2560x1440@165, 2560x0, auto
monitor = Unknown-1, disable
###################
### MY PROGRAMS ###
###################
# See https://wiki.hyprland.org/Configuring/Keywords/
# Set programs that you use
$terminal = alacritty
$fileManager = dolphin
$menu = rofi -show drun
#################
### AUTOSTART ###
#################
# Autostart necessary processes (like notifications daemons, status bars, etc.)
# Or execute your favorite apps at launch like this:
# exec-once = $terminal
# exec-once = nm-applet &
# exec-once = waybar & hyprpaper & firefox
exec-once = eww daemon
exec-once = eww open topbar
exec-once = nm-applet --indicator &
exec-once = blueman-applet &
exec-once = wl-gammarelay-rs run &
exec-once = systemctl --user start hypridle
exec-once = wl-paste --type text --watch cliphist store #Stores only text data
exec-once = wl-paste --type image --watch cliphist store #Stores only image data
exec-once = swww-daemon & swww img ~/Pictures/wallpapers/emily-in-the-cyberpunk-city.3840x2160.png & swww img ~/Pictures/wallpapers/emily-in-the-cyberpunk-city.3840x2160a.gif
#############################
### ENVIRONMENT VARIABLES ###
#############################
# See https://wiki.hyprland.org/Configuring/Environment-variables/
env = XCURSOR_SIZE,16
env = HYPRCURSOR_SIZE,16
env = WLR_DRM_NO_ATOMIC,1
#####################
### LOOK AND FEEL ###
#####################
# Refer to https://wiki.hyprland.org/Configuring/Variables/
# https://wiki.hyprland.org/Configuring/Variables/#general
general {
gaps_in = 5
gaps_out = 5
border_size = 2
# https://wiki.hyprland.org/Configuring/Variables/#variable-types for info about colors
col.active_border = rgba(33ccffee) rgba(00ff99ee) 45deg
col.inactive_border = rgba(595959aa)
# Set to true enable resizing windows by clicking and dragging on borders and gaps
resize_on_border = true
# Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on
allow_tearing = true
layout = dwindle
}
# https://wiki.hyprland.org/Configuring/Variables/#decoration
decoration {
rounding = 5
# Change transparency of focused and unfocused windows
active_opacity = 1.0
inactive_opacity = 0.95
drop_shadow = true
shadow_range = 4
shadow_render_power = 3
col.shadow = rgba(1a1a1aee)
# https://wiki.hyprland.org/Configuring/Variables/#blur
blur {
enabled = true
size = 3
passes = 1
vibrancy = 0.1696
}
}
# https://wiki.hyprland.org/Configuring/Variables/#animations
animations {
enabled = true
# Default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more
bezier = myBezier, 0.05, 0.9, 0.1, 1.05
animation = windows, 1, 7, myBezier
animation = windowsOut, 1, 7, default, popin 80%
animation = border, 1, 10, default
animation = borderangle, 1, 8, default
animation = fade, 1, 7, default
animation = workspaces, 1, 6, default
}
# See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more
dwindle {
pseudotile = true # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below
preserve_split = true # You probably want this
}
# See https://wiki.hyprland.org/Configuring/Master-Layout/ for more
master {
new_is_master = true
}
# https://wiki.hyprland.org/Configuring/Variables/#misc
misc {
force_default_wallpaper = -1 # Set to 0 or 1 to disable the anime mascot wallpapers
disable_hyprland_logo = false # If true disables the random hyprland logo / anime girl background. :(
}
#############
### INPUT ###
#############
# https://wiki.hyprland.org/Configuring/Variables/#input
input {
kb_layout = us,ru
kb_variant =
kb_model =
kb_options =
kb_rules =
follow_mouse = 1
sensitivity = 0 # -1.0 - 1.0, 0 means no modification.
touchpad {
natural_scroll = false
}
}
# https://wiki.hyprland.org/Configuring/Variables/#gestures
gestures {
workspace_swipe = false
}
# Example per-device config
# See https://wiki.hyprland.org/Configuring/Keywords/#per-device-input-configs for more
device {
name = epic-mouse-v1
sensitivity = -0.5
}
####################
### KEYBINDINGSS ###
####################
# See https://wiki.hyprland.org/Configuring/Keywords/
# Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more
bind = SUPER, Q, exec, $terminal
bind = SUPER, C, killactive,
bind = SUPER, M, exit,
bind = SUPER, E, exec, $fileManager
bind = SUPER, V, togglefloating,
bind = SUPER, F, fullscreen,
bind = SUPER, R, exec, $menu
bind = SUPER, P, pseudo, # dwindle
bind = SUPER, J, togglesplit, # dwindle
# Move focus with mainMod + arrow keys
bind = SUPER, left, movefocus, l
bind = SUPER, right, movefocus, r
bind = SUPER, up, movefocus, u
bind = SUPER, down, movefocus, d
# Switch workspaces with mainMod + [0-9]
bind = SUPER, 1, workspace, 1
bind = SUPER, 2, workspace, 2
bind = SUPER, 3, workspace, 3
bind = SUPER, 4, workspace, 4
bind = SUPER, 5, workspace, 5
bind = SUPER, 6, workspace, 6
bind = SUPER, 7, workspace, 7
bind = SUPER, 8, workspace, 8
bind = SUPER, 9, workspace, 9
bind = SUPER, 0, workspace, 10
# Move active window to a workspace with mainMod + SHIFT + [0-9]
bind = SUPER SHIFT, 1, movetoworkspace, 1
bind = SUPER SHIFT, 2, movetoworkspace, 2
bind = SUPER SHIFT, 3, movetoworkspace, 3
bind = SUPER SHIFT, 4, movetoworkspace, 4
bind = SUPER SHIFT, 5, movetoworkspace, 5
bind = SUPER SHIFT, 6, movetoworkspace, 6
bind = SUPER SHIFT, 7, movetoworkspace, 7
bind = SUPER SHIFT, 8, movetoworkspace, 8
bind = SUPER SHIFT, 9, movetoworkspace, 9
bind = SUPER SHIFT, 0, movetoworkspace, 10
# Example special workspace (scratchpad)
bind = SUPER, S, togglespecialworkspace, magic
bind = SUPER SHIFT, S, movetoworkspace, special:magic
# Scroll through existing workspaces with mainMod + scroll
bind = SUPER, mouse_down, workspace, e+1
bind = SUPER, mouse_up, workspace, e-1
# Move/resize windows with mainMod + LMB/RMB and dragging
bindm = SUPER, mouse:272, movewindow
bindm = SUPER, mouse:273, resizewindow
bindel = , XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+
bindel = , XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-
bindl = , XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
bindl = , XF86AudioPrev, exec, playerctl previous
bindl = , XF86AudioPlay, exec, playerctl play-pause
bindl = , XF86AudioNext, exec, playerctl next
bindl = , XF86MonBrightnessDown, exec, busctl --user -- call rs.wl-gammarelay / rs.wl.gammarelay UpdateTemperature n -500
bindl = , XF86MonBrightnessUp, exec, busctl --user -- call rs.wl-gammarelay / rs.wl.gammarelay UpdateTemperature n +500
bindl = SUPER, XF86MonBrightnessDown, exec, busctl --user -- call rs.wl-gammarelay / rs.wl.gammarelay Brightness d -0.1
bindl = SUPER, XF86MonBrightnessUp, exec, busctl --user -- call rs.wl-gammarelay / rs.wl.gammarelay Brightness d +0.1
bind = SUPER, SPACE, exec, hyprctl switchxkblayout keychron-keychron-k3-pro next
bind = , PRINT, exec, hyprshot -m region
bind = SUPER, H, exec, cliphist list | rofi -dmenu | cliphist decode | wl-copy
#bind = CTRL, V, exec, wl-paste
##############################
### WINDOWS AND WORKSPACES ###
##############################
# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more
# See https://wiki.hyprland.org/Configuring/Workspace-Rules/ for workspace rules
# Example windowrule v1
# windowrule = float, ^(kitty)$
# Example windowrule v2
# windowrulev2 = float,class:^(kitty)$,title:^(kitty)$
windowrulev2 = suppressevent maximize, class:.* # You'll probably like this.
windowrulev2 = float, class:^(steam_app.*)$
windowrulev2 = immediate, class:^(steam_app.*)$
windowrulev2 = float, class:^(steam_proton.*)$

View File

@ -1,15 +0,0 @@
{
"neodev": {
"library": {
"enabled": true,
"plugins": true
}
},
"neoconf": {
"plugins": {
"lua_ls": {
"enabled": true
}
}
}
}

View File

@ -1,29 +0,0 @@
" Enable Mouse
set mouse=a
" Set Editor Font
if exists(':GuiFont')
" Use GuiFont! to ignore font errors
GuiFont MesloLGS Nerd Font Mono:h10
endif
" Disable GUI Tabline
if exists(':GuiTabline')
GuiTabline 0
endif
" Disable GUI Popupmenu
if exists(':GuiPopupmenu')
GuiPopupmenu 0
endif
" Enable GUI ScrollBar
if exists(':GuiScrollBar')
GuiScrollBar 0
endif
" Right Click Context Menu (Copy-Cut-Paste)
nnoremap <silent><RightMouse> :call GuiShowContextMenu()<CR>
inoremap <silent><RightMouse> <Esc>:call GuiShowContextMenu()<CR>
xnoremap <silent><RightMouse> :call GuiShowContextMenu()<CR>gv
snoremap <silent><RightMouse> <C-G>:call GuiShowContextMenu()<CR>gv

View File

@ -1,7 +0,0 @@
-- bootstrap lazy.nvim, LazyVim and your plugins
require("config.lazy")
vim.o.tabstop = 4 -- A TAB character looks like 4 spaces
vim.o.expandtab = true -- Pressing the TAB key will insert spaces instead of a TAB character
vim.o.softtabstop = 4 -- Number of spaces inserted instead of a TAB character
vim.o.shiftwidth = 4 -- Number of spaces inserted when indenting

View File

@ -1,3 +0,0 @@
-- Autocmds are automatically loaded on the VeryLazy event
-- Default autocmds that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/autocmds.lua
-- Add any additional autocmds here

View File

@ -1,15 +0,0 @@
-- Keymaps are automatically loaded on the VeryLazy event
-- Default keymaps that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/keymaps.lua
-- Add any additional keymaps here
-- Move to window
vim.keymap.set("n", "<C-Left>", "<C-w>h", { desc = "Go to left window", remap = true })
vim.keymap.set("n", "<C-Down>", "<C-w>j", { desc = "Go to lower window", remap = true })
vim.keymap.set("n", "<C-Up>", "<C-w>k", { desc = "Go to upper window", remap = true })
vim.keymap.set("n", "<C-Right>", "<C-w>l", { desc = "Go to right window", remap = true })
-- Resize window using <ctrl> arrow keys
vim.keymap.set("n", "<C-k>", "<cmd>resize +2<cr>", { desc = "Increase window height" })
vim.keymap.set("n", "<C-l>", "<cmd>resize -2<cr>", { desc = "Decrease window height" })
vim.keymap.set("n", "<C-h>", "<cmd>vertical resize -2<cr>", { desc = "Decrease window width" })
vim.keymap.set("n", "<C-j>", "<cmd>vertical resize +2<cr>", { desc = "Increase window width" })

View File

@ -1,46 +0,0 @@
local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"
if not vim.loop.fs_stat(lazypath) then
-- bootstrap lazy.nvim
-- stylua: ignore
vim.fn.system({ "git", "clone", "--filter=blob:none", "https://github.com/folke/lazy.nvim.git", "--branch=stable", lazypath })
end
vim.opt.rtp:prepend(vim.env.LAZY or lazypath)
require("lazy").setup({
spec = {
-- add LazyVim and import its plugins
{ "LazyVim/LazyVim", import = "lazyvim.plugins" },
-- import any extras modules here
-- { import = "lazyvim.plugins.extras.lang.typescript" },
-- { import = "lazyvim.plugins.extras.lang.json" },
-- { import = "lazyvim.plugins.extras.ui.mini-animate" },
-- import/override with your plugins
{ import = "plugins" },
},
defaults = {
-- By default, only LazyVim plugins will be lazy-loaded. Your custom plugins will load during startup.
-- If you know what you're doing, you can set this to `true` to have all your custom plugins lazy-loaded by default.
lazy = false,
-- It's recommended to leave version=false for now, since a lot the plugin that support versioning,
-- have outdated releases, which may break your Neovim install.
version = false, -- always use the latest git commit
-- version = "*", -- try installing the latest stable version for plugins that support semver
},
install = { colorscheme = { "tokyonight", "habamax" } },
checker = { enabled = true }, -- automatically check for plugin updates
performance = {
rtp = {
-- disable some rtp plugins
disabled_plugins = {
"gzip",
-- "matchit",
-- "matchparen",
-- "netrwPlugin",
"tarPlugin",
"tohtml",
"tutor",
"zipPlugin",
},
},
},
})

View File

@ -1,3 +0,0 @@
-- Options are automatically loaded before lazy.nvim startup
-- Default options that are always set: https://github.com/LazyVim/LazyVim/blob/main/lua/lazyvim/config/options.lua
-- Add any additional options here

View File

@ -1,70 +0,0 @@
return {
{
"ellisonleao/gruvbox.nvim",
},
{
"folke/tokyonight.nvim",
style = "moon",
priority = 1000,
},
{ "skywind3000/asyncrun.vim" },
-- Configure LazyVim to load gruvbox
{
"LazyVim/LazyVim",
opts = {
colorscheme = "tokyonight",
},
},
{ "equalsraf/neovim-gui-shim" },
{
"nvim-neo-tree/neo-tree.nvim",
opts = {
filesystem = {
filtered_items = {
hide_dotfiles = false,
hide_gitignored = false,
},
use_libuv_file_watcher = true,
},
},
},
{
"folke/trouble.nvim",
dependencies = { "nvim-tree/nvim-web-devicons" },
},
{
"nvim-orgmode/orgmode",
dependencies = {
{ "nvim-treesitter/nvim-treesitter", lazy = true },
},
event = "VeryLazy",
config = function()
require("orgmode").setup_ts_grammar()
require("nvim-treesitter.configs").setup({
highlight = {
enable = true,
additional_vim_regex_highlighting = { "org" },
},
ensure_installed = { "org" },
})
require("orgmode").setup()
end,
},
{
"williamboman/mason.nvim",
config = function()
require("mason").setup({ PATH = "append" })
end
}
}

View File

@ -1,4 +0,0 @@
indent_type = "Spaces"
indent_width = 4
column_width = 120

629
configurations/bonvim.nix Normal file
View File

@ -0,0 +1,629 @@
{
config,
lib,
pkgs,
rustc ? pkgs.rustc,
cargo ? pkgs.cargo,
rust-analyzer ? pkgs.rust-analyzer,
...
}: {
# General
globals.mapleader = " ";
opts = {
# Show line numbers
number = true;
relativenumber = true;
# Tab need 4 spaces please
expandtab = true;
tabstop = 4;
softtabstop = 4;
shiftwidth = 4;
showtabline = 4;
# Hide * markup
conceallevel = 2;
# Confirm on save
confirm = true;
cursorline = true;
# Invisible characters I see you
list = true;
ignorecase = true;
grepprg = "${lib.getExe pkgs.ripgrep} --vimgrep";
termguicolors = true;
# Splits
splitbelow = true;
splitright = true;
splitkeep = "screen";
# U, u, undo
undofile = true;
undolevels = 10000;
updatetime = 200;
# Command line completion mode
wildmode = "longest:full,full";
smoothscroll = true;
autowrite = true;
};
globals = {
bigfile_size = 1024 * 1024 * 1.5;
};
editorconfig.enable = true;
# Clipboard
clipboard = {
register = "unnamedplus";
providers.wl-copy.enable = true;
};
# Copy/paste
plugins.yanky = {
enable = true;
systemClipboard.syncWithRing = true;
};
extraPlugins = with pkgs.vimPlugins; [nvim-web-devicons];
# Theme
colorschemes.catppuccin = {
enable = true;
settings = {
flavour = "macchiato";
no_bold = false;
no_italic = false;
no_underline = false;
integrations = {
cmp = true;
notify = true;
gitsigns = true;
neotree = true;
which_key = true;
illuminate = {
enabled = true;
};
treesitter = true;
telescope.enabled = true;
indent_blankline.enabled = true;
mini.enabled = true;
native_lsp = {
enabled = true;
inlay_hints = {
background = true;
};
underlines = {
errors = ["underline"];
hints = ["underline"];
information = ["underline"];
warnings = ["underline"];
};
};
};
};
};
# File tree
plugins.neo-tree = {
enable = true;
filesystem = {
useLibuvFileWatcher = true;
filteredItems = {
hideDotfiles = false;
hideGitignored = false;
};
};
defaultComponentConfigs = {
indent = {
withExpanders = true;
expanderCollapsed = "";
expanderExpanded = "";
expanderHighlight = "NeoTreeExpander";
};
};
};
# UI
plugins.noice = {
enable = true;
lsp.override = {
"cmp.entry.get_documentation" = true;
"vim.lsp.util.convert_input_to_markdown_lines" = true;
"vim.lsp.util.stylize_markdown" = true;
};
presets = {
long_message_to_split = true;
};
};
plugins.dressing = {
enable = true;
};
# Status line
plugins.bufferline = {
enable = true;
diagnostics = "nvim_lsp";
mode = "buffers";
offsets = [
{
filetype = "neo-tree";
text = "Neo-tree";
highlight = "Directory";
text_align = "left";
}
];
};
plugins.lualine = {
enable = true;
globalstatus = true;
extensions = ["neo-tree"];
sections = {
lualine_a = [
{
name = "mode";
separator.right = "";
}
];
lualine_b = [
{
name = "branch";
icon = "";
separator.right = "";
}
];
lualine_c = [
{
name = "diagnostics";
separator.right = ">";
extraConfig = {
sources = ["nvim_lsp"];
symbols = {
error = " ";
warn = " ";
info = " ";
hint = "󰝶 ";
};
};
}
{
name = "filetype";
extraConfig = {
icon_only = true;
separator = "";
padding = {
left = 1;
right = 0;
};
};
}
{
name = "filename";
extraConfig = {
path = 1;
};
}
];
lualine_x = [
{
name = "diff";
extraConfig = {
symbols = {
added = " ";
modified = " ";
removed = " ";
};
source.__raw = ''
function()
local gitsings = vim.b.gitsigns_status_dict
if gitsigns then
return {
added = gitigns.added,
modified = gitigns.changed,
removed = gitigns.removed
}
end
end
'';
};
}
];
lualine_y = [
{
separator.left = "";
name = "progress";
padding = {
left = 1;
right = 0;
};
}
{
name = "location";
padding = {
left = 0;
right = 1;
};
}
];
lualine_z = [
{
separator.left = "";
fmt = ''
function(text)
return " " .. os.date("%R")
end
'';
}
];
};
};
plugins.notify.enable = true;
plugins.project-nvim = {
enable = true;
enableTelescope = true;
showHidden = true;
};
# Syntax highlight
plugins.treesitter = {
enable = true;
};
plugins.treesitter-textobjects.enable = true;
# Double trouble of your code
plugins.trouble = {
enable = true;
};
# Multifile search/replace
plugins.spectre = {
enable = true;
findPackage = pkgs.ripgrep;
replacePackage = pkgs.gnused;
};
plugins.which-key = {
enable = true;
icons.group = "+";
registrations = {
"<leader>g" = "+ Git";
"<leader>c" = "+ Code";
"<leader>s" = "+ Search";
"<leader>w" = "+ Window";
"<leader>q" = "+ Quit";
};
};
# LSP
plugins = {
lsp-lines.enable = true;
lsp-format.enable = true;
lsp = {
enable = true;
inlayHints = true;
keymaps = {
# vim.diagnostic.<action>
diagnostic = {
"<leader>cd" = {
action = "open_float";
desc = "Line diagnostics";
};
};
# vim.lsp.buf.<action>
lspBuf = {
"K" = "hover";
"gK" = "signature_help";
"gr" = "references";
"gd" = "definition";
"gi" = "implementation";
"gt" = "type_definition";
"cr" = "rename";
"cf" = "format";
};
extra = [
{
key = "<leader>cf";
action.__raw = "vim.lsp.buf.format";
options.desc = "Format";
}
];
};
servers = {
clangd = {
enable = true;
cmd = [
"${config.plugins.lsp.servers.clangd.package}/bin/clangd"
"--background-index"
"--clang-tidy"
"--header-insertion=iwyu"
"--completion-style=detailed"
"--function-arg-placeholders"
"--fallback-style=llvm"
];
};
cmake.enable = true;
nil-ls.enable = true;
# pylyzer.enable = true; # not working with virtual environments currently :(
pylsp = {
enable = true;
settings.plugins = {
pyflakes.enabled = true;
black.enabled = true;
};
};
rust-analyzer = {
enable = true;
package = rust-analyzer;
cargoPackage = cargo;
rustcPackage = rustc;
installCargo = true;
installRustc = true;
};
volar.enable = true;
tailwindcss.enable = true;
marksman.enable = true;
};
};
};
# VCS
plugins.gitsigns = {
enable = true;
settings = {
signs = {
add = {
text = "";
};
change = {
text = "";
};
delete = {
text = "";
};
untracked = {
text = "";
};
topdelete = {
text = "";
};
changedelete = {
text = "";
};
};
};
};
plugins.lazygit.enable = true;
# Formatting
plugins.none-ls = {
enable = true;
# nix
sources.formatting.alejandra.enable = true;
};
# Search, search, search
plugins.telescope = {
enable = true;
extensions.fzf-native.enable = true;
keymaps = {
"<leader>sgf" = {
action = "git_files";
options = {
desc = "Files";
};
};
"<leader>sgc" = {
action = "git_commits";
options = {
desc = "Commits";
};
};
"<leader>sgs" = {
action = "git_status";
options = {
desc = "Status";
};
};
"<leader>sk" = {
action = "keymaps";
options = {
desc = "Key Maps";
};
};
"<leader>sf" = {
action = "live_grep";
options = {
desc = "Grep Root Directory";
};
};
};
};
plugins.todo-comments.enable = true;
# Terminal
plugins.toggleterm = {
enable = true;
settings = {
direction = "float";
open_mapping = "[[<c-/>]]";
};
};
# Completion
plugins = {
cmp = {
enable = true;
settings = {
sources = [
{
name = "nvim_lsp";
}
{
name = "path";
}
{
name = "buffer";
}
];
experimental = {
ghost_text = {
hl_group = "CmpGhostText";
};
};
mapping = {
"<c-space>" = "cmp.mapping.complete()";
"<cr>" = "cmp.mapping.confirm({ select = true; })";
};
};
};
cmp-nvim-lsp.enable = true;
cmp-path.enable = true;
cmp-buffer.enable = true;
};
# Keymaps
keymaps = [
# General
{
mode = "n";
key = "<leader>qq";
action = "<cmd>qa<cr>";
options = {desc = "Quit All";};
}
{
mode = "n";
key = "<leader>ww";
action = "<C-W>p";
options = {desc = "Other Window";};
}
{
mode = "n";
key = "<leader>wd";
action = "<C-W>c";
options = {desc = "Delete Window";};
}
{
mode = "n";
key = "<leader>ws";
action = "<C-W>s";
options = {desc = "Split Below";};
}
{
mode = "n";
key = "<leader>wv";
action = "<C-W>v";
options = {desc = "Split Right";};
}
{
mode = "n";
key = "<C-Left>";
action = "<C-W>h";
options = {desc = "Go To Left Window";};
}
{
mode = "n";
key = "<C-Down>";
action = "<C-W>j";
options = {desc = "Go To Lower Window";};
}
{
mode = "n";
key = "<C-Up>";
action = "<C-W>k";
options = {desc = "Go To Upper Window";};
}
{
mode = "n";
key = "<C-Right>";
action = "<C-W>l";
options = {desc = "Go To Right Window";};
}
{
mode = "v";
key = ">";
action = ">gv";
options = {desc = "Indent right selected text";};
}
{
mode = "v";
key = "<";
action = "<gv";
options = {desc = "Indent left selected text";};
}
# Clipboard
{
mode = ["n" "x"];
key = "y";
action = "<Plug>(YankyYank)";
options = {desc = "Yank Text";};
}
{
mode = ["n" "x"];
key = "p";
action = "<Plug>(YankyPutAfter)";
options = {desc = "Put Yanked Text After Cursor";};
}
{
mode = ["n" "x"];
key = "P";
action = "<Plug>(YankyPutBefore)";
options = {desc = "Put Yanked Text Before Cursor";};
}
{
mode = ["n" "x"];
key = "gp";
action = "<Plug>(YankyGPutAfter)";
options = {desc = "Put Yanked Text After Selection";};
}
{
mode = ["n" "x"];
key = "gP";
action = "<Plug>(YankyGPutBefore)";
options = {desc = "Put Yanked Text Befor Selection";};
}
{
mode = "n";
key = "<leader>cl";
action.__raw = ''require("lsp_lines").toggle'';
options = {desc = "Toggle LSP lines";};
}
# Terminal
{
mode = "t";
key = "<esc><esc>";
action = "<c-\\><c-n>";
options = {desc = "Enter Normal Mode";};
}
# Etc
{
mode = "n";
key = "<leader>e";
action = "<cmd>Neotree toggle<cr>";
options = {desc = "Open/Close Neotree";};
}
{
mode = "n";
key = "<leader>gg";
action = "<cmd>LazyGit<cr>";
options = {
desc = "LazyGit (root dir)";
};
}
];
}

View File

@ -0,0 +1,7 @@
{
self,
inputs,
...
}: {
bonvim = ./bonvim.nix;
}

View File

@ -1,13 +1,9 @@
{ crane-lib, pkgs, ... }: {pkgs, ...}:
crane-lib.devShell { pkgs.mkShellNoCC {
packages = with pkgs; [ packages = with pkgs; [
sops sops
mkpasswd mkpasswd
nil
jq jq
cachix cachix
nodejs
python3
marksman
]; ];
} }

View File

@ -1,12 +1,15 @@
# self.devShells.${system} # self.devShells.${system}
# #
{ self, nixpkgs, ... }: {
let self,
nixpkgs,
...
}: let
forAllSystems = nixpkgs.lib.genAttrs ["x86_64-linux"]; forAllSystems = nixpkgs.lib.genAttrs ["x86_64-linux"];
nixpkgsFor = forAllSystems (system: import nixpkgs {inherit system;}); nixpkgsFor = forAllSystems (system: import nixpkgs {inherit system;});
in
in forAllSystems(system: forAllSystems (system: let
let environment = { environment = rec {
pkgs = nixpkgsFor.${system}; pkgs = nixpkgsFor.${system};
bonfire = self; bonfire = self;
@ -14,9 +17,9 @@ in forAllSystems(system:
bonfire-pkgs = self.packages.${system}; bonfire-pkgs = self.packages.${system};
crane = self.inputs.crane; crane = self.inputs.crane;
crane-lib = self.inputs.crane.lib.${system}; crane-lib = self.inputs.crane.mkLib pkgs;
}; in { };
in {
default = import ./bonfire.nix environment; default = import ./bonfire.nix environment;
netgen = import ./netgen.nix environment; netgen = import ./netgen.nix environment;

View File

@ -1,4 +1,8 @@
{ pkgs, bonfire-pkgs, ... }: {
pkgs,
bonfire-pkgs,
...
}:
pkgs.mkShellNoCC { pkgs.mkShellNoCC {
packages = [ packages = [
bonfire-pkgs.netgen bonfire-pkgs.netgen

View File

@ -1,4 +1,8 @@
{ pkgs, bonfire-pkgs, ... }: {
pkgs,
bonfire-pkgs,
...
}:
pkgs.mkShellNoCC { pkgs.mkShellNoCC {
packages = [ packages = [
bonfire-pkgs.openfoam bonfire-pkgs.openfoam

View File

@ -1,4 +1,8 @@
{ pkgs, crane-lib, ... }: {
pkgs,
crane-lib,
...
}:
crane-lib.devShell rec { crane-lib.devShell rec {
packages = with pkgs; [ packages = with pkgs; [
lld lld

View File

@ -1,4 +1,8 @@
{ pkgs, crane-lib, ... }: {
pkgs,
crane-lib,
...
}:
crane-lib.devShell { crane-lib.devShell {
packages = [ packages = [
pkgs.cargo-watch pkgs.cargo-watch

View File

@ -52,7 +52,7 @@
"inputs": { "inputs": {
"crane": "crane_2", "crane": "crane_2",
"fenix": "fenix_2", "fenix": "fenix_2",
"home-manager": "home-manager_2", "home-manager": "home-manager_3",
"nixgl": "nixgl", "nixgl": "nixgl",
"nixos-mailserver": "nixos-mailserver_2", "nixos-mailserver": "nixos-mailserver_2",
"nixpkgs": "nixpkgs_3", "nixpkgs": "nixpkgs_3",
@ -78,7 +78,7 @@
"crane": "crane_3", "crane": "crane_3",
"devenv": "devenv", "devenv": "devenv",
"fenix": "fenix_3", "fenix": "fenix_3",
"home-manager": "home-manager_3", "home-manager": "home-manager_4",
"nixgl": "nixgl_2", "nixgl": "nixgl_2",
"nixos-mailserver": "nixos-mailserver_3", "nixos-mailserver": "nixos-mailserver_3",
"nixpkgs": "nixpkgs_5", "nixpkgs": "nixpkgs_5",
@ -142,11 +142,11 @@
}, },
"catppuccin": { "catppuccin": {
"locked": { "locked": {
"lastModified": 1718339789, "lastModified": 1719758387,
"narHash": "sha256-Q3fgY7huFE+uaw7BNsAl1x+FvjDAi3EDWPnlALJt5pM=", "narHash": "sha256-bMaI1jJNzIZar4TP/hhoPQROqqcbD6zT6O+sqIJdp8c=",
"owner": "catppuccin", "owner": "catppuccin",
"repo": "nix", "repo": "nix",
"rev": "73e06d5bd7ed34bdd0168030893ef8364fdc1d4a", "rev": "9eb0610d48dd0e1fecf772bbdacf9050d7b82d7c",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -162,11 +162,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1718474113, "lastModified": 1719685792,
"narHash": "sha256-UKrfy/46YF2TRnxTtKCYzqf2f5ZPRRWwKCCJb7O5X8U=", "narHash": "sha256-WIoVERD4AN6CmfGSRPy3mfPx2dDbRHgzP2V8z6aNbaY=",
"owner": "ipetkov", "owner": "ipetkov",
"repo": "crane", "repo": "crane",
"rev": "0095fd8ea00ae0a9e6014f39c375e40c2fbd3386", "rev": "aa5dcd0518a422dfd545d565f0d5a25971fea52a",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -224,7 +224,7 @@
"devenv": { "devenv": {
"inputs": { "inputs": {
"cachix": "cachix", "cachix": "cachix",
"flake-compat": "flake-compat_4", "flake-compat": "flake-compat_6",
"nix": "nix_2", "nix": "nix_2",
"nixpkgs": [ "nixpkgs": [
"oscuro", "oscuro",
@ -288,6 +288,28 @@
"type": "github" "type": "github"
} }
}, },
"devshell": {
"inputs": {
"flake-utils": "flake-utils",
"nixpkgs": [
"nixvim",
"nixpkgs"
]
},
"locked": {
"lastModified": 1717408969,
"narHash": "sha256-Q0OEFqe35fZbbRPPRdrjTUUChKVhhWXz3T9ZSKmaoVY=",
"owner": "numtide",
"repo": "devshell",
"rev": "1ebbe68d57457c8cae98145410b164b5477761f4",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "devshell",
"type": "github"
}
},
"fenix": { "fenix": {
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": [
@ -296,11 +318,11 @@
"rust-analyzer-src": [] "rust-analyzer-src": []
}, },
"locked": { "locked": {
"lastModified": 1717827974, "lastModified": 1719815435,
"narHash": "sha256-ixopuTeTouxqTxfMuzs6IaRttbT8JqRW5C9Q/57WxQw=", "narHash": "sha256-K2xFp142onP35jcx7li10xUxNVEVRWjAdY8DSuR7Naw=",
"owner": "nix-community", "owner": "nix-community",
"repo": "fenix", "repo": "fenix",
"rev": "ab655c627777ab5f9964652fe23bbb1dfbd687a8", "rev": "ebfe2c639111d7e82972a12711206afaeeda2450",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -382,6 +404,20 @@
} }
}, },
"flake-compat_2": { "flake-compat_2": {
"locked": {
"lastModified": 1696426674,
"narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
"rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
"revCount": 57,
"type": "tarball",
"url": "https://api.flakehub.com/f/pinned/edolstra/flake-compat/1.0.1/018afb31-abd1-7bff-a5e4-cff7e18efb7a/source.tar.gz"
},
"original": {
"type": "tarball",
"url": "https://flakehub.com/f/edolstra/flake-compat/1.tar.gz"
}
},
"flake-compat_3": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1696426674, "lastModified": 1696426674,
@ -397,22 +433,6 @@
"type": "github" "type": "github"
} }
}, },
"flake-compat_3": {
"flake": false,
"locked": {
"lastModified": 1673956053,
"narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9",
"type": "github"
},
"original": {
"owner": "edolstra",
"repo": "flake-compat",
"type": "github"
}
},
"flake-compat_4": { "flake-compat_4": {
"flake": false, "flake": false,
"locked": { "locked": {
@ -430,6 +450,22 @@
} }
}, },
"flake-compat_5": { "flake-compat_5": {
"flake": false,
"locked": {
"lastModified": 1673956053,
"narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9",
"type": "github"
},
"original": {
"owner": "edolstra",
"repo": "flake-compat",
"type": "github"
}
},
"flake-compat_6": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1696426674, "lastModified": 1696426674,
@ -445,7 +481,62 @@
"type": "github" "type": "github"
} }
}, },
"flake-compat_7": {
"flake": false,
"locked": {
"lastModified": 1696426674,
"narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
"type": "github"
},
"original": {
"owner": "edolstra",
"repo": "flake-compat",
"type": "github"
}
},
"flake-parts": {
"inputs": {
"nixpkgs-lib": [
"nixvim",
"nixpkgs"
]
},
"locked": {
"lastModified": 1719745305,
"narHash": "sha256-xwgjVUpqSviudEkpQnioeez1Uo2wzrsMaJKJClh+Bls=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "c3c5ecc05edc7dafba779c6c1a61cd08ac6583e9",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "flake-parts",
"type": "github"
}
},
"flake-utils": { "flake-utils": {
"inputs": {
"systems": "systems"
},
"locked": {
"lastModified": 1701680307,
"narHash": "sha256-kAuep2h5ajznlPMD9rnQyffWG8EM/C73lejGofXvdM8=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "4022d587cbbfd70fe950c1e2083a02621806a725",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"flake-utils_2": {
"locked": { "locked": {
"lastModified": 1659877975, "lastModified": 1659877975,
"narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=", "narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=",
@ -460,9 +551,9 @@
"type": "github" "type": "github"
} }
}, },
"flake-utils_2": { "flake-utils_3": {
"inputs": { "inputs": {
"systems": "systems_2" "systems": "systems_3"
}, },
"locked": { "locked": {
"lastModified": 1689068808, "lastModified": 1689068808,
@ -478,9 +569,9 @@
"type": "github" "type": "github"
} }
}, },
"flake-utils_3": { "flake-utils_4": {
"inputs": { "inputs": {
"systems": "systems_3" "systems": "systems_4"
}, },
"locked": { "locked": {
"lastModified": 1710146030, "lastModified": 1710146030,
@ -496,7 +587,7 @@
"type": "github" "type": "github"
} }
}, },
"flake-utils_4": { "flake-utils_5": {
"locked": { "locked": {
"lastModified": 1659877975, "lastModified": 1659877975,
"narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=", "narHash": "sha256-zllb8aq3YO3h8B/U0/J1WBgAL8EX5yWf5pMj3G0NAmc=",
@ -511,7 +602,56 @@
"type": "github" "type": "github"
} }
}, },
"git-hooks": {
"inputs": {
"flake-compat": "flake-compat_3",
"gitignore": "gitignore",
"nixpkgs": [
"nixvim",
"nixpkgs"
],
"nixpkgs-stable": [
"nixvim",
"nixpkgs"
]
},
"locked": {
"lastModified": 1719259945,
"narHash": "sha256-F1h+XIsGKT9TkGO3omxDLEb/9jOOsI6NnzsXFsZhry4=",
"owner": "cachix",
"repo": "git-hooks.nix",
"rev": "0ff4381bbb8f7a52ca4a851660fc7a437a4c6e07",
"type": "github"
},
"original": {
"owner": "cachix",
"repo": "git-hooks.nix",
"type": "github"
}
},
"gitignore": { "gitignore": {
"inputs": {
"nixpkgs": [
"nixvim",
"git-hooks",
"nixpkgs"
]
},
"locked": {
"lastModified": 1709087332,
"narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=",
"owner": "hercules-ci",
"repo": "gitignore.nix",
"rev": "637db329424fd7e46cf4185293b9cc8c88c95394",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "gitignore.nix",
"type": "github"
}
},
"gitignore_2": {
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": [
"oscuro", "oscuro",
@ -544,11 +684,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1718526747, "lastModified": 1719827439,
"narHash": "sha256-sKrD/utGvmtQALvuDj4j0CT3AJXP1idOAq2p+27TpeE=", "narHash": "sha256-tneHOIv1lEavZ0vQ+rgz67LPNCgOZVByYki3OkSshFU=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "0a7ffb28e5df5844d0e8039c9833d7075cdee792", "rev": "59ce796b2563e19821361abbe2067c3bb4143a7d",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -558,6 +698,27 @@
} }
}, },
"home-manager_2": { "home-manager_2": {
"inputs": {
"nixpkgs": [
"nixvim",
"nixpkgs"
]
},
"locked": {
"lastModified": 1719677234,
"narHash": "sha256-qO9WZsj/0E6zcK4Ht1y/iJ8XfwbBzq7xdqhBh44OP/M=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "36317d4d38887f7629876b0e43c8d9593c5cc48d",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "home-manager",
"type": "github"
}
},
"home-manager_3": {
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": [
"oscuro", "oscuro",
@ -579,7 +740,7 @@
"type": "github" "type": "github"
} }
}, },
"home-manager_3": { "home-manager_4": {
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": [
"oscuro", "oscuro",
@ -605,7 +766,7 @@
}, },
"nix": { "nix": {
"inputs": { "inputs": {
"flake-compat": "flake-compat_3", "flake-compat": "flake-compat_5",
"nixpkgs": [ "nixpkgs": [
"oscuro", "oscuro",
"bonfire", "bonfire",
@ -633,6 +794,27 @@
"type": "github" "type": "github"
} }
}, },
"nix-darwin": {
"inputs": {
"nixpkgs": [
"nixvim",
"nixpkgs"
]
},
"locked": {
"lastModified": 1719128254,
"narHash": "sha256-I7jMpq0CAOZA/i70+HDQO/ulLttyQu/K70cSESiMX7A=",
"owner": "lnl7",
"repo": "nix-darwin",
"rev": "50581970f37f06a4719001735828519925ef8310",
"type": "github"
},
"original": {
"owner": "lnl7",
"repo": "nix-darwin",
"type": "github"
}
},
"nix-github-actions": { "nix-github-actions": {
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": [
@ -698,7 +880,7 @@
}, },
"nixgl": { "nixgl": {
"inputs": { "inputs": {
"flake-utils": "flake-utils", "flake-utils": "flake-utils_2",
"nixpkgs": [ "nixpkgs": [
"oscuro", "oscuro",
"bonfire", "bonfire",
@ -721,7 +903,7 @@
}, },
"nixgl_2": { "nixgl_2": {
"inputs": { "inputs": {
"flake-utils": "flake-utils_4", "flake-utils": "flake-utils_5",
"nixpkgs": [ "nixpkgs": [
"oscuro", "oscuro",
"bonfire", "bonfire",
@ -754,11 +936,11 @@
"nixpkgs-24_05": "nixpkgs-24_05" "nixpkgs-24_05": "nixpkgs-24_05"
}, },
"locked": { "locked": {
"lastModified": 1718398369, "lastModified": 1718697807,
"narHash": "sha256-ccOHDuTaUhD1DW6DGNXoDJNOwYx55rVNKECyqRzKRtE=", "narHash": "sha256-Enla61WFisytTYbWygPynEbu8vozjeGc6Obkj2GRj7o=",
"owner": "simple-nixos-mailserver", "owner": "simple-nixos-mailserver",
"repo": "nixos-mailserver", "repo": "nixos-mailserver",
"rev": "54cbacb6eb9938bf1eaab7a7840fb527050c2af1", "rev": "290a995de5c3d3f08468fa548f0d55ab2efc7b6b",
"type": "gitlab" "type": "gitlab"
}, },
"original": { "original": {
@ -770,7 +952,7 @@
"nixos-mailserver_2": { "nixos-mailserver_2": {
"inputs": { "inputs": {
"blobs": "blobs_2", "blobs": "blobs_2",
"flake-compat": "flake-compat_2", "flake-compat": "flake-compat_4",
"nixpkgs": [ "nixpkgs": [
"oscuro", "oscuro",
"bonfire", "bonfire",
@ -795,7 +977,7 @@
"nixos-mailserver_3": { "nixos-mailserver_3": {
"inputs": { "inputs": {
"blobs": "blobs_3", "blobs": "blobs_3",
"flake-compat": "flake-compat_5", "flake-compat": "flake-compat_7",
"nixpkgs": [ "nixpkgs": [
"oscuro", "oscuro",
"bonfire", "bonfire",
@ -821,11 +1003,11 @@
}, },
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1718530797, "lastModified": 1719690277,
"narHash": "sha256-pup6cYwtgvzDpvpSCFh1TEUjw2zkNpk8iolbKnyFmmU=", "narHash": "sha256-0xSej1g7eP2kaUF+JQp8jdyNmpmCJKRpO12mKl/36Kc=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "b60ebf54c15553b393d144357375ea956f89e9a9", "rev": "2741b4b489b55df32afac57bc4bfd220e8bf617e",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -932,11 +1114,11 @@
}, },
"nixpkgs-stable_4": { "nixpkgs-stable_4": {
"locked": { "locked": {
"lastModified": 1718478900, "lastModified": 1719663039,
"narHash": "sha256-v43N1gZLcGkhg3PdcrKUNIZ1L0FBzB2JqhIYEyKAHEs=", "narHash": "sha256-tXlrgAQygNIy49LDVFuPXlWD2zTQV9/F8pfoqwwPJyo=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "c884223af91820615a6146af1ae1fea25c107005", "rev": "4a1e673523344f6ccc84b37f4413ad74ea19a119",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1010,6 +1192,33 @@
"type": "github" "type": "github"
} }
}, },
"nixvim": {
"inputs": {
"devshell": "devshell",
"flake-compat": "flake-compat_2",
"flake-parts": "flake-parts",
"git-hooks": "git-hooks",
"home-manager": "home-manager_2",
"nix-darwin": "nix-darwin",
"nixpkgs": [
"nixpkgs"
],
"treefmt-nix": "treefmt-nix"
},
"locked": {
"lastModified": 1719835160,
"narHash": "sha256-AyZJM2la6+CAdKKSC3y80sbneW8dH/2lb+OxKzi2cAw=",
"owner": "nix-community",
"repo": "nixvim",
"rev": "7cc1685eafdcf04cf1058949647ea2c7560f2d65",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "nixvim",
"type": "github"
}
},
"obs-image-reaction": { "obs-image-reaction": {
"inputs": { "inputs": {
"nixpkgs": "nixpkgs_2" "nixpkgs": "nixpkgs_2"
@ -1071,7 +1280,7 @@
}, },
"poetry2nix": { "poetry2nix": {
"inputs": { "inputs": {
"flake-utils": "flake-utils_2", "flake-utils": "flake-utils_3",
"nix-github-actions": "nix-github-actions", "nix-github-actions": "nix-github-actions",
"nixpkgs": [ "nixpkgs": [
"oscuro", "oscuro",
@ -1108,8 +1317,8 @@
"devenv", "devenv",
"flake-compat" "flake-compat"
], ],
"flake-utils": "flake-utils_3", "flake-utils": "flake-utils_4",
"gitignore": "gitignore", "gitignore": "gitignore_2",
"nixpkgs": [ "nixpkgs": [
"oscuro", "oscuro",
"bonfire", "bonfire",
@ -1142,6 +1351,7 @@
"home-manager": "home-manager", "home-manager": "home-manager",
"nixos-mailserver": "nixos-mailserver", "nixos-mailserver": "nixos-mailserver",
"nixpkgs": "nixpkgs", "nixpkgs": "nixpkgs",
"nixvim": "nixvim",
"obs-image-reaction": "obs-image-reaction", "obs-image-reaction": "obs-image-reaction",
"oscuro": "oscuro", "oscuro": "oscuro",
"sops-nix": "sops-nix_3" "sops-nix": "sops-nix_3"
@ -1203,11 +1413,11 @@
"nixpkgs-stable": "nixpkgs-stable_4" "nixpkgs-stable": "nixpkgs-stable_4"
}, },
"locked": { "locked": {
"lastModified": 1718506969, "lastModified": 1719716556,
"narHash": "sha256-Pm9I/BMQHbsucdWf6y9G3xBZh3TMlThGo4KBbeoeczg=", "narHash": "sha256-KA9gy2Wkv76s4A8eLnOcdKVTygewbw3xsB8+awNMyqs=",
"owner": "Mic92", "owner": "Mic92",
"repo": "sops-nix", "repo": "sops-nix",
"rev": "797ce4c1f45a85df6dd3d9abdc53f2691bea9251", "rev": "b5974d4331fb6c893e808977a2e1a6d34b3162d6",
"type": "github" "type": "github"
}, },
"original": { "original": {
@ -1276,9 +1486,45 @@
"type": "github" "type": "github"
} }
}, },
"systems_5": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"treefmt-nix": {
"inputs": {
"nixpkgs": [
"nixvim",
"nixpkgs"
]
},
"locked": {
"lastModified": 1719749022,
"narHash": "sha256-ddPKHcqaKCIFSFc/cvxS14goUhCOAwsM1PbMr0ZtHMg=",
"owner": "numtide",
"repo": "treefmt-nix",
"rev": "8df5ff62195d4e67e2264df0b7f5e8c9995fd0bd",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "treefmt-nix",
"type": "github"
}
},
"utils": { "utils": {
"inputs": { "inputs": {
"systems": "systems" "systems": "systems_2"
}, },
"locked": { "locked": {
"lastModified": 1709126324, "lastModified": 1709126324,
@ -1296,7 +1542,7 @@
}, },
"utils_2": { "utils_2": {
"inputs": { "inputs": {
"systems": "systems_4" "systems": "systems_5"
}, },
"locked": { "locked": {
"lastModified": 1709126324, "lastModified": 1709126324,

View File

@ -38,10 +38,24 @@
obs-image-reaction = { obs-image-reaction = {
url = "github:L-Nafaryus/obs-image-reaction"; url = "github:L-Nafaryus/obs-image-reaction";
}; };
nixvim = {
url = "github:nix-community/nixvim";
inputs.nixpkgs.follows = "nixpkgs";
};
}; };
outputs = { self, nixpkgs, home-manager, nixos-mailserver, sops-nix, crane, fenix, catppuccin, oscuro, ... } @ inputs: outputs = {
let self,
nixpkgs,
home-manager,
nixos-mailserver,
sops-nix,
crane,
fenix,
catppuccin,
oscuro,
...
} @ inputs: let
lib = import ./lib {inherit (nixpkgs) lib;}; lib = import ./lib {inherit (nixpkgs) lib;};
in { in {
inherit lib; inherit lib;
@ -54,7 +68,11 @@
./nixosConfigurations/astora ./nixosConfigurations/astora
self.nixosModules.bonfire self.nixosModules.bonfire
self.nixosModules.spoofdpi self.nixosModules.spoofdpi
(import ./nixosModules { lib = nixpkgs.lib; self = self; }).configModule (import ./nixosModules {
lib = nixpkgs.lib;
self = self;
})
.configModule
]; ];
specialArgs = {inherit self inputs;}; specialArgs = {inherit self inputs;};
}; };
@ -70,13 +88,23 @@
self.nixosModules.spoofdpi self.nixosModules.spoofdpi
self.nixosModules.papermc self.nixosModules.papermc
self.nixosModules.qbittorrent-nox self.nixosModules.qbittorrent-nox
(import ./nixosModules { lib = nixpkgs.lib; self = self; }).configModule (import ./nixosModules {
lib = nixpkgs.lib;
self = self;
})
.configModule
]; ];
specialArgs = {inherit self;}; specialArgs = {inherit self;};
}; };
}; };
nixosModules = lib.importNamedModules (import ./nixosModules { lib = nixpkgs.lib; self = self; }).modules; nixosModules =
lib.importNamedModules
(import ./nixosModules {
lib = nixpkgs.lib;
self = self;
})
.modules;
templates = { templates = {
rust = { rust = {
@ -85,10 +113,16 @@
}; };
}; };
packages = import ./packages { inherit self nixpkgs; }; packages = import ./packages {inherit self inputs;};
apps = import ./apps {inherit self nixpkgs;}; apps = import ./apps {inherit self nixpkgs;};
devShells = import ./devShells {inherit self nixpkgs;}; devShells = import ./devShells {inherit self nixpkgs;};
configurations = import ./configurations {inherit self inputs;};
hydraJobs = {
inherit (self) packages;
};
}; };
} }

View File

@ -1,17 +1,17 @@
{ lib, ... }: {lib, ...}: rec {
rec {
maintainers = import ./maintainers.nix; maintainers = import ./maintainers.nix;
moduleName = path: if builtins.baseNameOf (toString path) == "default.nix" then moduleName = path:
builtins.baseNameOf (lib.removeSuffix "/default.nix" (toString path)) if builtins.baseNameOf (toString path) == "default.nix"
else then builtins.baseNameOf (lib.removeSuffix "/default.nix" (toString path))
builtins.baseNameOf (lib.removeSuffix ".nix" (toString path)); else builtins.baseNameOf (lib.removeSuffix ".nix" (toString path));
moduleNames = pathList: map (path: moduleName path) pathList; moduleNames = pathList: map (path: moduleName path) pathList;
importModules = pathList: map (path: import path) pathList; importModules = pathList: map (path: import path) pathList;
importNamedModules = pathList: lib.listToAttrs ( importNamedModules = pathList:
lib.listToAttrs (
lib.zipListsWith (name: value: {inherit name value;}) (moduleNames pathList) (importModules pathList) lib.zipListsWith (name: value: {inherit name value;}) (moduleNames pathList) (importModules pathList)
); );
} }

View File

@ -1,5 +1,9 @@
{ pkgs, lib, config, ... }:
{ {
pkgs,
lib,
config,
...
}: {
system.stateVersion = "23.11"; system.stateVersion = "23.11";
imports = [./hardware.nix ./users.nix]; imports = [./hardware.nix ./users.nix];

View File

@ -1,5 +1,8 @@
{ config, lib, ... }:
{ {
config,
lib,
...
}: {
# Boot # Boot
boot = { boot = {
loader.systemd-boot.enable = true; loader.systemd-boot.enable = true;
@ -67,12 +70,42 @@
sudo.extraConfig = ''Defaults timestamp_timeout=30''; sudo.extraConfig = ''Defaults timestamp_timeout=30'';
rtkit.enable = true; rtkit.enable = true;
pam.loginLimits = [ pam.loginLimits = [
{ domain = "@audio"; item = "memlock"; type = "-"; value = "unlimited"; } {
{ domain = "@audio"; item = "rtprio"; type = "-"; value = "99"; } domain = "@audio";
{ domain = "@audio"; item = "nofile"; type = "soft"; value = "99999"; } item = "memlock";
{ domain = "@audio"; item = "nofile"; type = "hard"; value = "99999"; } type = "-";
{ domain = "*"; item = "nofile"; type = "-"; value = "524288"; } value = "unlimited";
{ domain = "*"; item = "memlock"; type = "-"; value = "524288"; } }
{
domain = "@audio";
item = "rtprio";
type = "-";
value = "99";
}
{
domain = "@audio";
item = "nofile";
type = "soft";
value = "99999";
}
{
domain = "@audio";
item = "nofile";
type = "hard";
value = "99999";
}
{
domain = "*";
item = "nofile";
type = "-";
value = "524288";
}
{
domain = "*";
item = "memlock";
type = "-";
value = "524288";
}
]; ];
polkit.enable = true; polkit.enable = true;
}; };
@ -138,8 +171,8 @@
nvidia.nvidiaSettings = true; nvidia.nvidiaSettings = true;
nvidia.modesetting.enable = true; nvidia.modesetting.enable = true;
opengl.enable = true; graphics.enable = true;
opengl.driSupport32Bit = true; graphics.enable32Bit = true;
bluetooth.enable = true; bluetooth.enable = true;
@ -173,10 +206,12 @@
internalInterfaces = ["ve-+"]; internalInterfaces = ["ve-+"];
}; };
interfaces.wlo1.ipv4.addresses = [ { interfaces.wlo1.ipv4.addresses = [
{
address = "192.168.156.101"; address = "192.168.156.101";
prefixLength = 24; prefixLength = 24;
} ]; }
];
defaultGateway = "192.168.156.1"; defaultGateway = "192.168.156.1";
nameservers = ["192.168.156.1" "8.8.8.8"]; nameservers = ["192.168.156.1" "8.8.8.8"];

View File

@ -1,5 +1,11 @@
{ config, pkgs, lib, self, inputs, ... }:
{ {
config,
pkgs,
lib,
self,
inputs,
...
}: {
# Users # Users
users.users.l-nafaryus = { users.users.l-nafaryus = {
isNormalUser = true; isNormalUser = true;
@ -15,8 +21,7 @@
home-manager.useUserPackages = true; home-manager.useUserPackages = true;
home-manager.backupFileExtension = "hmbackup"; home-manager.backupFileExtension = "hmbackup";
home-manager.users.l-nafaryus = { pkgs, ... }: home-manager.users.l-nafaryus = {pkgs, ...}: let
let
hmConfig = config.home-manager.users.l-nafaryus; hmConfig = config.home-manager.users.l-nafaryus;
in { in {
home.stateVersion = "23.11"; home.stateVersion = "23.11";
@ -37,7 +42,7 @@
xclip xclip
(firefox.override { extraNativeMessagingHosts = [ passff-host ]; }) (firefox.override {nativeMessagingHosts = [passff-host];})
thunderbird thunderbird
discord discord
@ -78,10 +83,8 @@
xtuner xtuner
aether-lv2 aether-lv2
qbittorrent qbittorrent
transmission-qt transmission_3-qt
telegram-desktop telegram-desktop
onlyoffice-bin onlyoffice-bin
@ -116,6 +119,7 @@
wl-clipboard wl-clipboard
cliphist cliphist
tree tree
self.packages.${pkgs.system}.bonvim
]; ];
xdg.portal = { xdg.portal = {
@ -129,6 +133,7 @@
]; ];
}; };
# Theme
catppuccin = { catppuccin = {
# global, for all enabled programs # global, for all enabled programs
enable = true; enable = true;
@ -145,17 +150,61 @@
}; };
programs = { programs = {
# General
fish = { fish = {
enable = true; enable = true;
interactiveShellInit = '' interactiveShellInit = ''
set fish_greeting set fish_greeting
''; '';
plugins = with pkgs.fishPlugins; map (p: { name = p.pname; src = p.src; }) [ plugins = with pkgs.fishPlugins;
map (p: {
name = p.pname;
src = p.src;
}) [
fzf-fish fzf-fish
tide # tide configure --auto --style=Lean --prompt_colors='True color' --show_time='12-hour format' --lean_prompt_height='Two lines' --prompt_connection=Disconnected --prompt_spacing=Compact --icons='Many icons' --transient=No tide
grc grc
hydro hydro
]; ];
functions = {
fish-theme-configure = ''
tide configure \
--auto \
--style=Lean \
--prompt_colors='True color' \
--show_time='12-hour format' \
--lean_prompt_height='Two lines' \
--prompt_connection=Disconnected \
--prompt_spacing=Compact \
--icons='Many icons' \
--transient=No
'';
};
};
git = {
enable = true;
lfs.enable = true;
userName = "L-Nafaryus";
userEmail = "l.nafaryus@gmail.com";
signing = {
key = "86F1EA98B48FFB19";
signByDefault = true;
};
extraConfig = {
# ignore trends
init.defaultBranch = "master";
core = {
quotePath = false;
commitGraph = true;
whitespace = "trailing-space";
};
receive.advertisePushOptions = true;
gc.writeCommitGraph = true;
diff.submodule = "log";
};
aliases = {
plog = "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit";
};
}; };
bat.enable = true; bat.enable = true;
btop = { btop = {
@ -175,6 +224,8 @@
mutableTrust = true; mutableTrust = true;
}; };
# Graphical
alacritty = { alacritty = {
enable = true; enable = true;
settings = { settings = {
@ -192,7 +243,9 @@
show-icons = true; show-icons = true;
disable-history = false; disable-history = false;
}; };
theme = let inherit (hmConfig.lib.formats.rasi) mkLiteral; in { theme = let
inherit (hmConfig.lib.formats.rasi) mkLiteral;
in {
"*" = { "*" = {
border-col = mkLiteral "#a6da95"; border-col = mkLiteral "#a6da95";
}; };
@ -215,6 +268,7 @@
}; };
services = { services = {
# General
gpg-agent = { gpg-agent = {
enable = true; enable = true;
defaultCacheTtl = 3600; defaultCacheTtl = 3600;
@ -225,6 +279,7 @@
enableBashIntegration = true; enableBashIntegration = true;
}; };
# Graphical
hypridle = { hypridle = {
enable = true; enable = true;
settings = { settings = {
@ -243,13 +298,218 @@
}; };
}; };
# --- wayland.windowManager.hyprland = {
enable = true;
settings = {
# Devices (use `hyprctl devices`)
"$monitor1" = "AOC Q27G2G3R3B 137P4HA000540";
"$monitor2" = "AOC Q27B3MA 17ZPAHA006135";
"$keyboard" = "keychron-keychron-k3-pro";
"$mouse" = "logitech-g102-lightsync-gaming-mouse";
# Main programs
"$terminal" = "${lib.getExe hmConfig.programs.alacritty.package}";
"$menu" = "${lib.getExe hmConfig.programs.rofi.package} -show drun";
"$fileManager" = "$terminal -e ${lib.getExe pkgs.nnn}";
monitor = [
"desc:$monitor2, 2560x1440@75, 0x0, auto"
"desc:$monitor1, 2560x1440@165, 2560x0, auto"
"Unknown-1, disable"
];
exec-once = [
"eww daemon"
"nm-applet --indicator &"
"blueman-applet &"
"wl-gammarelay-rs run &"
"systemctl --user start hypridle"
"wl-paste --type text --watch cliphist store" #Stores only text data
"wl-paste --type image --watch cliphist store" #Stores only image data
"swww-daemon & swww img ~/Pictures/wallpapers/emily-in-the-cyberpunk-city.3840x2160.png & swww img ~/Pictures/wallpapers/emily-in-the-cyberpunk-city.3840x2160a.gif"
];
env = [
"XCURSOR_SIZE,16"
"HYPRCURSOR_SIZE,16"
"WLR_DRM_NO_ATOMIC,1"
];
general = {
gaps_in = 2;
gaps_out = 2;
border_size = 2;
# https://wiki.hyprland.org/Configuring/Variables/#variable-types for info about colors
"col.active_border" = "rgba(33ccffee) rgba(00ff99ee) 45deg";
"col.inactive_border" = "rgba(595959aa)";
# Set to true enable resizing windows by clicking and dragging on borders and gaps
resize_on_border = true;
# Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on
allow_tearing = true;
layout = "dwindle";
};
decoration = {
rounding = 5;
# Change transparency of focused and unfocused windows
active_opacity = 1.0;
inactive_opacity = 0.95;
drop_shadow = true;
shadow_range = 4;
shadow_render_power = 3;
"col.shadow" = "rgba(1a1a1aee)";
# https://wiki.hyprland.org/Configuring/Variables/#blur
blur = {
enabled = true;
size = 3;
passes = 1;
vibrancy = 0.1696;
};
};
animations = {
enabled = true;
# Default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more
bezier = "myBezier, 0.05, 0.9, 0.1, 1.05";
animation = [
"windows, 1, 7, myBezier"
"windowsOut, 1, 7, default, popin 80%"
"border, 1, 10, default"
"borderangle, 1, 8, default"
"fade, 1, 7, default"
"workspaces, 1, 6, default"
];
};
# See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more
dwindle = {
pseudotile = true; # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below
preserve_split = true; # You probably want this
};
# See https://wiki.hyprland.org/Configuring/Master-Layout/ for more
master = {
new_status = "master";
};
# https://wiki.hyprland.org/Configuring/Variables/#misc
misc = {
force_default_wallpaper = -1; # Set to 0 or 1 to disable the anime mascot wallpapers
disable_hyprland_logo = false; # Enable the random hyprland logo / anime girl background. :)
};
input = {
kb_layout = "us,ru";
follow_mouse = 1;
sensitivity = 0; # -1.0 - 1.0, 0 means no modification.
touchpad = {
natural_scroll = false;
};
};
# https://wiki.hyprland.org/Configuring/Variables/#gestures
gestures = {
workspace_swipe = false;
};
windowrulev2 = [
"suppressevent maximize, class:.*" # You'll probably like this.
"float, class:^(steam_app.*)$"
"immediate, class:^(steam_app.*)$"
"float, class:^(steam_proton.*)$"
];
bind = [
"SUPER, Q, exec, $terminal"
"SUPER, N, exec, $fileManager"
"SUPER, R, exec, $menu"
"SUPER, P, exec, eww open --toggle basemenu"
"SUPER, C, killactive,"
"SUPER, M, exit,"
"SUPER, V, togglefloating,"
"SUPER, F, fullscreen,"
"SUPER, J, togglesplit," # dwindle
# Move focus with mainMod + arrow keys
"SUPER, left, movefocus, l"
"SUPER, right, movefocus, r"
"SUPER, up, movefocus, u"
"SUPER, down, movefocus, d"
# Switch workspaces with mainMod + [0-9]
"SUPER, 1, workspace, 1"
"SUPER, 2, workspace, 2"
"SUPER, 3, workspace, 3"
"SUPER, 4, workspace, 4"
"SUPER, 5, workspace, 5"
"SUPER, 6, workspace, 6"
"SUPER, 7, workspace, 7"
"SUPER, 8, workspace, 8"
"SUPER, 9, workspace, 9"
"SUPER, 0, workspace, 10"
# Move active window to a workspace with mainMod + SHIFT + [0-9]
"SUPER SHIFT, 1, movetoworkspace, 1"
"SUPER SHIFT, 2, movetoworkspace, 2"
"SUPER SHIFT, 3, movetoworkspace, 3"
"SUPER SHIFT, 4, movetoworkspace, 4"
"SUPER SHIFT, 5, movetoworkspace, 5"
"SUPER SHIFT, 6, movetoworkspace, 6"
"SUPER SHIFT, 7, movetoworkspace, 7"
"SUPER SHIFT, 8, movetoworkspace, 8"
"SUPER SHIFT, 9, movetoworkspace, 9"
"SUPER SHIFT, 0, movetoworkspace, 10"
# special workspace (scratchpad)
"SUPER, S, togglespecialworkspace, magic"
"SUPER SHIFT, S, movetoworkspace, special:magic"
"SUPER, SPACE, exec, hyprctl switchxkblayout keychron-keychron-k3-pro next"
", PRINT, exec, hyprshot -m region"
"SUPER, H, exec, cliphist list | rofi -dmenu | cliphist decode | wl-copy"
];
# Move/resize windows with mainMod + LMB/RMB and dragging
bindm = [
"SUPER, mouse:272, movewindow"
"SUPER, mouse:273, resizewindow"
];
bindel = [
", XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+"
", XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-"
];
bindl = [
", XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"
", XF86AudioPrev, exec, playerctl previous"
", XF86AudioPlay, exec, playerctl play-pause"
", XF86AudioNext, exec, playerctl next"
", XF86MonBrightnessDown, exec, busctl --user -- call rs.wl-gammarelay / rs.wl.gammarelay UpdateTemperature n -500"
", XF86MonBrightnessUp, exec, busctl --user -- call rs.wl-gammarelay / rs.wl.gammarelay UpdateTemperature n +500"
"SUPER, XF86MonBrightnessDown, exec, busctl --user -- call rs.wl-gammarelay / rs.wl.gammarelay Brightness d -0.1"
"SUPER, XF86MonBrightnessUp, exec, busctl --user -- call rs.wl-gammarelay / rs.wl.gammarelay Brightness d +0.1"
];
};
};
# XDG
xdg = { xdg = {
enable = true; enable = true;
mime.enable = true; mime.enable = true;
userDirs.enable = true; userDirs.enable = true;
}; };
# dconf
dconf.settings = { dconf.settings = {
"org/virt-manager/virt-manager/connections" = { "org/virt-manager/virt-manager/connections" = {
autoconnect = ["qemu:///system"]; autoconnect = ["qemu:///system"];
@ -260,34 +520,16 @@
home.sessionVariables = { home.sessionVariables = {
HYPRSHOT_DIR = "${hmConfig.xdg.userDirs.pictures}/screenshots"; HYPRSHOT_DIR = "${hmConfig.xdg.userDirs.pictures}/screenshots";
}; };
home.file = {
#"gnupg/gpg-agent.conf".text = ''
# default-cache-ttl 3600
# pinentry-program ${pkgs.pinentry.gtk2}/bin/pinentry
#'';
".config/git/config".source = "${config.bonfire.configDir}/git/config";
".config/nvim" = {
source = "${config.bonfire.configDir}/nvim";
recursive = true;
}; };
};
};
#programs.gnupg.agent = {
# enable = true;
# enableSSHSupport = true;
# pinentryPackage = pkgs.pinentry-gnome3;
#};
environment.variables = let environment.variables = let
makePluginPath = name: (lib.makeSearchPath name [ makePluginPath = name:
(lib.makeSearchPath name [
"/etc/profiles/per-user/$USER/lib" "/etc/profiles/per-user/$USER/lib"
"/run/current-system/sw/lib" "/run/current-system/sw/lib"
"$HOME/.nix-profile/lib" "$HOME/.nix-profile/lib"
]) + ":$HOME/.${name}"; ])
+ ":$HOME/.${name}";
in { in {
LADSPA_PATH = makePluginPath "ladspa"; LADSPA_PATH = makePluginPath "ladspa";
LV2_PATH = makePluginPath "lv2"; LV2_PATH = makePluginPath "lv2";
@ -304,8 +546,6 @@
programs.virt-manager.enable = true; programs.virt-manager.enable = true;
# Services # Services
services.spoofdpi.enable = true; services.spoofdpi.enable = true;
} }

View File

@ -1,12 +1,18 @@
{ config, pkgs, lib, self, ... }: {
let bonfire-pkgs = self.packages.${pkgs.system}; config,
pkgs,
lib,
self,
...
}: let
bonfire-pkgs = self.packages.${pkgs.system};
in { in {
system.stateVersion = "23.11"; system.stateVersion = "23.11";
imports = [ imports = [
./hardware.nix ./hardware.nix
./users.nix ./users.nix
./services/papermc.nix # ./services/papermc.nix # disabled
./services/gitea.nix ./services/gitea.nix
]; ];
@ -15,12 +21,19 @@ in {
settings = { settings = {
experimental-features = ["nix-command" "flakes"]; experimental-features = ["nix-command" "flakes"];
trusted-users = ["l-nafaryus"]; trusted-users = ["l-nafaryus"];
allowed-users = [ "l-nafaryus" ]; allowed-users = ["l-nafaryus" "hydra"];
substituters = ["https://nix-community.cachix.org"]; substituters = ["https://nix-community.cachix.org"];
trusted-public-keys = [ trusted-public-keys = [
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=" "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
]; ];
auto-optimise-store = true; auto-optimise-store = true;
allowed-uris = [
"github:"
"git+https://github.com/"
"git+ssh://github.com/"
"git+https://vcs.elnafo.ru/"
"git+ssh://vcs.elnafo.ru/"
];
}; };
gc = { gc = {
automatic = lib.mkDefault true; automatic = lib.mkDefault true;
@ -34,10 +47,6 @@ in {
hostPlatform = lib.mkDefault "x86_64-linux"; hostPlatform = lib.mkDefault "x86_64-linux";
config.allowUnfree = true; config.allowUnfree = true;
config.cudaSupport = false; config.cudaSupport = false;
config.packageOverrides = super: {
lego = bonfire-pkgs.lego;
};
}; };
# Services # Services
@ -122,6 +131,12 @@ in {
useACMEHost = "elnafo.ru"; useACMEHost = "elnafo.ru";
locations."/".root = "${bonfire-pkgs.bonfire-docs}"; locations."/".root = "${bonfire-pkgs.bonfire-docs}";
}; };
"hydra.elnafo.ru" = {
forceSSL = true;
useACMEHost = "elnafo.ru";
locations."/".proxyPass = "http://127.0.0.1:3000";
};
}; };
}; };
@ -196,6 +211,17 @@ in {
}; };
}; };
services.hydra = {
enable = true;
listenHost = "127.0.0.1";
port = 3000;
hydraURL = "http://127.0.0.1:3000";
smtpHost = "elnafo.ru";
useSubstitutes = true;
notificationSender = "hydra@elnafo.ru";
buildMachinesFiles = [];
};
# Packages # Packages
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
wget wget

View File

@ -1,5 +1,8 @@
{ config, lib, ... }:
{ {
config,
lib,
...
}: {
# Boot # Boot
boot = { boot = {
loader.systemd-boot.enable = true; loader.systemd-boot.enable = true;
@ -139,10 +142,12 @@
interfaces.enp9s0 = { interfaces.enp9s0 = {
useDHCP = false; useDHCP = false;
ipv4.addresses = [ { ipv4.addresses = [
{
address = "192.168.156.102"; address = "192.168.156.102";
prefixLength = 24; prefixLength = 24;
} ]; }
];
}; };
defaultGateway = "192.168.156.1"; defaultGateway = "192.168.156.1";

View File

@ -1,5 +1,4 @@
{ config, ... }: {config, ...}: {
{
services.postgresql = { services.postgresql = {
enable = true; enable = true;
authentication = '' authentication = ''
@ -103,5 +102,4 @@
}; };
}; };
}; };
} }

View File

@ -1,5 +1,9 @@
{ config, lib, pkgs, ... }: {
let config,
lib,
pkgs,
...
}: let
inherit (pkgs) stdenv fetchurl; inherit (pkgs) stdenv fetchurl;
playerlist = [ playerlist = [
@ -176,9 +180,17 @@ let
}; };
plugins = [ plugins = [
passky grimAnticheat viaVersion directionHUD miniMOTD skinsRestorer squaremap stargate chunky xclaim passky
grimAnticheat
viaVersion
directionHUD
miniMOTD
skinsRestorer
squaremap
stargate
chunky
xclaim
]; ];
in { in {
services.papermc = { services.papermc = {
enable = true; enable = true;
@ -202,9 +214,12 @@ in {
rconPasswordFile = config.sops.secrets."papermc/rcon".path; rconPasswordFile = config.sops.secrets."papermc/rcon".path;
whitelist = whitelist; whitelist = whitelist;
ops = operators; ops = operators;
extraPreStart = '' extraPreStart =
''
mkdir -p ${builtins.concatStringsSep " " (map (v: "plugins/${v.pname}") plugins)} mkdir -p ${builtins.concatStringsSep " " (map (v: "plugins/${v.pname}") plugins)}
'' + builtins.concatStringsSep "\n" (map (v: "ln -sf ${v.outPath}/bin/${v.pname}.jar plugins/") plugins) + '' ''
+ builtins.concatStringsSep "\n" (map (v: "ln -sf ${v.outPath}/bin/${v.pname}.jar plugins/") plugins)
+ ''
ln -sf ${config.bonfire.configDir}/goodomens/plugins/MiniMOTD/main.conf plugins/MiniMOTD/ ln -sf ${config.bonfire.configDir}/goodomens/plugins/MiniMOTD/main.conf plugins/MiniMOTD/
mkdir -p plugins/MiniMOTD/icons mkdir -p plugins/MiniMOTD/icons

View File

@ -1,5 +1,9 @@
{ config, pkgs, lib, ... }:
{ {
config,
pkgs,
lib,
...
}: {
# Users # Users
users.users.root.hashedPasswordFile = config.sops.secrets."users/root".path; users.users.root.hashedPasswordFile = config.sops.secrets."users/root".path;

View File

@ -1,5 +1,9 @@
{ lib, check ? true, self, ... }: {
rec { lib,
check ? true,
self,
...
}: rec {
modules = [ modules = [
./misc/bonfire/default.nix ./misc/bonfire/default.nix
./services/papermc.nix ./services/papermc.nix
@ -7,8 +11,11 @@ rec {
./services/spoofdpi.nix ./services/spoofdpi.nix
]; ];
configModule = { config, pkgs, ... }: { configModule = {
config,
pkgs,
...
}: {
config = { config = {
# Module type checking # Module type checking
_module.check = check; _module.check = check;

View File

@ -1,6 +1,10 @@
{ config, lib, ... }: {
with lib; config,
let cfg = config.bonfire; lib,
...
}:
with lib; let
cfg = config.bonfire;
in { in {
options = { options = {
bonfire = { bonfire = {
@ -31,15 +35,17 @@ in {
}; };
config = { config = {
assertions = mkIf cfg.withSecrets [{ assertions = mkIf cfg.withSecrets [
assertion = (builtins.pathExists ./secrets/default.nix); {
assertion = builtins.pathExists ./secrets/default.nix;
message = "Missed git submodule 'bonfire-secrets'"; message = "Missed git submodule 'bonfire-secrets'";
}]; }
];
environment.sessionVariables = { environment.sessionVariables = {
BONFIRE_HOME = cfg.home; BONFIRE_HOME = cfg.home;
}; };
bonfire.secrets = mkIf cfg.withSecrets (import ./secrets { inherit config; }); bonfire.secrets = mkIf cfg.withSecrets (import ./secrets {inherit config lib;});
}; };
} }

View File

@ -1,5 +1,7 @@
{ config }:
{ {
config,
lib,
}: {
catarina = { catarina = {
sops = { sops = {
defaultSopsFile = ./catarina.yaml; defaultSopsFile = ./catarina.yaml;
@ -10,18 +12,30 @@
"users/root" = {neededForUsers = true;}; "users/root" = {neededForUsers = true;};
"users/l-nafaryus" = {neededForUsers = true;}; "users/l-nafaryus" = {neededForUsers = true;};
"database/git" = { owner = "git"; group = "gitea"; }; "database/git" = {
owner = "git";
group = "gitea";
};
"mail/l-nafaryus" = {}; "mail/l-nafaryus" = {};
"mail/git" = {}; "mail/git" = {};
"mail/kirill" = {}; "mail/kirill" = {};
"gitea/mail" = { owner = "git"; group = "gitea"; }; "gitea/mail" = {
owner = "git";
group = "gitea";
};
"gitea-runner/master-token" = {}; "gitea-runner/master-token" = {};
"papermc/rcon" = { owner = "papermc"; group = "papermc"; }; "papermc/rcon" = lib.mkIf config.services.papermc.enable {
owner = "papermc";
group = "papermc";
};
discordToken = { owner = "oscuro"; group = "oscuro"; }; discordToken = {
owner = "oscuro";
group = "oscuro";
};
}; };
}; };

View File

@ -1,6 +1,10 @@
{ config, lib, pkgs, ... }: {
with lib; config,
let lib,
pkgs,
...
}:
with lib; let
cfg = config.services.papermc; cfg = config.services.papermc;
eulaFile = builtins.toFile "eula.txt" '' eulaFile = builtins.toFile "eula.txt" ''
@ -8,22 +12,32 @@ let
eula=true eula=true
''; '';
whitelistFile = pkgs.writeText "whitelist.json" whitelistFile =
pkgs.writeText "whitelist.json"
(builtins.toJSON cfg.whitelist); (builtins.toJSON cfg.whitelist);
opsFile = pkgs.writeText "ops.json" opsFile =
pkgs.writeText "ops.json"
(builtins.toJSON cfg.ops); (builtins.toJSON cfg.ops);
cfgToString = v: if builtins.isBool v then boolToString v else toString v; cfgToString = v:
if builtins.isBool v
then boolToString v
else toString v;
serverPropertiesFile = let serverPropertiesFile = let
serverProperties' = if (cfg.rconPasswordFile == null) then cfg.serverProperties else serverProperties' =
(removeAttrs cfg.serverProperties [ "rcon.password" ]); if (cfg.rconPasswordFile == null)
in pkgs.writeText "server.properties" ('' then cfg.serverProperties
else (removeAttrs cfg.serverProperties ["rcon.password"]);
in
pkgs.writeText "server.properties" (''
# server.properties managed by NixOS configuration # server.properties managed by NixOS configuration
'' + concatStringsSep "\n" (mapAttrsToList ''
(n: v: "${n}=${cfgToString v}") serverProperties') + + concatStringsSep "\n" (mapAttrsToList
lib.optionalString (cfg.rconPasswordFile != null) "\nrcon.password=#rconpass#"); (n: v: "${n}=${cfgToString v}")
serverProperties')
+ lib.optionalString (cfg.rconPasswordFile != null) "\nrcon.password=#rconpass#");
stopScript = pkgs.writeShellScript "minecraft-server-stop" '' stopScript = pkgs.writeShellScript "minecraft-server-stop" ''
echo stop > ${config.systemd.sockets.papermc.socketConfig.ListenFIFO} echo stop > ${config.systemd.sockets.papermc.socketConfig.ListenFIFO}
@ -39,14 +53,15 @@ let
serverPort = cfg.serverProperties.server-port or defaultServerPort; serverPort = cfg.serverProperties.server-port or defaultServerPort;
rconPort = if cfg.serverProperties.enable-rcon or false rconPort =
if cfg.serverProperties.enable-rcon or false
then cfg.serverProperties."rcon.port" or 25575 then cfg.serverProperties."rcon.port" or 25575
else null; else null;
queryPort = if cfg.serverProperties.enable-query or false queryPort =
if cfg.serverProperties.enable-query or false
then cfg.serverProperties."query.port" or 25565 then cfg.serverProperties."query.port" or 25565
else null; else null;
in { in {
options.services.papermc = { options.services.papermc = {
enable = mkEnableOption "PaperMC service"; enable = mkEnableOption "PaperMC service";
@ -127,7 +142,8 @@ in {
type = types.separatedString " "; type = types.separatedString " ";
default = "-Xmx2048M -Xms2048M"; default = "-Xmx2048M -Xms2048M";
# Example options from https://minecraft.gamepedia.com/Tutorials/Server_startup_script # Example options from https://minecraft.gamepedia.com/Tutorials/Server_startup_script
example = "-Xms4092M -Xmx4092M -XX:+UseG1GC -XX:+CMSIncrementalPacing " example =
"-Xms4092M -Xmx4092M -XX:+UseG1GC -XX:+CMSIncrementalPacing "
+ "-XX:+CMSClassUnloadingEnabled -XX:ParallelGCThreads=2 " + "-XX:+CMSClassUnloadingEnabled -XX:ParallelGCThreads=2 "
+ "-XX:MinHeapFreeRatio=5 -XX:MaxHeapFreeRatio=10"; + "-XX:MinHeapFreeRatio=5 -XX:MaxHeapFreeRatio=10";
description = "JVM options for the Minecraft server."; description = "JVM options for the Minecraft server.";
@ -204,7 +220,8 @@ in {
preStart = let preStart = let
replaceSecretBin = "${pkgs.replace-secret}/bin/replace-secret"; replaceSecretBin = "${pkgs.replace-secret}/bin/replace-secret";
in '' in
''
ln -sf ${eulaFile} eula.txt ln -sf ${eulaFile} eula.txt
cp -b --suffix=.stateful ${whitelistFile} whitelist.json cp -b --suffix=.stateful ${whitelistFile} whitelist.json
@ -216,19 +233,23 @@ in {
${lib.optionalString (cfg.rconPasswordFile != null) '' ${lib.optionalString (cfg.rconPasswordFile != null) ''
${replaceSecretBin} '#rconpass#' '${cfg.rconPasswordFile}' server.properties ${replaceSecretBin} '#rconpass#' '${cfg.rconPasswordFile}' server.properties
''} ''}
'' + cfg.extraPreStart; ''
+ cfg.extraPreStart;
}; };
networking.firewall = mkIf cfg.openFirewall ({ networking.firewall = mkIf cfg.openFirewall {
allowedUDPPorts = [serverPort]; allowedUDPPorts = [serverPort];
allowedTCPPorts = [ serverPort ] allowedTCPPorts =
[serverPort]
++ optional (queryPort != null) queryPort ++ optional (queryPort != null) queryPort
++ optional (rconPort != null) rconPort; ++ optional (rconPort != null) rconPort;
}); };
assertions = [ assertions = [
{ assertion = cfg.eula; {
message = "You must agree to Mojangs EULA to run minecraft-server." assertion = cfg.eula;
message =
"You must agree to Mojangs EULA to run minecraft-server."
+ " Read https://account.mojang.com/documents/minecraft_eula and" + " Read https://account.mojang.com/documents/minecraft_eula and"
+ " set `services.minecraft-server.eula` to `true` if you agree."; + " set `services.minecraft-server.eula` to `true` if you agree.";
} }

View File

@ -1,6 +1,10 @@
{ config, lib, pkgs, ... }: {
with lib; config,
let lib,
pkgs,
...
}:
with lib; let
cfg = config.services.qbittorrent-nox; cfg = config.services.qbittorrent-nox;
in { in {
options.services.qbittorrent-nox = { options.services.qbittorrent-nox = {
@ -113,7 +117,6 @@ in {
RemoveIPC = true; RemoveIPC = true;
PrivateMounts = true; PrivateMounts = true;
}; };
}; };
}; };
} }

View File

@ -1,6 +1,10 @@
{ config, lib, bonpkgs, ... }: {
with lib; config,
let lib,
bonpkgs,
...
}:
with lib; let
cfg = config.services.spoofdpi; cfg = config.services.spoofdpi;
in { in {
options.services.spoofdpi = { options.services.spoofdpi = {

View File

@ -3,8 +3,7 @@
lib, lib,
pkgs, pkgs,
... ...
}: }: let
let
version = bonfire.shortRev or bonfire.dirtyShortRev or "unknown"; version = bonfire.shortRev or bonfire.dirtyShortRev or "unknown";
projectPath = ../../.; projectPath = ../../.;
modulesPath = ../../nixosModules; modulesPath = ../../nixosModules;
@ -21,17 +20,27 @@ let
]; ];
formatDeclaration = declaration: formatDeclaration = declaration:
if lib.hasPrefix (toString modulesPath) (toString declaration) then if lib.hasPrefix (toString modulesPath) (toString declaration)
let subpath = lib.removePrefix (toString projectPath + "/") (toString declaration); then let
in map ({ hostname, url }: { subpath = lib.removePrefix (toString projectPath + "/") (toString declaration);
in
map ({
hostname,
url,
}: {
url = "${url}/${subpath}"; url = "${url}/${subpath}";
name = "<${hostname}:bonfire/${subpath}>"; name = "<${hostname}:bonfire/${subpath}>";
}) links })
links
else else
# skip external declarations # skip external declarations
lib.singleton declaration; lib.singleton declaration;
nixosModules = (import modulesPath { inherit lib; self = bonfire; check = false; }); nixosModules = import modulesPath {
inherit lib;
self = bonfire;
check = false;
};
evaluatedModules = lib.evalModules { evaluatedModules = lib.evalModules {
modules = nixosModules.modules ++ [nixosModules.configModule]; modules = nixosModules.modules ++ [nixosModules.configModule];
@ -43,10 +52,12 @@ let
"system" "system"
]; ];
transformOptions = option: option // { transformOptions = option:
option
// {
declarations = lib.unique ( declarations = lib.unique (
lib.flatten (map (declaration: formatDeclaration declaration) option.declarations) ++ lib.flatten (map (declaration: formatDeclaration declaration) option.declarations)
option.declarations ++ option.declarations
); );
}; };
documentType = "none"; documentType = "none";
@ -57,20 +68,30 @@ let
derivations = lib.flatten ( derivations = lib.flatten (
map (packages: ( map (packages: (
map (name: packages.${name}) (builtins.attrNames packages) map (name: packages.${name}) (builtins.attrNames packages)
)) (map (system: bonfire.packages.${system}) systems)); )) (map (system: bonfire.packages.${system}) systems)
renderMaintainers = maintainers: lib.concatStringsSep ", " (
let
maintainer = mt: if mt?github then "[${mt.name}](https://github.com/${mt.github})" else mt.name;
email = mt: if mt?email then "<[${mt.email}](mailto:${mt.email})>" else "";
in map (mt: maintainer mt + email mt) maintainers
); );
renderPlatforms = platforms: if platforms != lib.platforms.none then renderMaintainers = maintainers:
if platforms == lib.platforms.all then lib.concatStringsSep ", " (
"all" let
else maintainer = mt:
lib.concatStringsSep ", " (map (platform: "__${platform}__") platforms) if mt ? github
then "[${mt.name}](https://github.com/${mt.github})"
else mt.name;
email = mt:
if mt ? email
then "<[${mt.email}](mailto:${mt.email})>"
else "";
in
map (mt: maintainer mt + email mt) maintainers
);
renderPlatforms = platforms:
if platforms != lib.platforms.none
then
if platforms == lib.platforms.all
then "all"
else lib.concatStringsSep ", " (map (platform: "__${platform}__") platforms)
else ""; else "";
renderPackage = drv: '' renderPackage = drv: ''
@ -104,17 +125,26 @@ let
${lib.optionalString (drv.fromImage != null) "From: __${drv.fromImage.imageName}__"} ${lib.optionalString (drv.fromImage != null) "From: __${drv.fromImage.imageName}__"}
${lib.optionalString (drv.meta?license) "License: ${if lib.isList drv.meta.license then (map (license: "[${drv.meta.license.fullName}](${drv.meta.license.url})") drv.meta.license) else "[${drv.meta.license.fullName}](${drv.meta.license.url})"}"} ${lib.optionalString (drv.meta ? license) "License: ${
if lib.isList drv.meta.license
then (map (license: "[${drv.meta.license.fullName}](${drv.meta.license.url})") drv.meta.license)
else "[${drv.meta.license.fullName}](${drv.meta.license.url})"
}"}
${lib.optionalString (drv.meta ? maintainers) "Maintainers: ${renderMaintainers drv.meta.maintainers}"} ${lib.optionalString (drv.meta ? maintainers) "Maintainers: ${renderMaintainers drv.meta.maintainers}"}
${lib.optionalString (drv.meta ? platforms) "Platforms: ${renderPlatforms drv.meta.platforms}"} ${lib.optionalString (drv.meta ? platforms) "Platforms: ${renderPlatforms drv.meta.platforms}"}
''; '';
packagesDoc = pkgs.writeText "packages.md" packagesDoc =
pkgs.writeText "packages.md"
(lib.concatStringsSep "\n" (map (drv: (lib.concatStringsSep "\n" (map (drv:
if drv?imageTag then renderImage drv else renderPackage drv) derivations)); if drv ? imageTag
then renderImage drv
else if drv ? pname
then renderPackage drv
else "")
derivations));
in in
pkgs.stdenvNoCC.mkDerivation { pkgs.stdenvNoCC.mkDerivation {
pname = "bonfire-docs"; pname = "bonfire-docs";
@ -164,4 +194,3 @@ pkgs.stdenvNoCC.mkDerivation {
platforms = lib.platforms.all; platforms = lib.platforms.all;
}; };
} }

View File

@ -0,0 +1,16 @@
{
pkgs,
nixvim-pkgs,
bonconfigs,
fenix-pkgs,
...
}:
nixvim-pkgs.makeNixvimWithModule {
pkgs = pkgs;
module = import bonconfigs.bonvim;
extraSpecialArgs = {
rustc = fenix-pkgs.complete.rustc;
cargo = fenix-pkgs.complete.cargo;
rust-analyzer = fenix-pkgs.complete.rust-analyzer;
};
}

View File

@ -6,8 +6,8 @@
version ? "v0.44.0", version ? "v0.44.0",
hash ? "sha256-3u2GWgDQpa4sU/66vS6S+JwCEL/fvy8MTsATRs7RGVs=", hash ? "sha256-3u2GWgDQpa4sU/66vS6S+JwCEL/fvy8MTsATRs7RGVs=",
... ...
}: }: let
let pkg = { pkg = {
pname = "cargo-shuttle"; pname = "cargo-shuttle";
inherit version; inherit version;
@ -37,7 +37,9 @@ let pkg = {
maintainers = with bonfire.lib.maintainers; [L-Nafaryus]; maintainers = with bonfire.lib.maintainers; [L-Nafaryus];
}; };
}; };
in let cargoArtifacts = crane-lib.buildDepsOnly pkg; in let
in crane-lib.buildPackage ( cargoArtifacts = crane-lib.buildDepsOnly pkg;
in
crane-lib.buildPackage (
pkg // {inherit cargoArtifacts;} pkg // {inherit cargoArtifacts;}
) )

View File

@ -1,8 +1,11 @@
{ {
bonfire, bonfire,
stdenv, lib, pkgs, stdenv,
lib,
pkgs,
version ? "1.10.0", version ? "1.10.0",
sha256 ? "sha256-36GAGfvHZyNZe/Z7o3VrCCwApkZpJ+r2E8+1Hy32G5Q=", ... sha256 ? "sha256-36GAGfvHZyNZe/Z7o3VrCCwApkZpJ+r2E8+1Hy32G5Q=",
...
}: }:
pkgs.python3.pkgs.buildPythonPackage { pkgs.python3.pkgs.buildPythonPackage {
pname = "dearpygui"; pname = "dearpygui";

View File

@ -1,24 +1,29 @@
# self.packages.${system} # self.packages.${system}
# #
{ self, nixpkgs, ... }: {
let self,
forAllSystems = nixpkgs.lib.genAttrs [ "x86_64-linux" ]; inputs,
nixpkgsFor = forAllSystems (system: import nixpkgs { inherit system; }); ...
}: let
in forAllSystems(system: forAllSystems = inputs.nixpkgs.lib.genAttrs ["x86_64-linux"];
let nixpkgsFor = forAllSystems (system: import inputs.nixpkgs {inherit system;});
in
forAllSystems (system: let
pkgs = nixpkgsFor.${system}; pkgs = nixpkgsFor.${system};
bonfire = self; bonfire = self;
bonlib = self.lib; bonlib = self.lib;
bonpkgs = self.packages.${system}; bonpkgs = self.packages.${system};
bonconfigs = self.configurations;
crane = self.inputs.crane; crane = self.inputs.crane;
crane-lib = self.inputs.crane.mkLib pkgs; crane-lib = self.inputs.crane.mkLib pkgs;
fenix = self.inputs.fenix; fenix = self.inputs.fenix;
in { fenix-pkgs = self.inputs.fenix.packages.${system};
nixvim-pkgs = self.inputs.nixvim.legacyPackages.${system};
in {
bonfire-docs = pkgs.callPackage ./bonfire-docs {inherit bonfire;}; bonfire-docs = pkgs.callPackage ./bonfire-docs {inherit bonfire;};
netgen = pkgs.callPackage ./netgen {inherit bonfire;}; netgen = pkgs.callPackage ./netgen {inherit bonfire;};
@ -38,5 +43,6 @@ in forAllSystems(system:
nix-minimal = pkgs.callPackage ./nix-minimal {inherit bonpkgs bonlib;}; nix-minimal = pkgs.callPackage ./nix-minimal {inherit bonpkgs bonlib;};
nix-runner = pkgs.callPackage ./nix-runner {inherit bonpkgs bonlib;}; nix-runner = pkgs.callPackage ./nix-runner {inherit bonpkgs bonlib;};
bonvim = import ./bonvim {inherit nixvim-pkgs pkgs bonconfigs fenix-pkgs;};
}) })
# map (ps: (map (p: { name = p; systems = [ ps.${p}.system ]; type = if ps.${p}?imageTag then "image" else "package"; }) (builtins.attrNames ps))) (map (s: bf.packages.${s}) (builtins.attrNames bf.packages))

View File

@ -1,10 +1,13 @@
{ {
bonfire, bonfire,
lib, lib,
fetchFromGitHub, buildGoModule, nixosTests, fetchFromGitHub,
buildGoModule,
nixosTests,
version ? "c847ac4a4c55d6a5a457f6ef494cf45a47299e01", version ? "c847ac4a4c55d6a5a457f6ef494cf45a47299e01",
hash ? "sha256-g9OxhM+iNUrAZgM1we8qPsismPy5a0eN654tSYuM/No=", hash ? "sha256-g9OxhM+iNUrAZgM1we8qPsismPy5a0eN654tSYuM/No=",
vendorHash ? "sha256-wG0x86lptEY3x+7kVN7v1XZniliMOxaJ6Y95YS6ivJY=", ... vendorHash ? "sha256-wG0x86lptEY3x+7kVN7v1XZniliMOxaJ6Y95YS6ivJY=",
...
}: }:
buildGoModule rec { buildGoModule rec {
pname = "lego"; pname = "lego";

View File

@ -1,10 +1,13 @@
{ {
bonfire, bonfire,
stdenv, lib, pkgs, stdenv,
lib,
pkgs,
version ? "6.2.2402", version ? "6.2.2402",
sha256 ? "sha256-o3cj5k2VtYiGcs9Z9FyfwtOpDlZZlcO3kRgBSer6KAw=", ... sha256 ? "sha256-o3cj5k2VtYiGcs9Z9FyfwtOpDlZZlcO3kRgBSer6KAw=",
}: ...
let pkg = stdenv.mkDerivation { }: let
pkg = stdenv.mkDerivation {
pname = "netgen"; pname = "netgen";
inherit version; inherit version;
@ -35,7 +38,8 @@ let pkg = stdenv.mkDerivation {
cmake cmake
ninja ninja
git git
(python3.withPackages (ps: with ps; [ (python3.withPackages (ps:
with ps; [
pybind11 pybind11
mpi4py mpi4py
])) ]))
@ -69,4 +73,5 @@ let pkg = stdenv.mkDerivation {
broken = pkgs.stdenv.isDarwin; broken = pkgs.stdenv.isDarwin;
}; };
}; };
in pkg in
pkg

View File

@ -4,24 +4,32 @@
bonlib, bonlib,
extraPaths ? [], extraPaths ? [],
... ...
}: }: let
let
nixPath = pkgs.writeText "nixpkgsError" '' _: throw ''' nixPath = pkgs.writeText "nixpkgsError" '' _: throw '''
This container doesn't include nixpkgs. This container doesn't include nixpkgs.
Hint: override the NIX_PATH environment variable with eg: Hint: override the NIX_PATH environment variable with eg:
"NIX_PATH=nixpkgs=channel:nixos-unstable" "NIX_PATH=nixpkgs=channel:nixos-unstable"
''' ''; ''' '';
builderIds = let forEach = n: if n == 1 then [n] else [n] ++ forEach (n - 1); in forEach 32; builderIds = let
forEach = n:
if n == 1
then [n]
else [n] ++ forEach (n - 1);
in
forEach 32;
withFakeNss = with pkgs; [ withFakeNss = with pkgs; [
(writeTextDir "etc/passwd" ( (writeTextDir "etc/passwd" (
builtins.concatStringsSep "\n" ( builtins.concatStringsSep "\n" (
map (n: "nixbld${toString n}:x:${toString (30000 + n)}:30000:Nix build user ${toString n}:/var/empty:/bin/false") builderIds) map (n: "nixbld${toString n}:x:${toString (30000 + n)}:30000:Nix build user ${toString n}:/var/empty:/bin/false") builderIds
+ "\n" + '' )
+ "\n"
+ ''
root:x:0:0:System administrator:/root:${bashInteractive}/bin/bash root:x:0:0:System administrator:/root:${bashInteractive}/bin/bash
nobody:x:65534:65534:Unprivileged account (don't use!):/var/empty:${shadow}/bin/nologin nobody:x:65534:65534:Unprivileged account (don't use!):/var/empty:${shadow}/bin/nologin
'')) ''
))
(writeTextDir "etc/group" '' (writeTextDir "etc/group" ''
root:x:0: root:x:0:
@ -71,15 +79,16 @@ let
trusted-users = root trusted-users = root
'') '')
]; ];
in
in pkgs.dockerTools.buildImageWithNixDb { pkgs.dockerTools.buildImageWithNixDb {
name = "nix-minimal"; name = "nix-minimal";
tag = "latest"; tag = "latest";
copyToRoot = pkgs.buildEnv { copyToRoot = pkgs.buildEnv {
name = "image-root"; name = "image-root";
pathsToLink = ["/bin" "/etc"]; pathsToLink = ["/bin" "/etc"];
paths = with pkgs; [ paths = with pkgs;
[
dockerTools.usrBinEnv dockerTools.usrBinEnv
coreutils coreutils
@ -96,10 +105,14 @@ in pkgs.dockerTools.buildImageWithNixDb {
pythonSupport = false; pythonSupport = false;
withpcre2 = false; withpcre2 = false;
withManual = false; withManual = false;
}).overrideAttrs (_: { doInstallCheck = false; })) })
.overrideAttrs (_: {doInstallCheck = false;}))
iana-etc iana-etc
] ++ withFakeNss ++ withNixConf ++ extraPaths; ]
++ withFakeNss
++ withNixConf
++ extraPaths;
}; };
runAsRoot = with pkgs; '' runAsRoot = with pkgs; ''
@ -120,7 +133,8 @@ in pkgs.dockerTools.buildImageWithNixDb {
"NIX_PATH=nixpkgs=${nixPath}" "NIX_PATH=nixpkgs=${nixPath}"
]; ];
}; };
} // { }
// {
meta = with lib; { meta = with lib; {
homepage = "https://vcs.elnafo.ru/L-Nafaryus/bonfire"; homepage = "https://vcs.elnafo.ru/L-Nafaryus/bonfire";
description = "Minimal image with a Nix package manager"; description = "Minimal image with a Nix package manager";

View File

@ -14,16 +14,21 @@ pkgs.dockerTools.buildImage {
copyToRoot = pkgs.buildEnv { copyToRoot = pkgs.buildEnv {
name = "image-root"; name = "image-root";
pathsToLink = ["/bin"]; pathsToLink = ["/bin"];
paths = with pkgs; [ paths = with pkgs;
[
nodejs nodejs
jq jq
cachix cachix
] ++ extraPaths; ]
++ extraPaths;
}; };
config.Cmd = ["/bin/bash"]; config.Cmd = ["/bin/bash"];
} // { }
meta = bonpkgs.nix-minimal.meta // { // {
meta =
bonpkgs.nix-minimal.meta
// {
description = "Image for action runners with a Nix package manager"; description = "Image for action runners with a Nix package manager";
longDescription = '' longDescription = ''
Docker image for action runners with Nix package manager (https://nixos.org/). Docker image for action runners with Nix package manager (https://nixos.org/).

View File

@ -1,16 +1,18 @@
{ {
bonfire, bonfire,
stdenv, lib, pkgs, stdenv,
lib,
pkgs,
version ? "11.20240116", version ? "11.20240116",
sha256 ? "sha256-bNWlza3cL/lUrwrVEmPECvKbFkwR2rTMaccsn8amGFQ=", ... sha256 ? "sha256-bNWlza3cL/lUrwrVEmPECvKbFkwR2rTMaccsn8amGFQ=",
}: ...
let }: let
version' = lib.strings.splitString "." version; version' = lib.strings.splitString "." version;
major = lib.elemAt version' 0; major = lib.elemAt version' 0;
revision = lib.elemAt version' 1; revision = lib.elemAt version' 1;
realname = "OpenFOAM"; realname = "OpenFOAM";
in in let
let pkg = stdenv.mkDerivation { pkg = stdenv.mkDerivation {
pname = "openfoam"; pname = "openfoam";
inherit version major; inherit version major;
@ -81,4 +83,5 @@ let pkg = stdenv.mkDerivation {
broken = pkgs.stdenv.isDarwin; broken = pkgs.stdenv.isDarwin;
}; };
}; };
in pkg in
pkg

View File

@ -1,9 +1,11 @@
{ {
bonfire, bonfire,
lib, pkgs, lib,
pkgs,
version ? "0.8", version ? "0.8",
hash ? "sha256-kPCdOZl4m7KBb970TjJokXorKfnCvuV5Uq7lFQIh1z8=", hash ? "sha256-kPCdOZl4m7KBb970TjJokXorKfnCvuV5Uq7lFQIh1z8=",
vendorHash ? "sha256-ib9xRklkLfrDCuLf7zDkJE8lJiNiUMPZ01MDxvqho6o=", ... vendorHash ? "sha256-ib9xRklkLfrDCuLf7zDkJE8lJiNiUMPZ01MDxvqho6o=",
...
}: }:
pkgs.buildGoModule { pkgs.buildGoModule {
pname = "spoofdpi"; pname = "spoofdpi";

View File

@ -1,11 +1,18 @@
{ {
bonfire, bonfire,
lib, stdenv, lib,
fetchFromGitHub, wrapQtAppsHook, stdenv,
extra-cmake-modules, cmake, fetchFromGitHub,
file, jdk17, wrapQtAppsHook,
copyDesktopItems, makeDesktopItem, extra-cmake-modules,
xorg, libpulseaudio, libGL cmake,
file,
jdk17,
copyDesktopItems,
makeDesktopItem,
xorg,
libpulseaudio,
libGL,
}: }:
stdenv.mkDerivation rec { stdenv.mkDerivation rec {
version = "faf3c966c43465d6f6c245ed78556222240398ee"; version = "faf3c966c43465d6f6c245ed78556222240398ee";
@ -43,7 +50,8 @@ stdenv.mkDerivation rec {
# TODO: fix broken data directory location # TODO: fix broken data directory location
postInstall = let postInstall = let
libpath = with xorg; lib.makeLibraryPath [ libpath = with xorg;
lib.makeLibraryPath [
libX11 libX11
libXext libXext
libXcursor libXcursor

View File

@ -3,11 +3,18 @@
inputs = { inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
crane = { url = "github:ipetkov/crane"; inputs.nixpkgs.follows = "nixpkgs"; }; crane = {
url = "github:ipetkov/crane";
inputs.nixpkgs.follows = "nixpkgs";
};
}; };
outputs = inputs @ { self, nixpkgs, crane, ... }: outputs = inputs @ {
let self,
nixpkgs,
crane,
...
}: let
forAllSystems = nixpkgs.lib.genAttrs ["x86_64-linux"]; forAllSystems = nixpkgs.lib.genAttrs ["x86_64-linux"];
nixpkgsFor = forAllSystems (system: import nixpkgs {inherit system;}); nixpkgsFor = forAllSystems (system: import nixpkgs {inherit system;});
in { in {
@ -15,7 +22,8 @@
my-crate = let my-crate = let
pkgs = nixpkgsFor.${system}; pkgs = nixpkgsFor.${system};
craneLib = crane.lib.${system}; craneLib = crane.lib.${system};
in craneLib.buildPackage { in
craneLib.buildPackage {
src = craneLib.cleanCargoSource (craneLib.path ./.); src = craneLib.cleanCargoSource (craneLib.path ./.);
strictDeps = true; strictDeps = true;
@ -28,7 +36,10 @@
checks = forAllSystems (system: { checks = forAllSystems (system: {
inherit (self.packages.${system}.my-crate); inherit (self.packages.${system}.my-crate);
my-crate-fmt = let craneLib = crane.lib.${system}; in craneLib.cargoFmt { my-crate-fmt = let
craneLib = crane.lib.${system};
in
craneLib.cargoFmt {
src = craneLib.cleanCargoSource (craneLib.path ./.); src = craneLib.cleanCargoSource (craneLib.path ./.);
}; };
}); });
@ -48,5 +59,4 @@
}; };
}); });
}; };
} }