Initial commit

This commit is contained in:
2025-09-01 14:21:12 +03:00
commit 5787dcd528
47 changed files with 3079 additions and 0 deletions

16
modules/hm/docker.nix Normal file
View File

@@ -0,0 +1,16 @@
{
osConfig,
lib,
...
}:
{
home.file = lib.mkIf (osConfig.networking.hostName != "fenixpc") {
fenixpcDockerContext = {
enable = true;
target = ".docker/contexts/meta/02db303260eb60b1d5cf88ef7f50e894d1573f2beafe3551def02353d6982a0c/meta.json";
text = ''
{"Name":"fenixpc","Metadata":{},"Endpoints":{"docker":{"Host":"tcp://192.168.1.2:2375","SkipTLSVerify":true}}}
'';
};
};
}

38
modules/hm/git.nix Normal file
View File

@@ -0,0 +1,38 @@
{ lib, ... }:
{
programs = {
git = {
userName = lib.mkDefault "derfenix";
userEmail = lib.mkDefault "derfenix@gmail.com";
extraConfig = {
core = {
hookspath = "/home/fenix/.git_settings/hooks";
};
url = {
"git@git.derfenix.pro:" = {
insteadOf = "https://git.derfenix.pro";
};
};
init = {
defaultBranch = "master";
};
protocol = {
"git" = {
allow = "always";
};
};
extensions = {
objectFormat = "sha256";
};
};
signing = {
format = "openpgp";
signByDefault = lib.mkDefault true;
key = lib.mkDefault "DD89337AFABD013FDD57A0F133445FB510D677DF";
};
};
};
}

33
modules/hm/gpg.nix Normal file
View File

@@ -0,0 +1,33 @@
{
lib,
pkgs,
config,
osConfig,
...
}:
{
programs = {
gpg = {
mutableKeys = false;
mutableTrust = false;
publicKeys = [
];
};
};
services = {
gpg-agent = {
enable = config.programs.gpg.enable;
enableFishIntegration = true;
enableZshIntegration = true;
enableSshSupport = true;
enableScDaemon = true;
# pinentryPackage = pkgs.pinentry-qt;
extraConfig = lib.mkIf osConfig.services.desktopManager.plasma6.enable ''
pinentry-program ${pkgs.kwalletcli}/bin/pinentry-kwallet
'';
};
};
}

41
modules/hm/neovim.nix Normal file
View File

@@ -0,0 +1,41 @@
{
pkgs,
...
}:
{
programs.neovim = {
defaultEditor = true;
viAlias = true;
vimAlias = true;
coc = {
enable = true;
settings = {
};
};
extraPackages = with pkgs; [
universal-ctags
];
extraConfig = ''
set number relativenumber
set list
set listchars=tab:\ ,space:·,nbsp:,trail:,eol:,precedes:«,extends:»
set ts=2
set softtabstop=2
set shiftwidth=2
set smarttab
set smartindent
set autoindent
colorscheme zaibatsu
'';
plugins = with pkgs.vimPlugins; [
vim-nix
nerdtree
neogit
mru
tagbar
];
};
}

77
modules/hm/pt.nix Normal file
View File

@@ -0,0 +1,77 @@
{
lib,
config,
pkgs,
...
}:
let
devFolder = "~/dev/PT";
conf = config.pt;
in
{
options = {
pt = {
enable = lib.mkOption {
type = lib.types.bool;
default = false;
};
};
};
config = lib.mkIf conf.enable {
home.packages = with pkgs; [
mattermost-desktop
];
programs = {
git = {
extraConfig = {
url = {
"git@gitlab.ptsecurity.com:" = {
insteadOf = "https://gitlab.ptsecurity.com";
};
};
};
includes = [
{
condition = "gitdir:${devFolder}";
contents = {
user = {
name = "Sergey Kostyuchenko";
email = "skostyuchenko@ptsecurity.com";
signingkey = "0x0574DBAF";
};
commit = {
gpgsign = true;
};
gpg = {
format = "x509";
};
};
}
];
};
};
home.file.ptDevStIgnore = {
enable = true;
target = lib.removePrefix "~/" (devFolder + "/.stignore");
text = ''
**/.devenv/
**/.direnv/
'';
};
services.syncthing.settings = {
folders = {
"PTDev" = {
id = "pt-dev";
type = "sendreceive";
enabled = true;
label = "PTDev";
path = devFolder;
};
};
};
};
}

