This commit is contained in:
2026-05-30 19:03:33 +09:00
parent f5ecef894d
commit 5f1cfc5275
155 changed files with 4168 additions and 300 deletions
+23
View File
@@ -0,0 +1,23 @@
{
lib,
config,
...
}:
let
cfg = config.my.applications.btop;
in
{
imports = [
./system.nix
./home.nix
];
options.my.applications.btop = {
enable = lib.mkEnableOption "btop system monitor";
};
config = lib.mkIf cfg.enable {
my.applications.btop.system.enable = lib.mkDefault true;
my.applications.btop.homeManager.enable = lib.mkDefault true;
};
}
+89
View File
@@ -0,0 +1,89 @@
#Bashtop theme with nord palette (https://www.nordtheme.com)
#by Justin Zobel <[email protected]>
# Colors should be in 6 or 2 character hexadecimal or single spaced rgb decimal: "#RRGGBB", "#BW" or "0-255 0-255 0-255"
# example for white: "#ffffff", "#ff" or "255 255 255".
# All graphs and meters can be gradients
# For single color graphs leave "mid" and "end" variable empty.
# Use "start" and "end" variables for two color gradient
# Use "start", "mid" and "end" for three color gradient
# Main background, empty for terminal default, need to be empty if you want transparent background
theme[main_bg]="#282A36"
# Main text color
theme[main_fg]="#BD93F9"
# Title color for boxes
theme[title]="#f8f8f2"
# Higlight color for keyboard shortcuts
theme[hi_fg]="#ff79c6"
# Background color of selected item in processes box
theme[selected_bg]="#44475A"
# Foreground color of selected item in processes box
theme[selected_fg]="#ECEFF4"
# Color of inactive/disabled text
theme[inactive_fg]="#6272a4"
# Misc colors for processes box including mini cpu graphs, details memory graph and details status text
theme[proc_misc]="#BD93F9"
# Cpu box outline color
theme[cpu_box]="#ff79c6"
# Memory/disks box outline color
theme[mem_box]="#ff79c6"
# Net up/down box outline color
theme[net_box]="#ff79c6"
# Processes box outline color
theme[proc_box]="#ff79c6"
# Box divider line and small boxes line color
theme[div_line]="#ff79c6"
# Temperature graph colors
theme[temp_start]="#bd93f9"
theme[temp_mid]="#bd93f9"
theme[temp_end]="#bd93f9"
# CPU graph colors
theme[cpu_start]="#bd93f9"
theme[cpu_mid]="#bd93f9"
theme[cpu_end]="#bd93f9"
# Mem/Disk free meter
theme[free_start]="#bd93f9"
theme[free_mid]="#bd93f9"
theme[free_end]="#bd93f9"
# Mem/Disk cached meter
theme[cached_start]="#bd93f9"
theme[cached_mid]="#bd93f9"
theme[cached_end]="#bd93f9"
# Mem/Disk available meter
theme[available_start]="#bd93f9"
theme[available_mid]="#bd93f9"
theme[available_end]="#bd93f9"
# Mem/Disk used meter
theme[used_start]="#bd93f9"
theme[used_mid]="#bd93f9"
theme[used_end]="#bd93f9"
# Download graph colors
theme[download_start]="#bd93f9"
theme[download_mid]="#bd93f9"
theme[download_end]="#bd93f9"
# Upload graph colors
theme[upload_start]="#bd93f9"
theme[upload_mid]="#bd93f9"
theme[upload_end]="#bd93f9"
+25
View File
@@ -0,0 +1,25 @@
{
lib,
config,
...
}:
let
cfg = config.my.applications.btop.homeManager;
in
{
options.my.applications.btop.homeManager = {
enable = lib.mkEnableOption "btop home-manager configuration";
};
config.home-manager.sharedModules = [
{
config = lib.mkIf cfg.enable {
programs.btop = {
enable = true;
settings.color_theme = "dracula";
themes.dracula = builtins.readFile ./dracula.theme;
};
};
}
];
}
+20
View File
@@ -0,0 +1,20 @@
{
pkgs,
lib,
config,
...
}:
let
cfg = config.my.applications.btop.system;
in
{
options.my.applications.btop.system = {
enable = lib.mkEnableOption "btop system configuration";
};
config = lib.mkIf cfg.enable {
environment.systemPackages = with pkgs; [
btop # Resource monitor that shows usage and stats
];
};
}
+46
View File
@@ -0,0 +1,46 @@
{
pkgs,
lib,
config,
...
}:
let
cfg = config.my.applications.chrome;
in
{
options.my.applications.chrome = {
enable = lib.mkEnableOption "Google Chrome browser";
};
config = lib.mkIf cfg.enable {
nixpkgs.config.allowUnfree = true;
home-manager.sharedModules = [
{
home.packages = with pkgs; [
google-chrome # Popular web browser from Google
];
xdg.desktopEntries."google-chrome" = {
name = "Google Chrome";
genericName = "Web Browser";
exec = "${pkgs.google-chrome}/bin/google-chrome-stable --enable-features=TouchpadOverscrollHistoryNavigation %U";
terminal = false;
icon = "google-chrome";
categories = [
"Network"
"WebBrowser"
];
startupNotify = true;
type = "Application";
};
xdg.mimeApps.defaultApplications = {
"text/html" = "google-chrome.desktop";
"x-scheme-handler/http" = "google-chrome.desktop";
"x-scheme-handler/https" = "google-chrome.desktop";
};
}
];
};
}
+23
View File
@@ -0,0 +1,23 @@
{
lib,
config,
...
}:
let
cfg = config.my.applications.claude;
in
{
imports = [
./system.nix
./home.nix
];
options.my.applications.claude = {
enable = lib.mkEnableOption "Claude Code AI assistant";
};
config = lib.mkIf cfg.enable {
my.applications.claude.system.enable = lib.mkDefault true;
my.applications.claude.homeManager.enable = lib.mkDefault true;
};
}
+27
View File
@@ -0,0 +1,27 @@
{
lib,
config,
...
}:
let
cfg = config.my.applications.claude.homeManager;
in
{
options.my.applications.claude.homeManager = {
enable = lib.mkEnableOption "Claude Code home-manager configuration";
};
config.home-manager.sharedModules = [
{
config = lib.mkIf cfg.enable {
home.file.".claude/settings.json".text = builtins.toJSON {
statusLine = {
type = "command";
command = "bun x ccusage statusline --no-offline";
padding = 0;
};
};
};
}
];
}
+21
View File
@@ -0,0 +1,21 @@
{
pkgs,
inputs,
lib,
config,
...
}:
let
cfg = config.my.applications.claude.system;
in
{
options.my.applications.claude.system = {
enable = lib.mkEnableOption "Claude Code system configuration";
};
config = lib.mkIf cfg.enable {
environment.systemPackages = [
inputs.llm-agents.packages.${pkgs.stdenv.hostPlatform.system}.claude-code # AI coding assistant
];
};
}
+32
View File
@@ -0,0 +1,32 @@
{
imports = [
./btop
./chrome.nix
./claude
./direnv.nix
./discord.nix
./docker.nix
./fcitx5
./ghostty
./git
./gnupg.nix
./greetd.nix
./gtk
./java.nix
./kde.nix
./nautilus.nix
./niri
./noctalia
./openssh.nix
./ssh
./swayidle.nix
./tailscale.nix
./vicinae.nix
./vim
./vscode
./wayland.nix
./zellij
./zoom.nix
./zsh
];
}
+16
View File
@@ -0,0 +1,16 @@
{ lib, config, ... }:
let
cfg = config.my.applications.direnv;
in
{
options.my.applications.direnv = {
enable = lib.mkEnableOption "direnv environment variable manager";
};
config = lib.mkIf cfg.enable {
programs.direnv = {
enable = true;
nix-direnv.enable = true;
};
};
}
+23
View File
@@ -0,0 +1,23 @@
{
lib,
config,
...
}:
let
cfg = config.my.applications.discord;
in
{
options.my.applications.discord = {
enable = lib.mkEnableOption "Discord (Vesktop)";
};
config = lib.mkIf cfg.enable {
home-manager.sharedModules = [
{
programs.vesktop = {
enable = true;
};
}
];
};
}
+34
View File
@@ -0,0 +1,34 @@
{
pkgs,
lib,
config,
...
}:
let
cfg = config.my.applications.docker;
in
{
options.my.applications.docker = {
enable = lib.mkEnableOption "Docker container runtime";
};
config = lib.mkIf cfg.enable {
virtualisation.docker = {
enable = true;
autoPrune = {
enable = true;
dates = "weekly";
};
daemon.settings = {
ipv6 = true;
"fixed-cidr-v6" = "fd00:30::/64";
ip6tables = true;
};
};
environment.systemPackages = with pkgs; [
docker # Container runtime
oxker # Docker TUI Tool
];
};
}
+69
View File
@@ -0,0 +1,69 @@
[Hotkey]
# トリガーキーを押すたびに切り替える
EnumerateWithTriggerKeys=False
# 一時的に第1入力メソッドに切り替える
AltTriggerKeys=
# 切り替え時は第1入力メソッドをスキップする
EnumerateSkipFirst=False
# Time limit in milliseconds for triggering modifier key shortcuts
ModifierOnlyKeyTimeout=250
[Hotkey/TriggerKeys]
1=Zenkaku_Hankaku
[Hotkey/ActivateKeys]
0=Henkan
[Hotkey/DeactivateKeys]
0=Muhenkan
[Hotkey/PrevPage]
0=Up
[Hotkey/NextPage]
0=Down
[Hotkey/PrevCandidate]
0=Shift+Tab
[Hotkey/NextCandidate]
0=Tab
[Hotkey/TogglePreedit]
0=Control+Alt+P
[Behavior]
# デフォルトで有効にする
ActiveByDefault=False
# フォーカス時に状態をリセット
resetStateWhenFocusIn=No
# 入力状態を共有する
ShareInputState=No
# アプリケーションにプリエディットを表示する
PreeditEnabledByDefault=True
# 入力メソッドを切り替える際に入力メソッドの情報を表示する
ShowInputMethodInformation=True
# フォーカスを変更する際に入力メソッドの情報を表示する
showInputMethodInformationWhenFocusIn=False
# 入力メソッドの情報をコンパクトに表示する
CompactInputMethodInformation=True
# 第1入力メソッドの情報を表示する
ShowFirstInputMethodInformation=True
# デフォルトのページサイズ
DefaultPageSize=5
# XKB オプションより優先する
OverrideXkbOption=False
# カスタム XKB オプション
CustomXkbOption=
# Force Enabled Addons
EnabledAddons=
# Force Disabled Addons
DisabledAddons=
# Preload input method to be used by default
PreloadInputMethod=True
# パスワード欄に入力メソッドを許可する
AllowInputMethodForPassword=False
# パスワード入力時にプリエディットテキストを表示する
ShowPreeditForPassword=False
# ユーザーデータを保存する間隔(分)
AutoSavePeriod=30
+23
View File
@@ -0,0 +1,23 @@
{
lib,
config,
...
}:
let
cfg = config.my.applications.fcitx5;
in
{
imports = [
./system.nix
./home.nix
];
options.my.applications.fcitx5 = {
enable = lib.mkEnableOption "fcitx5 input method";
};
config = lib.mkIf cfg.enable {
my.applications.fcitx5.system.enable = lib.mkDefault true;
my.applications.fcitx5.homeManager.enable = lib.mkDefault true;
};
}
+24
View File
@@ -0,0 +1,24 @@
{
lib,
config,
...
}:
let
cfg = config.my.applications.fcitx5.homeManager;
in
{
options.my.applications.fcitx5.homeManager = {
enable = lib.mkEnableOption "fcitx5 home-manager configuration";
};
config.home-manager.sharedModules = [
{
config = lib.mkIf cfg.enable {
home.file.".config/fcitx5/config" = {
recursive = true;
source = ./config;
};
};
}
];
}
+48
View File
@@ -0,0 +1,48 @@
{
pkgs,
lib,
config,
...
}:
let
cfg = config.my.applications.fcitx5.system;
in
{
options.my.applications.fcitx5.system = {
enable = lib.mkEnableOption "fcitx5 system configuration";
};
config = lib.mkIf cfg.enable {
i18n.inputMethod = {
enable = true;
type = "fcitx5";
fcitx5 = {
waylandFrontend = true;
addons = with pkgs; [
fcitx5-mozc-ut
fcitx5-gtk
kdePackages.fcitx5-qt
qt6Packages.fcitx5-configtool
];
settings.inputMethod = {
GroupOrder = {
"0" = "Default";
};
"Groups/0" = {
Name = "Default";
"Default Layout" = "jp";
DefaultIM = "mozc";
};
"Groups/0/Items/0" = {
Name = "keyboard-jp";
Layout = "";
};
"Groups/0/Items/1" = {
Name = "mozc";
Layout = "";
};
};
};
};
};
}
+31
View File
@@ -0,0 +1,31 @@
theme = dracula
background-blur-radius = 20
background-opacity = 0.9
font-family = BlexMono Nerd Font Mono
mouse-hide-while-typing = true
window-decoration = true
# keybind
# Copy/Paste
keybind = ctrl+shift+c=copy_to_clipboard
keybind = ctrl+shift+v=paste_from_clipboard
# create new tab
keybind = ctrl+shift+t=new_tab
# move tabs
keybind = ctrl+alt+left_bracket=previous_tab
keybind = ctrl+alt+right_bracket=next_tab
# close tab
keybind = ctrl+alt+q=close_window
# font size
keybind = ctrl+shift+semicolon=increase_font_size:1
keybind = ctrl+shift+minus=increase_font_size:1
shell-integration-features = ssh-terminfo,ssh-env
+23
View File
@@ -0,0 +1,23 @@
{
lib,
config,
...
}:
let
cfg = config.my.applications.ghostty;
in
{
imports = [
./system.nix
./home.nix
];
options.my.applications.ghostty = {
enable = lib.mkEnableOption "ghostty terminal emulator";
};
config = lib.mkIf cfg.enable {
my.applications.ghostty.system.enable = lib.mkDefault true;
my.applications.ghostty.homeManager.enable = lib.mkDefault true;
};
}
@@ -0,0 +1,45 @@
# MIT License
#
# Copyright (c) 2023 Dracula Theme
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
# SOFTWARE.
palette = 0=#21222c
palette = 1=#ff5555
palette = 2=#50fa7b
palette = 3=#f1fa8c
palette = 4=#bd93f9
palette = 5=#ff79c6
palette = 6=#8be9fd
palette = 7=#f8f8f2
palette = 8=#6272a4
palette = 9=#ff6e6e
palette = 10=#69ff94
palette = 11=#ffffa5
palette = 12=#d6acff
palette = 13=#ff92df
palette = 14=#a4ffff
palette = 15=#ffffff
background = #282a36
foreground = #f8f8f2
cursor-color = #f8f8f2
cursor-text = #282a36
selection-foreground = #f8f8f2
selection-background = #44475a
+29
View File
@@ -0,0 +1,29 @@
{
lib,
config,
...
}:
let
cfg = config.my.applications.ghostty.homeManager;
in
{
options.my.applications.ghostty.homeManager = {
enable = lib.mkEnableOption "ghostty home-manager configuration";
};
config.home-manager.sharedModules = [
{
config = lib.mkIf cfg.enable {
home.file.".config/ghostty/config" = {
recursive = true;
source = ./config;
};
home.file.".config/ghostty/themes/dracula" = {
recursive = true;
source = ./dracula.theme;
};
};
}
];
}
+20
View File
@@ -0,0 +1,20 @@
{
pkgs,
lib,
config,
...
}:
let
cfg = config.my.applications.ghostty.system;
in
{
options.my.applications.ghostty.system = {
enable = lib.mkEnableOption "ghostty system configuration";
};
config = lib.mkIf cfg.enable {
environment.systemPackages = with pkgs; [
unstable.ghostty # A fast and minimal terminal emulator for Wayland
];
};
}
+33
View File
@@ -0,0 +1,33 @@
{
lib,
config,
...
}:
let
cfg = config.my.applications.git;
in
{
imports = [
./system.nix
./home.nix
];
options.my.applications.git = {
enable = lib.mkEnableOption "git version control";
userName = lib.mkOption {
type = lib.types.str;
default = "moons-14";
description = "Git user name";
};
userEmail = lib.mkOption {
type = lib.types.str;
default = "moons@moons14.com";
description = "Git user email";
};
};
config = lib.mkIf cfg.enable {
my.applications.git.system.enable = lib.mkDefault true;
my.applications.git.homeManager.enable = lib.mkDefault true;
};
}
+59
View File
@@ -0,0 +1,59 @@
{
lib,
config,
...
}:
let
cfg = config.my.applications.git;
hmCfg = config.my.applications.git.homeManager;
in
{
options.my.applications.git.homeManager = {
enable = lib.mkEnableOption "git home-manager configuration";
};
config.home-manager.sharedModules = [
{
config = lib.mkIf hmCfg.enable {
programs.git = {
enable = true;
ignores = [
".direnv/"
".envrc"
"!.envrc.example"
];
signing = {
key = "~/.ssh/id_ed25519.pub";
signByDefault = true;
};
settings = {
user.name = cfg.userName;
user.email = cfg.userEmail;
push.default = "simple";
credential.helper = "cache --timeout=7200";
init.defaultBranch = "main";
log.decorate = "full";
log.date = "iso";
merge.conflictStyle = "diff3";
gpg.format = "ssh";
tag.gpgSign = true;
alias = {
br = "branch --sort=-committerdate";
co = "checkout";
df = "diff";
com = "commit -a";
gs = "stash";
gp = "pull";
lg = "log --graph --pretty=format:'%Cred%h%Creset - %C(yellow)%d%Creset %s %C(green)(%cr)%C(bold blue) <%an>%Creset' --abbrev-commit";
st = "status";
};
};
};
};
}
];
}
+20
View File
@@ -0,0 +1,20 @@
{
pkgs,
lib,
config,
...
}:
let
cfg = config.my.applications.git.system;
in
{
options.my.applications.git.system = {
enable = lib.mkEnableOption "git system configuration";
};
config = lib.mkIf cfg.enable {
environment.systemPackages = with pkgs; [
git # Distributed version control system
];
};
}
+16
View File
@@ -0,0 +1,16 @@
{ lib, config, ... }:
let
cfg = config.my.applications.gnupg;
in
{
options.my.applications.gnupg = {
enable = lib.mkEnableOption "GnuPG agent";
};
config = lib.mkIf cfg.enable {
programs.gnupg.agent = {
enable = true;
enableSSHSupport = false;
};
};
}
+26
View File
@@ -0,0 +1,26 @@
{
pkgs,
lib,
config,
...
}:
let
cfg = config.my.applications.greetd;
in
{
options.my.applications.greetd = {
enable = lib.mkEnableOption "greetd login manager";
};
config = lib.mkIf cfg.enable {
services.greetd = {
enable = true;
settings = {
default_session = {
user = "greeter";
command = "${pkgs.tuigreet}/bin/tuigreet --time --remember --cmd niri-session";
};
};
};
};
}
+25
View File
@@ -0,0 +1,25 @@
{
lib,
config,
...
}:
let
cfg = config.my.applications.gtk;
in
{
imports = [
./system.nix
./home.nix
];
options.my.applications.gtk = {
enable = lib.mkEnableOption "GTK theme configuration";
system.enable = lib.mkEnableOption "GTK system configuration";
homeManager.enable = lib.mkEnableOption "GTK home-manager configuration";
};
config = lib.mkIf cfg.enable {
my.applications.gtk.system.enable = lib.mkDefault true;
my.applications.gtk.homeManager.enable = lib.mkDefault true;
};
}
+36
View File
@@ -0,0 +1,36 @@
{
pkgs,
lib,
config,
...
}:
let
cfg = config.my.applications.gtk.homeManager;
in
{
options.my.applications.gtk.homeManager = {
enable = lib.mkEnableOption "GTK home-manager configuration";
};
config.home-manager.sharedModules = [
{
config = lib.mkIf cfg.enable {
gtk = {
enable = true;
theme = {
name = "Dracula";
package = pkgs.dracula-theme;
};
cursorTheme = {
package = pkgs.adwaita-icon-theme;
name = "Adwaita";
};
iconTheme = {
package = pkgs.papirus-icon-theme;
name = "Papirus-Dark";
};
};
};
}
];
}
+14
View File
@@ -0,0 +1,14 @@
{ lib, config, ... }:
let
cfg = config.my.applications.gtk.system;
in
{
options.my.applications.gtk.system = {
enable = lib.mkEnableOption "GTK system configuration";
};
config = lib.mkIf cfg.enable {
programs.dconf.enable = true;
programs.seahorse.enable = true;
};
}
+21
View File
@@ -0,0 +1,21 @@
{
pkgs,
lib,
config,
...
}:
let
cfg = config.my.applications.java;
in
{
options.my.applications.java = {
enable = lib.mkEnableOption "Java runtime";
};
config = lib.mkIf cfg.enable {
programs.java = {
enable = true;
package = pkgs.jdk25;
};
};
}
+19
View File
@@ -0,0 +1,19 @@
{
lib,
config,
...
}:
let
cfg = config.my.applications.kde;
in
{
options.my.applications.kde = {
enable = lib.mkEnableOption "KDE Connect";
};
config = lib.mkIf cfg.enable {
programs.kdeconnect = {
enable = true;
};
};
}
+22
View File
@@ -0,0 +1,22 @@
{
pkgs,
lib,
config,
...
}:
let
cfg = config.my.applications.nautilus;
in
{
options.my.applications.nautilus = {
enable = lib.mkEnableOption "Nautilus file manager";
};
config = lib.mkIf cfg.enable {
environment.systemPackages = with pkgs; [
nautilus # GNOME file manager
gvfs # GNOME virtual file system
sushi # Nautilus file previewer
];
};
}
+23
View File
@@ -0,0 +1,23 @@
{
lib,
config,
...
}:
let
cfg = config.my.applications.niri;
in
{
imports = [
./system.nix
./home.nix
];
options.my.applications.niri = {
enable = lib.mkEnableOption "niri window manager";
};
config = lib.mkIf cfg.enable {
my.applications.niri.system.enable = lib.mkDefault true;
my.applications.niri.homeManager.enable = lib.mkDefault true;
};
}
@@ -0,0 +1,166 @@
{
"Mod+Shift+Slash".action.show-hotkey-overlay = { };
"XF86AudioRaiseVolume" = {
allow-when-locked = true;
action.spawn = [
"wpctl"
"set-volume"
"@DEFAULT_AUDIO_SINK@"
"0.1+"
];
};
"XF86AudioLowerVolume" = {
allow-when-locked = true;
action.spawn = [
"wpctl"
"set-volume"
"@DEFAULT_AUDIO_SINK@"
"0.1-"
];
};
"XF86AudioMute" = {
allow-when-locked = true;
action.spawn = [
"wpctl"
"set-mute"
"@DEFAULT_AUDIO_SINK@"
"toggle"
];
};
"XF86AudioMicMute" = {
allow-when-locked = true;
action.spawn = [
"wpctl"
"set-mute"
"@DEFAULT_AUDIO_SOURCE@"
"toggle"
];
};
"Mod+Q".action.close-window = { };
"Mod+Left".action.focus-column-left = { };
"Mod+Down".action.focus-window-down = { };
"Mod+Up".action.focus-window-up = { };
"Mod+Right".action.focus-column-right = { };
"Mod+H".action.focus-column-left = { };
"Mod+J".action.focus-window-down = { };
"Mod+K".action.focus-window-up = { };
"Mod+L".action.focus-column-right = { };
"Mod+Ctrl+Left".action.move-column-left = { };
"Mod+Ctrl+Down".action.move-window-down = { };
"Mod+Ctrl+Up".action.move-window-up = { };
"Mod+Ctrl+Right".action.move-column-right = { };
"Mod+Ctrl+H".action.move-column-left = { };
"Mod+Ctrl+J".action.move-window-down = { };
"Mod+Ctrl+K".action.move-window-up = { };
"Mod+Ctrl+L".action.move-column-right = { };
"Mod+Home".action.focus-column-first = { };
"Mod+End".action.focus-column-last = { };
"Mod+Ctrl+Home".action.move-column-to-first = { };
"Mod+Ctrl+End".action.move-column-to-last = { };
"Mod+Shift+Left".action.focus-monitor-left = { };
"Mod+Shift+Down".action.focus-monitor-down = { };
"Mod+Shift+Up".action.focus-monitor-up = { };
"Mod+Shift+Right".action.focus-monitor-right = { };
"Mod+Shift+H".action.focus-monitor-left = { };
"Mod+Shift+J".action.focus-monitor-down = { };
"Mod+Shift+K".action.focus-monitor-up = { };
"Mod+Shift+L".action.focus-monitor-right = { };
"Mod+Shift+Ctrl+Left".action.move-column-to-monitor-left = { };
"Mod+Shift+Ctrl+Down".action.move-column-to-monitor-down = { };
"Mod+Shift+Ctrl+Up".action.move-column-to-monitor-up = { };
"Mod+Shift+Ctrl+Right".action.move-column-to-monitor-right = { };
"Mod+Shift+Ctrl+H".action.move-column-to-monitor-left = { };
"Mod+Shift+Ctrl+J".action.move-column-to-monitor-down = { };
"Mod+Shift+Ctrl+K".action.move-column-to-monitor-up = { };
"Mod+Shift+Ctrl+L".action.move-column-to-monitor-right = { };
"Mod+Page_Down".action.focus-workspace-down = { };
"Mod+Page_Up".action.focus-workspace-up = { };
"Mod+U".action.focus-workspace-down = { };
"Mod+I".action.focus-workspace-up = { };
"Mod+Ctrl+Page_Down".action.move-column-to-workspace-down = { };
"Mod+Ctrl+Page_Up".action.move-column-to-workspace-up = { };
"Mod+Ctrl+U".action.move-column-to-workspace-down = { };
"Mod+Ctrl+I".action.move-column-to-workspace-up = { };
"Mod+Shift+Page_Down".action.move-workspace-down = { };
"Mod+Shift+Page_Up".action.move-workspace-up = { };
"Mod+Shift+U".action.move-workspace-down = { };
"Mod+Shift+I".action.move-workspace-up = { };
"Mod+WheelScrollDown" = {
cooldown-ms = 150;
action.focus-workspace-down = { };
};
"Mod+WheelScrollUp" = {
cooldown-ms = 150;
action.focus-workspace-up = { };
};
"Mod+Ctrl+WheelScrollDown" = {
cooldown-ms = 150;
action.move-column-to-workspace-down = { };
};
"Mod+Ctrl+WheelScrollUp" = {
cooldown-ms = 150;
action.move-column-to-workspace-up = { };
};
"Mod+WheelScrollRight".action.focus-column-right = { };
"Mod+WheelScrollLeft".action.focus-column-left = { };
"Mod+Ctrl+WheelScrollRight".action.move-column-right = { };
"Mod+Ctrl+WheelScrollLeft".action.move-column-left = { };
"Mod+Shift+WheelScrollDown".action.focus-column-right = { };
"Mod+Shift+WheelScrollUp".action.focus-column-left = { };
"Mod+Ctrl+Shift+WheelScrollDown".action.move-column-right = { };
"Mod+Ctrl+Shift+WheelScrollUp".action.move-column-left = { };
"Mod+1".action.focus-workspace = 1;
"Mod+2".action.focus-workspace = 2;
"Mod+3".action.focus-workspace = 3;
"Mod+4".action.focus-workspace = 4;
"Mod+5".action.focus-workspace = 5;
"Mod+6".action.focus-workspace = 6;
"Mod+7".action.focus-workspace = 7;
"Mod+8".action.focus-workspace = 8;
"Mod+9".action.focus-workspace = 9;
"Mod+Ctrl+1".action.move-column-to-workspace = 1;
"Mod+Ctrl+2".action.move-column-to-workspace = 2;
"Mod+Ctrl+3".action.move-column-to-workspace = 3;
"Mod+Ctrl+4".action.move-column-to-workspace = 4;
"Mod+Ctrl+5".action.move-column-to-workspace = 5;
"Mod+Ctrl+6".action.move-column-to-workspace = 6;
"Mod+Ctrl+7".action.move-column-to-workspace = 7;
"Mod+Ctrl+8".action.move-column-to-workspace = 8;
"Mod+Ctrl+9".action.move-column-to-workspace = 9;
"Mod+Comma".action.consume-window-into-column = { };
"Mod+Period".action.expel-window-from-column = { };
"Mod+R".action.switch-preset-column-width = { };
"Mod+Shift+R".action.reset-window-height = { };
"Mod+F".action.maximize-column = { };
"Mod+Shift+F".action.fullscreen-window = { };
"Mod+C".action.center-column = { };
"Mod+Minus".action.set-column-width = "-10%";
"Mod+Equal".action.set-column-width = "+10%";
"Mod+Shift+Minus".action.set-window-height = "-10%";
"Mod+Shift+Equal".action.set-window-height = "+10%";
"Print".action.screenshot = { };
"Ctrl+Print".action.screenshot-screen = { };
"Alt+Print".action.screenshot-window = { };
"Mod+Shift+E".action.quit = { };
"Mod+Shift+P".action.power-off-monitors = { };
}
+164
View File
@@ -0,0 +1,164 @@
{
inputs,
pkgs,
lib,
config,
...
}:
let
cfg = config.my.applications.niri.homeManager;
defaultKeyBind = import ./defaultKeyBind.nix;
in
{
options.my.applications.niri.homeManager = {
enable = lib.mkEnableOption "niri home-manager configuration";
};
config.home-manager.sharedModules = [
inputs.niri-flake.homeModules.niri
{
config = lib.mkIf cfg.enable {
programs.niri.package = pkgs.niri;
programs.niri.settings = {
input.touchpad = {
natural-scroll = true;
scroll-factor = 4.0;
scroll-method = "two-finger";
click-method = "clickfinger";
drag = true;
drag-lock = true;
};
input.keyboard.xkb = {
layout = "jp";
options = "ctrl:nocaps";
};
spawn-at-startup = [
{ command = [ "noctalia-shell" ]; }
];
outputs."eDP-1".scale = 1;
cursor.size = 16;
layout = {
focus-ring = {
active.color = "#bd93f9";
inactive.color = "#6272a4";
};
border = {
active.color = "#ffc87f";
inactive.color = "#505050";
urgent.color = "#9b0000";
};
shadow = {
color = "#0007";
};
};
binds = defaultKeyBind // {
"Mod+T" = {
action.spawn = "ghostty";
hotkey-overlay.title = "Open a Terminal: ghostty";
};
"Mod+D" = {
action.spawn = [
"vicinae"
"toggle"
];
hotkey-overlay.title = "Run an Application: vicinae";
};
"Mod+Space" = {
action.spawn = [
"vicinae"
"toggle"
];
hotkey-overlay.title = "Run an Application: vicinae";
};
"Mod+E" = {
action.spawn = [
"nautilus"
"--new-window"
];
hotkey-overlay.title = "Open File Manager: nautilus";
};
"Mod+L" = {
action.spawn = [
"noctalia-shell"
"ipc"
"call"
"sessionMenu"
"lockAndSuspend"
];
hotkey-overlay.title = "Lock the Screen: noctalia";
};
"Mod+V" = {
action.spawn = [
"vicinae"
"vicinae://extensions/vicinae/clipboard/history"
];
hotkey-overlay.title = "Clipboard History";
};
"XF86AudioRaiseVolume" = {
action.spawn = [
"noctalia-shell"
"ipc"
"call"
"volume"
"increase"
];
};
"XF86AudioLowerVolume" = {
action.spawn = [
"noctalia-shell"
"ipc"
"call"
"volume"
"decrease"
];
};
"XF86AudioMute" = {
action.spawn = [
"noctalia-shell"
"ipc"
"call"
"volume"
"muteOutput"
];
};
"XF86AudioMicMute" = {
action.spawn = [
"noctalia-shell"
"ipc"
"call"
"volume"
"muteInput"
];
};
"XF86MonBrightnessUp" = {
action.spawn = [
"noctalia-shell"
"ipc"
"call"
"brightness"
"increase"
];
};
"XF86MonBrightnessDown" = {
action.spawn = [
"noctalia-shell"
"ipc"
"call"
"brightness"
"decrease"
];
};
};
};
};
}
];
}
+17
View File
@@ -0,0 +1,17 @@
{
lib,
config,
...
}:
let
cfg = config.my.applications.niri.system;
in
{
options.my.applications.niri.system = {
enable = lib.mkEnableOption "niri system configuration";
};
config = lib.mkIf cfg.enable {
programs.niri.enable = true;
};
}
+23
View File
@@ -0,0 +1,23 @@
{
lib,
config,
...
}:
let
cfg = config.my.applications.noctalia;
in
{
imports = [
./system.nix
./home.nix
];
options.my.applications.noctalia = {
enable = lib.mkEnableOption "noctalia-shell";
};
config = lib.mkIf cfg.enable {
my.applications.noctalia.system.enable = lib.mkDefault true;
my.applications.noctalia.homeManager.enable = lib.mkDefault true;
};
}
+178
View File
@@ -0,0 +1,178 @@
{
inputs,
pkgs,
lib,
config,
...
}:
let
cfg = config.my.applications.noctalia.homeManager;
walls = pkgs.fetchFromGitHub {
owner = "moons-14";
repo = "wallpapers";
rev = "cc3256f4aaf2c8e7d16fb000b1ee251af54085db";
hash = "sha256-emQ/FqKqMq3YI5bLx8gBZg/ZE72OG9Ilh71ggq78WdQ=";
};
in
{
options.my.applications.noctalia.homeManager = {
enable = lib.mkEnableOption "noctalia-shell home-manager configuration";
};
config.home-manager.sharedModules = [
inputs.noctalia.homeModules.default
{
config = lib.mkIf cfg.enable {
home.file.".face" = {
recursive = true;
source = ../../../images/avatar.jpg;
};
home.file.".wallpapers" = {
source = walls;
recursive = true;
};
home.file.".cache/noctalia/wallpapers.json" = {
text = builtins.toJSON {
defaultWallpaper = "~/.wallpapers/1.jpg";
wallpapers = {
"DP-1" = "~/.wallpapers/1.jpg";
};
};
};
programs.noctalia-shell = {
enable = true;
settings = {
bar = {
density = "default";
position = "top";
showCapsule = true;
backgroundOpacity = 0.8;
floating = true;
widgets = {
left = [
{ id = "WiFi"; }
{
id = "CustomButton";
icon = "access-point";
leftClickExec = "nm-connection-editor";
}
{ id = "Bluetooth"; }
{ id = "SystemMonitor"; }
{ id = "Taskbar"; }
{ id = "ActiveWindow"; }
];
center = [
{
hideUnoccupied = false;
id = "Workspace";
labelMode = "none";
}
];
right = [
{ id = "MediaMini"; }
{ id = "NotificationHistory"; }
{
displayMode = "alwaysShow";
id = "Battery";
warningThreshold = 30;
}
{
displayMode = "alwaysShow";
id = "Volume";
}
{
displayMode = "alwaysShow";
id = "Brightness";
}
{
formatHorizontal = "HH:mm";
formatVertical = "HH mm";
id = "Clock";
useMonospacedFont = true;
usePrimaryColor = true;
}
{
id = "ControlCenter";
useDistroLogo = true;
}
];
};
};
colorSchemes.predefinedScheme = "dracula";
general = {
avatarImage = "~/.face";
radiusRatio = 0.2;
};
location = {
monthBeforeDay = true;
weatherEnabled = false;
name = "Tokyo";
};
wallpaper = {
enabled = true;
directory = "~/.wallpapers/";
setWallpaperOnAllMonitors = true;
linkLightAndDarkWallpapers = true;
fillMode = "crop";
randomEnabled = true;
randomIntervalSec = 60;
transitionDuration = 1500;
};
dock = {
enabled = true;
displayMode = "auto_hide";
backgroundOpacity = 0.8;
floatingRatio = 1;
size = 1;
onlySameOutput = true;
monitors = [ "eDP-1" ];
pinnedApps = [
"com.mitchellh.ghostty"
"org.gnome.Nautilus"
"google-chrome"
"code"
];
colorizeIcons = false;
};
controlCenter = {
position = "close_to_bar_button";
shortcuts = {
left = [
{ id = "WiFi"; }
{ id = "Bluetooth"; }
{ id = "ScreenRecorder"; }
{ id = "WallpaperSelector"; }
];
right = [
{ id = "Notifications"; }
{ id = "NightLight"; }
];
};
cards = [
{
enabled = true;
id = "profile-card";
}
{
enabled = true;
id = "shortcuts-card";
}
{
enabled = true;
id = "audio-card";
}
{
enabled = true;
id = "media-sysmon-card";
}
];
};
};
};
};
}
];
}
+21
View File
@@ -0,0 +1,21 @@
{
pkgs,
inputs,
lib,
config,
...
}:
let
cfg = config.my.applications.noctalia.system;
in
{
options.my.applications.noctalia.system = {
enable = lib.mkEnableOption "noctalia-shell system package";
};
config = lib.mkIf cfg.enable {
environment.systemPackages = with pkgs; [
inputs.noctalia.packages.${system}.default
];
};
}
+23
View File
@@ -0,0 +1,23 @@
{ lib, config, ... }:
let
cfg = config.my.applications.openssh;
in
{
options.my.applications.openssh = {
enable = lib.mkEnableOption "OpenSSH server";
};
config = lib.mkIf cfg.enable {
services.openssh = {
enable = true;
openFirewall = true;
settings = {
PermitRootLogin = "no";
PasswordAuthentication = false;
KbdInteractiveAuthentication = false;
PubkeyAuthentication = "yes";
};
};
};
}
+43
View File
@@ -0,0 +1,43 @@
{
lib,
config,
...
}:
let
cfg = config.my.applications.ssh;
in
{
imports = [
./system.nix
./home.nix
];
options.my.applications.ssh = {
enable = lib.mkEnableOption "OpenSSH client";
system.enable = lib.mkEnableOption "SSH system configuration";
homeManager.enable = lib.mkEnableOption "SSH home-manager configuration";
defaultIdentityFile = lib.mkOption {
type = lib.types.str;
default = "~/.ssh/id_ed25519";
description = "Default SSH identity file";
};
addKeysToAgent = lib.mkOption {
type = lib.types.str;
default = "yes";
description = "Add keys to SSH agent";
};
matchBlocks = lib.mkOption {
type = lib.types.attrs;
default = { };
description = "SSH match blocks";
};
};
config = lib.mkIf cfg.enable {
my.applications.ssh.system.enable = lib.mkDefault true;
my.applications.ssh.homeManager.enable = lib.mkDefault true;
};
}
+37
View File
@@ -0,0 +1,37 @@
{
pkgs,
lib,
config,
...
}:
let
cfg = config.my.applications.ssh;
hmCfg = config.my.applications.ssh.homeManager;
in
{
options.my.applications.ssh.homeManager = {
enable = lib.mkEnableOption "SSH home-manager configuration";
};
config.home-manager.sharedModules = [
{
config = lib.mkIf hmCfg.enable {
home.packages = [
pkgs.openssh
];
programs.ssh = {
enable = true;
enableDefaultConfig = false;
matchBlocks = cfg.matchBlocks // {
"*" = {
identityFile = cfg.defaultIdentityFile;
extraOptions.AddKeysToAgent = cfg.addKeysToAgent;
};
};
};
};
}
];
}
+20
View File
@@ -0,0 +1,20 @@
{
pkgs,
lib,
config,
...
}:
let
cfg = config.my.applications.ssh.system;
in
{
options.my.applications.ssh.system = {
enable = lib.mkEnableOption "SSH system configuration";
};
config = lib.mkIf cfg.enable {
environment.systemPackages = with pkgs; [
openssh # OpenSSH client and server
];
};
}
+64
View File
@@ -0,0 +1,64 @@
{
pkgs,
lib,
config,
inputs,
...
}:
let
cfg = config.my.applications.swayidle;
noctaliaPkg = inputs.noctalia.packages.${pkgs.system}.default;
noctaliaExe = lib.getExe noctaliaPkg;
lockCmd = "${pkgs.bash}/bin/bash -lc '${noctaliaExe} ipc call lockScreen lock'";
lockAndSuspendCmd = "${pkgs.bash}/bin/bash -lc '${noctaliaExe} ipc call sessionMenu lockAndSuspend'";
dpmsOn = "${pkgs.niri}/bin/niri msg action power-on-monitors";
in
{
options.my.applications.swayidle = {
enable = lib.mkEnableOption "swayidle idle manager";
};
config = lib.mkIf cfg.enable {
home-manager.sharedModules = [
{
services.swayidle = {
enable = true;
systemdTarget = "graphical-session.target";
timeouts = [
{
timeout = 300;
command = lockAndSuspendCmd;
}
];
events = [
{
event = "lock";
command = lockCmd;
}
{
event = "before-sleep";
command = lockCmd;
}
{
event = "after-resume";
command = dpmsOn;
}
];
};
systemd.user.services.swayidle = {
Service = {
PassEnvironment = [
"WAYLAND_DISPLAY"
"XDG_RUNTIME_DIR"
"DBUS_SESSION_BUS_ADDRESS"
];
};
};
}
];
};
}
+38
View File
@@ -0,0 +1,38 @@
{ lib, config, ... }:
let
cfg = config.my.applications.tailscale;
in
{
options.my.applications.tailscale = {
enable = lib.mkEnableOption "Tailscale VPN";
acceptDns = lib.mkOption {
type = lib.types.bool;
default = false;
description = "Accept DNS configuration from Tailscale";
};
acceptRoutes = lib.mkOption {
type = lib.types.bool;
default = true;
description = "Accept subnet routes from Tailscale";
};
extraUpFlags = lib.mkOption {
type = lib.types.listOf lib.types.str;
default = [ ];
description = "Additional flags to pass to tailscale up";
};
};
config = lib.mkIf cfg.enable {
services.tailscale = {
enable = true;
extraUpFlags = [
"--accept-dns=${if cfg.acceptDns then "true" else "false"}"
]
++ lib.optional cfg.acceptRoutes "--accept-routes"
++ cfg.extraUpFlags;
};
};
}
+62
View File
@@ -0,0 +1,62 @@
{
inputs,
pkgs,
lib,
config,
...
}:
let
cfg = config.my.applications.vicinae;
in
{
options.my.applications.vicinae = {
enable = lib.mkEnableOption "Vicinae application launcher";
};
config = lib.mkIf cfg.enable {
home-manager.sharedModules = [
inputs.vicinae.homeManagerModules.default
{
services.vicinae = {
enable = true;
systemd = {
enable = true;
autoStart = true;
environment = {
USE_LAYER_SHELL = 1;
};
};
settings = {
font.size = 11;
close_on_focus_loss = true;
consider_preedit = true;
pop_to_root_on_close = true;
favicon_service = "twenty";
search_files_in_root = true;
theme = {
light = {
name = "dracula";
icon_theme = "default";
};
dark = {
name = "vicinae-light";
icon_theme = "default";
};
};
window = {
csd = true;
opacity = 0.95;
rounding = 10;
};
};
extensions = with inputs.vicinae-extensions.packages.${pkgs.stdenv.hostPlatform.system}; [
bluetooth
nix
power-profile
];
};
}
];
};
}
+23
View File
@@ -0,0 +1,23 @@
{
lib,
config,
...
}:
let
cfg = config.my.applications.vim;
in
{
imports = [
./system.nix
./home
];
options.my.applications.vim = {
enable = lib.mkEnableOption "vim text editor";
};
config = lib.mkIf cfg.enable {
my.applications.vim.system.enable = lib.mkDefault true;
my.applications.vim.homeManager.enable = lib.mkDefault true;
};
}
@@ -0,0 +1,8 @@
_: {
programs.nixvim.autoCmd = [
{
event = "TextYankPost";
callback.__raw = "function() vim.highlight.on_yank() end";
}
];
}
@@ -0,0 +1,6 @@
_: {
programs.nixvim.colorschemes.catppuccin = {
enable = true;
settings.transparent_background = true;
};
}
+57
View File
@@ -0,0 +1,57 @@
{
pkgs,
inputs,
lib,
config,
...
}:
let
cfg = config.my.applications.vim.homeManager;
in
{
options.my.applications.vim.homeManager = {
enable = lib.mkEnableOption "vim home-manager configuration";
};
config = lib.mkIf cfg.enable {
home-manager.sharedModules = [
inputs.nixvim.homeModules.nixvim
./options.nix
./autocmds.nix
./keymaps.nix
./language.nix
./colorscheme.nix
./lsp.nix
./plugins
{
programs.nixvim = {
enable = true;
vimAlias = true;
viAlias = true;
withNodeJs = true;
extraPackages = with pkgs; [
git
ripgrep
fd
nodejs
zellij
# LSP / formatter / misc
vtsls
vscode-langservers-extracted
tailwindcss-language-server
prettierd
prettier
biome
stylua
shfmt
alejandra
lua-language-server
nixd
];
};
}
];
};
}
+179
View File
@@ -0,0 +1,179 @@
_:
let
mk = key: action: desc: {
mode = "n";
inherit key action;
options = {
silent = true;
inherit desc;
};
};
mkRaw = key: raw: desc: {
mode = "n";
inherit key;
action.__raw = raw;
options = {
silent = true;
inherit desc;
};
};
mkExpr = key: raw: desc: {
mode = "n";
inherit key;
action.__raw = raw;
options = {
silent = true;
expr = true;
inherit desc;
};
};
in
{
programs.nixvim = {
opts = {
# ジャンプ履歴をスタック寄りに扱う
jumpoptions = "stack";
# 既に開いているバッファや直前のウィンドウを優先して再利用
switchbuf = "useopen,uselast";
};
keymaps = [
# Search
(mk "<Esc>" "<cmd>nohlsearch<CR>" "検索ハイライトを解除")
# Screen line movement
(mkExpr "j" "function() return vim.v.count == 0 and 'gj' or 'j' end" "下へ移動(画面行優先)")
(mkExpr "k" "function() return vim.v.count == 0 and 'gk' or 'k' end" "上へ移動(画面行優先)")
# LSP: hover / direct jump
(mkRaw "K" "vim.lsp.buf.hover" "シンボル情報を表示")
(mkRaw "gd" "vim.lsp.buf.definition" "定義へジャンプ")
(mkRaw "grr" "vim.lsp.buf.references" "参照一覧を開く")
(mkRaw "gri" "vim.lsp.buf.implementation" "実装一覧を開く")
(mkRaw "grt" "vim.lsp.buf.type_definition" "型定義一覧を開く")
(mkRaw "grn" "vim.lsp.buf.rename" "シンボル名を一括変換")
(mkRaw "gra" "vim.lsp.buf.code_action" "コードアクション")
(mkRaw "gO" "vim.lsp.buf.document_symbol" "現在ファイルのシンボル一覧")
# Glance: preview / peek
(mk "gD" "<cmd>Glance definitions<CR>" "定義をプレビュー")
(mk "gR" "<cmd>Glance references<CR>" "参照をプレビュー")
(mk "gM" "<cmd>Glance implementations<CR>" "実装をプレビュー")
(mk "gY" "<cmd>Glance type_definitions<CR>" "型定義をプレビュー")
(mk "g." "<cmd>Glance resume<CR>" "直前のGlanceを再開")
# Convenience aliases
(mkRaw "<leader>rn" "vim.lsp.buf.rename" "シンボル名を一括変換")
(mkRaw "<leader>cf"
"function() require('conform').format({ timeout_ms = 1000, lsp_format = 'fallback' }) end"
"コードをフォーマット"
)
(mkRaw "<leader>ca" "vim.lsp.buf.code_action" "コードアクション")
# Diagnostics
(mkRaw "]d" "vim.diagnostic.goto_next" "次の診断へ移動")
(mkRaw "[d" "vim.diagnostic.goto_prev" "前の診断へ移動")
(mkRaw "<leader>dl" "vim.diagnostic.open_float" "診断の詳細を表示")
# File tree
(mk "<leader>e" "<cmd>Neotree toggle left<CR>" "ファイルツリー")
# Terminal
(mk "<leader>tt" "<cmd>ToggleTerm direction=float<CR>" "ターミナル")
# Trouble
(mk "<leader>xx" "<cmd>Trouble diagnostics toggle<CR>" "診断一覧")
(mk "<leader>xq" "<cmd>Trouble qflist toggle<CR>" "Quickfix一覧")
(mk "<leader>xl" "<cmd>Trouble loclist toggle<CR>" "Location List一覧")
(mk "<leader>xs" "<cmd>Trouble symbols toggle<CR>" "シンボル一覧")
(mk "<leader>xw" "<cmd>Trouble lsp toggle<CR>" "LSP一覧")
# Quickfix / Location list navigation
(mk "]q" "<cmd>cnext<CR>" "次のQuickfixへ")
(mk "[q" "<cmd>cprev<CR>" "前のQuickfixへ")
(mk "]l" "<cmd>lnext<CR>" "次のLocation Listへ")
(mk "[l" "<cmd>lprev<CR>" "前のLocation Listへ")
# Window navigation
(mk "<C-h>" "<C-w>h" "左のウィンドウへ")
(mk "<C-j>" "<C-w>j" "下のウィンドウへ")
(mk "<C-k>" "<C-w>k" "上のウィンドウへ")
(mk "<C-l>" "<C-w>l" "右のウィンドウへ")
(mk "<C-Left>" "<C-w>h" "左のウィンドウへ")
(mk "<C-Down>" "<C-w>j" "下のウィンドウへ")
(mk "<C-Up>" "<C-w>k" "上のウィンドウへ")
(mk "<C-Right>" "<C-w>l" "右のウィンドウへ")
# Alternate file / previous file
(mk "<leader><leader>" "<C-^>" "直前のファイルへ戻る")
(mk "<leader>w-" "<C-w><C-^>" "直前のファイルをsplitで開く")
# Buffer Bar
(mk "[b" "<Cmd>BufferPrevious<CR>" "前のバッファーに移動")
(mk "]b" "<Cmd>BufferNext<CR>" "次のバッファーに移動")
(mk "<leader>bc" "<Cmd>BufferClose<CR>" "バッファーを閉じる")
# Git Conflict
(mk "<leader>gco" "<cmd>GitConflictChooseOurs<CR>" "現在のブランチを選択")
(mk "<leader>gct" "<cmd>GitConflictChooseTheirs<CR>" "相手のブランチを選択")
(mk "<leader>gcb" "<cmd>GitConflictChooseBoth<CR>" "両方を選択")
(mk "<leader>gcx" "<cmd>GitConflictListQf<CR>" "コンフリクト一覧")
(mk "]x" "<cmd>GitConflictNextConflict<CR>" "次のコンフリクト")
(mk "[x" "<cmd>GitConflictPrevConflict<CR>" "前のコンフリクト")
# Git
(mk "<leader>gl" "<cmd>LazyGit<CR>" "LazyGitを開く")
(mk "<leader>gd" "<cmd>DiffviewOpen<CR>" "差分を開く")
(mk "<leader>gH" "<cmd>DiffviewFileHistory<CR>" "リポジトリ履歴")
(mk "<leader>gh" "<cmd>DiffviewFileHistory %<CR>" "現在ファイルの履歴")
(mk "<leader>gq" "<cmd>DiffviewClose<CR>" "差分を閉じる")
# Markview
(mk "<leader>mp" "<cmd>Markview splitToggle<CR>" "Markdownプレビュー")
# Zen Mode
(mk "<leader>zz" "<cmd>ZenMode<CR>" "Zen Modeを開く/閉じる")
# UFO (folding)
(mkRaw "zR" "require('ufo').openAllFolds" "全て展開")
(mkRaw "zM" "require('ufo').closeAllFolds" "全て折りたたむ")
# Dropbar
(mkRaw "<leader>dp" "function() require('dropbar.api').pick() end" "dropbarでナビゲート")
# Snacks
(mkRaw "<leader>sd" "function() Snacks.dim.toggle() end" "Dimモードをトグル")
# Flash
(mkRaw "s" "function() require('flash').jump() end" "Flashジャンプ")
(mkRaw "S" "function() require('flash').treesitter() end" "Flashツリーシッタ選択")
# Todo Comments
(mk "]t" "<cmd>TodoNext<CR>" "次のTODO")
(mk "[t" "<cmd>TodoPrev<CR>" "前のTODO")
(mkRaw "<leader>ft" "function() Snacks.picker.todo_comments() end" "TODO一覧")
# Spectre
(mkRaw "<leader>sr" "function() require('spectre').toggle() end" "検索・置換")
# Snacks Picker: generic
(mkRaw "<leader>ff" "function() Snacks.picker.files() end" "ファイルを探す")
(mkRaw "<leader>fg" "function() Snacks.picker.grep() end" "文字列を全文検索")
(mkRaw "<leader>fb" "function() Snacks.picker.buffers() end" "開いているバッファを探す")
(mkRaw "<leader>fh" "function() Snacks.picker.help() end" "ヘルプ項目を探す")
(mkRaw "<leader>fk" "function() Snacks.picker.keymaps() end" "キーマップを探す")
(mkRaw "<leader>fc" "function() Snacks.picker.commands() end" "コマンドを探す")
# Snacks Picker: code navigation
(mkRaw "<leader>fs" "function() Snacks.picker.lsp_symbols() end" "現在ファイルのシンボルを探す")
(mkRaw "<leader>fS" "function() Snacks.picker.lsp_workspace_symbols() end" "ワークスペース全体のシンボルを探す")
(mkRaw "<leader>fr" "function() Snacks.picker.registers() end" "レジスタを探す")
(mkRaw "<leader>fj" "function() Snacks.picker.jumps() end" "ジャンプ履歴を探す")
(mkRaw "<leader>fq" "function() Snacks.picker.qflist() end" "Quickfixを探す")
(mkRaw "<leader>fl" "function() Snacks.picker.loclist() end" "Location Listを探す")
];
};
}
@@ -0,0 +1,13 @@
_: {
programs.nixvim = {
env = {
LANG = "ja_JP.UTF-8";
LC_MESSAGES = "ja_JP.UTF-8";
};
extraConfigLua = ''
vim.cmd.language("ja_JP.utf8")
vim.opt.helplang = { "ja", "en" }
'';
};
}
+65
View File
@@ -0,0 +1,65 @@
_: {
programs.nixvim = {
plugins.lsp = {
enable = true;
servers = {
# TypeScript / JavaScript
vtsls = {
enable = true;
packageFallback = true;
rootMarkers = [
"pnpm-workspace.yaml"
"package.json"
"tsconfig.json"
"jsconfig.json"
".git"
];
extraOptions.settings.typescript.locale = "ja";
};
# Biome for lint / format
biome = {
enable = true;
packageFallback = true;
rootMarkers = [
"biome.json"
"biome.jsonc"
"package.json"
"pnpm-workspace.yaml"
".git"
];
};
# Frontend / config languages
tailwindcss.enable = true;
cssls.enable = true;
jsonls.enable = true;
yamlls.enable = true;
lua_ls.enable = true;
nixd.enable = true;
# Other languages
rust_analyzer = {
enable = true;
installCargo = true;
installRustc = true;
};
svelte.enable = true;
ty.enable = true;
ruff.enable = true;
astro.enable = true;
gopls.enable = true;
};
};
# Diagnostic UI
diagnostic.settings = {
virtual_text = true;
float = {
border = "rounded";
source = true;
};
};
};
}
+50
View File
@@ -0,0 +1,50 @@
_: {
programs.nixvim = {
opts = {
# display
number = true;
relativenumber = true;
signcolumn = "yes";
termguicolors = true;
# action
mouse = "a";
clipboard = "unnamedplus";
updatetime = 200;
timeoutlen = 300;
undofile = true;
# display
wrap = false;
scrolloff = 8;
# search
ignorecase = true;
smartcase = true;
# window split
splitright = true;
splitbelow = true;
# indent
tabstop = 2;
shiftwidth = 2;
expandtab = true;
# file encoding
encoding = "utf-8";
fileencoding = "utf-8";
fileencodings = "utf-8,sjis,euc-jp,iso-2022-jp";
# invisible characters
list = true;
listchars = "tab:»-,trail:-,extends:»,precedes:«,nbsp:%";
};
globals = {
mapleader = " ";
maplocalleader = " ";
clipboard = "osc52";
};
};
}
@@ -0,0 +1,7 @@
{ ... }:
{
imports = [
./ui
./editor
];
}
@@ -0,0 +1,3 @@
_: {
programs.nixvim.plugins.nvim-autopairs.enable = true;
}
@@ -0,0 +1,56 @@
_: {
programs.nixvim.plugins.blink-cmp = {
enable = true;
setupLspCapabilities = true;
settings = {
keymap = {
preset = "enter";
"<C-Space>" = [ "show" ];
"<C-d>" = [ "scroll_documentation_up" ];
"<C-e>" = [ "hide" ];
"<C-f>" = [ "scroll_documentation_down" ];
"<Tab>" = [
"accept"
{
__raw = ''
function()
local ok, copilot = pcall(require, "copilot.suggestion")
if ok and copilot.is_visible() then
copilot.accept()
return true
end
end
'';
}
"fallback"
];
"<S-Tab>" = [
"select_prev"
"fallback"
];
"<C-n>" = [
"select_next"
"fallback"
];
"<C-p>" = [
"select_prev"
"fallback"
];
};
completion.list.selection = {
preselect = true;
auto_insert = false;
};
sources.default = [
"lsp"
"path"
"buffer"
];
};
};
}
@@ -0,0 +1,3 @@
_: {
programs.nixvim.plugins.comment.enable = true;
}
@@ -0,0 +1,24 @@
_: {
programs.nixvim.plugins."conform-nvim" = {
enable = true;
settings = {
formatters_by_ft = {
javascript.__raw = ''{ "biome", "prettierd", "prettier", stop_after_first = true }'';
javascriptreact.__raw = ''{ "biome", "prettierd", "prettier", stop_after_first = true }'';
typescript.__raw = ''{ "biome", "prettierd", "prettier", stop_after_first = true }'';
typescriptreact.__raw = ''{ "biome", "prettierd", "prettier", stop_after_first = true }'';
json.__raw = ''{ "biome", "prettierd", "prettier", stop_after_first = true }'';
yaml.__raw = ''{ "prettierd", "prettier", stop_after_first = true }'';
markdown.__raw = ''{ "prettierd", "prettier", stop_after_first = true }'';
lua = [ "stylua" ];
nix = [ "alejandra" ];
sh = [ "shfmt" ];
};
format_on_save.__raw = ''
function(_)
return { timeout_ms = 1000, lsp_format = "fallback" }
end
'';
};
};
}
@@ -0,0 +1,11 @@
_: {
programs.nixvim.plugins.copilot-lua = {
enable = true;
settings = {
suggestion = {
auto_trigger = true;
keymap.enabled = false;
};
};
};
}
@@ -0,0 +1,23 @@
{ ... }:
{
imports = [
./snacks.nix
./treesitter.nix
./blink-cmp.nix
./gitsigns.nix
./comment.nix
./autopairs.nix
./lsp-signature.nix
./copilot.nix
./trouble.nix
./conform.nix
./surround.nix
./git.nix
./git-conflict.nix
./glance.nix
./flash.nix
./todo-comments.nix
./spectre.nix
./wakatime.nix
];
}
@@ -0,0 +1,9 @@
{ pkgs, ... }:
{
programs.nixvim = {
extraPlugins = [ pkgs.vimPlugins.flash-nvim ];
extraConfigLua = ''
require("flash").setup()
'';
};
}
@@ -0,0 +1,9 @@
{ pkgs, ... }:
{
programs.nixvim = {
extraPlugins = [ pkgs.vimPlugins.git-conflict-nvim ];
extraConfigLua = ''
require("git-conflict").setup()
'';
};
}
@@ -0,0 +1,11 @@
{ pkgs, ... }:
{
programs.nixvim = {
extraPackages = [ pkgs.lazygit ];
plugins = {
lazygit.enable = true;
diffview.enable = true;
};
};
}
@@ -0,0 +1,25 @@
_: {
# git change view
programs.nixvim.plugins.gitsigns = {
enable = true;
settings = {
signs = {
add = {
text = "+";
};
change = {
text = "~";
};
delete = {
text = "_";
};
topdelete = {
text = "‾";
};
changedelete = {
text = "~";
};
};
};
};
}
@@ -0,0 +1,9 @@
{ pkgs, ... }:
{
programs.nixvim = {
extraPlugins = [ pkgs.vimPlugins.glance-nvim ];
extraConfigLua = ''
require("glance").setup()
'';
};
}
@@ -0,0 +1,11 @@
_: {
programs.nixvim.plugins.lsp-signature = {
enable = true;
settings = {
hint_enable = true;
hint_prefix = " ";
floating_window = true;
bind = true;
};
};
}
@@ -0,0 +1,32 @@
{ pkgs, ... }:
{
programs.nixvim = {
extraPlugins = [ pkgs.vimPlugins.snacks-nvim ];
extraConfigLua = ''
require("snacks").setup({
picker = {
enabled = true,
actions = require("trouble.sources.snacks").actions,
win = {
input = {
keys = {
["<C-t>"] = {
"trouble_open",
mode = { "n", "i" },
},
},
},
},
},
notifier = { enabled = true },
words = { enabled = true },
scroll = { enabled = true },
dim = { enabled = true },
})
'';
};
}
@@ -0,0 +1,10 @@
{ pkgs, ... }:
{
programs.nixvim = {
extraPackages = [ pkgs.ripgrep ];
extraPlugins = [ pkgs.vimPlugins.nvim-spectre ];
extraConfigLua = ''
require("spectre").setup()
'';
};
}
@@ -0,0 +1,3 @@
_: {
programs.nixvim.plugins.nvim-surround.enable = true;
}
@@ -0,0 +1,9 @@
{ pkgs, ... }:
{
programs.nixvim = {
extraPlugins = [ pkgs.vimPlugins.todo-comments-nvim ];
extraConfigLua = ''
require("todo-comments").setup()
'';
};
}
@@ -0,0 +1,17 @@
{ pkgs, ... }:
{
programs.nixvim = {
plugins.treesitter = {
enable = true;
settings = {
highlight.enable = true;
indent.enable = true;
};
};
extraPlugins = [ pkgs.vimPlugins.nvim-ts-autotag ];
extraConfigLua = ''
require("nvim-ts-autotag").setup()
'';
};
}
@@ -0,0 +1,3 @@
_: {
programs.nixvim.plugins.trouble.enable = true;
}
@@ -0,0 +1,4 @@
{ pkgs, ... }:
{
programs.nixvim.extraPlugins = [ pkgs.vimPlugins.vim-wakatime ];
}
@@ -0,0 +1,26 @@
_: {
programs.nixvim.plugins.barbar = {
enable = true;
settings = {
animation = false;
auto_hide = 1;
tabpages = true;
clickable = true;
focus_on_close = "left";
icons = {
button = "󰅖";
separator = {
left = "▎";
right = "";
};
separator_at_end = false;
filetype.enabled = true;
};
sidebar_filetypes = {
neo-tree = true;
};
};
};
}
@@ -0,0 +1,20 @@
_: {
programs.nixvim.plugins.indent-blankline = {
enable = true;
settings = {
scope = {
enabled = true;
show_start = true;
show_end = true;
};
exclude = {
filetypes = [
"help"
"neo-tree"
"toggleterm"
"lazy"
];
};
};
};
}
@@ -0,0 +1,26 @@
_: {
programs.nixvim.plugins.colorizer = {
enable = true;
settings = {
filetypes = [
"*"
"!markdown"
];
user_commands = true;
options = {
parsers = {
css = true;
tailwind = {
enable = true;
lsp = true;
update_names = true;
};
};
display.mode = "background";
};
};
};
}
@@ -0,0 +1,20 @@
{ ... }:
{
imports = [
./lualine.nix
./neo-tree.nix
./blankline.nix
./which-key.nix
./web-devicons.nix
./toggleterm.nix
./treesitter.nix
./barbar.nix
./lightbulb.nix
./colorizer.nix
./dropbar.nix
./scrollbar.nix
./ufo.nix
./zen-mode.nix
./markview.nix
];
}
@@ -0,0 +1,3 @@
_: {
programs.nixvim.plugins.dropbar.enable = true;
}
@@ -0,0 +1,6 @@
_: {
programs.nixvim.plugins.nvim-lightbulb = {
enable = true;
settings.autocmd.enabled = true;
};
}
@@ -0,0 +1,25 @@
_: {
programs.nixvim.plugins.lualine = {
enable = true;
settings.sections.lualine_x = [
{
__raw = ''
function()
local ok, conform = pcall(require, "conform")
if not ok then return "" end
local formatters = conform.list_formatters(0)
for _, f in ipairs(formatters) do
if f.available then
return "󰛖 " .. f.name
end
end
return ""
end
'';
}
"encoding"
"fileformat"
"filetype"
];
};
}
@@ -0,0 +1,9 @@
{ pkgs, ... }:
{
programs.nixvim = {
extraPlugins = [ pkgs.vimPlugins.markview-nvim ];
extraConfigLua = ''
require("markview").setup({ initial_state = false })
'';
};
}
@@ -0,0 +1,37 @@
_: {
programs.nixvim = {
plugins.neo-tree = {
enable = true;
settings = {
close_if_last_window = true;
filesystem = {
follow_current_file = {
enabled = true;
leave_dirs_open = true;
};
filtered_items = {
visible = true;
hide_dotfiles = false;
hide_gitignored = true;
hide_ignored = false;
hide_hidden = false;
hide_by_name = [ ];
hide_by_pattern = [ ];
always_show = [ ];
always_show_by_pattern = [ ];
never_show = [
".DS_Store"
"thumbs.db"
];
never_show_by_pattern = [ ];
};
};
};
};
};
}
@@ -0,0 +1,9 @@
{ pkgs, ... }:
{
programs.nixvim = {
extraPlugins = [ pkgs.vimPlugins.nvim-scrollbar ];
extraConfigLua = ''
require("scrollbar").setup()
'';
};
}
@@ -0,0 +1,3 @@
_: {
programs.nixvim.plugins.toggleterm.enable = true;
}
@@ -0,0 +1,3 @@
_: {
programs.nixvim.plugins."treesitter-context".enable = true;
}
@@ -0,0 +1,24 @@
{ pkgs, ... }:
{
programs.nixvim = {
opts = {
foldcolumn = "1";
foldlevel = 99;
foldlevelstart = 99;
foldenable = true;
};
extraPlugins = [
pkgs.vimPlugins.nvim-ufo
pkgs.vimPlugins.promise-async
];
extraConfigLua = ''
require("ufo").setup({
provider_selector = function()
return { "treesitter", "indent" }
end,
})
'';
};
}
@@ -0,0 +1,4 @@
_: {
# icon set preview
programs.nixvim.plugins.web-devicons.enable = true;
}
@@ -0,0 +1,4 @@
_: {
# key map help
programs.nixvim.plugins.which-key.enable = true;
}
@@ -0,0 +1,9 @@
{ pkgs, ... }:
{
programs.nixvim = {
extraPlugins = [ pkgs.vimPlugins.zen-mode-nvim ];
extraConfigLua = ''
require("zen-mode").setup()
'';
};
}
+22
View File
@@ -0,0 +1,22 @@
{
pkgs,
lib,
config,
...
}:
let
cfg = config.my.applications.vim.system;
in
{
options.my.applications.vim.system = {
enable = lib.mkEnableOption "vim system configuration";
};
config = lib.mkIf cfg.enable {
environment.systemPackages = with pkgs; [
vim # Highly configurable text editor
];
environment.variables.EDITOR = "nvim";
};
}
+23
View File
@@ -0,0 +1,23 @@
{
lib,
config,
...
}:
let
cfg = config.my.applications.vscode;
in
{
imports = [
./system.nix
./home.nix
];
options.my.applications.vscode = {
enable = lib.mkEnableOption "Visual Studio Code editor";
};
config = lib.mkIf cfg.enable {
my.applications.vscode.system.enable = lib.mkDefault true;
my.applications.vscode.homeManager.enable = lib.mkDefault true;
};
}
+296
View File
@@ -0,0 +1,296 @@
{
pkgs,
lib,
config,
...
}:
let
cfg = config.my.applications.vscode.homeManager;
vsc = pkgs.vscode-extensions;
inherit (lib) recursiveUpdate;
rustLibclangPath = pkgs.lib.makeLibraryPath [ pkgs.llvmPackages_latest.libclang.lib ];
rustBindgenExtraClangArgs = lib.concatStringsSep " " (
(builtins.map (a: ''-I"${a}/include"'') [
pkgs.glibc.dev
])
++ [
''-I"${pkgs.llvmPackages_latest.libclang.lib}/lib/clang/${pkgs.llvmPackages_latest.libclang.version}/include"''
''-I"${pkgs.glib.dev}/include/glib-2.0"''
"-I${pkgs.glib.out}/lib/glib-2.0/include/"
]
);
layers = rec {
common = {
extensions =
(with vsc; [
github.copilot
github.copilot-chat
dracula-theme.theme-dracula
ms-vscode-remote.vscode-remote-extensionpack
dbaeumer.vscode-eslint
ms-vscode-remote.remote-containers
ms-vscode-remote.remote-ssh
github.vscode-github-actions
github.vscode-pull-request-github
eamodio.gitlens
streetsidesoftware.code-spell-checker
ms-ceintl.vscode-language-pack-ja
])
++ pkgs.vscode-utils.extensionsFromVscodeMarketplace [
{
name = "hadolint";
publisher = "exiasr";
version = "1.1.2";
hash = "sha256-6GO1f8SP4CE8yYl87/tm60FdGHqHsJA4c2B6ukVdpgM=";
}
{
name = "chatgpt";
publisher = "openai";
version = "0.4.71";
hash = "sha256-Q0le5rhVRgTDQXjIlhbzJOv/7+xC6JXwTp6fxZCP4ak=";
}
];
userSettings = {
"workbench.colorTheme" = "Dracula";
"window.autoDetectColorScheme" = false;
"editor.formatOnSave" = true;
"editor.defaultFormatter" = "esbenp.prettier-vscode";
"git.enableSmartCommit" = true;
"files.autoSave" = "onFocusChange";
"git.confirmSync" = false;
"github.copilot.nextEditSuggestions.enabled" = true;
"editor.suggestOnTriggerCharacters" = true;
"editor.quickSuggestions" = {
other = true;
comments = false;
strings = true;
};
"git.autofetch" = true;
"workbench.editor.enablePreview" = false;
};
};
web = {
extensions =
(with vsc; [
lokalise.i18n-ally
bradlc.vscode-tailwindcss
prisma.prisma
hashicorp.terraform
yoavbls.pretty-ts-errors
])
++ pkgs.vscode-utils.extensionsFromVscodeMarketplace [
{
name = "pnpm-catalog-lens";
publisher = "antfu";
version = "1.0.0";
hash = "sha256-mCMBVxZRIb3Jao1XSS7EQRQX3Y2vrkpAmy6ldSqZa9c=";
}
{
name = "explorer";
publisher = "vitest";
version = "1.32.1";
hash = "sha256-MAfjS/oFfFuiE+Q2w6leSlao436QSw2fKjd7/BE/Q8Y=";
}
];
userSettings = { };
};
web-biome = {
extensions = with vsc; [
biomejs.biome
];
userSettings = {
"editor.defaultFormatter" = "biomejs.biome";
"[typescript].editor.defaultFormatter" = "biomejs.biome";
"[typescriptreact].editor.defaultFormatter" = "biomejs.biome";
};
};
web-oxc = {
extensions = pkgs.vscode-utils.extensionsFromVscodeMarketplace [
{
name = "oxc-vscode";
publisher = "oxc";
version = "1.48.0";
hash = "sha256-RZ7mLcLJyn7lR6w6Au6fZeguB3wtk8sIXb67lPnPnrc=";
}
];
userSettings = {
"editor.defaultFormatter" = "oxc.oxc-vscode";
"[typescript].editor.defaultFormatter" = "oxc.oxc-vscode";
"[typescriptreact].editor.defaultFormatter" = "oxc.oxc-vscode";
};
};
nix = {
extensions = with vsc; [
bbenoist.nix
jnoortheen.nix-ide
];
userSettings = {
"nix.enableLanguageServer" = true;
"nix.serverPath" = "nil";
"[nix]" = {
"editor.defaultFormatter" = "jnoortheen.nix-ide";
};
};
};
jupyter = {
extensions = with vsc; [
ms-toolsai.jupyter
ms-python.python
];
userSettings = { };
};
java = {
extensions = with vsc; [
vscjava.vscode-java-pack
sonarsource.sonarlint-vscode
vscjava.vscode-java-debug
redhat.java
];
userSettings = {
"java.jdt.ls.java.home" = "${pkgs.jdk25.home}";
"java.configuration.runtimes" = [
{
"name" = "JavaSE-25";
"path" = "${pkgs.jdk25.home}";
"default" = true;
}
];
"editor.codeLens" = true;
"java.debug.settings.enableRunDebugCodeLens" = true;
"java.jdt.ls.vmargs" = "-Xms256m -Xmx2G -XX:+UseG1GC -XX:+UseStringDeduplication";
"java.configuration.updateBuildConfiguration" = "interactive";
"java.maven.downloadSources" = true;
"java.eclipse.downloadSources" = true;
"maven.executable.path" = "${pkgs.maven}/bin/mvn";
"[java]" = {
"editor.defaultFormatter" = "redhat.java";
};
};
};
rust = {
extensions = with vsc; [
rust-lang.rust-analyzer
vadimcn.vscode-lldb
serayuzgur.crates
tamasfe.even-better-toml
];
userSettings = {
"[rust]" = {
"editor.defaultFormatter" = "rust-lang.rust-analyzer";
"editor.formatOnSave" = true;
"editor.codeActionsOnSave" = {
"source.organizeImports" = true;
"source.fixAll" = true;
};
};
"rust-analyzer.checkOnSave" = true;
"rust-analyzer.check.command" = "clippy";
"rust-analyzer.cargo.buildScripts.enable" = true;
"rust-analyzer.procMacro.enable" = true;
"rust-analyzer.cargo.targetDir" = true;
"rust-analyzer.cargo.extraEnv" = {
"LIBCLANG_PATH" = rustLibclangPath;
"BINDGEN_EXTRA_CLANG_ARGS" = rustBindgenExtraClangArgs;
};
"rust-analyzer.lens.enable" = true;
"rust-analyzer.lens.implementations.enable" = true;
"rust-analyzer.lens.references.adt.enable" = true;
"rust-analyzer.lens.references.enumVariant.enable" = true;
"rust-analyzer.lens.references.method.enable" = true;
"rust-analyzer.lens.references.trait.enable" = true;
"files.watcherExclude" = {
"**/target/**" = true;
};
"search.exclude" = {
"**/target/**" = true;
};
};
};
};
combine =
ls:
builtins.foldl'
(acc: l: {
extensions = acc.extensions ++ (l.extensions or [ ]);
userSettings = recursiveUpdate acc.userSettings (l.userSettings or { });
})
{
extensions = [ ];
userSettings = { };
}
ls;
mkProfile =
layersList: extras:
let
base = combine layersList;
in
{
extensions = base.extensions ++ (extras.extensions or [ ]);
userSettings = recursiveUpdate base.userSettings (extras.userSettings or { });
};
in
{
options.my.applications.vscode.homeManager = {
enable = lib.mkEnableOption "VSCode home-manager configuration";
};
config = lib.mkIf cfg.enable {
nixpkgs.config.allowUnfree = true;
home-manager.sharedModules = [
{
programs.vscode = {
enable = true;
profiles = {
default = mkProfile [ layers.common ] { };
nix = mkProfile [ layers.common layers.nix ] { };
web = mkProfile [ layers.common layers.web layers.web-biome ] { };
web-oxc = mkProfile [ layers.common layers.web layers.web-oxc ] { };
jupyter = mkProfile [ layers.common layers.jupyter ] { };
java = mkProfile [ layers.common layers.java ] { };
rust = mkProfile [ layers.common layers.rust ] { };
};
};
xdg.configFile."Code/User/locale.json".text = ''
{
"locale": "ja"
}
'';
}
];
};
}
+20
View File
@@ -0,0 +1,20 @@
{
pkgs,
lib,
config,
...
}:
let
cfg = config.my.applications.vscode.system;
in
{
options.my.applications.vscode.system = {
enable = lib.mkEnableOption "VSCode system configuration";
};
config = lib.mkIf cfg.enable {
environment.systemPackages = with pkgs; [
sqlite # SQLite database library (VSCode dependency)
];
};
}
+53
View File
@@ -0,0 +1,53 @@
{
pkgs,
lib,
config,
...
}:
let
cfg = config.my.applications.wayland;
in
{
options.my.applications.wayland = {
enable = lib.mkEnableOption "Wayland session support";
};
config = lib.mkIf cfg.enable {
programs.xwayland.enable = true;
xdg.portal = {
enable = true;
wlr.enable = true;
extraPortals = [
pkgs.xdg-desktop-portal-wlr
pkgs.xdg-desktop-portal-gtk
];
xdgOpenUsePortal = true;
config = {
common.default = [
"wlr"
"gtk"
];
niri.default = [
"wlr"
"gtk"
];
};
};
environment.variables = {
NIXOS_OZONE_WL = "1";
};
environment.sessionVariables = {
ELECTRON_OZONE_PLATFORM_HINT = "wayland";
QT_QPA_PLATFORM = "wayland;xcb";
NIXOS_OZONE_WL = "1";
};
environment.systemPackages = with pkgs; [
xwayland-satellite # X11 compatibility layer for Wayland
uwsm # Universal Wayland Session Manager
];
};
}
+23
View File
@@ -0,0 +1,23 @@
{
lib,
config,
...
}:
let
cfg = config.my.applications.zellij;
in
{
imports = [
./system.nix
./home.nix
];
options.my.applications.zellij = {
enable = lib.mkEnableOption "Zellij terminal multiplexer";
};
config = lib.mkIf cfg.enable {
my.applications.zellij.system.enable = lib.mkDefault true;
my.applications.zellij.homeManager.enable = lib.mkDefault true;
};
}
+81
View File
@@ -0,0 +1,81 @@
{
lib,
config,
...
}:
let
cfg = config.my.applications.zellij.homeManager;
in
{
options.my.applications.zellij.homeManager = {
enable = lib.mkEnableOption "Zellij home-manager configuration";
};
config.home-manager.sharedModules = [
{
config = lib.mkIf cfg.enable {
programs.zellij = {
enable = true;
enableZshIntegration = false;
settings = {
pane_frames = true;
copy_on_select = false;
default_mode = "locked";
default_shell = "/run/current-system/sw/bin/zsh";
};
extraConfig = ''
keybinds {
locked {
bind "Ctrl g" { SwitchToMode "normal"; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt n" { NewPane; }
bind "Alt t" { NewTab; }
bind "Alt H" { Resize "Increase Left"; }
bind "Alt J" { Resize "Increase Down"; }
bind "Alt K" { Resize "Increase Up"; }
bind "Alt L" { Resize "Increase Right"; }
bind "Alt c" { Copy; }
}
normal {
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt n" { NewPane; }
bind "Alt t" { NewTab; }
bind "Alt H" { Resize "Increase Left"; }
bind "Alt J" { Resize "Increase Down"; }
bind "Alt K" { Resize "Increase Up"; }
bind "Alt L" { Resize "Increase Right"; }
}
}
'';
layouts.dev = ''
layout {
pane split_direction="vertical" {
pane {
pane command="nvim"
pane stacked=true size="30%" {
pane expanded=true
pane
}
}
pane size=1 borderless=true {
plugin location="zellij:compact-bar"
}
}
}
'';
};
};
}
];
}
+20
View File
@@ -0,0 +1,20 @@
{
pkgs,
lib,
config,
...
}:
let
cfg = config.my.applications.zellij.system;
in
{
options.my.applications.zellij.system = {
enable = lib.mkEnableOption "Zellij system configuration";
};
config = lib.mkIf cfg.enable {
environment.systemPackages = with pkgs; [
zellij # Terminal multiplexer with batteries included
];
};
}
+26
View File
@@ -0,0 +1,26 @@
{
pkgs,
lib,
config,
...
}:
let
cfg = config.my.applications.zoom;
in
{
options.my.applications.zoom = {
enable = lib.mkEnableOption "Zoom video conferencing";
};
config = lib.mkIf cfg.enable {
nixpkgs.config.allowUnfreePredicate = pkg: lib.getName pkg == "zoom-us";
home-manager.sharedModules = [
{
home.packages = with pkgs; [
zoom-us # Video conferencing application
];
}
];
};
}
+25
View File
@@ -0,0 +1,25 @@
{
lib,
config,
...
}:
let
cfg = config.my.applications.zsh;
in
{
imports = [
./system.nix
./home.nix
];
options.my.applications.zsh = {
enable = lib.mkEnableOption "Zsh shell";
system.enable = lib.mkEnableOption "Zsh system configuration";
homeManager.enable = lib.mkEnableOption "Zsh home-manager configuration";
};
config = lib.mkIf cfg.enable {
my.applications.zsh.system.enable = lib.mkDefault true;
my.applications.zsh.homeManager.enable = lib.mkDefault true;
};
}

Some files were not shown because too many files have changed in this diff Show More