73
modules/hm/ssh.nix Normal file
View File

@@ -0,0 +1,73 @@
{ ... }:
{
programs = {
ssh = {
matchBlocks = {
"router" = {
user = "admin";
hostname = "192.168.1.1";
port = 2222;
controlPersist = "10m";
addKeysToAgent = "9h";
compression = false;
forwardAgent = false;
serverAliveInterval = 0;
serverAliveCountMax = 3;
hashKnownHosts = false;
userKnownHostsFile = "~/.ssh/known_hosts";
controlMaster = "auto";
controlPath = "~/.ssh/master-%r@%n:%p";
};
"aur" = {
hostname = "aur.archlinux.org";
identityFile = "~/.ssh/id_rsa-aur";
user = "aur";
controlPersist = "10m";
addKeysToAgent = "9h";
compression = true;
forwardAgent = false;
serverAliveInterval = 0;
serverAliveCountMax = 3;
hashKnownHosts = false;
userKnownHostsFile = "~/.ssh/known_hosts";
controlMaster = "auto";
controlPath = "~/.ssh/master-%r@%n:%p";
};
"vpn1" = {
# https://bill.pq.hosting/billmgr
user = "root";
hostname = "45.120.178.159";
controlPersist = "10m";
addKeysToAgent = "9h";
compression = true;
forwardAgent = false;
serverAliveInterval = 0;
serverAliveCountMax = 3;
hashKnownHosts = false;
userKnownHostsFile = "~/.ssh/known_hosts";
controlMaster = "auto";
controlPath = "~/.ssh/master-%r@%n:%p";
};
"vpn2" = {
# https://my.msk.host/billing/my-services
user = "root";
hostname = "194.67.193.95";
controlPersist = "10m";
addKeysToAgent = "9h";
compression = true;
forwardAgent = false;
serverAliveInterval = 0;
serverAliveCountMax = 3;
hashKnownHosts = false;
userKnownHostsFile = "~/.ssh/known_hosts";
controlMaster = "auto";
controlPath = "~/.ssh/master-%r@%n:%p";
};
};
};
};
}

79
modules/hm/syncthing.nix Normal file
View File

@@ -0,0 +1,79 @@
{
lib,
hosts,
...
}:
{
services.syncthing = {
guiAddress = lib.mkDefault "127.0.0.1:8384";
overrideDevices = false;
overrideFolders = false;
cert = "~/.config/syncthing/cert";
key = "~/.config/syncthing/key";
settings = {
folders = {
"Sync" = {
id = "default";
type = "sendreceive";
enabled = lib.mkDefault true;
label = "Sync";
path = "~/Sync";
};
"Documents" = {
id = "ikwrq-ahv5a";
type = "sendreceive";
enabled = lib.mkDefault false;
label = "Documents";
path = "~/Documents";
};
"Music" = {
id = "6ytyt-ngvta";
type = "sendreceive";
enabled = lib.mkDefault false;
label = "Music";
path = "~/Music";
};
"Obsidian" = {
id = "hyeaf-ygups";
type = "sendreceive";
enabled = lib.mkDefault false;
label = "Obsidian";
path = "~/Obsidian";
};
"Camera S25" = {
id = "sm-s938b_9wbf-фото";
enabled = lib.mkDefault false;
type = "receiveonly";
label = "Camera S25";
path = "~/Photos/S25";
};
"PhotoArchive" = {
id = "6detn-xjbco";
type = "receiveonly";
enabled = lib.mkDefault false;
label = "PhotoArchive";
path = "~/Photos/archive";
ignorePerms = true;
};
"books" = {
id = "6st45-t9jej";
type = "sendreceive";
enabled = lib.mkDefault false;
label = "Books";
path = "/mnt/hdd/Books";
};
};
devices = lib.mapAttrs (
name: host:
lib.mkIf (host ? syncthing) {
addresses = [
"tcp://${host.ip}:22000"
];
id = host.syncthing;
}
) hosts;
};
};
}

77
modules/hm/vivaldi.nix Normal file
View File

@@ -0,0 +1,77 @@
{
pkgs,
lib,
config,
osConfig,
...
}:
let
conf = config.programs.vivaldi;
in
{
config = lib.mkIf conf.enable {
home.file.vivaldiKDEScript = {
target = ".local/bin/vivaldi-kde.sh";
text = ''
#!/bin/sh
vivaldi --profile-directory=$(qdbus org.kde.ActivityManager /ActivityManager/Activities org.kde.ActivityManager.Activities.ActivityName $(qdbus org.kde.ActivityManager /ActivityManager/Activities org.kde.ActivityManager.Activities.CurrentActivity)) "$@"
'';
executable = true;
};
programs.vivaldi = {
nativeMessagingHosts =
[ ]
++ lib.optionals (osConfig.services.desktopManager.plasma6.enable) [
pkgs.kdePackages.plasma-browser-integration
];
};
xdg.desktopEntries = {
vivaldi-stable-kde = {
name = "Vivaldi-KDE";
settings = {
OnlyShowIn = "KDE";
};
genericName = "Web Browser for KDE";
exec = "${config.home.file.vivaldiKDEScript.source} %U";
terminal = false;
actions = {
"newPrivateWindow" = {
name = "New Private Window";
exec = "${config.home.file.vivaldiKDEScript.source} --incognito --remote";
};
"newWindow" = {
name = "New Window";
exec = "${config.home.file.vivaldiKDEScript.source} --new-window";
};
};
icon = "vivaldi";
startupNotify = true;
categories = [
"Application"
"Network"
"WebBrowser"
];
mimeType = [
"application/pdf"
"application/rdf+xml"
"application/rss+xml"
"application/xhtml+xml"
"application/xhtml_xml"
"application/xml"
"image/gif"
"image/jpeg"
"image/png"
"image/webp"
"text/html"
"text/xml"
"x-scheme-handler/ftp"
"x-scheme-handler/http"
"x-scheme-handler/https"
"x-scheme-handler/mailto"
];
};
};
};
}

View File

@@ -0,0 +1,64 @@
{
pkgs,
lib,
config,
...
}:
{
programs.vscode = {
package = pkgs.vscodium;
profiles = {
default = {
extensions = (import ./extensions { inherit pkgs config lib; });
globalSnippets = {
fixme = {
body = [
"$LINE_COMMENT FIXME: $0"
];
description = "Insert a FIXME remark";
prefix = [
"fixme"
];
};
todo = {
body = [
"$LINE_COMMENT TODO: $0"
];
description = "Insert a TODO remark";
prefix = [
"todo"
];
};
};
languageSnippets = {
go = { };
};
keybindings = [
# {
# key = "ctrl+c";
# command = "editor.action.clipboardCopyAction";
# when = "textInputFocus";
# }
];
userTasks = { };
# userSettings = builtins.fromJSON (builtins.readFile ./settings.json);
};
};
};
xdg.mimeApps.defaultApplications = {
"x-scheme-handler/vscodium" = [
"codium-url-handler.desktop"
];
"x-scheme-handler/codium" = [
"codium-url-handler.desktop"
];
"x-scheme-handler/vscode" = [
"codium-url-handler.desktop"
];
};
}

View File

@@ -0,0 +1,36 @@
{
pkgs,
lib,
go ? true,
nix ? true,
...
}:
with pkgs.vscode-extensions;
[
dracula-theme.theme-dracula
# vscodevim.vim
yzhang.markdown-all-in-one
(lib.optionals go golang.go)
(lib.optionals nix jnoortheen.nix-ide)
mkhl.direnv
gitlab.gitlab-workflow
(pkgs.vscode-utils.buildVscodeMarketplaceExtension {
mktplcRef = {
name = "vscode-docker";
publisher = "ms-azuretools";
version = "1.29.4";
sha256 = "1nhrp43gh4pwsdy0d8prndx2l0mrczf1kirjl1figrmhcp7h4q4g";
};
})
(pkgs.vscode-utils.buildVscodeMarketplaceExtension {
mktplcRef = {
name = "yandex-code-assist";
publisher = "yandex";
version = "0.11.17";
};
vsix = builtins.path {
path = ./yandex-code-assist.zip;
};
})
]

Binary file not shown.

View File

@@ -0,0 +1,199 @@
{
"files.autoSave": "afterDelay",
"chat.editor.fontSize": 16,
"window.autoDetectHighContrast": false,
"workbench.settings.applyToAllProfiles": [
"window.autoDetectColorScheme",
"editor.formatOnSave"
],
"git.autofetch": true,
"editor.formatOnSave": true,
"files.autoSaveWhenNoErrors": true,
"go.coverOnSingleTestFile": true,
"go.coverShowCounts": true,
"go.formatTool": "gofmt",
"go.installDependenciesWhenBuilding": true,
"go.lintTool": "golangci-lint",
"go.languageServerFlags": [],
"workbench.colorTheme": "Dracula Theme Soft",
"window.zoomLevel": 1.2,
"editor.minimap.showSlider": "always",
"editor.minimap.size": "fit",
"go.editorContextMenuCommands": {
"fillStruct": true,
"removeTags": true,
"testPackage": true,
"testFile": true,
"generateTestForFile": true,
"generateTestForPackage": true,
"benchmarkAtCursor": true
},
"go.testFlags": [
"-race",
"-v"
],
"go.toolsEnvVars": {},
"go.toolsGopath": "",
"gopls": {
"ui.codelenses": {
"tidy": true,
"generate": true,
"test": true,
"vulncheck": true,
"upgrade_dependency": true
},
"ui.completion.experimentalPostfixCompletions": true,
"ui.semanticTokens": true
},
"git.allowForcePush": true,
"git.branchPrefix": "sub-task/",
"git.enableSmartCommit": true,
"git.fetchOnPull": true,
"git.followTagsWhenSync": true,
"git.mergeEditor": true,
"git.timeline.showUncommitted": true,
"github.gitProtocol": "ssh",
"telemetry.telemetryLevel": "all",
"testing.coverageToolbarEnabled": true,
"go.testEnvVars": {},
"gitlab.duoCodeSuggestions.enabled": false,
"gitlab.duoCodeSuggestions.enabledSupportedLanguages": {
"c": false,
"cpp": false,
"csharp": false,
"go": false,
"handlebars": false,
"haml": false,
"java": false,
"javascript": false,
"javascriptreact": false,
"kotlin": false,
"python": false,
"php": false,
"ruby": false,
"rust": false,
"scala": false,
"shellscript": false,
"sql": false,
"swift": false,
"typescript": false,
"typescriptreact": false,
"svelte": false,
"terraform": false,
"terragrunt": false,
"vue": false
},
"redhat.telemetry.enabled": true,
"go.testTags": null,
"diffEditor.renderSideBySide": true,
"diffEditor.experimental.showMoves": true,
"docker.composeCommand": "docker compose",
"docker.contexts.showInStatusBar": true,
"workbench.editor.autoLockGroups": {
"mainThreadWebview-markdown.preview": true
},
"workbench.editor.pinnedTabsOnSeparateRow": true,
"workbench.editor.sharedViewState": true,
"workbench.editor.wrapTabs": true,
"window.menuBarVisibility": "toggle",
"window.density.editorTabHeight": "compact",
"workbench.tree.renderIndentGuides": "always",
"workbench.settings.openDefaultSettings": true,
"explorer.confirmDelete": false,
"git.confirmSync": false,
"gitlab.duoChat.enabled": false,
"gitlab.duoCodeSuggestions.openTabsContext": false,
"gitlab.duo.enabledWithoutGitlabProject": false,
"gitlab.customQueries": [
{
"name": "Issues assigned to me",
"type": "issues",
"scope": "assigned_to_me",
"state": "opened",
"noItemText": "No issues assigned to you."
},
{
"name": "Issues created by me",
"type": "issues",
"scope": "created_by_me",
"state": "opened",
"noItemText": "No issues created by you."
},
{
"name": "Merge requests assigned to me",
"type": "merge_requests",
"scope": "assigned_to_me",
"state": "opened",
"noItemText": "No merge requests assigned to you."
},
{
"name": "Merge requests I'm reviewing",
"type": "merge_requests",
"reviewer": "<current_user>",
"state": "opened",
"noItemText": "No merge requests for you to review."
},
{
"name": "Merge requests created by me",
"type": "merge_requests",
"scope": "created_by_me",
"state": "opened",
"noItemText": "No merge requests created by you."
},
{
"name": "All project merge requests",
"type": "merge_requests",
"scope": "all",
"state": "opened",
"noItemText": "The project has no merge requests"
}
],
"nix.serverPath": "/etc/profiles/per-user/fenix/bin/nil",
"nix.formatterPath": "/etc/profiles/per-user/fenix/bin/nixfmt",
"nix.serverSettings": {
"nil": {
"formatting": {
"command": [
"nixfmt"
]
}
}
},
"markdown-mermaid.lightModeTheme": "forest",
"extensions.experimental.affinity": {
"asvetliakov.vscode-neovim": 1
},
"workbench.preferredDarkColorTheme": "Catppuccin Macchiato",
"window.autoDetectColorScheme": true,
"go.diagnostic.vulncheck": "Imports",
"go.inlayHints.compositeLiteralFields": true,
"go.inlayHints.constantValues": true,
"editor.semanticHighlighting.enabled": true,
"regroupImports.organization": "gitlab.ptsecurity.com",
"go.coverMode": "atomic",
"nix.enableLanguageServer": true,
"window.newWindowProfile": "Default",
"protoc": {},
"go.buildTags": "integration",
"workbench.preferredLightColorTheme": "Catppuccin Latte",
"cSpell.userWords": [
"логгер",
"логгирования",
"Appender",
"fenix",
"Prepender",
"zaptest"
],
"cSpell.spellCheckOnlyWorkspaceFiles": true,
"chat.commandCenter.enabled": false,
"catppuccin.accentColor": "flamingo",
"rest-client.showResponseInDifferentTab": true,
"cSpell.language": "en,ru",
"cSpell.ignoreRegExpList": [
"/\\/\\/nolint:[a-z]+/g",
"/import \\([^)]+\\)/g"
],
"cSpell.enabledFileTypes": {
"ignore": false
}
}

62
modules/hm/zsh.nix Normal file
View File

@@ -0,0 +1,62 @@
{ lib, ... }:
{
programs.zsh = {
autosuggestion = {
enable = true;
strategy = [
"history"
"completion"
];
};
syntaxHighlighting.enable = lib.mkDefault true;
autocd = true;
# defaultKeymap = "vicmd";
dirHashes = { };
shellAliases = {
"ll" = "ls -l";
"sc" = "systemctl";
"ssc" = "sudo systemctl";
"scu" = "systemctl --user";
};
shellGlobalAliases = {
UUID = "$(uuidgen | tr -d \\n)";
G = "| grep";
};
zsh-abbr = {
enable = true;
abbreviations = {
};
globalAbbreviations = {
};
};
oh-my-zsh = {
enable = lib.mkDefault true;
plugins = [
"git"
"ssh"
"sudo"
"z"
"golang"
"direnv"
"kubectl"
"docker"
"docker-compose"
"helm"
"themes"
"aliases"
"alias-finder"
"rsync"
];
theme = lib.mkDefault "agnoster";
};
initContent = ''
zstyle ':omz:plugins:alias-finder' autoload yes
zstyle ':omz:plugins:alias-finder' longer no
zstyle ':omz:plugins:alias-finder' exact yes
zstyle ':omz:plugins:alias-finder' cheaper yes
'';
};
}