Merge pull request 'scrappy-add' (#1) from scrappy-add into master

Reviewed-on: #1
This commit is contained in:
Nathan Anderson 2024-11-14 09:55:30 -07:00
commit 973f54c6bd
74 changed files with 9678 additions and 9 deletions

View File

@ -1,5 +1,23 @@
{ {
"nodes": { "nodes": {
"flake-parts": {
"inputs": {
"nixpkgs-lib": "nixpkgs-lib"
},
"locked": {
"lastModified": 1726153070,
"narHash": "sha256-HO4zgY0ekfwO5bX0QH/3kJ/h4KvUDFZg8YpkNwIbg1U=",
"owner": "hercules-ci",
"repo": "flake-parts",
"rev": "bcef6817a8b2aa20a5a6dbb19b43e63c5bf8619a",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "flake-parts",
"type": "github"
}
},
"home-manager": { "home-manager": {
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": [
@ -21,18 +39,75 @@
"type": "github" "type": "github"
} }
}, },
"nixpkgs": { "niri": {
"inputs": {
"flake-parts": "flake-parts",
"niri-stable": "niri-stable",
"niri-unstable": "niri-unstable",
"nixpkgs": "nixpkgs",
"nixpkgs-stable": "nixpkgs-stable",
"xwayland-satellite-stable": "xwayland-satellite-stable",
"xwayland-satellite-unstable": "xwayland-satellite-unstable"
},
"locked": { "locked": {
"lastModified": 1719426051, "lastModified": 1727249100,
"narHash": "sha256-yJL9VYQhaRM7xs0M867ZFxwaONB9T2Q4LnGo1WovuR4=", "narHash": "sha256-2KX8eQtOHKwdq989ybu4fk0FhESTS7KQkvDa+ilYsek=",
"owner": "nixos", "owner": "sodiboo",
"repo": "nixpkgs", "repo": "niri-flake",
"rev": "89c49874fb15f4124bf71ca5f42a04f2ee5825fd", "rev": "9d8440b2e3c3eafd15da1b00a41b502e6b4a084e",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "nixos", "owner": "sodiboo",
"ref": "nixos-24.05", "repo": "niri-flake",
"type": "github"
}
},
"niri-stable": {
"flake": false,
"locked": {
"lastModified": 1726304152,
"narHash": "sha256-4YDrKMwXGVOBkeaISbxqf24rLuHvO98TnqxWYfgiSeg=",
"owner": "YaLTeR",
"repo": "niri",
"rev": "6a48728ffb1e638839b07f9ab2f06b2adb41dc61",
"type": "github"
},
"original": {
"owner": "YaLTeR",
"ref": "v0.1.9",
"repo": "niri",
"type": "github"
}
},
"niri-unstable": {
"flake": false,
"locked": {
"lastModified": 1726412705,
"narHash": "sha256-qRqGbvTpGRn3QhvjOyX0Sn/qPT1bLQUSSHz1vlW/7HE=",
"owner": "YaLTeR",
"repo": "niri",
"rev": "6ee5b5afa784c76b1c31c371b59177136e558fa6",
"type": "github"
},
"original": {
"owner": "YaLTeR",
"repo": "niri",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1726937504,
"narHash": "sha256-bvGoiQBvponpZh8ClUcmJ6QnsNKw0EMrCQJARK3bI1c=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "9357f4f23713673f310988025d9dc261c20e70c6",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-unstable",
"repo": "nixpkgs", "repo": "nixpkgs",
"type": "github" "type": "github"
} }
@ -53,6 +128,34 @@
"type": "github" "type": "github"
} }
}, },
"nixpkgs-lib": {
"locked": {
"lastModified": 1725233747,
"narHash": "sha256-Ss8QWLXdr2JCBPcYChJhz4xJm+h/xjl4G0c0XlP6a74=",
"type": "tarball",
"url": "https://github.com/NixOS/nixpkgs/archive/356624c12086a18f2ea2825fed34523d60ccc4e3.tar.gz"
},
"original": {
"type": "tarball",
"url": "https://github.com/NixOS/nixpkgs/archive/356624c12086a18f2ea2825fed34523d60ccc4e3.tar.gz"
}
},
"nixpkgs-stable": {
"locked": {
"lastModified": 1727129439,
"narHash": "sha256-nPyrcFm6FSk7CxzVW4x2hu62aLDghNcv9dX6DF3dXw8=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "babc25a577c3310cce57c72d5bed70f4c3c3843a",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-24.05",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs-unstable": { "nixpkgs-unstable": {
"locked": { "locked": {
"lastModified": 1726937504, "lastModified": 1726937504,
@ -69,6 +172,22 @@
"type": "github" "type": "github"
} }
}, },
"nixpkgs_2": {
"locked": {
"lastModified": 1719426051,
"narHash": "sha256-yJL9VYQhaRM7xs0M867ZFxwaONB9T2Q4LnGo1WovuR4=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "89c49874fb15f4124bf71ca5f42a04f2ee5825fd",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-24.05",
"repo": "nixpkgs",
"type": "github"
}
},
"nur": { "nur": {
"locked": { "locked": {
"lastModified": 1719509062, "lastModified": 1719509062,
@ -87,11 +206,45 @@
"root": { "root": {
"inputs": { "inputs": {
"home-manager": "home-manager", "home-manager": "home-manager",
"nixpkgs": "nixpkgs", "niri": "niri",
"nixpkgs": "nixpkgs_2",
"nixpkgs-23": "nixpkgs-23", "nixpkgs-23": "nixpkgs-23",
"nixpkgs-unstable": "nixpkgs-unstable", "nixpkgs-unstable": "nixpkgs-unstable",
"nur": "nur" "nur": "nur"
} }
},
"xwayland-satellite-stable": {
"flake": false,
"locked": {
"lastModified": 1718165778,
"narHash": "sha256-dwF9nI54a6Fo9XU5s4qmvMXSgCid3YQVGxch00qEMvI=",
"owner": "Supreeeme",
"repo": "xwayland-satellite",
"rev": "b6d281967cb0b7bf1dfdb8d0f597b517dc4aa5c5",
"type": "github"
},
"original": {
"owner": "Supreeeme",
"ref": "v0.4",
"repo": "xwayland-satellite",
"type": "github"
}
},
"xwayland-satellite-unstable": {
"flake": false,
"locked": {
"lastModified": 1726378112,
"narHash": "sha256-OANPb73V/RQDqtpIcbzeJ93KuOHKFQv+1xXC44Ut7tY=",
"owner": "Supreeeme",
"repo": "xwayland-satellite",
"rev": "b962a0f33b503aa39c9cf6919f488b664e5b79b4",
"type": "github"
},
"original": {
"owner": "Supreeeme",
"repo": "xwayland-satellite",
"type": "github"
}
} }
}, },
"root": "root", "root": "root",

View File

@ -75,6 +75,24 @@
./jaci/default.nix ./jaci/default.nix
]; ];
}; };
scrappy = nixpkgs.lib.nixosSystem {
# Pass args to desktop configuration
specialArgs = {
inherit inputs outputs timeZone system;
};
modules = [
# Setup home manager
inputs.home-manager.nixosModules.home-manager {
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.users.scrappy = import ./scrappy/modules/home-manager/home.nix;
home-manager.extraSpecialArgs = {
inherit inputs outputs unstablePkgs pkgs23;
};
}
./scrappy/default.nix
];
};
}; };
}; };
} }

39
scrappy/default.nix Normal file
View File

@ -0,0 +1,39 @@
{ config, lib, inputs, outputs, pkgs, system, timeZone, ... }:
let
userName = "scrappy";
fullName = "Nate Anderson";
email = "n8r@tuta.io";
hostName = "scrapper";
desktop = "hyprland";
gaming = true;
in
{
imports = [
./desktop-configuration.nix
./hardware-configuration.nix
];
deskCfg = {
userName = userName;
hostName = hostName;
de = desktop;
installGaming = gaming;
};
# Limit the number of generations to keep
boot.loader.systemd-boot.configurationLimit = 3;
# Perform garbage collection weekly to maintain low disk usage
nix.gc = {
automatic = true;
dates = "weekly";
options = "--delete-older-than 5d";
};
# Optimize storage
# You can also manually optimize the store via:
# nix-store --optimise
# Refer to the following link for more details:
# https://nixos.org/manual/nix/stable/command-ref/conf-file.html#conf-auto-optimise-store
nix.settings.auto-optimise-store = true;
}

View File

@ -0,0 +1,166 @@
{ config, lib, inputs, outputs, pkgs, timeZone, system, ... }:
let
supportedDesktops = [ "gnome" "hyprland" ];
supportedDesktopsStr = lib.strings.concatStringsSep ", " supportedDesktops;
deskCfg = config.deskCfg;
in
{
options.deskCfg = {
de = lib.mkOption {
default = "";
type = lib.types.str;
description = "Desktop Environment";
};
userName = lib.mkOption {
type = lib.types.str;
description = "Main username for system";
};
hostName = lib.mkOption {
type = lib.types.str;
description = "Hostname for system";
};
installGaming = lib.mkOption {
type = lib.types.bool;
default = true;
description = "Whether to install gaming software or not";
};
};
imports = [
modules/user/main_user.nix
];
config = {
assertions = [
{
assertion = builtins.elem deskCfg.de supportedDesktops;
message = "Unsupported desktop environment: ${deskCfg.de}\nSupported DE's: ${supportedDesktopsStr}";
}
];
nixpkgs.overlays = [
inputs.nur.overlay
];
# Enable flakes feature
nix.settings.experimental-features = [
"nix-command" "flakes"
];
# boot.plymouth.enable = true;
boot = {
plymouth = {
enable = true;
theme = "circle_flow";
themePackages = with pkgs; [
# By default we would install all themes
(adi1090x-plymouth-themes.override {
selected_themes = [ "circle_flow" ];
})
];
};
# Enable "Silent Boot"
consoleLogLevel = 0;
initrd.verbose = false;
kernelParams = [
"quiet"
"splash"
"boot.shell_on_fail"
"loglevel=3"
"rd.systemd.show_status=false"
"rd.udev.log_level=3"
"udev.log_priority=3"
];
# Hide the OS choice for bootloaders.
# It's still possible to open the bootloader list by pressing any key
# It will just not appear on screen unless a key is pressed
loader.timeout = 0;
# Use the systemd-boot EFI boot loader.
loader.systemd-boot.enable = true;
loader.efi.canTouchEfiVariables = true;
};
networking.hostName = deskCfg.hostName; # Define your hostname.
networking.networkmanager.enable = true; # Easiest to use and most distros use this by default.
networking.wireless.iwd.enable = true;
time.timeZone = timeZone;
main_user = {
enable = true;
userName = deskCfg.userName;
isDesktopUser = true;
};
#niriwm = {
# enable = false;
# useNonFree = true;
# #installGaming = deskCfg.installGaming;
# systemPackages = with pkgs; [
# libreoffice
# rpi-imagergh
# ];
#};
## TODO move all of this into a hyprland config
environment.systemPackages = with pkgs; [
cryptsetup
nwg-hello
cage
];
# Get block UUID with
# `sudo blkid /dev/mmcblk1p1`
# Makes encrypted device available under /dev/mapper/enc_source
environment.etc.crypttab.text = ''
enc_source UUID=6e131a4e-1cba-4db7-b635-42381e4fd790 /root/keyfile
'';
programs.hyprland.enable = true;
# programs.steam.enable = true;
# For electron apps in wayland
environment.sessionVariables.NIXOS_OZONE_WL = "1";
services.greetd = {
enable = true;
settings = rec {
initial_session = {
command = "${pkgs.hyprland}/bin/hyprland";
user = "scrappy";
};
default_session = initial_session;
};
};
# For yubioath desktop
services.pcscd.enable = true;
# Audio
security.rtkit.enable = true;
services.pipewire = {
enable = true;
alsa.enable = true;
pulse.enable = true;
wireplumber.enable = true;
};
programs.thunar = {
enable = true;
plugins = with pkgs.xfce; [
thunar-archive-plugin
thunar-volman
];
};
programs.file-roller.enable = true;
programs.xfconf.enable = true;
# sound.enable = false;
# services.xserver = {
# enable = true;
# displayManager.gdm.enable = true;
# desktopManager.gnome.enable = true;
# };
programs.regreet.enable = true;
programs.zsh.enable = true;
nixpkgs.config.allowUnfree = true;
system.stateVersion = "24.05"; # Did you read the comment?
};
}

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,46 @@
[main]
font=Hurmit Nerd Font Mono:size=12
notify=yes
selection-target=clipboard
[colors]
# Catpuccin Machiatto theme
foreground=cad3f5 # Text
background=24273a # Base
regular0=494d64 # Surface 1
regular1=ed8796 # red
regular2=a6da95 # green
regular3=eed49f # yellow
regular4=8aadf4 # blue
regular5=f5bde6 # pink
regular6=8bd5ca # teal
regular7=b8c0e0 # Subtext 1
bright0=5b6078 # Surface 2
bright1=ed8796 # red
bright2=a6da95 # green
bright3=eed49f # yellow
bright4=8aadf4 # blue
bright5=f5bde6 # pink
bright6=8bd5ca # teal
bright7=a5adcb # Subtext 0foreground=cdd6f4 # Text
# [colors]
# Catpuccin Mocha theme colors
# background=1e1e2e # Base
# regular0=45475a # Surface 1
# regular1=f38ba8 # red
# regular2=a6e3a1 # green
# regular3=f9e2af # yellow
# regular4=89b4fa # blue
# regular5=f5c2e7 # pink
# regular6=94e2d5 # teal
# regular7=bac2de # Subtext 1
# bright0=585b70 # Surface 2
# bright1=f38ba8 # red
# bright2=a6e3a1 # green
# bright3=f9e2af # yellow
# bright4=89b4fa # blue
# bright5=f5c2e7 # pink
# bright6=94e2d5 # teal
# bright7=a6adc8 # Subtext 0

View File

@ -0,0 +1,169 @@
# Theme
theme = "catppuccin_macchiato"
[keys.normal]
# Navigation
n = "move_char_left" # Maps the 'a' key to the move_char_left command
i = "move_visual_line_down"
e = "move_visual_line_up"
o = "move_char_right"
I = "page_down"
E = "page_up"
# Modes
h = "insert_mode"
H = "insert_at_line_start"
l = "open_below"
L = "open_above"
# Search
k = "search_next"
K = "search_prev"
# Selection
C-s = "split_selection_on_newline"
C-minus = "merge_selections"
C-_ = "merge_consecutive_selections"
"C-;" = "flip_selections"
"C-:" = "ensure_selections_forward"
"C-," = "remove_primary_selection"
C-c = "change_selection_noyank"
C-d = "delete_selection_noyank"
"C-(" = "rotate_selection_contents_backward"
"C-)" = "rotate_selection_contents_forward"
C-x = "shrink_to_line_bounds"
C-J = "join_selections_space"
C-K = "remove_selections"
C-o = "expand_selection"
C-i = "shrink_selection"
C-p = "select_prev_sibling"
C-n = "select_next_sibling"
# Misc
"C-/" = "toggle_comments"
[keys.normal."C-space"]
x = ":wbc!"
s = ":w!" # save file
o = ":config-open"
[keys.normal.g]
"/" = "goto_next_buffer"
h = "goto_previous_buffer"
n = ["collapse_selection", "extend_to_line_start"]
o = ["collapse_selection", "extend_to_line_end"]
e = "move_line_up"
i = "move_line_down"
l = "goto_last_line"
p = "no_op"
k = "no_op"
j = "no_op"
[keys.normal.m]
m = ["select_mode", "match_brackets", "normal_mode"]
[keys.select]
n = "extend_char_left"
i = "extend_line_down"
e = "extend_line_up"
o = "extend_char_right"
[keys.select.g]
"/" = "goto_next_buffer"
h = "goto_previous_buffer"
n = "goto_line_start"
o = "goto_line_end"
e = "move_line_up"
i = "move_line_down"
l = "goto_last_line"
p = "no_op"
k = "no_op"
j = "no_op"
# Window mode
[keys.normal."C-w"]
h = "hsplit"
C-h = "hsplit"
n = "jump_view_left"
C-n = "jump_view_left"
i = "jump_view_down"
I = "swap_view_down"
C-i = "jump_view_down"
e = "jump_view_up"
E = "swap_view_up"
C-e = "jump_view_up"
o = "jump_view_right"
O = "swap_view_right"
C-o = "jump_view_right"
# Remove old
s = "no_op"
C-s = "no_op"
H = "no_op"
j = "no_op"
J = "no_op"
C-j = "no_op"
k = "no_op"
K = "no_op"
C-k = "no_op"
l = "no_op"
L = "no_op"
C-l = "no_op"
[keys.normal."space"]
h = "hover"
k = "select_references_to_symbol_under_cursor"
[editor]
bufferline = "always"
auto-save = true
line-number = "relative"
cursorline = true
cursorcolumn = true
color-modes = true
text-width = 120
auto-format = true
[editor.statusline]
left = ["mode", "spinner", "version-control"]
center = ["file-name"]
mode.normal = "Normal"
mode.insert = "Insert"
mode.select = "Select"
[editor.indent-guides]
render = true
[editor.lsp]
display-messages = true
display-inlay-hints = false
[editor.cursor-shape]
insert = "bar"
normal = "block"
select = "underline"
[editor.file-picker]
hidden = false
[editor.whitespace.render]
space = "all"
tab = "all"
tabpad = "all"
newline = "none"
nbsp = "none"
[editor.whitespace.characters]
space = "·"
tab = "⇀"
tabpad = " "
#w = "move_line_up" # Maps the 'w' key move_line_up
#"C-S-esc" = "extend_line" # Maps Ctrl-Shift-Escape to extend_line
#g = { a = "code_action" } # Maps `ga` to show possible code actions
#"ret" = ["open_below", "normal_mode"] # Maps the enter key to open_below then re-enter normal mode

View File

@ -0,0 +1,4 @@
# Change dart format to 120 lines
[[language]]
name = "dart"
formatter = {command = "dart", args = ["format", "-l", "120"]}

Binary file not shown.

After

Width:  |  Height:  |  Size: 376 KiB

View File

@ -0,0 +1,447 @@
snippet_support = true
verbosity = 2
[server]
# exit session if no requests were received during given period in seconds
# set to 0 to disable
timeout = 1800 # seconds = 30 minutes
[language.bash]
filetypes = ["sh"]
roots = [".git", ".hg"]
command = "bash-language-server"
args = ["start"]
[language.c_cpp]
filetypes = ["c", "cpp"]
roots = ["compile_commands.json", ".clangd", ".git", ".hg"]
command = "clangd"
[language.clojure]
filetypes = ["clojure"]
roots = ["project.clj", ".git", ".hg"]
command = "clojure-lsp"
settings_section = "_"
[language.clojure.settings._]
# See https://clojure-lsp.io/settings/#all-settings
# source-paths-ignore-regex = ["resources.*", "target.*"]
[language.cmake]
filetypes = ["cmake"]
roots = ["CMakeLists.txt", ".git", ".hg"]
command = "cmake-language-server"
[language.crystal]
filetypes = ["crystal"]
roots = ["shard.yml"]
command = "crystalline"
[language.css]
filetypes = ["css"]
roots = ["package.json", ".git", ".hg"]
command = "vscode-css-languageserver"
args = ["--stdio"]
[language.less]
filetypes = ["less"]
roots = ["package.json", ".git", ".hg"]
command = "vscode-css-languageserver"
args = ["--stdio"]
[language.scss]
filetypes = ["scss"]
roots = ["package.json", ".git", ".hg"]
command = "vscode-css-languageserver"
args = ["--stdio"]
[language.d]
filetypes = ["d", "di"]
roots = [".git", "dub.sdl", "dub.json"]
command = "dls"
[language.dart]
# start shell to find path to dart analysis server source
filetypes = ["dart"]
roots = ["pubspec.yaml", ".git", ".hg"]
command = "dart"
args = ["language-server"]
[language.dart.settings.dart]
lineLength = 120
[language.elixir]
filetypes = ["elixir"]
roots = ["mix.exs"]
command = "elixir-ls"
settings_section = "elixirLS"
[language.elixir.settings.elixirLS]
# See https://github.com/elixir-lsp/elixir-ls/blob/master/apps/language_server/lib/language_server/server.ex
# dialyzerEnable = true
[language.elm]
filetypes = ["elm"]
roots = ["elm.json"]
command = "elm-language-server"
args = ["--stdio"]
settings_section = "elmLS"
[language.elm.settings.elmLS]
# See https://github.com/elm-tooling/elm-language-server#server-settings
runtime = "node"
elmPath = "elm"
elmFormatPath = "elm-format"
elmTestPath = "elm-test"
[language.elvish]
filetypes = ["elvish"]
roots = [".git", ".hg"]
command = "elvish"
args = ["-lsp"]
[language.erlang]
filetypes = ["erlang"]
# See https://github.com/erlang-ls/erlang_ls.git for more information and
# how to configure. This default config should work in most cases though.
roots = ["rebar.config", "erlang.mk", ".git", ".hg"]
command = "erlang_ls"
[language.go]
filetypes = ["go"]
roots = ["Gopkg.toml", "go.mod", ".git", ".hg"]
command = "gopls"
settings_section = "gopls"
[language.go.settings.gopls]
# See https://github.com/golang/tools/blob/master/gopls/doc/settings.md
# "build.buildFlags" = []
[language.haskell]
filetypes = ["haskell"]
roots = ["hie.yaml", "cabal.project", "Setup.hs", "stack.yaml", "*.cabal"]
command = "haskell-language-server-wrapper"
args = ["--lsp"]
settings_section = "_"
[language.haskell.settings._]
# See https://haskell-language-server.readthedocs.io/en/latest/configuration.html
# haskell.formattingProvider = "ormolu"
[language.html]
filetypes = ["html"]
roots = ["package.json"]
command = "vscode-html-languageserver"
args = ["--stdio"]
# # Commented out by default because you still need to set the paths in the JDT
# # Language Server arguments below before this can become a valid configuration.
# [language.java]
# filetypes = ["java"]
# roots = [".git", "mvnw", "gradlew"]
# command = "java"
# args = [
# "-Declipse.application=org.eclipse.jdt.ls.core.id1",
# "-Dosgi.bundles.defaultStartLevel=4",
# "-Declipse.product=org.eclipse.jdt.ls.core.product",
# "-Dlog.level=ALL",
# "-Dfile.encoding=utf-8",
# "--add-modules=ALL-SYSTEM",
# "--add-opens",
# "java.base/java.util=ALL-UNNAMED",
# "--add-opens",
# "java.base/java.lang=ALL-UNNAMED",
# "-noverify",
# "-Xmx1G",
# "-jar",
# "/path/to/eclipse.jdt.ls/repository/plugins/org.eclipse.equinox.launcher_1.6.100.v20201223-0822.jar",
# "-configuration",
# "/path/to/eclipse.jdt.ls/repository/config_linux",
# "-data",
# "/path/to/eclipse-workspace",
# ]
# [language.java.settings]
# # See https://github.dev/eclipse/eclipse.jdt.ls
# # "java.format.insertSpaces" = true
[language.javascriptreact]
filetypes = ["javascript"]
roots = ["package.json", "tsconfig.json", ".git", ".hg"]
command = "typescript-language-server"
args = ["--stdio"]
settings_section = "_"
[language.javascriptreact.settings._]
# quotePreference = "single"
# javascript.format.semicolons = "insert"
[language.json]
filetypes = ["json"]
roots = ["package.json"]
command = "vscode-json-language-server"
args = ["--stdio"]
# Requires Julia package "LanguageServer"
# Run: `julia --project=@kak-lsp -e 'import Pkg; Pkg.add("LanguageServer")'` to install it
# Configuration adapted from https://github.com/neovim/nvim-lspconfig/blob/bcebfac7429cd8234960197dca8de1767f3ef5d3/lua/lspconfig/julials.lua
[language.julia]
filetypes = ["julia"]
roots = ["Project.toml", ".git", ".hg"]
command = "julia"
args = [
"--startup-file=no",
"--history-file=no",
"-e",
"""
ls_install_path = joinpath(get(DEPOT_PATH, 1, joinpath(homedir(), ".julia")), "environments", "kak-lsp");
pushfirst!(LOAD_PATH, ls_install_path);
using LanguageServer;
popfirst!(LOAD_PATH);
depot_path = get(ENV, "JULIA_DEPOT_PATH", "");
buffer_file = ENV["kak_buffile"];
project_path = let
dirname(something(
# 1. Check if there is an explicitly set project
Base.load_path_expand((
p = get(ENV, "JULIA_PROJECT", nothing);
p === nothing ? nothing : isempty(p) ? nothing : p
)),
# 2. Check for Project.toml in current working directory
Base.current_project(pwd()),
# 3. Check for Project.toml from buffer's full file path excluding the file name
Base.current_project(dirname(buffer_file)),
# 4. Fallback to global environment
Base.active_project()
))
end
server = LanguageServer.LanguageServerInstance(stdin, stdout, project_path, depot_path);
server.runlinter = true;
run(server);
""",
]
[language.julia.settings]
# See https://github.com/julia-vscode/LanguageServer.jl/blob/master/src/requests/workspace.jl
# Format options. See https://github.com/julia-vscode/DocumentFormat.jl/blob/master/src/DocumentFormat.jl
# "julia.format.indent" = 4
# Lint options. See https://github.com/julia-vscode/StaticLint.jl/blob/master/src/linting/checks.jl
# "julia.lint.call" = true
# Other options, see https://github.com/julia-vscode/LanguageServer.jl/blob/master/src/requests/workspace.jl
# "julia.lint.run" = "true"
[language.latex]
filetypes = ["latex"]
roots = [".git", ".hg"]
command = "texlab"
settings_section = "texlab"
[language.latex.settings.texlab]
# See https://github.com/latex-lsp/texlab/wiki/Configuration
#
# Preview configuration for zathura with SyncTeX search.
# For other PDF viewers see https://github.com/latex-lsp/texlab/wiki/Previewing
forwardSearch.executable = "zathura"
forwardSearch.args = [
"%p",
"--synctex-forward", # Support texlab-forward-search
"%l:1:%f",
"--synctex-editor-command", # Inverse search: use Control+Left-Mouse-Button to jump to source.
"""
sh -c '
echo "
evaluate-commands -client %opt{texlab_client} %{
evaluate-commands -try-client %opt{jumpclient} %{
edit -- %{input} %{line}
}
}
" | kak -p $kak_session
'
""",
]
[language.lua]
filetypes = ["lua"]
roots = [".git", ".hg"]
command = "lua-language-server"
[language.lua.settings.Lua]
# See https://github.com/sumneko/vscode-lua/blob/master/setting/schema.json
# diagnostics.enable = true
[language.markdown]
filetypes = ["md", "markdown"]
roots = [".git", ".hg"]
command = "vscode-markdown-language-server"
args = ["--stdio"]
# [[language]]
# name = "markdown"
# scope = "source.md"
# injection-regex = "md|markdown"
# file-types = ["md", "markdown", "PULLREQ_EDITMSG", "mkd", "mdwn", "mdown", "markdn", "mdtxt", "mdtext", "workbook"]
# roots = [".marksman.toml"]
# language-servers = [ "marksman" ]
# indent = { tab-width = 2, unit = " " }
[language.nim]
filetypes = ["nim"]
roots = ["*.nimble", ".git", ".hg"]
command = "nimlsp"
[language.nix]
filetypes = ["nix"]
roots = ["flake.nix", "shell.nix", ".git", ".hg"]
command = "rnix-lsp"
[language.ocaml]
filetypes = ["ocaml"]
# Often useful to simply do a `touch dune-workspace` in your project root folder if you have problems with root detection
roots = ["dune-workspace", "dune-project", "Makefile", "opam", "*.opam", "esy.json", ".git", ".hg", "dune"]
command = "ocamllsp"
[language.php]
filetypes = ["php"]
roots = [".htaccess", "composer.json"]
command = "intelephense"
args = ["--stdio"]
settings_section = "intelephense"
[language.php.settings]
intelephense.storagePath = "/tmp/intelephense"
[language.proto]
filetypes = ["protobuf"]
roots = [".git", ".hg"]
command = "pls" # https://github.com/lasorda/protobuf-language-server
[language.python]
filetypes = ["python"]
roots = ["requirements.txt", "setup.py", ".git", ".hg"]
command = "pylsp"
settings_section = "_"
[language.python.settings._]
# See https://github.com/python-lsp/python-lsp-server#configuration
# pylsp.configurationSources = ["flake8"]
pylsp.plugins.jedi_completion.include_params = true
[language.r]
filetypes = ["r"]
roots = ["DESCRIPTION", ".git", ".hg"]
command = "R"
args = ["--slave", "-e", "languageserver::run()"]
[language.racket]
filetypes = ["racket"]
roots = ["info.rkt"]
command = "racket"
args = ["-l", "racket-langserver"]
[language.reason]
filetypes = ["reason"]
roots = ["package.json", "Makefile", ".git", ".hg"]
command = "ocamllsp"
[language.ruby]
filetypes = ["ruby"]
roots = ["Gemfile"]
command = "solargraph"
args = ["stdio"]
settings_section = "_"
[language.ruby.settings._]
# See https://github.com/castwide/solargraph/blob/master/lib/solargraph/language_server/host.rb
# diagnostics = false
# [language.rust]
# filetypes = ["rust"]
# roots = ["Cargo.toml"]
# command = "sh"
# args = [
# "-c",
# """
# if path=$(rustup which rls 2>/dev/null); then
# "$path"
# else
# rls
# fi
# """,
# ]
# [language.rust.settings.rust]
# # See https://github.com/rust-lang/rls#configuration
# # features = []
[language.rust]
filetypes = ["rust"]
roots = ["Cargo.toml"]
command = "sh"
args = [
"-c",
"""
if path=$(rustup which rust-analyzer 2>/dev/null); then
"$path"
else
rust-analyzer
fi
""",
]
settings_section = "rust-analyzer"
[language.rust.settings.rust-analyzer]
# See https://rust-analyzer.github.io/manual.html#configuration
hoverActions.enable = false # kak-lsp doesn't support this at the moment
# cargo.features = []
[language.terraform]
filetypes = ["terraform"]
roots = ["*.tf"]
command = "terraform-ls"
args = ["serve"]
[language.terraform.settings.terraform-ls]
# See https://github.com/hashicorp/terraform-ls/blob/main/docs/SETTINGS.md
# rootModulePaths = []
# [language.typescriptreact]
# filetypes = ["typescript"]
# roots = ["package.json", "tsconfig.json", ".git", ".hg"]
# command = "typescript-language-server"
# args = ["--stdio"]
# settings_section = "_"
# [language.typescriptreact.settings._]
# quotePreference = "double"
# typescript.format.semicolons = "insert"
[language.tsx]
filetypes = ["typescript"]
roots = ["package.json", "tsconfig.json", ".git", ".hg"]
command = "typescript-language-server"
args = ["--stdio"]
settings_section = "_"
# [language.typescript.settings.deno]
# enable = true
# lint = true
[language.yaml]
filetypes = ["yaml"]
roots = [".git", ".hg"]
command = "yaml-language-server"
args = ["--stdio"]
[language.yaml.settings]
# See https://github.com/redhat-developer/yaml-language-server#language-server-settings
# Defaults are at https://github.com/redhat-developer/yaml-language-server/blob/master/src/yamlSettings.ts
# yaml.format.enable = true
[language.zig]
filetypes = ["zig"]
roots = ["build.zig"]
command = "zls"
# Semantic tokens support
# See https://microsoft.github.io/language-server-protocol/specifications/specification-current/#textDocument_semanticTokens
# for the default list of tokens and modifiers.
# However, many language servers implement their own values.
# Make sure to check the output of `lsp-capabilities` and each server's documentation and source code as well.
# Examples:
# - TypeScript: https://github.com/microsoft/vscode-languageserver-node/blob/main/client/src/common/semanticTokens.ts
# - Rust Analyzer: https://github.com/rust-analyzer/rust-analyzer/blob/master/crates/ide/src/syntax_highlighting.rs
[semantic_tokens]
faces = [
{face="documentation", token="comment", modifiers=["documentation"]},
{face="comment", token="comment"},
{face="function", token="function"},
{face="keyword", token="keyword"},
{face="module", token="namespace"},
{face="operator", token="operator"},
{face="string", token="string"},
{face="type", token="type"},
{face="default+d", token="variable", modifiers=["readonly"]},
{face="default+d", token="variable", modifiers=["constant"]},
{face="variable", token="variable"},
]

View File

@ -0,0 +1,83 @@
# Catppuccin theme for Kakoune
# Color palette
declare-option str rosewater 'rgb:f2d5cf'
declare-option str red 'rgb:e78284'
declare-option str mauve 'rgb:ca9ee6'
declare-option str maroon 'rgb:ea999c'
declare-option str pink 'rgb:f4b8e4'
declare-option str cyan 'rgb:85c1dc'
declare-option str yellow 'rgb:e5c890'
declare-option str green 'rgb:a6d189'
declare-option str white 'rgb:c6d0f5'
declare-option str blue 'rgb:8caaee'
declare-option str sky 'rgb:99d1db'
declare-option str lavender 'rgb:babbf1'
declare-option str black1 'rgb:292c3c'
declare-option str black2 'rgb:303446'
declare-option str black3 'rgb:414559'
declare-option str orange 'rgb:ef9f76'
declare-option str teal 'rgb:81c8be'
declare-option str gray0 'rgb:626880'
declare-option str gray1 'rgb:737994'
declare-option str bright_red %opt{red}
declare-option str bright_green %opt{green}
declare-option str bright_yellow %opt{yellow}
declare-option str bright_blue %opt{blue}
declare-option str bright_cyan %opt{cyan}
declare-option str bright_white %opt{white}
declare-option str foreground %opt{white}
declare-option str background %opt{black2}
# Markup
set-face global title "%opt{rosewater}"
set-face global header "%opt{bright_red}"
set-face global bold "%opt{mauve}"
set-face global italic "%opt{lavender}"
set-face global mono "%opt{green}"
set-face global block "%opt{cyan}"
set-face global link "%opt{green}"
set-face global bullet "%opt{green}"
set-face global list "%opt{white}"
# Builtins
set-face global Default "%opt{white},%opt{background}"
set-face global PrimarySelection "%opt{gray0},%opt{lavender}"
set-face global SecondarySelection "%opt{lavender},%opt{gray0}"
set-face global PrimaryCursor "%opt{background},%opt{rosewater}"
set-face global SecondaryCursor "%opt{black1},%opt{teal}"
set-face global PrimaryCursorEol "%opt{gray0},%opt{mauve}"
set-face global SecondaryCursorEol "%opt{gray0},%opt{maroon}"
set-face global LineNumbers "%opt{gray1},%opt{background}"
set-face global LineNumberCursor "%opt{lavender},%opt{gray0}+b"
set-face global LineNumbersWrapped "%opt{teal},%opt{black1}+i"
set-face global MenuForeground "%opt{white},%opt{gray0}+b"
set-face global MenuBackground "%opt{white},%opt{black3}"
set-face global MenuInfo "%opt{black1},%opt{blue}"
set-face global Information "%opt{black1},%opt{lavender}"
set-face global Error "%opt{red},%opt{black2}"
set-face global StatusLine "%opt{white},%opt{black1}"
set-face global StatusLineMode "%opt{black2},%opt{yellow}"
set-face global StatusLineInfo "%opt{background},%opt{green}"
set-face global StatusLineValue "%opt{orange},%opt{gray0}"
set-face global StatusCursor "%opt{black1},%opt{lavender}"
set-face global Prompt "%opt{green},%opt{black2}"
set-face global MatchingChar "%opt{maroon},%opt{black2}"
set-face global Whitespace "%opt{gray1},%opt{background}+f"
set-face global WrapMarker Whitespace
set-face global BufferPadding "%opt{background},%opt{background}"
# Code
set-face global value "%opt{orange}"
set-face global type "%opt{rosewater}"
set-face global variable "%opt{white}"
set-face global module "%opt{maroon}"
set-face global function "%opt{sky}"
set-face global string "%opt{green}"
set-face global keyword "%opt{blue}"
set-face global operator "%opt{blue}"
set-face global attribute "%opt{green}"
set-face global comment "%opt{gray1}"
set-face global documentation comment
set-face global meta "%opt{pink}"
set-face global builtin "%opt{lavender}+b"

View File

@ -0,0 +1,83 @@
# Catppuccin theme for Kakoune
# Color palette
declare-option str rosewater 'rgb:dc8a78'
declare-option str red 'rgb:d20f39'
declare-option str mauve 'rgb:8839ef'
declare-option str maroon 'rgb:e64553'
declare-option str pink 'rgb:ea76cb'
declare-option str cyan 'rgb:209fb5'
declare-option str yellow 'rgb:df8e1d'
declare-option str green 'rgb:40a02b'
declare-option str white 'rgb:4c4f69'
declare-option str blue 'rgb:1e66f5'
declare-option str sky 'rgb:04a5e5'
declare-option str lavender 'rgb:7287fd'
declare-option str black1 'rgb:e6e9ef'
declare-option str black2 'rgb:eff1f5'
declare-option str black3 'rgb:ccd0da'
declare-option str orange 'rgb:fe640b'
declare-option str teal 'rgb:179299'
declare-option str gray0 'rgb:acb0be'
declare-option str gray1 'rgb:9ca0b0'
declare-option str bright_red %opt{red}
declare-option str bright_green %opt{green}
declare-option str bright_yellow %opt{yellow}
declare-option str bright_blue %opt{blue}
declare-option str bright_cyan %opt{cyan}
declare-option str bright_white %opt{white}
declare-option str foreground %opt{white}
declare-option str background %opt{black2}
# Markup
set-face global title "%opt{rosewater}"
set-face global header "%opt{bright_red}"
set-face global bold "%opt{mauve}"
set-face global italic "%opt{lavender}"
set-face global mono "%opt{green}"
set-face global block "%opt{cyan}"
set-face global link "%opt{green}"
set-face global bullet "%opt{green}"
set-face global list "%opt{white}"
# Builtins
set-face global Default "%opt{white},%opt{background}"
set-face global PrimarySelection "%opt{gray0},%opt{lavender}"
set-face global SecondarySelection "%opt{lavender},%opt{gray0}"
set-face global PrimaryCursor "%opt{background},%opt{rosewater}"
set-face global SecondaryCursor "%opt{black1},%opt{teal}"
set-face global PrimaryCursorEol "%opt{gray0},%opt{mauve}"
set-face global SecondaryCursorEol "%opt{gray0},%opt{maroon}"
set-face global LineNumbers "%opt{gray1},%opt{background}"
set-face global LineNumberCursor "%opt{lavender},%opt{gray0}+b"
set-face global LineNumbersWrapped "%opt{teal},%opt{black1}+i"
set-face global MenuForeground "%opt{white},%opt{gray0}+b"
set-face global MenuBackground "%opt{white},%opt{black3}"
set-face global MenuInfo "%opt{black1},%opt{blue}"
set-face global Information "%opt{black1},%opt{lavender}"
set-face global Error "%opt{red},%opt{black2}"
set-face global StatusLine "%opt{white},%opt{black1}"
set-face global StatusLineMode "%opt{black2},%opt{yellow}"
set-face global StatusLineInfo "%opt{background},%opt{green}"
set-face global StatusLineValue "%opt{orange},%opt{gray0}"
set-face global StatusCursor "%opt{black1},%opt{lavender}"
set-face global Prompt "%opt{green},%opt{black2}"
set-face global MatchingChar "%opt{maroon},%opt{black2}"
set-face global Whitespace "%opt{gray1},%opt{background}+f"
set-face global WrapMarker Whitespace
set-face global BufferPadding "%opt{background},%opt{background}"
# Code
set-face global value "%opt{orange}"
set-face global type "%opt{rosewater}"
set-face global variable "%opt{white}"
set-face global module "%opt{maroon}"
set-face global function "%opt{sky}"
set-face global string "%opt{green}"
set-face global keyword "%opt{blue}"
set-face global operator "%opt{blue}"
set-face global attribute "%opt{green}"
set-face global comment "%opt{gray1}"
set-face global documentation comment
set-face global meta "%opt{pink}"
set-face global builtin "%opt{lavender}+b"

View File

@ -0,0 +1,83 @@
# Catppuccin theme for Kakoune
# Color palette
declare-option str rosewater 'rgb:f4dbd6'
declare-option str red 'rgb:ed8796'
declare-option str mauve 'rgb:c6a0f6'
declare-option str maroon 'rgb:ee99a0'
declare-option str pink 'rgb:f5bde6'
declare-option str cyan 'rgb:7dc4e4'
declare-option str yellow 'rgb:eed49f'
declare-option str green 'rgb:a6da95'
declare-option str white 'rgb:cad3f5'
declare-option str blue 'rgb:8aadf4'
declare-option str sky 'rgb:91d7e3'
declare-option str lavender 'rgb:b7bdf8'
declare-option str black1 'rgb:1e2030'
declare-option str black2 'rgb:24273a'
declare-option str black3 'rgb:363a4f'
declare-option str orange 'rgb:f5a97f'
declare-option str teal 'rgb:8bd5ca'
declare-option str gray0 'rgb:5b6078'
declare-option str gray1 'rgb:6e738d'
declare-option str bright_red %opt{red}
declare-option str bright_green %opt{green}
declare-option str bright_yellow %opt{yellow}
declare-option str bright_blue %opt{blue}
declare-option str bright_cyan %opt{cyan}
declare-option str bright_white %opt{white}
declare-option str foreground %opt{white}
declare-option str background %opt{black2}
# Markup
set-face global title "%opt{rosewater}"
set-face global header "%opt{bright_red}"
set-face global bold "%opt{mauve}"
set-face global italic "%opt{lavender}"
set-face global mono "%opt{green}"
set-face global block "%opt{cyan}"
set-face global link "%opt{green}"
set-face global bullet "%opt{green}"
set-face global list "%opt{white}"
# Builtins
set-face global Default "%opt{white},%opt{background}"
set-face global PrimarySelection "%opt{gray0},%opt{lavender}"
set-face global SecondarySelection "%opt{lavender},%opt{gray0}"
set-face global PrimaryCursor "%opt{background},%opt{rosewater}"
set-face global SecondaryCursor "%opt{black1},%opt{teal}"
set-face global PrimaryCursorEol "%opt{gray0},%opt{mauve}"
set-face global SecondaryCursorEol "%opt{gray0},%opt{maroon}"
set-face global LineNumbers "%opt{gray1},%opt{background}"
set-face global LineNumberCursor "%opt{lavender},%opt{gray0}+b"
set-face global LineNumbersWrapped "%opt{teal},%opt{black1}+i"
set-face global MenuForeground "%opt{white},%opt{gray0}+b"
set-face global MenuBackground "%opt{white},%opt{black3}"
set-face global MenuInfo "%opt{black1},%opt{blue}"
set-face global Information "%opt{black1},%opt{lavender}"
set-face global Error "%opt{red},%opt{black2}"
set-face global StatusLine "%opt{white},%opt{black1}"
set-face global StatusLineMode "%opt{black2},%opt{yellow}"
set-face global StatusLineInfo "%opt{background},%opt{green}"
set-face global StatusLineValue "%opt{orange},%opt{gray0}"
set-face global StatusCursor "%opt{black1},%opt{lavender}"
set-face global Prompt "%opt{green},%opt{black2}"
set-face global MatchingChar "%opt{maroon},%opt{black2}"
set-face global Whitespace "%opt{gray1},%opt{background}+f"
set-face global WrapMarker Whitespace
set-face global BufferPadding "%opt{background},%opt{background}"
# Code
set-face global value "%opt{orange}"
set-face global type "%opt{pink}"
set-face global variable "%opt{white}"
set-face global module "%opt{mauve}"
set-face global function "%opt{sky}"
set-face global string "%opt{green}"
set-face global keyword "%opt{blue}"
set-face global operator "%opt{blue}"
set-face global attribute "%opt{green}"
set-face global comment "%opt{gray1}"
set-face global documentation comment
set-face global meta "%opt{pink}"
set-face global builtin "%opt{lavender}+b"

View File

@ -0,0 +1,83 @@
# Catppuccin theme for Kakoune
# Color palette
declare-option str rosewater 'rgb:f5e0dc'
declare-option str red 'rgb:f38ba8'
declare-option str mauve 'rgb:cba6f7'
declare-option str maroon 'rgb:eba0ac'
declare-option str pink 'rgb:f5c2e7'
declare-option str cyan 'rgb:74c7ec'
declare-option str yellow 'rgb:f9e2af'
declare-option str green 'rgb:a6e3a1'
declare-option str white 'rgb:cdd6f4'
declare-option str blue 'rgb:89b4fa'
declare-option str sky 'rgb:89dceb'
declare-option str lavender 'rgb:b4befe'
declare-option str black1 'rgb:181825'
declare-option str black2 'rgb:1e1e2e'
declare-option str black3 'rgb:313244'
declare-option str orange 'rgb:fab387'
declare-option str teal 'rgb:94e2d5'
declare-option str gray0 'rgb:585b70'
declare-option str gray1 'rgb:6c7086'
declare-option str bright_red %opt{red}
declare-option str bright_green %opt{green}
declare-option str bright_yellow %opt{yellow}
declare-option str bright_blue %opt{blue}
declare-option str bright_cyan %opt{cyan}
declare-option str bright_white %opt{white}
declare-option str foreground %opt{white}
declare-option str background %opt{black2}
# Markup
set-face global title "%opt{rosewater}"
set-face global header "%opt{bright_red}"
set-face global bold "%opt{mauve}"
set-face global italic "%opt{lavender}"
set-face global mono "%opt{green}"
set-face global block "%opt{cyan}"
set-face global link "%opt{green}"
set-face global bullet "%opt{green}"
set-face global list "%opt{white}"
# Builtins
set-face global Default "%opt{white},%opt{background}"
set-face global PrimarySelection "%opt{gray0},%opt{lavender}"
set-face global SecondarySelection "%opt{lavender},%opt{gray0}"
set-face global PrimaryCursor "%opt{background},%opt{rosewater}"
set-face global SecondaryCursor "%opt{black1},%opt{teal}"
set-face global PrimaryCursorEol "%opt{gray0},%opt{mauve}"
set-face global SecondaryCursorEol "%opt{gray0},%opt{maroon}"
set-face global LineNumbers "%opt{gray1},%opt{background}"
set-face global LineNumberCursor "%opt{lavender},%opt{gray0}+b"
set-face global LineNumbersWrapped "%opt{teal},%opt{black1}+i"
set-face global MenuForeground "%opt{white},%opt{gray0}+b"
set-face global MenuBackground "%opt{white},%opt{black3}"
set-face global MenuInfo "%opt{black1},%opt{blue}"
set-face global Information "%opt{black1},%opt{lavender}"
set-face global Error "%opt{red},%opt{black2}"
set-face global StatusLine "%opt{white},%opt{black1}"
set-face global StatusLineMode "%opt{black2},%opt{yellow}"
set-face global StatusLineInfo "%opt{background},%opt{green}"
set-face global StatusLineValue "%opt{orange},%opt{gray0}"
set-face global StatusCursor "%opt{black1},%opt{lavender}"
set-face global Prompt "%opt{green},%opt{black2}"
set-face global MatchingChar "%opt{maroon},%opt{black2}"
set-face global Whitespace "%opt{gray1},%opt{background}+f"
set-face global WrapMarker Whitespace
set-face global BufferPadding "%opt{background},%opt{background}"
# Code
set-face global value "%opt{orange}"
set-face global type "%opt{rosewater}"
set-face global variable "%opt{white}"
set-face global module "%opt{maroon}"
set-face global function "%opt{sky}"
set-face global string "%opt{green}"
set-face global keyword "%opt{blue}"
set-face global operator "%opt{blue}"
set-face global attribute "%opt{green}"
set-face global comment "%opt{gray1}"
set-face global documentation comment
set-face global meta "%opt{pink}"
set-face global builtin "%opt{lavender}+b"

View File

@ -0,0 +1 @@

View File

@ -0,0 +1,87 @@
# Pastel theme for Kakoune
# Color palette
# declare-option str black 'rgb:2b2e33'
declare-option str black default
declare-option str dark 'rgb:3b3b46'
declare-option str gray 'rgb:5a5b5b'
declare-option str aqua 'rgb:6bbac1'
declare-option str white 'rgb:dcdbd7'
declare-option str blue 'rgb:65a4cf'
declare-option str cyan 'rgb:6dcac0'
declare-option str blue_green 'rgb:81bba3'
declare-option str green 'rgb:8dbc92'
declare-option str orange 'rgb:dea981'
declare-option str pink 'rgb:d38da9'
declare-option str purple 'rgb:ca9bf7'
declare-option str red 'rgb:db948e'
declare-option str yellow 'rgb:e1d179'
declare-option str lime 'rgb:adc47e'
declare-option str dimgray 'rgb:3d4747'
declare-option str psel 'rgba:46466480'
declare-option str ssel 'rgba:37375580'
declare-option str background %opt{black}
declare-option str dimmed_background %opt{gray}
declare-option str foreground %opt{white}
# Reference
# https://github.com/mawww/kakoune/blob/master/colors/default.kak
# For code
set-face global value "%opt{yellow}"
set-face global type "%opt{aqua}"
set-face global variable "%opt{purple}"
set-face global module "%opt{white}"
set-face global function "%opt{orange}"
set-face global string "%opt{pink}"
set-face global keyword "%opt{green}"
set-face global operator "%opt{aqua}"
set-face global attribute "%opt{blue_green}"
set-face global bracket "%opt{white}+b"
set-face global arguement "%opt{blue_green}"
set-face global comma "%opt{white}"
set-face global constant "%opt{blue_green}+b"
set-face global class "%opt{lime}"
set-face global comment "%opt{gray}+i"
set-face global meta "%opt{blue}"
set-face global builtin "%opt{cyan}+b"
# For markup
set-face global title "%opt{pink}"
set-face global header "%opt{orange}"
set-face global bold "%opt{pink}"
set-face global italic "%opt{purple}"
set-face global mono "%opt{green}"
set-face global block "%opt{cyan}"
set-face global link "%opt{green}"
set-face global bullet "%opt{green}"
set-face global list "%opt{white}"
# Builtin faces
set-face global Default "%opt{white},%opt{black}"
# set-face global Default "%opt{white},default"
set-face global PrimarySelection "default,%opt{psel}"
set-face global SecondarySelection "default,%opt{ssel}"
set-face global PrimaryCursor "%opt{dark},%opt{purple}"
set-face global SecondaryCursor "%opt{dark},%opt{aqua}"
set-face global PrimaryCursorEol "%opt{dark},%opt{yellow}"
set-face global SecondaryCursorEol "%opt{dark},%opt{blue}"
set-face global LineNumbers "%opt{gray},%opt{black}"
set-face global LineNumberCursor "%opt{purple},%opt{black}+b"
set-face global LineNumbersWrapped "%opt{gray},%opt{black}+i"
set-face global MenuForeground "%opt{dark},%opt{white}+b"
set-face global MenuBackground "%opt{white},%opt{dark}"
set-face global MenuInfo "%opt{dark},%opt{orange}"
set-face global Information "%opt{yellow},%opt{black}"
set-face global Error "%opt{red},%opt{black}"
set-face global StatusLine "%opt{white},%opt{black}"
set-face global StatusLineMode "%opt{aqua},%opt{black}"
set-face global StatusLineInfo "%opt{purple},%opt{black}"
set-face global StatusLineValue "%opt{orange},%opt{black}"
set-face global StatusCursor "%opt{white},%opt{blue}"
set-face global Prompt "%opt{green},%opt{black}"
set-face global MatchingChar "%opt{blue},%opt{black}"
set-face global Whitespace "%opt{dimgray},%opt{black}+f"
set-face global WrapMarker Whitespace
set-face global BufferPadding "%opt{black},%opt{black}"

275
scrappy/dotfiles/kak/kakrc Normal file
View File

@ -0,0 +1,275 @@
# ------------------
# Plugin Setup
# ------------------
# IMORTANT NOTE:
# I needed to open kakoune and type ':plug-install' to actually
# install the plugins listed in this file. I did not see this
# mentioned in wikis or anything, so make sure to do this to
# avoid searching github wikis and reddit needlessly.
# Creates the /plugins folder if it doesnt exist each startup
evaluate-commands %sh{
plugins="$kak_config/plugins"
mkdir -p "$plugins"
[ ! -e "$plugins/plug.kak" ] && \
git clone -q https://github.com/andreyorst/plug.kak.git "$plugins/plug.kak"
printf "%s\n" "source '$plugins/plug.kak/rc/plug.kak'"
}
plug "andreyorst/plug.kak" noload
# ------------------
# Editor Settings
# ------------------
# Disables startup message showing
set-option global startup_info_version 30000000
set-option global tabstop 4
set-option global indentwidth 4
set-option global scrolloff 5,3
declare-option str kakrc_path "~/system/nate/dotfiles/kak/kakrc"
declare-option str sway_conf_path "~/system/nate/dotfiles/sway/config.d/default"
declare-option str shell_config "~/system/nate/modules/home-manager/home.nix"
# plug "catppuccin/kakoune" theme config %{
# colorscheme catppuccin_macchiato
# }
colorscheme catppuccin_macchiato
# relative line numbers
hook global BufCreate .* %{
add-highlighter buffer/ number-lines -hlcursor
}
# Git Gutters
hook global WinCreate .* %{ evaluate-commands %sh{
if [ $kak_buffile != $kak_bufname ] && git ls-files --error-unmatch "$kak_buffile" > /dev/null 2>&1; then
echo "git show-diff"
fi
}}
# Write on unfocus
hook global FocusOut .* %{ try %{
write
}}
hook global BufWritePost .* %{ evaluate-commands 'git update-diff' }
hook global BufReload .* %{ evaluate-commands 'git update-diff' }
# Color Render in Echo Area
hook global WinSetOption filetype=kak %{ hook global NormalIdle .* %{
evaluate-commands -save-regs 'a' %{ try %{
execute-keys -draft <a-i>w"ay
evaluate-commands %sh{ (
color="${kak_reg_a}"
inverted_color=$(echo "${color}" | perl -pe 'tr/0123456789abcdefABCDEF/fedcba9876543210543210/')
printf "%s\n" "evaluate-commands -client $kak_client %{ try %{
echo -markup %{{rgb:${inverted_color},rgb:${color}+b} #${color} }
}}" | kak -p $kak_session
) >/dev/null 2>&1 </dev/null & }
}}
}}
# Add default,red and bold style to these regex matches
add-highlighter global/ regex \b(TODO|FIXME|XXX|NOTE)\b 0:default,red+rb
# ------------------
# Key bindings
# ------------------
# Remap hjkl navigation to colemak-dh layout
map global normal n h
map global normal e k
map global normal i j
map global normal o l
map global normal N H
map global normal E K
map global normal I J
map global normal O L
# Remap insert command
map global normal h i
# Insert line above or below
map global normal l o
map global normal L O
# No alt, remap
map global normal <c-f> <a-f> -docstring 'same as [f] but in the other direction'
map global normal <c-t> <a-t> -docstring 'same as [t] but in the other direction'
map global normal <c-n> <a-h> -docstring 'select to beginning of line'
map global normal <c-o> <a-l> -docstring 'select to end of line'
map global normal <c-s> <a-s> -docstring 'split selections on line boundaries'
map global normal <c-S> <a-S> -docstring 'select first and last character of each selection'
map global normal '<c-;>' '<a-;>' -docstring 'flip direction of each selection'
map global normal <c-:> <a-:> -docstring 'ensure selections are in forward direction (cursor then anchor)'
map global normal <c-,> <a-,> -docstring 'clear the main selection'
map global normal <c-.> <a-.> -docstring 'Repeat last object or f/t selection'
# Scrolling remap
map global normal <c-e> <pageup> -docstring 'Scroll screen up'
map global normal <c-i> <pagedown> -docstring 'Scroll screen down'
map global normal <c-/> ':comment-line<ret>' -docstring 'comment selected lines'
# Ctrl-s to save
map global normal <c-s> ':w<ret>' -docstring 'write buffer'
# Ctrl-x to save and exit
map global normal <c-x> ':w<ret>:db<ret>' -docstring 'write close buffer'
# Colemak goto remappings
map global goto n h -docstring 'line start'
map global goto o l -docstring 'line end'
map global goto e k -docstring 'buffer top'
map global goto i j -docstring 'buffer bottom'
map global goto h n
map global goto l o
map global goto k e
map global goto j i
# Remap view keys
map global view n h
map global view o l
map global view e k
map global view i j
map global normal ( ': buffer-previous<ret>' -docstring 'prev buffer'
map global normal ) ': buffer-next<ret>' -docstring 'next buffer'
# map global normal [ ( -docstring 'rotate main selection'
# map global normal ] ) -docstring 'rotate main selection backwards'
# Make x select <param> lines up and down
def -params 1 extend-line-down %{
exec "<a-:>%arg{1}J"
}
def -params 1 extend-line-up %{
exec "<a-:><a-;>%arg{1}K<a-;>"
try %{
exec -draft ';<a-K>\n<ret>'
exec X
}
exec '<a-;><a-X>'
}
map global normal x ':extend-line-down %val{count}<ret>'
map global normal X ':extend-line-up %val{count}<ret>'
map global normal k n -docstring 'next result'
map global normal K N -docstring 'next result add selection'
map global normal <a-k> <c-n> -docstring 'prev result'
map global normal <a-K> <c-N> -docstring 'prev result add selection'
map global insert <down> <c-n> -docstring 'next completion'
map global insert <up> <c-p> -docstring 'prev completion'
# User Mode Bindings
# Accessed with <space>
declare-user-mode git
map global user g ': enter-user-mode git<ret>' -docstring "Git mode"
map global user p '<a-!>wl-paste -n<ret>' -docstring 'paste from system clip board'
hook global RegisterModified '"' %{ nop %sh{
printf %s "$kak_main_reg_dquote" | wl-copy > /dev/null 2>&1 &
}}
# Open kakrc, double quotes needed to ecsape the kakrc_path option
map global user o ":edit %opt{kakrc_path}<ret>" -docstring 'open kakrc'
map global user z ":edit %opt{shell_config}<ret>" -docstring 'open shell config'
map global user S ":edit %opt{sway_conf_path}<ret>" -docstring 'open wm config'
# Git Mode Bindings
map global git d '<esc>:git show-diff<ret>' -docstring "Show diff"
# -----------------
# LSP Configuration
# -----------------
plug "kak-lsp/kak-lsp" do %{
cargo install --locked --force --path .
mkdir -p ~/.config/kak-lsp
cp -n kak-lsp.toml ~/.config/kak-lsp/
} config %{
# enable inlay hints
lsp-inlay-hints-enable global
lsp-inlay-diagnostics-enable global
# set global lsp_diagnostic_line_error_sign '║'
# set global lsp_diagnostic_line_warning_sign '┊'
define-command lsp-restart -docstring 'restart lsp server' %{ lsp-stop; lsp-start }
map global insert <tab> '<a-;>:try lsp-snippets-select-next-placeholders catch %{ execute-keys -with-hooks <lt>tab> }<ret>' -docstring 'Select next snippet placeholder'
map global object a '<a-semicolon>lsp-object<ret>' -docstring 'LSP any symbol'
map global object <a-a> '<a-semicolon>lsp-object<ret>' -docstring 'LSP any symbol'
map global object e '<a-semicolon>lsp-object Function Method<ret>' -docstring 'LSP function or method'
map global object k '<a-semicolon>lsp-object Class Interface Struct<ret>' -docstring 'LSP class interface or struct'
map global object d '<a-semicolon>lsp-diagnostic-object --include-warnings<ret>' -docstring 'LSP errors and warnings'
map global object D '<a-semicolon>lsp-diagnostic-object<ret>' -docstring 'LSP errors'
# load lsp for supported filetypes
set-option global lsp_cmd "kak-lsp -s %val{session} -vvv --log /tmp/kak-lsp.log"
hook global WinSetOption filetype=(rust|python|go|javascript|typescript|c|cpp|zig|dart|ruby) %{
lsp-enable-window
# lsp-auto-hover-enable
map global user l ': enter-user-mode lsp<ret>' -docstring 'lsp mode'
map global user h ': enter-user-mode lsp<ret>h' -docstring 'lsp help'
map global user a ': enter-user-mode lsp<ret>a' -docstring 'lsp code action'
set-option global lsp_hover_anchor false
}
hook global KakEnd .* lsp-exit
}
# -----------------
# Other Plugins
# -----------------
map global goto f '<esc>:prompt -shell-script-candidates %{ fd --type f --hidden } file: %{ edit %val{text} }<ret>' -docstring "file"
map global goto b '<esc>:prompt -buffer-completion buffer: %{ buffer %val{text} }<ret>' -docstring "buffer"
# Fzf Plugin
plug "andreyorst/fzf.kak" config %{
# map global user f ':fzf-mode<ret>v' -docstring 'fzf file in project'
map global user b ':fzf-mode<ret>b' -docstring 'fzf current buffers'
map global user / ':fzf-mode<ret>g' -docstring 'fzf search in project'
# def fzf_file %{
# evaluate-commands %sh{
# printf "%s\n" ":fzf-mode<ret><esc>:fzf -items-cmd fd<ret>"
# }
# }
# Change FZF colors
# FZF_DEFAULT_OPTS=" \
# --color=bg+:#313244,bg:#1e1e2e,spinner:#f5e0dc,hl:#f38ba8 \
# --color=fg:#cdd6f4,header:#f38ba8,info:#cba6f7,pointer:#f5e0dc \
# --color=marker:#f5e0dc,fg+:#cdd6f4,prompt:#cba6f7,hl+:#f38ba8"
}
plug "alexherbo2/auto-pairs.kak" %{
enable-auto-pairs
}
plug "https://github.com/h-youhei/kakoune-surround"
map global normal <c-m> ':surround<ret>'
# Custom scripts
# evaluate-commands %sh{
# for file in ~/.config/kak/rc/*.kak; do
# printf "source %s\n" $file
# done
# }
# source "~/.config/kak/rc/"

View File

@ -0,0 +1,40 @@
#use evaluate-commands to collapse undo
define-command close_tag %{ evaluate-commands %{
#revert removing indent after leaving insert mode
try %{
execute-keys -draft '<a-h>s[^\n]<ret>'
} catch %{
execute-keys -draft 'K<a-&>'
}
execute-keys ';Gg<a-;>'
evaluate-commands %sh{
tag_list=`echo "$kak_selection" | grep -P -o '(?<=<)[^>]*[^/>](?=>)' | tac | cut -d ' ' -f 1`
close=
close_stack=
result=
for tag in $tag_list ; do
if [ `echo $tag | cut -c 1` = / ] ; then
close=${tag#/}
close_stack=$close\\n$close_stack
else
if [ $kak_opt_filetype != xml ] ; then
case $tag in
#self-closing tags
area|base|br|col|command|embed|hr|img|input|keygen|link|meta|param|source|track|wbr) continue ;;
esac
fi
if [ $tag = $close ] ; then
close_stack=${close_stack#*\\n}
close=`echo $close_stack | head -n 1`
else
result=$tag
break
fi
fi
done
[ -z $result ] && echo "fail 'no un-closed tag'"
echo "execute-keys -with-hooks \;i<lt>/$result><esc>"
}
}}
map global user c ':close_tag<ret>' -docstring "Close tag"

View File

@ -0,0 +1,60 @@
define-command fzzf -params .. %{ evaluate-commands %sh{
while [ $# -gt 0 ]; do
case $1 in
(-items-cmd) shift; items_cmd="$1" ;;
esac
shift
done
# fzf_tmp=$(mktemp -d "${TMPDIR:-/tmp}"/fzfgit.kak.XXXXXX)
# fzfcmd="${fzf_tmp}/fzfcmd"
# result="${fzf_tmp}/result"
# (
# shell_path="$(command -v sh)"
# if [ -n "${shell_path}" ]; then
# # portable shebang
# printf "%s\n" "#!${shell_path}"
# # set SHELL because fzf preview uses it
# printf "%s\n" "SHELL=${shell_path}"
# fi
# # compose entire fzf command with all args into single file which will be executed later
# # printf "%s\n" "export FZF_DEFAULT_OPTS=\"${kak_opt_fzf_default_opts:-}\""
# printf "%s\n" "cd \"${PWD}\" && $items_cmd | fzf > $result"
# printf "%s\n" "evaluate-commands -client ${kak_client} edit -existing $file" | kak -p "${kak_session}"
# printf "%s\n" "rm ${fzfcmd}"
# printf "%s\n" "fg"
# ) >> "${fzfcmd}"
# chmod 755 "${fzfcmd}"
kill -TSTP $kak_client_pid
cd `pwd` && $items_cmd | \
fzf | \
xargs printf "evaluate-commands -client ${kak_client} edit -existing %s\n" | \
kak -p
fg
# cmd="terminal $fzfcmd"
# Tells kakoune to open a terminal and run $fzfcmd
# printf "%s\n" "$fzfcmd"
# ( while [ -e "${fzfcmd}" ]; do sleep 0.1; done
# # printf "%s\n" "evaluate-commands -client ${kak_client} edit -existing ~/out.txt" | kak -p "${kak_session}"
# if [ -s "${result}" ]; then
# file=$(cat $result)
# printf "%s\n" "evaluate-commands -client ${kak_client} edit -existing $file" | kak -p "${kak_session}"
# fi
# rm -rf $fzf_temp
# ) > /dev/null 2>&1 < /dev/null &
# Bring kakoune back into the foreground
}}
# define-command fzf-project %{ fzzf -items-cmd 'fd -tfile' }
# map global user f ':fzf-project<ret>' -docstring 'fzf current project'

View File

@ -0,0 +1,21 @@
[General]
ConfigVersion=2
[Browser]
CustomProxyLocation=
Enabled=true
[GUI]
ApplicationTheme=dark
TrayIconAppearance=monochrome-light
[KeeShare]
Active="<?xml version=\"1.0\"?><KeeShare><Active/></KeeShare>\n"
Own="<?xml version=\"1.0\"?><KeeShare><PrivateKey>MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC8OYI/I2otsVMdam8HqfnEYa6emzV2EzXAST+1A4IOC8ojOJdGbhKbvScu5MwgPAWDRiS0yIr6fjNHpTfHCMqY/K8+UsaubHIAjVVR5SDrBvAroTfts/oIqFcW8ab9DYMPpopaxnXh25gGrmEBb33GzuL2LJ4kXz40BEYjsOSffOM83/RstRhmXaV86nPmtbswyLwSEGsPZZliMIgMEoT/Y2qcjfwRJIRIEWNybmlgrHWAzVj5sr00KQhfTRo6dQG/yBMoElYGNvKSTmQDy7WVR+Mh+rYPKOwb2v8D7UrPDKd1n+GheEBKpvE8mDcSg/vGlXOHirOBdtuk+/xhqAqxAgMBAAECggEAETzLs/WN0+5r4q3sdM1juCY2pC7UTWJtUeqYtilClVUOEiisw0CcXVKMI+wZ0jqSSgHipa3B+zZogtSw0Cj6yNpHQD67aZ45LdoY/ggs+hPSFeTMpu0MZmjoROEk6QLTmwYmSzGRT88DqVpPPEmWFrQRWU3KaSFRzy4JsFtoVz9OYeFw37d9pG8BYeruqE7kx+uzCYWRjQXrjmofFpbxGWhkIUcvbVZ8wUVso4gT4JxAQks6nryL5M9NXefU+x/e1Rkopa5aRG/H0dPMYX/8uV2lsr/AW4+kaMPrKoAsPUhErrrJDwNL2zCmcAzNgsthUo/6yLLKlnk+THAGnruEawKBgQDDG9qpvR+OCQrV1rUiX2JmomkMPKIkAf4xLFNAdOwnPMRnq1mRCn0OJmmPmRF+I5fM/64tFzGK/KD5fxll3ybN+mpA540ho9Gvk89AbILXmp9MQMEh92H5tf4/q1EKgsFjMM0aplg2zupsimyi4LuI6tCBUhWun5X5yxUsbyBW2wKBgQD296WmxLJEQJcHfHN/RYBs9HAKCWZTn8kLgoFgCxTHHTB+i5N9yug78N3LmsYUBYwbshpVewxcv6xrfxQJ/igB+zXAgDAghhvbqw+kAiFo+OapchX+Yvm6LzHdnpOIUEDcVhP/IPyGwCNqL3DYhX0A7Qudk4/g73MStAS5aHucYwKBgG4/RweyvincIitC74dErq2gCAvKFzSRi7jtev1pFCf3xmNuB2ZVruRYAD4MGD5Wjmhf8WO5P11x8uQIVamitqKdZXzXWoAvuUSlGO8mYajCzlCgJoGy78HSfKAthdWSnQQXh04PwLj3oq9CaLCAnHd5d+gbIfVSZ8SGZKh/Ap8RAoGADF8dgjwqPfcKWcqnMoH1y/92uVn9MUU42gXAm2ISuWLB8iTlz5Bhj9ciFTf8ojYg7aY/YXbXiLHlXkEwbMu5j1fZOnpxbr+pF5j7IJkmuU52p5had7LXlbcVhWeTNmnmxeLd/5LUc5+eZoxX19DgETLOuScSNw9nsVEpR2xvfMcCgYEAgR4j9M8Nq088dA5Z3VGGxJ/l3GI+gChogZBRmyG48GuBygMVujJ5Kowqid0a3ImAnvxa8BGvEJlinmAsKmyi1UsmXMCLzOWO+jRNuIRoscFk1m2D3IfG43NnjoOhr9aJZHga8DHd1FXNPTqT74jkePHlDzpGOaHXQUN5CyGNouA=</PrivateKey><PublicKey><Signer>nate</Signer><Key>MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC8OYI/I2otsVMdam8HqfnEYa6emzV2EzXAST+1A4IOC8ojOJdGbhKbvScu5MwgPAWDRiS0yIr6fjNHpTfHCMqY/K8+UsaubHIAjVVR5SDrBvAroTfts/oIqFcW8ab9DYMPpopaxnXh25gGrmEBb33GzuL2LJ4kXz40BEYjsOSffOM83/RstRhmXaV86nPmtbswyLwSEGsPZZliMIgMEoT/Y2qcjfwRJIRIEWNybmlgrHWAzVj5sr00KQhfTRo6dQG/yBMoElYGNvKSTmQDy7WVR+Mh+rYPKOwb2v8D7UrPDKd1n+GheEBKpvE8mDcSg/vGlXOHirOBdtuk+/xhqAqxAgMBAAECggEAETzLs/WN0+5r4q3sdM1juCY2pC7UTWJtUeqYtilClVUOEiisw0CcXVKMI+wZ0jqSSgHipa3B+zZogtSw0Cj6yNpHQD67aZ45LdoY/ggs+hPSFeTMpu0MZmjoROEk6QLTmwYmSzGRT88DqVpPPEmWFrQRWU3KaSFRzy4JsFtoVz9OYeFw37d9pG8BYeruqE7kx+uzCYWRjQXrjmofFpbxGWhkIUcvbVZ8wUVso4gT4JxAQks6nryL5M9NXefU+x/e1Rkopa5aRG/H0dPMYX/8uV2lsr/AW4+kaMPrKoAsPUhErrrJDwNL2zCmcAzNgsthUo/6yLLKlnk+THAGnruEawKBgQDDG9qpvR+OCQrV1rUiX2JmomkMPKIkAf4xLFNAdOwnPMRnq1mRCn0OJmmPmRF+I5fM/64tFzGK/KD5fxll3ybN+mpA540ho9Gvk89AbILXmp9MQMEh92H5tf4/q1EKgsFjMM0aplg2zupsimyi4LuI6tCBUhWun5X5yxUsbyBW2wKBgQD296WmxLJEQJcHfHN/RYBs9HAKCWZTn8kLgoFgCxTHHTB+i5N9yug78N3LmsYUBYwbshpVewxcv6xrfxQJ/igB+zXAgDAghhvbqw+kAiFo+OapchX+Yvm6LzHdnpOIUEDcVhP/IPyGwCNqL3DYhX0A7Qudk4/g73MStAS5aHucYwKBgG4/RweyvincIitC74dErq2gCAvKFzSRi7jtev1pFCf3xmNuB2ZVruRYAD4MGD5Wjmhf8WO5P11x8uQIVamitqKdZXzXWoAvuUSlGO8mYajCzlCgJoGy78HSfKAthdWSnQQXh04PwLj3oq9CaLCAnHd5d+gbIfVSZ8SGZKh/Ap8RAoGADF8dgjwqPfcKWcqnMoH1y/92uVn9MUU42gXAm2ISuWLB8iTlz5Bhj9ciFTf8ojYg7aY/YXbXiLHlXkEwbMu5j1fZOnpxbr+pF5j7IJkmuU52p5had7LXlbcVhWeTNmnmxeLd/5LUc5+eZoxX19DgETLOuScSNw9nsVEpR2xvfMcCgYEAgR4j9M8Nq088dA5Z3VGGxJ/l3GI+gChogZBRmyG48GuBygMVujJ5Kowqid0a3ImAnvxa8BGvEJlinmAsKmyi1UsmXMCLzOWO+jRNuIRoscFk1m2D3IfG43NnjoOhr9aJZHga8DHd1FXNPTqT74jkePHlDzpGOaHXQUN5CyGNouA=</Key></PublicKey></KeeShare>\n"
QuietSuccess=true
[PasswordGenerator]
AdditionalChars=
ExcludedChars=
Length=25
SpecialChars=false

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,26 @@
[delta "Catppuccin Macchiato"]
blame-palette = "#24273a #1e2030 #181926 #363a4f #494d64"
commit-decoration-style = "box ul"
dark = true
file-decoration-style = "#cad3f5"
file-style = "#cad3f5"
hunk-header-decoration-style = "box ul"
hunk-header-file-style = "bold"
hunk-header-line-number-style = "bold #a5adcb"
hunk-header-style = "file line-number syntax"
line-numbers = true
line-numbers-left-style = "#6e738d"
line-numbers-minus-style = "bold #ed8796"
line-numbers-plus-style = "bold #a6da95"
line-numbers-right-style = "#6e738d"
line-numbers-zero-style = "#6e738d"
# 25% red 75% base
minus-emph-style = "bold syntax #564052"
# 10% red 90% base
minus-style = "syntax #383143"
# 25% green 75% base
plus-emph-style = "bold syntax #455552"
# 10% green 90% base
plus-style = "syntax #313943"
# Should match the name of the bat theme
syntax-theme = "Catppuccin-macchiato"

View File

@ -0,0 +1,23 @@
font=Overpass Nerd Font 20
background-color=#24273a
text-color=#cad3f5
width=630
height=400
padding=10
margin=20
progress-color=over #eceff480
icon-path=/usr/share/icons/Arc-X-D
max-icon-size=140
layer=overlay
border-size=5
border-radius=8
border-color=#b7bdf8
default-timeout=5000
[urgency=high]
ignore-timeout=1

View File

@ -0,0 +1,10 @@
# Barebones config to launch nwg-hello
monitor=,preferred,auto,1
bind = SUPER, Q, killactive,
misc {
disable_hyprland_logo = true
}
animations {
enabled = false
}
exec-once = nwg-hello; hyprctl dispatch exit

View File

@ -0,0 +1 @@
7376

View File

@ -0,0 +1,179 @@
EndeavourOS Sway-WM CheatSheet :
- Hello! Welcome to EndeavourOS and our Sway-WM Edition! Now we'll admit this is not vanilla Sway and it wasn't desinged to be. It is loosely themed around the ArcDark
colorscheme chosen for it's stability and ease of implementation. The default bar is Waybar not Swaybar - once again chosen it's ease of use and stability as well
the options it offers.
- Sway is documentated through man pages unlike i3.To get a overview of what to expect you can read 'man 5 sway'. The pages are then spilt into topics - some the
important ones are listed at the bottom of the document. Waybar is also documented through man pages - 'man 5 waybar'.
- Our file structure is spilt for easier use - the names of the files eg; 'output' referring to the part they play.
- If your experiencing issus with your cursor - edit file '~/.profile' and comment out 'export WLR_NO_HARDWARE_CURSORS=1'
- Other than that enjoy your time here and welcome! You can join the Forum or our Telegram - we'd love to hear from you!
 = windows key
# start floating xfce4-terminal
+Return
# start fixed termite-terminal
+Shift+Return
# kill focused window
+q
# Application menu - wofi:
+d
# Activities:
+p
# Power-Menu:
+Shift+e
# Lock the system
+f1
# reload the configuration file
+Shift+c
# change window focus,like vim
+h focus left
+j focus down
+k focus up
+l focus right
# alternatively, you can use the cursor keys:
+Left focus left
+Down focus down
+Up focus up
+Right focus right
# move a focused window
+Shift+h move left
+Shift+j move down
+Shift+k move up
+Shift+l move right
# alternatively, you can use the cursor keys:
+Shift+Left move left
+Shift+Down move down
+Shift+Up move up
+Shift+Right move right
# split in horizontal orientation (changes take place on next opened window):
+b
# split in vertical orientation (changes take place on next opened window):
+v
# enter fullscreen mode for the focused container:
+f fullscreen toggle
# change container layout (stacked, tabbed, toggle split):
+s layout stacking
+w layout tabbed
+e layout toggle split
# toggle tiling / floating:
+Shift+space floating toggle
# change focus between tiling / floating windows:
+space focus mode_toggle
# focus the parent container:
+a focus parent
# resize floating window:
+right mouse button
# move floating window:
+left mouse button
# scratchpad:
+Shift+Minus move scratchpad
+minus scratchpad cycle
# resize mode:
+r
# resize,like vim:
h focus left
j focus down
k focus up
l focus right
# alternatively, you can use the cursor keys:
Left focus left
Down focus down
Up focus up
Right focus right
# Return to default mode:
Return or Escape
# Workspaces:
#
# Switch to workspace
+1 workspace number 1
+2 workspace number 2
+3 workspace number 3
+4 workspace number 4
+5 workspace number 5
+6 workspace number 6
+7 workspace number 7
+8 workspace number 8
+9 workspace number 9
+0 workspace number 10
# Move focused container to workspace:
+Shift+1 move container to workspace number 1
+Shift+2 move container to workspace number 2
+Shift+3 move container to workspace number 3
+Shift+4 move container to workspace number 4
+Shift+5 move container to workspace number 5
+Shift+6 move container to workspace number 6
+Shift+7 move container to workspace number 7
+Shift+8 move container to workspace number 8
+Shift+9 move container to workspace number 9
+Shift+0 move container to workspace number 10
# Multimedia Keys (be aware that these may not work for every keyboard):
They are enabled - you may need to hold down the function key while doing so.
# Screenshots:
PrintSrc for full screenshot
Shift+PrintSrc for screenshot options
# App Shortcuts:
+n thunar
+o firefox
# Other Things:
# Input - ~/.config/sway/config.d/input
# You can get the names of your inputs by running: swaymsg -t get_inputs
# Put your touchpad's IDENFICATOR to replace "Touchpad-ID" (keep the quotation marks)
# Read `man 5 sway-input` for more information about this section.
# Output - ~/.config/sway/config.d/output
# You can get the names of your outputs by running: swaymsg -t get_outputs
# Read `man 5 sway-output` for more information about this section.
# Wallpaper - ~/.config/sway/config.d/theme
# exec swaybg -i /path/to/wallpaper
# Waybar - ~/.config/waybar/config : ~/.config/waybar/style.css
# It is an external bar we have chosen because of the option's it allows.
# If you wish to use the default swaybar - ~/.config/sway/config.d/theme and change waybar to sway-bar
# Read `man 5 sway-bar` for more information about this section
# Autostart - ~/.config/sway/config.d/autostart_applications

View File

@ -0,0 +1,12 @@
# Initial Setup
# exec ~/set_once.sh
# Config for sway
#
# Read `man 5 sway` for a complete reference.
# user config directory
include $HOME/.config/sway/config.d/*
# only enable this if every app you use is compatible with wayland
# xwayland disable

View File

@ -0,0 +1,54 @@
# Assign workspaces
assign [app_id="firefox"] 2
for_window [app_id="firefox"] focus
assign [class="firefox"] 2
for_window [class="firefox"] focus
assign [app_id=thunar] 3
for_window [app_id=thunar] focus
assign [class="Telegram"] 4
for_window [class="Telegram"] focus
for_window [app_id="xed"] focus
# default keepass main window to scratch
for_window [app_id="org.keepassxc.KeePassXC"] $floating_window
for_window [app_id="org.keepassxc.KeePassXC" title="KeePassXC"] move to scratchpad #, scratchpad show # default to show
# set floating (nontiling) for apps needing it:
for_window [class="Yad" instance="yad"] floating enable
for_window [app_id="yad"] floating enable
for_window [app_id="blueman-manager"] floating enable, resize set width 40 ppt height 30 ppt
# set floating (nontiling) for special apps:
for_window [class="Xsane" instance="xsane"] floating enable
for_window [app_id="pavucontrol" ] floating enable, resize set width 40 ppt height 30 ppt
for_window [class="qt5ct" instance="qt5ct"] floating enable, resize set width 60 ppt height 50 ppt
for_window [class="Bluetooth-sendto" instance="bluetooth-sendto"] floating enable
for_window [app_id="pamac-manager"] floating enable, resize set width 80 ppt height 70 ppt
for_window [class="Lxappearance"] floating enable, resize set width 60 ppt height 50 ppt
for_window [class="steam" title="^((?!Steam$).)*"] floating enable
# set floating for window roles
for_window [window_role="pop-up"] floating enable
for_window [window_role="bubble"] floating enable
for_window [window_role="task_dialog"] floating enable
for_window [window_role="Preferences"] floating enable
for_window [window_type="dialog"] floating enable
for_window [window_type="menu"] floating enable
for_window [window_role="About"] floating enable
for_window [title="File Operation Progress"] floating enable, border pixel 1, sticky enable, resize set width 40 ppt height 30 ppt
for_window [app_id="firefox" title="^Library$"] floating enable, border pixel 1, sticky enable, resize set width 40 ppt height 30 ppt
for_window [app_id="floating_shell_portrait"] floating enable, border pixel 1, sticky enable, resize set width 30 ppt height 40 ppt
for_window [title="Picture in picture"] floating enable, sticky enable
for_window [title="nmtui"] floating enable, resize set width 50 ppt height 70 ppt
for_window [app_id="xsensors"] floating enable
for_window [title="Save File"] floating enable
for_window [app_id="firefox" title="Firefox — Sharing Indicator"] kill
# Inhibit idle
for_window [app_id="firefox"] inhibit_idle fullscreen
for_window [app_id="Chromium"] inhibit_idle fullscreen

View File

@ -0,0 +1,22 @@
# Auth with polkit-gnome:
exec lxqt-policykit-agent
# Desktop notifications
exec mako
# Network Applet
exec nm-applet --indicator
# GTK3 applications take a long time to start
exec systemctl --user import-environment DISPLAY WAYLAND_DISPLAY SWAYSOCK
exec hash dbus-update-activation-environment 2>/dev/null && \
dbus-update-activation-environment --systemd DISPLAY WAYLAND_DISPLAY SWAYSOCK
# Sway Fader
# exec python3 ~/.config/sway/scripts/swayfader.py
# gpu controller
exec corectrl
exec keepassxc
exec kdeconnect-indicator

View File

@ -0,0 +1,6 @@
# Clamshell Mode
set $laptop eDP-1
bindswitch --reload --locked lid:on output $laptop disable
bindswitch --reload --locked lid:off output $laptop enable
exec_always ~/.config/sway/scripts/clamshell.sh

View File

@ -0,0 +1,233 @@
# Logo key. Use Mod1 for Alt.
set $mod Mod4
# Home row direction keys, like vim
set $left n
set $down i
set $up e
set $right o
# audio control
set $sink_volume pactl get-sink-volume @DEFAULT_SINK@ | grep '^Volume:' | cut -d / -f 2 | tr -d ' ' | sed 's/%//'
set $source_volume pactl get-source-volume @DEFAULT_SOURCE@ | grep '^Volume:' | cut -d / -f 2 | tr -d ' ' | sed 's/%//'
set $volume_down $(pactl set-sink-volume @DEFAULT_SINK@ -5% && $sink_volume)
set $volume_up $(pactl set-sink-volume @DEFAULT_SINK@ +5% && $sink_volume)
set $volume_mute $(pactl set-sink-mute @DEFAULT_SINK@ toggle && pactl get-sink-mute @DEFAULT_SINK@ | sed -En "/no/ s/.*/$($sink_volume)/p; /yes/ s/.*/0/p")
set $mic_mute $(pactl set-source-mute @DEFAULT_SOURCE@ toggle && pactl get-source-mute @DEFAULT_SOURCE@ | sed -En "/no/ s/.*/$($source_volume)/p; /yes/ s/.*/0/p")
# Your preferred terminal emulators
set $term-float foot
# Your preferred application launcher
# Note: pass the final command to swaymsg so that the resulting window can be opened
# on the original workspace that the command was run on.
set $menu wofi -c ~/.config/wofi/config -I
set $powermenu ~/.config/waybar/scripts/power-menu.sh
### Idle configuration
exec swayidle -w\
# timeout 1130 'swaylock -C ~/.config/swaylock/config --grace 28 --effect-blur 2x10 --fade-in 0.3'\
timeout 600 'exec systemctl suspend'\
before-sleep 'swaylock -C ~/.config/swaylock/config' --grace 10 --effect-blur 2x10 --fade-in 0.3'
# This will lock the screen after 9m and 30s of inactivity, but with a 30 second
# grace period, during which any input will stop the system from suspending.
# Otherwise, the system locks the screen as it enters suspend.
## Lock Screen
bindsym $mod+f1 exec ~/.config/sway/scripts/lockman.sh
### Key bindings
#
# Basics:
#
# Start a floating terminal
bindsym $mod+Return exec $term-float
# Open the power menu
bindsym $mod+Shift+Escape exec $powermenu
# Kill focused window
bindsym $mod+q kill
# Start your launcher
bindsym $mod+d exec $menu
# Activities
#bindsym $mod+p exec ~/.config/wofi/windows.py
# Drag floating windows by holding down $mod and left mouse button.
# Resize them with right mouse button + $mod.
# Despite the name, also works for non-floating windows.
# Change normal to inverse to use left mouse button for resizing and right
# mouse button for dragging.
floating_modifier $mod normal
# Reload the configuration file
bindsym $mod+Shift+c reload
#
# Moving around:
#
# your focus around
bindsym $mod+$left focus left
bindsym $mod+$down focus down
bindsym $mod+$up focus up
bindsym $mod+$right focus right
# Or use $mod+[up|down|left|right]
# bindsym $mod+Left focus left
# bindsym $mod+Down focus down
# bindsym $mod+Up focus up
# bindsym $mod+Right focus right
# Move the focused window with the same, but add Shift
# bindsym $mod+Shift+$left move left
# bindsym $mod+Shift+$down move down
# bindsym $mod+Shift+$up move up
# bindsym $mod+Shift+$right move right
# Ditto, with arrow keys
bindsym $mod+Left move left
bindsym $mod+Down move down
bindsym $mod+Up move up
bindsym $mod+Right move right
#
# Workspaces:
#
# Switch to workspace
bindsym $mod+1 workspace number 1
bindsym $mod+2 workspace number 2
bindsym $mod+3 workspace number 3
bindsym $mod+4 workspace number 4
bindsym $mod+5 workspace number 5
bindsym $mod+6 workspace number 6
bindsym $mod+7 workspace number 7
bindsym $mod+8 workspace number 8
bindsym $mod+9 workspace number 9
bindsym $mod+0 workspace number 10
# Move focused container to workspace
bindsym $mod+Shift+1 move container to workspace number 1
bindsym $mod+Shift+2 move container to workspace number 2
bindsym $mod+Shift+3 move container to workspace number 3
bindsym $mod+Shift+4 move container to workspace number 4
bindsym $mod+Shift+5 move container to workspace number 5
bindsym $mod+Shift+6 move container to workspace number 6
bindsym $mod+Shift+7 move container to workspace number 7
bindsym $mod+Shift+8 move container to workspace number 8
bindsym $mod+Shift+9 move container to workspace number 9
bindsym $mod+Shift+0 move container to workspace number 10
# Note: workspaces can have any name you want, not just numbers.
# We just use 1-10 as the default.
#
# Layout stuff:
#
# You can "split" the current object of your focus with
# $mod+b or $mod+v, for horizontal and vertical splits
# respectively.
bindsym $mod+h splith
bindsym $mod+v splitv
# Switch the current container between different layout styles
bindsym $mod+Shift+s layout stacking
bindsym $mod+Shift+t layout tabbed
bindsym $mod+Shift+r layout toggle split
# Make the current focus fullscreen
bindsym $mod+f fullscreen
# Toggle the current focus between tiling and floating mode
bindsym $mod+Shift+space floating toggle
# Swap focus between the tiling area and the floating area
bindsym $mod+space focus mode_toggle
# Move focus to the parent container
bindsym $mod+a focus parent
# bindsym $mod+g exec ~/.config/sway/scripts/scale.sh inc
# bindsym $mod+m exec ~/.config/sway/scripts/scale.sh dec
#
# Scratchpad:
#
# Sway has a "scratchpad", which is a bag of holding for windows.
# You can send windows there and get them back later.
# Move the currently focused window to the scratchpad
bindsym $mod+Shift+minus move scratchpad
# Show the next scratchpad window or hide the focused scratchpad window.
# If there are multiple scratchpad windows, this command cycles through them.
bindsym $mod+minus scratchpad show
#
# Resizing containers:
#
mode "resize" {
# left will shrink the containers width
# right will grow the containers width
# up will shrink the containers height
# down will grow the containers height
bindsym $left resize shrink width 50px
bindsym $right resize grow width 50px
bindsym $up resize shrink height 50px
bindsym $down resize grow height 50px
# Ditto, with arrow keys
bindsym Left resize shrink width 50px
bindsym Right resize grow width 50px
bindsym Up resize shrink height 50px
bindsym Down resize grow height 50px
# Return to default mode
bindsym Return mode "default"
bindsym Escape mode "default"
}
bindsym $mod+r mode "resize"
# Resize floating windows with mouse scroll:
bindsym --whole-window --border $mod+button4 resize shrink height 5 px or 5 ppt
bindsym --whole-window --border $mod+button5 resize grow height 5 px or 5 ppt
bindsym --whole-window --border $mod+Shift+button4 resize shrink width 5 px or 5 ppt
bindsym --whole-window --border $mod+Shift+button5 resize grow width 5 px or 5 ppt
#
# Volume
#
# Control volume trough pamixer
# bindsym --locked XF86AudioRaiseVolume exec pamixer -ui 2
# bindsym --locked XF86AudioLowerVolume exec pamixer -ud 2
# bindsym --locked XF86AudioMute exec pamixer -t
# Control volume directly trough pactl
bindsym --locked XF86AudioRaiseVolume exec $volume_up
bindsym --locked XF86AudioLowerVolume exec $volume_down
bindsym --locked XF86AudioMute exec $volume_mute
#
# Player
#
bindsym XF86AudioPlay exec playerctl play
bindsym XF86AudioPause exec playerctl pause
bindsym XF86AudioNext exec playerctl next
bindsym XF86AudioPrev exec playerctl previous
#
# Backlight
#
bindsym XF86MonBrightnessUp exec brightnessctl -c backlight set +5%
bindsym XF86MonBrightnessDown exec brightnessctl -c backlight set 5%-
#
# App shortcuts
#
bindsym $mod+t exec thunar
bindsym $mod+w exec firefox
bindsym $mod+j exec obsidian & ~/Documents/Obsidian Vault/auto-add.sh
#
# Screenshots
#
bindsym $mod+Shift+p exec ~/.config/sway/scripts/screenshot.sh clipboard
bindsym $mod+p exec ~/.config/sway/scripts/screenshot.sh
#
# Keybindings List
#
#bindsym $mod+t exec xed ~/.config/sway/cheatsheet

View File

@ -0,0 +1,30 @@
### Input configuration
#
# Example configuration:
# You can get the names of your inputs by running: swaymsg -t get_inputs
# Put your touchpad's ID to replace "Touchpad-ID" (keep the quotation marks)
input type:touchpad {
dwt enabled
tap enabled
natural_scroll enabled
}
# Read `man 5 sway-input` for more information about this section.
#
#input type:keyboard xkb_layout "us"
input * {
xkb_layout "us"
# xkb_variant "colemak_dh"
# xkb_options "ctrl:nocaps"
}
input type:keyboard {
repeat_rate 40
repeat_delay 175
}
exec_always {
'swaymsg input type:keyboard xkb_layout "$(localectl status | grep "X11 Layout" | sed -e "s/^.*X11 Layout://")"'
'swaymsg input type:keyboard xkb_variant "$(localectl status | grep "X11 Variant" | sed -e "s/^.*X11 Variant://")"'
}

View File

@ -0,0 +1,13 @@
### Output configuration
#
# Example configuration:
#
# output HDMI-A-1 resolution 1920x1080 position 1920,0
#
# You can get the names of your outputs by running: swaymsg -t get_outputs
#
# Wacom Tablet - Example
# input "1386:884:Wacom_Intuos_S_Pad" map_to_output HDMI-A-1
# input "1386:884:Wacom_Intuos_S_Pen" map_to_output HDMI-A-1
output DP-3 resolution 3840x2160@240.084Hz position 0,0
output * adaptive_sync off

View File

@ -0,0 +1,103 @@
# Apply gtk theming
exec_always ~/.config/sway/scripts/import-gsettings
set $rosewater #f4dbd6
set $flamingo #f0c6c6
set $pink #f5bde6
set $mauve #c6a0f6
set $red #ed8796
set $maroon #ee99a0
set $peach #f5a97f
set $green #a6da95
set $teal #8bd5ca
set $sky #91d7e3
set $sapphire #7dc4e4
set $blue #8aadf4
set $lavender #b7bdf8
set $text #cad3f5
set $subtext1 #b8c0e0
set $subtext0 #a5adcb
set $overlay2 #939ab7
set $overlay1 #8087a2
set $overlay0 #6e738d
set $surface2 #5b6078
set $surface1 #494d64
set $surface0 #363a4f
set $base #24273a
set $mantle #1e2030
set $crust #181926
# Set inner/outer gaps
gaps inner 6
gaps outer 4
# Hide titlebar on windows:
default_border pixel 2
# Default Font
font pango:Overpass Nerd Font 12
# Thin borders:
smart_borders on
# Set wallpaper:
exec_always swaybg -i /home/nate/.config/sway/wallpapers/nix-black-4k.png
# exec_always /home/nate/.config/sway/scripts/background.sh
# Title format for windows
for_window [shell="xdg_shell"] title_format "%title (%app_id)"
for_window [shell="x_wayland"] title_format "%class - %title"
# class border bground text indicator child_border
# client.focused #e5e9f0 #e5e9f0 #3b4252 #e5e9f0 #e5e9f0
# client.focused_inactive #5e81ac #5e81ac #eceff4 #5e81ac #3b4252
# client.unfocused #3b4252 #3b4252 #BFBFBF #3b4252 #3b4252
# client.urgent #d08770 #d08770 #eceff4 #d08770 #d08770
# client.placeholder #282A36 #282A36 #eceff4 #282A36 #282A36
# client.background #F8F8F2
client.focused $flamingo $base $text $rosewater $flamingo
client.focused_inactive $overlay0 $base $text $rosewater $overlay0
client.unfocused $overlay0 $base $text $rosewater $overlay0
client.urgent $peach $base $peach $overlay0 $peach
client.placeholder $overlay0 $base $text $overlay0 $overlay0
client.background $base
#
# Status Bar:
#
# Read `man 5 sway-bar` for more information about this section.
bar {
swaybar_command waybar
}
set $opacity 0.8
set $floating_window floating enable, resize set width 1030 height 710, opacity 1.0
for_window {
[class=".*"] opacity 1.0
[app_id=".*"] opacity 1.0
[app_id="foot"] opacity $opacity
[app_id="thunar"] opacity $opacity
# Steam
[class="steam_app.*"] inhibit_idle fullscreen; floating enable; border none opacity 1.0
[class="steam"] opacity 1.0
# Godot windows
[title="(?:Create New|Select Frames|project.godot|node)"] $floating_window
[title="(?:Create Folder|Node Configuration|Warning|Please Confirm)"] $floating_window, resize set height 200
# Aseprite
[title="(?:Aseprite)"] opacity 1.0
# Floating windows
[title="(?:Open|Save|Save New|Open a) (?:File|Folder|As|Scene As)"] $floating_window
[window_role="pop-up"] $floating_window
[window_role="bubble"] $floating_window
[window_role="task_dialog"] $floating_window
[window_role="Preferences"] $floating_window
[window_type="dialog"] $floating_window
[window_type="menu"] $floating_window
[window_role="About"] $floating_window
}

View File

@ -0,0 +1,457 @@
! layout
us USA
ad Andorra
af Afghanistan
ara Arabic
al Albania
am Armenia
az Azerbaijan
by Belarus
be Belgium
bd Bangladesh
in India
ba Bosnia and Herzegovina
br Brazil
bg Bulgaria
ma Morocco
mm Myanmar
ca Canada
cd Congo, Democratic Republic of the
cn China
hr Croatia
cz Czechia
dk Denmark
nl Netherlands
bt Bhutan
ee Estonia
ir Iran
iq Iraq
fo Faroe Islands
fi Finland
fr France
gh Ghana
gn Guinea
ge Georgia
de Germany
gr Greece
hu Hungary
is Iceland
il Israel
it Italy
jp Japan
kg Kyrgyzstan
kh Cambodia
kz Kazakhstan
la Laos
latam Latin American
lt Lithuania
lv Latvia
mao Maori
me Montenegro
mk Macedonia
mt Malta
mn Mongolia
no Norway
pl Poland
pt Portugal
ro Romania
ru Russia
rs Serbia
si Slovenia
sk Slovakia
es Spain
se Sweden
ch Switzerland
sy Syria
tj Tajikistan
lk Sri Lanka
th Thailand
tr Turkey
tw Taiwan
ua Ukraine
gb United Kingdom
uz Uzbekistan
vn Vietnam
kr Korea, Republic of
nec_vndr/jp Japan (PC-98xx Series)
ie Ireland
pk Pakistan
mv Maldives
za South Africa
epo Esperanto
np Nepal
ng Nigeria
et Ethiopia
sn Senegal
brai Braille
tm Turkmenistan
ml Mali
tz Tanzania
! variant
chr us: Cherokee
euro us: With EuroSign on 5
intl us: International (with dead keys)
alt-intl us: Alternative international (former us_intl)
colemak us: Colemak
dvorak us: Dvorak
dvorak-intl us: Dvorak international
dvorak-l us: Left handed Dvorak
dvorak-r us: Right handed Dvorak
dvorak-classic us: Classic Dvorak
dvp us: Programmer Dvorak
rus us: Russian phonetic
mac us: Macintosh
altgr-intl us: International (AltGr dead keys)
olpc2 us: Group toggle on multiply/divide key
srp us: Serbian
ps af: Pashto
uz af: Southern Uzbek
olpc-ps af: OLPC Pashto
olpc-fa af: OLPC Dari
olpc-uz af: OLPC Southern Uzbek
azerty ara: azerty
azerty_digits ara: azerty/digits
digits ara: digits
qwerty ara: qwerty
qwerty_digits ara: qwerty/digits
buckwalter ara: Buckwalter
phonetic am: Phonetic
phonetic-alt am: Alternative Phonetic
eastern am: Eastern
western am: Western
eastern-alt am: Alternative Eastern
cyrillic az: Cyrillic
legacy by: Legacy
latin by: Latin
oss be: Alternative
oss_latin9 be: Alternative, latin-9 only
oss_sundeadkeys be: Alternative, Sun dead keys
iso-alternate be: ISO Alternate
nodeadkeys be: Eliminate dead keys
sundeadkeys be: Sun dead keys
wang be: Wang model 724 azerty
probhat bd: Probhat
ben in: Bengali
ben_probhat in: Bengali Probhat
guj in: Gujarati
guru in: Gurmukhi
jhelum in: Gurmukhi Jhelum
kan in: Kannada
mal in: Malayalam
mal_lalitha in: Malayalam Lalitha
ori in: Oriya
tam_unicode in: Tamil Unicode
tam_keyboard_with_numerals in: Tamil Keyboard with Numerals
tam_TAB in: Tamil TAB Typewriter
tam_TSCII in: Tamil TSCII Typewriter
tam in: Tamil
tel in: Telugu
urd-phonetic in: Urdu, Phonetic
urd-phonetic3 in: Urdu, Alternative phonetic
urd-winkeys in: Urdu, Winkeys
bolnagri in: Hindi Bolnagri
hin-wx in: Hindi Wx
alternatequotes ba: Use guillemets for quotes
unicode ba: Use Bosnian digraphs
unicodeus ba: US keyboard with Bosnian digraphs
us ba: US keyboard with Bosnian letters
nodeadkeys br: Eliminate dead keys
dvorak br: Dvorak
nativo br: Nativo
nativo-us br: Nativo for USA keyboards
nativo-epo br: Nativo for Esperanto
phonetic bg: Traditional phonetic
bas_phonetic bg: New phonetic
french ma: French
tifinagh ma: Tifinagh
tifinagh-alt ma: Tifinagh Alternative
tifinagh-alt-phonetic ma: Tifinagh Alternative Phonetic
tifinagh-extended ma: Tifinagh Extended
tifinagh-phonetic ma: Tifinagh Phonetic
tifinagh-extended-phonetic ma: Tifinagh Extended Phonetic
fr-dvorak ca: French Dvorak
fr-legacy ca: French (legacy)
multix ca: Multilingual
multi ca: Multilingual, first part
multi-2gr ca: Multilingual, second part
ike ca: Inuktitut
shs ca: Secwepemctsin
kut ca: Ktunaxa
eng ca: English
tib cn: Tibetan
tib_asciinum cn: Tibetan (with ASCII numerals)
alternatequotes hr: Use guillemets for quotes
unicode hr: Use Croatian digraphs
unicodeus hr: US keyboard with Croatian digraphs
us hr: US keyboard with Croatian letters
bksl cz: With &lt;\|&gt; key
qwerty cz: qwerty
qwerty_bksl cz: qwerty, extended Backslash
ucw cz: UCW layout (accented letters only)
dvorak-ucw cz: US Dvorak with CZ UCW support
nodeadkeys dk: Eliminate dead keys
mac dk: Macintosh
mac_nodeadkeys dk: Macintosh, eliminate dead keys
dvorak dk: Dvorak
sundeadkeys nl: Sun dead keys
mac nl: Macintosh
std nl: Standard
nodeadkeys ee: Eliminate dead keys
dvorak ee: Dvorak
us ee: US keyboard with Estonian letters
pes_keypad ir: Persian, with Persian Keypad
ku ir: Kurdish, Latin Q
ku_f ir: Kurdish, (F)
ku_alt ir: Kurdish, Latin Alt-Q
ku_ara ir: Kurdish, Arabic-Latin
ku iq: Kurdish, Latin Q
ku_f iq: Kurdish, (F)
ku_alt iq: Kurdish, Latin Alt-Q
ku_ara iq: Kurdish, Arabic-Latin
nodeadkeys fo: Eliminate dead keys
nodeadkeys fi: Eliminate dead keys
smi fi: Northern Saami
classic fi: Classic
mac fi: Macintosh
nodeadkeys fr: Eliminate dead keys
sundeadkeys fr: Sun dead keys
oss fr: Alternative
oss_latin9 fr: Alternative, latin-9 only
oss_nodeadkeys fr: Alternative, eliminate dead keys
oss_sundeadkeys fr: Alternative, Sun dead keys
latin9 fr: (Legacy) Alternative
latin9_nodeadkeys fr: (Legacy) Alternative, eliminate dead keys
latin9_sundeadkeys fr: (Legacy) Alternative, Sun dead keys
bepo fr: Bepo, ergonomic, Dvorak way
bepo_latin9 fr: Bepo, ergonomic, Dvorak way, latin-9 only
dvorak fr: Dvorak
mac fr: Macintosh
bre fr: Breton
oci fr: Occitan
geo fr: Georgian AZERTY Tskapo
generic gh: Multilingual
akan gh: Akan
ewe gh: Ewe
fula gh: Fula
ga gh: Ga
hausa gh: Hausa
ergonomic ge: Ergonomic
mess ge: MESS
ru ge: Russian
os ge: Ossetian
deadacute de: Dead acute
deadgraveacute de: Dead grave acute
nodeadkeys de: Eliminate dead keys
ro de: Romanian keyboard with German letters
ro_nodeadkeys de: Romanian keyboard with German letters, eliminate dead keys
dvorak de: Dvorak
sundeadkeys de: Sun dead keys
neo de: Neo 2
mac de: Macintosh
mac_nodeadkeys de: Macintosh, eliminate dead keys
dsb de: Lower Sorbian
dsb_qwertz de: Lower Sorbian (qwertz)
qwerty de: qwerty
simple gr: Simple
extended gr: Extended
nodeadkeys gr: Eliminate dead keys
polytonic gr: Polytonic
standard hu: Standard
nodeadkeys hu: Eliminate dead keys
qwerty hu: qwerty
101_qwertz_comma_dead hu: 101/qwertz/comma/Dead keys
101_qwertz_comma_nodead hu: 101/qwertz/comma/Eliminate dead keys
101_qwertz_dot_dead hu: 101/qwertz/dot/Dead keys
101_qwertz_dot_nodead hu: 101/qwertz/dot/Eliminate dead keys
101_qwerty_comma_dead hu: 101/qwerty/comma/Dead keys
101_qwerty_comma_nodead hu: 101/qwerty/comma/Eliminate dead keys
101_qwerty_dot_dead hu: 101/qwerty/dot/Dead keys
101_qwerty_dot_nodead hu: 101/qwerty/dot/Eliminate dead keys
102_qwertz_comma_dead hu: 102/qwertz/comma/Dead keys
102_qwertz_comma_nodead hu: 102/qwertz/comma/Eliminate dead keys
102_qwertz_dot_dead hu: 102/qwertz/dot/Dead keys
102_qwertz_dot_nodead hu: 102/qwertz/dot/Eliminate dead keys
102_qwerty_comma_dead hu: 102/qwerty/comma/Dead keys
102_qwerty_comma_nodead hu: 102/qwerty/comma/Eliminate dead keys
102_qwerty_dot_dead hu: 102/qwerty/dot/Dead keys
102_qwerty_dot_nodead hu: 102/qwerty/dot/Eliminate dead keys
Sundeadkeys is: Sun dead keys
nodeadkeys is: Eliminate dead keys
mac is: Macintosh
dvorak is: Dvorak
lyx il: lyx
phonetic il: Phonetic
biblical il: Biblical Hebrew (Tiro)
nodeadkeys it: Eliminate dead keys
mac it: Macintosh
us it: US keyboard with Italian letters
geo it: Georgian
kana jp: Kana
OADG109A jp: OADG 109A
mac jp: Macintosh
phonetic kg: Phonetic
ruskaz kz: Russian with Kazakh
kazrus kz: Kazakh with Russian
basic la: Laos
stea la: Laos - STEA (proposed standard layout)
nodeadkeys latam: Eliminate dead keys
deadtilde latam: Include dead tilde
sundeadkeys latam: Sun dead keys
std lt: Standard
us lt: US keyboard with Lithuanian letters
ibm lt: IBM (LST 1205-92)
lekp lt: LEKP
lekpa lt: LEKPa
apostrophe lv: Apostrophe (') variant
tilde lv: Tilde (~) variant
fkey lv: F-letter (F) variant
cyrillic me: Cyrillic
cyrillicyz me: Cyrillic, Z and ZHE swapped
latinunicode me: Latin unicode
latinyz me: Latin qwerty
latinunicodeyz me: Latin unicode qwerty
cyrillicalternatequotes me: Cyrillic with guillemets
latinalternatequotes me: Latin with guillemets
nodeadkeys mk: Eliminate dead keys
us mt: Maltese keyboard with US layout
nodeadkeys no: Eliminate dead keys
dvorak no: Dvorak
smi no: Northern Saami
smi_nodeadkeys no: Northern Saami, eliminate dead keys
mac no: Macintosh
mac_nodeadkeys no: Macintosh, eliminate dead keys
qwertz pl: qwertz
dvorak pl: Dvorak
dvorak_quotes pl: Dvorak, Polish quotes on quotemark key
dvorak_altquotes pl: Dvorak, Polish quotes on key 1
csb pl: Kashubian
ru_phonetic_dvorak pl: Russian phonetic Dvorak
dvp pl: Programmer Dvorak
nodeadkeys pt: Eliminate dead keys
sundeadkeys pt: Sun dead keys
mac pt: Macintosh
mac_nodeadkeys pt: Macintosh, eliminate dead keys
mac_sundeadkeys pt: Macintosh, Sun dead keys
nativo pt: Nativo
nativo-us pt: Nativo for USA keyboards
nativo-epo pt: Nativo for Esperanto
cedilla ro: Cedilla
std ro: Standard
std_cedilla ro: Standard (Cedilla)
winkeys ro: Winkeys
crh_f ro: Crimean Tatar (Turkish F)
crh_alt ro: Crimean Tatar (Turkish Alt-Q)
crh_dobruca1 ro: Crimean Tatar (Dobruca-1 Q)
crh_dobruca2 ro: Crimean Tatar (Dobruca-2 Q)
phonetic ru: Phonetic
phonetic_winkeys ru: Phonetic Winkeys
typewriter ru: Typewriter
legacy ru: Legacy
typewriter-legacy ru: Typewriter, legacy
tt ru: Tatar
os_legacy ru: Ossetian, legacy
os_winkeys ru: Ossetian, Winkeys
cv ru: Chuvash
cv_latin ru: Chuvash Latin
udm ru: Udmurt
kom ru: Komi
sah ru: Yakut
xal ru: Kalmyk
dos ru: DOS
srp ru: Serbian
bak ru: Bashkirian
yz rs: Z and ZHE swapped
latin rs: Latin
latinunicode rs: Latin Unicode
latinyz rs: Latin qwerty
latinunicodeyz rs: Latin Unicode qwerty
alternatequotes rs: With guillemets
latinalternatequotes rs: Latin with guillemets
alternatequotes si: Use guillemets for quotes
us si: US keyboard with Slovenian letters
bksl sk: Extended Backslash
qwerty sk: qwerty
qwerty_bksl sk: qwerty, extended Backslash
nodeadkeys es: Eliminate dead keys
deadtilde es: Include dead tilde
sundeadkeys es: Sun dead keys
dvorak es: Dvorak
ast es: Asturian variant with bottom-dot H and bottom-dot L
cat es: Catalan variant with middle-dot L
mac es: Macintosh
nodeadkeys se: Eliminate dead keys
dvorak se: Dvorak
rus se: Russian phonetic
rus_nodeadkeys se: Russian phonetic, eliminate dead keys
smi se: Northern Saami
mac se: Macintosh
svdvorak se: Svdvorak
legacy ch: Legacy
de_nodeadkeys ch: German, eliminate dead keys
de_sundeadkeys ch: German, Sun dead keys
fr ch: French
fr_nodeadkeys ch: French, eliminate dead keys
fr_sundeadkeys ch: French, Sun dead keys
fr_mac ch: French (Macintosh)
de_mac ch: German (Macintosh)
syc sy: Syriac
syc_phonetic sy: Syriac phonetic
ku sy: Kurdish, Latin Q
ku_f sy: Kurdish, (F)
ku_alt sy: Kurdish, Latin Alt-Q
legacy tj: Legacy
tam_unicode lk: Tamil Unicode
tam_TAB lk: Tamil TAB Typewriter
tis th: TIS-820.2538
pat th: Pattachote
f tr: (F)
alt tr: Alt-Q
sundeadkeys tr: Sun dead keys
ku tr: Kurdish, Latin Q
ku_f tr: Kurdish, (F)
ku_alt tr: Kurdish, Latin Alt-Q
intl tr: International (with dead keys)
crh tr: Crimean Tatar (Turkish Q)
crh_f tr: Crimean Tatar (Turkish F)
crh_alt tr: Crimean Tatar (Turkish Alt-Q)
indigenous tw: Indigenous
saisiyat tw: Saisiyat
phonetic ua: Phonetic
typewriter ua: Typewriter
winkeys ua: Winkeys
legacy ua: Legacy
rstu ua: Standard RSTU
rstu_ru ua: Standard RSTU on Russian layout
homophonic ua: Homophonic
crh ua: Crimean Tatar (Turkish Q)
crh_f ua: Crimean Tatar (Turkish F)
crh_alt ua: Crimean Tatar (Turkish Alt-Q)
extd gb: Extended - Winkeys
intl gb: International (with dead keys)
dvorak gb: Dvorak
dvorakukp gb: Dvorak (UK Punctuation)
mac gb: Macintosh
colemak gb: Colemak
latin uz: Latin
crh uz: Crimean Tatar (Turkish Q)
crh_f uz: Crimean Tatar (Turkish F)
crh_alt uz: Crimean Tatar (Turkish Alt-Q)
kr104 kr: 101/104 key Compatible
CloGaelach ie: CloGaelach
UnicodeExpert ie: UnicodeExpert
ogam ie: Ogham
ogam_is434 ie: Ogham IS434
urd-crulp pk: CRULP
urd-nla pk: NLA
ara pk: Arabic
legacy epo: displaced semicolon and quote (obsolete)
igbo ng: Igbo
yoruba ng: Yoruba
hausa ng: Hausa
left_hand brai: Left hand
right_hand brai: Right hand
alt tm: Alt-Q
fr-oss ml: Français (France Alternative)
us-mac ml: English (USA Macintosh)
us-intl ml: English (USA International)

View File

@ -0,0 +1 @@
4639

View File

@ -0,0 +1,30 @@
#!/usr/bin/env bash
PID_FILE="background.pid"
WP_LOC="/home/nate/.config/sway/wallpapers"
PREV_WP=""
NEW_WP=$(ls $WP_LOC | sort -R | tail -n 1)
transition[0]="any"
transition[1]="wave"
transition[2]="outer"
transition[3]="wipe"
transition[4]="center"
size=${#transition[@]}
swww kill
swww init
# echo $(pgrep -f background.sh) > $PID_FILE
while true
do
while [[ $PREV_WP == $NEW_WP ]]
do
NEW_WP=$(ls $WP_LOC | sort -R | tail -n 1)
done
index=$(($RANDOM % $size))
#echo "Picked $WP_LOC/$NEW_WP with effect ${transition[$index]}"
swww img $WP_LOC/$NEW_WP --transition-type ${transition[$index]}
PREV_WP=$NEW_WP
sleep 120
done

View File

@ -0,0 +1,6 @@
#!/usr/bin/bash
if cat /proc/acpi/button/lid/*/state | grep -q open; then
swaymsg output eDP-1 enable
else
swaymsg output eDP-1 disable
fi

View File

@ -0,0 +1,15 @@
#!/usr/bin/env bash
# usage: import-gsettings
config="${XDG_CONFIG_HOME:-$HOME/.config}/gtk-3.0/settings.ini"
if [ ! -f "$config" ]; then exit 1; fi
gnome_schema="org.gnome.desktop.interface"
gtk_theme="$(grep 'gtk-theme-name' "$config" | cut -d'=' -f2)"
icon_theme="$(grep 'gtk-icon-theme-name' "$config" | cut -d'=' -f2)"
cursor_theme="$(grep 'gtk-cursor-theme-name' "$config" | cut -d'=' -f2)"
font_name="$(grep 'gtk-font-name' "$config" | cut -d'=' -f2)"
gsettings set "$gnome_schema" gtk-theme "$gtk_theme"
gsettings set "$gnome_schema" icon-theme "$icon_theme"
gsettings set "$gnome_schema" cursor-theme "$cursor_theme"
gsettings set "$gnome_schema" font-name "$font_name"

View File

@ -0,0 +1,9 @@
#!/bin/sh
# Times the screen off and puts it to background
swayidle \
timeout 300 'swaymsg "output * power off"' \
resume 'swaymsg "output * power on"' &
# Locks the screen immediately
swaylock
# Kills last background task so idle timer doesn't keep running
kill %%

View File

@ -0,0 +1,32 @@
#!/usr/bin/env bash
SCALE_FILE="scale.txt"
DIRNAME="/tmp/$(ls /tmp | grep scale.sh | head -n 1)"
CUR_SCALE=$(swaymsg -t get_outputs | grep -oP "scale\": \K\d.\d+")
NEW_SCALE=""
if [[ $DIRNAME == "/tmp/" ]]; then
DIRNAME=$(mktemp -d "${TMPDIR:-/tmp/}$(basename $0).XXXXXXXXXXXX")
echo $CUR_SCALE > $DIRNAME/$SCALE_FILE
else
CUR_SCALE=$(cat $DIRNAME/$SCALE_FILE)
fi
if [[ $1 == "inc" ]]; then
NEW_SCALE=$(echo $CUR_SCALE + 0.25 | bc)
elif [[ $1 == "dec" ]]; then
NEW_SCALE=$(echo $CUR_SCALE - 0.25 | bc)
else
echo "No op provided, pass in 'inc' or 'dec' to change scale"
fi
if [[ $NEW_SCALE < 0.50 ]]; then
NEW_SCALE=0.50
elif [[ $NEW_SCALE > 2 ]]; then
NEW_SCALE=2.00
fi
echo $NEW_SCALE > $DIRNAME/$SCALE_FILE
notify-send -t 1000 "Scale set to $NEW_SCALE"
swaymsg "output * scale $NEW_SCALE"

View File

@ -0,0 +1,33 @@
#!/usr/bin/env bash
entries="Active Screen Output Area Window"
selected=$(printf '%s\n' $entries | wofi --style=$HOME/.config/wofi/style.widgets.css --conf=$HOME/.config/wofi/config.screenshot | awk '{print tolower($1)}')
if [ "$1" == "clipboard" ]; then
case $selected in
active)
grimshot --notify copy active;;
screen)
grimshot --notify copy screen;;
output)
grimshot --notify copy output;;
area)
grimshot --notify copy area;;
window)
grimshot --notify copy window;;
esac
else
case $selected in
active)
grimshot --notify save active;;
screen)
grimshot --notify save screen;;
output)
grimshot --notify save output;;
area)
grimshot --notify save area;;
window)
grimshot --notify save window;;
esac
fi

View File

@ -0,0 +1,229 @@
from i3ipc import Connection, Event
from threading import Thread
from time import sleep
FRAME_T = 0.01 # time taken between each frame of fade
# transparency values
CON_AC = 1 # active window
CON_INAC = 0.5 # inactive window
FLOAT_AC = 1 # active floating window
FLOAT_INAC = 0.5 # inactive floating window
BOT_INAC = 0.9 # bottom window
# fade durations
FADE_TIME = 0.2
ALT_FADE_TIME = 0.1
CON_OUT = FADE_TIME # window fading out
CON_IN = 0.15 # window fading in
FLOAT_OUT = ALT_FADE_TIME # floating window fading out
FLOAT_IN = ALT_FADE_TIME # floating window fading in
BOT_OUT = ALT_FADE_TIME # bottom window fading out
BOT_IN = ALT_FADE_TIME # bottom window fading in
BOT_SWITCH_IN = FADE_TIME # window becoming bottom window
BOT_SWITCH_OUT = FADE_TIME # bottom window becoming window
FLOAT_BOT_OUT = FADE_TIME # floating window fading out from bottom
FLOAT_BOT_IN = FADE_TIME # floating window fading in from bottom
class Fader:
def __init__(self):
self.floating_windows = []
self.fader_running = False
self.fade_queue = []
self.fade_data = {}
self.bottom_win = None
self.old_win = None
self.active_win = None
ipc = Connection()
ipc.on(Event.WINDOW_FOCUS, self.on_window_focus)
ipc.on(Event.WINDOW_NEW, self.on_window_new)
ipc.on(Event.WINDOW_FLOATING, self.on_window_floating)
for win in ipc.get_tree():
if win.type == "floating_con":
self.floating_windows.append(win.id)
if win.focused:
change_opacity(win, FLOAT_AC)
self.active_win = win
else:
change_opacity(win, FLOAT_INAC)
elif win.type == "con":
if win.focused:
self.active_win = win
change_opacity(win, CON_AC)
else:
change_opacity(win, CON_INAC)
ipc.main()
def add_fade(self, win, start, target, duration):
if not duration:
if win.id in self.fade_queue:
self.fade_queue.remove(win.id)
del self.fade_data[win.id]
change_opacity(win, target)
return
if win.id in self.fade_queue:
f = self.fade_data[win.id]
change = (FRAME_T / duration) * (target - f["opacity"])
f["change"] = change
f["target"] = target
return
change_opacity(win, start)
change = (FRAME_T / duration) * (target - start)
fade_data = {"opacity": start, "change": change, "target": target, "win": win}
self.fade_queue.append(win.id)
self.fade_data[win.id] = fade_data
def start_fader(self):
if not self.fader_running:
self.fader_running = True
Thread(target=self.fader).start()
def fader(self):
while self.fade_queue:
for win_id in self.fade_queue.copy():
try:
f = self.fade_data[win_id]
except KeyError:
continue
f["opacity"] += f["change"]
finished = False
if f["change"] > 0:
if f["opacity"] >= f["target"]:
finished = True
elif f["opacity"] <= f["target"]:
finished = True
if finished:
change_opacity(f["win"], f["target"])
try:
self.fade_queue.remove(win_id)
del self.fade_data[win_id]
except (KeyError, ValueError):
continue
else:
change_opacity(f["win"], f["opacity"])
sleep(FRAME_T)
self.fader_running = False
def on_window_focus(self, ipc, e):
if self.active_win.id == e.container.id:
return
if self.active_win.type == "con":
if e.container.type == "con":
self.add_fade(
e.container, CON_INAC,
CON_AC, CON_IN)
self.add_fade(
self.active_win, CON_AC,
CON_INAC, CON_OUT)
else:
self.add_fade(
e.container, FLOAT_INAC,
FLOAT_AC, FLOAT_IN)
self.add_fade(
self.active_win, CON_AC,
BOT_INAC, BOT_OUT)
self.bottom_win = self.active_win
else:
if e.container.type == "con":
self.add_fade(
self.active_win, FLOAT_AC,
FLOAT_INAC, FLOAT_BOT_OUT)
if not self.bottom_win:
self.add_fade(
e.container, CON_INAC,
CON_AC, CON_IN)
elif e.container.id != self.bottom_win.id:
self.add_fade(
self.bottom_win, BOT_INAC,
CON_INAC, BOT_SWITCH_OUT)
self.add_fade(
e.container, CON_INAC,
CON_AC, BOT_SWITCH_IN)
self.bottom_win = e.container
else:
self.add_fade(
self.bottom_win, BOT_INAC,
CON_AC, BOT_IN)
else:
self.add_fade(
self.active_win, FLOAT_AC,
FLOAT_INAC, FLOAT_OUT)
self.add_fade(
e.container, FLOAT_INAC,
FLOAT_AC, FLOAT_IN)
self.start_fader()
self.active_win = e.container
def on_window_new(self, ipc, e):
if self.active_win:
if self.active_win.type == "con":
change_opacity(self.active_win, CON_INAC)
else:
change_opacity(self.active_win, FLOAT_INAC)
if self.bottom_win:
change_opacity(self.bottom_win, CON_INAC)
elif self.active_win and self.active_win.type == "con":
self.bottom_win = self.active_win
change_opacity(self.bottom_win, CON_INAC)
change_opacity(e.container, CON_AC)
self.old_win = self.active_win
self.active_win = e.container
def on_window_floating(self, ipc, e):
c_id = e.container.id
if c_id not in self.floating_windows:
self.floating_windows.append(c_id)
if self.active_win.id != e.container.id:
change_opacity(e.container, FLOAT_INAC)
else:
if self.old_win and self.bottom_win:
if self.old_win.type == "con":
self.bottom_win = self.old_win
change_opacity(self.bottom_win, BOT_INAC)
change_opacity(e.container, FLOAT_AC)
else:
self.floating_windows.remove(c_id)
if self.active_win.id != e.container.id:
change_opacity(e.container, CON_INAC)
else:
if self.old_win and self.old_win.type == "con":
change_opacity(self.old_win, CON_INAC)
change_opacity(self.active_win, CON_AC)
self.active_win = e.container
def change_opacity(win, trans):
win.command("opacity " + str(trans))
if __name__ == "__main__":
Fader()

Binary file not shown.

After

Width:  |  Height:  |  Size: 221 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 150 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 218 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 772 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 344 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 591 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 138 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

View File

@ -0,0 +1,38 @@
image=~/.config/swaylock/lock.png
clock
indicator
ignore-empty-password
show-failed-attempts
font=Overpass Nerd Font Mono
timestr=%I:%M %p
datestr=%A %b %e
bs-hl-color=f4dbd6
caps-lock-bs-hl-color=f4dbd6
caps-lock-key-hl-color=a6da95
inside-color=00000000
inside-clear-color=00000000
inside-caps-lock-color=00000000
inside-ver-color=00000000
inside-wrong-color=00000000
key-hl-color=67bf4a
layout-bg-color=00000000
layout-border-color=00000000
layout-text-color=cad3f5
line-color=00000000
line-clear-color=00000000
line-caps-lock-color=00000000
line-ver-color=00000000
line-wrong-color=00000000
ring-color=b7bdf8
ring-clear-color=f4dbd6
ring-caps-lock-color=f5a97f
ring-ver-color=8aadf4
ring-wrong-color=ee99a0
separator-color=00000000
text-color=363a4f
text-clear-color=f4dbd6
text-caps-lock-color=f5a97f
text-ver-color=8aadf4
text-wrong-color=ee99a0

View File

@ -0,0 +1,41 @@
screenshot
effect-pixelate=18
effect-vignette=0.7:0.5
clock
indicator-idle-visible
ignore-empty-password
show-failed-attempts
font=Overpass Nerd Font Mono
timestr=%I:%M %p
datestr=%A %b %e
fade-in=0.5
bs-hl-color=f4dbd6
caps-lock-bs-hl-color=f4dbd6
caps-lock-key-hl-color=a6da95
inside-color=666a8f
inside-clear-color=00000000
inside-caps-lock-color=00000000
inside-ver-color=00000000
inside-wrong-color=00000000
key-hl-color=67bf4a
layout-bg-color=00000000
layout-border-color=00000000
layout-text-color=cad3f5
line-color=00000000
line-clear-color=00000000
line-caps-lock-color=00000000
line-ver-color=00000000
line-wrong-color=00000000
ring-color=b7bdf8
ring-clear-color=f4dbd6
ring-caps-lock-color=f5a97f
ring-ver-color=8aadf4
ring-wrong-color=ee99a0
separator-color=00000000
text-color=363a4f
text-clear-color=f4dbd6
text-caps-lock-color=f5a97f
text-ver-color=8aadf4
text-wrong-color=ee99a0

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

View File

@ -0,0 +1,7 @@
visualizer.fps=20
visualizer.spectrum.bar.spacing=1
visualizer.spectrum.bar.width=3
visualizer.spectrum.smoothing.mode=monstercat
visualizer.monstercat.smoothing.factor=3
audio.stereo.enabled=false

View File

View File

@ -0,0 +1,265 @@
// Global
{
"layer": "top",
"position": "top",
"margin-top": 3,
"margin-left": 10,
"margin-right": 10,
"margin-bottom": 3,
// If height property would be not present, it'd be calculated dynamically
"height": 60,
"modules-left": [
"custom/launcher",
"hyprland/workspaces"
// "hyprland/submap",
],
"modules-center": [
"custom/signal",
"custom/steam",
"custom/spotify",
"custom/firefox",
"custom/slack",
"custom/files",
],
"modules-right": [
"network",
"idle_inhibitor",
"memory",
"cpu",
"pulseaudio",
"custom/keyboard-layout",
"battery",
//"custom/PBPbattery",
// "backlight#icon",
// "backlight#value",
"clock",
"tray",
//"custom/weather",
"custom/power",
],
// Modules
"idle_inhibitor": {
"format": "{icon} ",
"format-icons":{
"activated": "",
"deactivated": ""
}
},
"battery": {
"states": {
// "good": 95,
"warning": 30,
"critical": 15
},
"format": "{capacity}% {icon}",
"format-charging": "{capacity}% ",
"format-plugged": "{capacity}% ",
// "format-good": "", // An empty format will hide the module
// "format-full": "",
"format-icons": ["", "", "", "", ""]
},
"custom/PBPbattery": {
"exec": "~/.config/waybar/scripts/PBPbattery.sh",
"format": "{}",
},
"clock": {
"interval": 10,
"format-alt": " {:%e %b %Y}", // Icon: calendar-alt
"format": "{:%I:%M %p}",
"tooltip-format": "{:%e %B %Y}"
},
"cpu": {
"interval": 5,
"format": " {usage}% ({load})", // Icon: microchip
"states": {
"warning": 70,
"critical": 90,
},
"on-click": "foot -e 'htop'",
},
"custom/keyboard-layout": {
"exec": "swaymsg -t get_inputs | grep -m1 'xkb_active_layout_name' | cut -d '\"' -f4",
// Interval set only as a fallback, as the value is updated by signal
"interval": 30,
"format": " {}", // Icon: keyboard
// Signal sent by Sway key binding (~/.config/sway/key-bindings)
"signal": 1, // SIGHUP
"tooltip": false,
"on-click": "~/.config/waybar/scripts/keyboard_layout.sh",
},
"memory": {
"interval": 5,
"format": " {}%", // Icon: memory
"on-click": "foot -e 'htop'",
"states": {
"warning": 70,
"critical": 90
}
},
"network": {
"interval": 5,
"format-wifi": " {essid} ({signalStrength}%)", // Icon: wifi
"format-ethernet": " {ifname}: {ipaddr}/{cidr}", // Icon: ethernet
"format-disconnected": "⚠ Disconnected",
"tooltip-format": "{ifname}: {ipaddr}",
"on-click": "foot -e 'nmtui'",
},
"network#vpn": {
"interface": "tun0",
"format": " {essid} ({signalStrength}%)",
"format-disconnected": "⚠ Disconnected",
"tooltip-format": "{ifname}: {ipaddr}/{cidr}",
},
// "hyprland/submap": {
// "format": "{}",
// "tooltip": false
// },
// "sway/window": {
// "format": "{}",
// "max-length": 120
// },
"hyprland/workspaces": {
// "disable-scroll": true,
// "disable-markup" : false,
// "all-outputs": true,
"format": " {icon} "
// "format-icons": {
// "1": "",
// "2": "",
// "3": "",
// "4": "",
// }
},
"pulseaudio": {
"scroll-step": 1, // %, can be a float
"format": "{volume}% {icon}",
"format-bluetooth": "{volume}% {icon}  {format_source}",
"format-bluetooth-muted": " {icon}  {format_source}",
"format-muted": " {format_source}",
"format-source": "{volume}% ",
"format-source-muted": "",
"format-icons": {
"headphone": "",
"hands-free": "",
"headset": "",
"phone": "",
"portable": "",
"car": "",
"default": [""]
},
"on-click": "pavucontrol",
"on-scroll-up": "pactl set-sink-volume @DEFAULT_SINK@ +2%",
"on-scroll-down": "pactl set-sink-volume @DEFAULT_SINK@ -2%",
},
// to use the weather module replace <your_location> with your city or town
// note: do not use spaces: new york would be newyork
"custom/weather": {
"exec": "~/.config/waybar/scripts/weather.sh <your_location>",
"return-type": "json",
"interval": 600,
},
// "custom/temp": {
// "exec": "notify-send \"temp thing\"",
// "interval": "once",
// "signal": 8,
// },
"tray": {
"icon-size": 18,
"spacing":10,
},
"backlight#icon": {
"format": "{icon}",
"format-icons": [""],
"on-scroll-down": "brightnessctl -c backlight set 1%-",
"on-scroll-up": "brightnessctl -c backlight set +1%"
},
"backlight#value" :{
"format": "{percent}%",
"on-scroll-down": "brightnessctl -c backlight set 1%-",
"on-scroll-up": "brightnessctl -c backlight set +1%"
},
"custom/signal": {
"format": "  ",
"on-click": "exec signal",
"tooltip": false,
},
"custom/steam": {
"format": "  ",
"on-click": "exec steam",
"tooltip": false,
},
"custom/spotify": {
"format": "  ",
"on-click": "foot -e 'ncspot'",
"tooltip": false,
},
"custom/firefox": {
"format": "  ",
"on-click": "exec firefox",
"tooltip": false,
},
"custom/slack": {
"format": "  ",
"on-click": "slack",
"tooltip": false,
"exec if": "pgrep slack"
},
"custom/files": {
"format": " 󰉋 ",
"on-click": "exec thunar",
"tooltip": false,
},
// "custom/pomo": {
// "format": " {} ",
// "exec": "/home/nate/source/pomozoro/zig-out/bin/pomozoro",
// "return-type": "json",
// "on-click": "echo 's' > ~/.local/share/pomozoro/pomopipe",
// "on-click-right": "echo 'p' > ~/.local/share/pomozoro/pomopipe",
// "on-click-middle": "echo 'r' > ~/.local/share/pomozoro/pomopipe",
// // "signal": 8,
// },
"custom/launcher": {
"format":" ",
"on-click": "exec wofi -c ~/.config/wofi/config -I",
"tooltip": false,
},
"custom/power": {
"format":"⏻",
"on-click": "exec ~/.config/waybar/scripts/power-menu.sh",
"tooltip": false,
},
}

View File

@ -0,0 +1,16 @@
#!/usr/bin/env bash
entries="Default Colemak"
selected=$(printf '%s\n' $entries | wofi --conf=$HOME/.config/wofi/config.power --style=$HOME/.config/wofi/style.widgets.css | awk '{print tolower($1)}')
case $selected in
default)
swaymsg input type:keyboard xkb_layout "us"
swaymsg input type:keyboard xkb_variant '""'
;;
colemak)
swaymsg input type:keyboard xkb_layout "us"
swaymsg input type:keyboard xkb_variant "colemak_dh"
;;
esac

View File

@ -0,0 +1,16 @@
#!/usr/bin/env bash
entries="Logout Suspend Reboot Shutdown"
selected=$(printf '%s\n' $entries | wofi --conf=$HOME/.config/wofi/config.power --style=$HOME/.config/wofi/style.widgets.css | awk '{print tolower($1)}')
case $selected in
logout)
swaymsg exit;;
suspend)
exec systemctl suspend;;
reboot)
exec systemctl reboot;;
shutdown)
exec systemctl poweroff -i;;
esac

View File

@ -0,0 +1,314 @@
/* =============================================================================
*
* Waybar configuration
*
* Configuration reference: https://github.com/Alexays/Waybar/wiki/Configuration
*
* =========================================================================== */
@define-color rosewater #f4dbd6;
@define-color flamingo #f0c6c6;
@define-color pink #f5bde6;
@define-color mauve #c6a0f6;
@define-color red #ed8796;
@define-color maroon #ee99a0;
@define-color peach #f5a97f;
@define-color yellow #eed49f;
@define-color green #a6da95;
@define-color teal #8bd5ca;
@define-color sky #91d7e3;
@define-color sapphire #7dc4e4;
@define-color blue #8aadf4;
@define-color lavender #b7bdf8;
@define-color text #cad3f5;
@define-color subtext1 #b8c0e0;
@define-color subtext0 #a5adcb;
@define-color overlay2 #939ab7;
@define-color overlay1 #8087a2;
@define-color overlay0 #6e738d;
@define-color surface2 #5b6078;
@define-color surface1 #494d64;
@define-color surface0 #363a4f;
@define-color base #24273a;
@define-color mantle #1e2030;
@define-color crust #181926;
/* -----------------------------------------------------------------------------
* Keyframes
* -------------------------------------------------------------------------- */
@keyframes blink-warning {
70% {
color: @overlay0;
}
to {
color: @overlay0;
background-color: @crust;
}
}
@keyframes blink-critical {
70% {
color: @overlay2;
}
to {
color: @overlay2;
background-color: @base;
}
}
/* -----------------------------------------------------------------------------
* Base styles
* -------------------------------------------------------------------------- */
/* Reset all styles */
* {
border: none;
border-radius: 0;
min-height: 0;
margin: 1px;
padding: 0;
}
/* The whole bar */
#waybar {
background: transparent;
background-color: transparent;
font-family: Overpass Nerd Font;
font-size: 20px;
color: @text;
}
#taskbar {
background: transparent;
}
#taskbar button {
padding-left: 3px;
padding-right: 3px;
margin-left: 3px;
margin-right: 3px;
color: transparent;
border-bottom: 2px solid;
}
#taskbar button.active {
color: @lavender;
}
.modules-left,
.modules-right,
.modules-center {
/* margin: 8px 8px 1px 8px; */
background: transparent;
/* color: @; */
background-color: @base;
border-radius: 25px;
padding: 0px 10px 0px 10px;
border-style: solid;
border-width: 3px;
border-color: @surface0;
}
/* Every modules */
#battery,
#clock,
#backlight,
#cpu,
#custom-keyboard-layout,
#memory,
#mode,
#custom-weather,
#network,
#pulseaudio,
#temperature,
#tray,
#idle_inhibitor,
#custom-PBPbattery {
padding: 0.5rem 0.6rem;
margin: 1px 0px;
}
/* -----------------------------------------------------------------------------
* Modules styles
* -------------------------------------------------------------------------- */
#battery {
animation-timing-function: linear;
animation-iteration-count: infinite;
animation-direction: alternate;
}
#battery.warning {
color: @flamingo;
}
#battery.critical {
color: @red;
}
#battery.warning.discharging {
animation-name: blink-warning;
animation-duration: 3s;
}
#battery.critical.discharging {
animation-name: blink-critical;
animation-duration: 2s;
}
#cpu.warning {
color: @flamingo;
}
#cpu.critical {
color: @red;
}
#memory {
animation-timing-function: linear;
animation-iteration-count: infinite;
animation-direction: alternate;
}
#memory.warning {
color: @flamingo;
}
#memory.critical {
color: @red;
animation-name: blink-critical;
animation-duration: 2s;
padding-left: 5px;
padding-right: 5px;
}
#mode {
background: @overlay0;
border-bottom: 3px transparent;
color: @text;
margin-left: 5px;
margin-right: 5px;
border-radius: 20px;
}
#network.disconnected {
color: @flamingo;
}
#pulseaudio {
padding-top: 6px;
}
#pulseaudio.muted {
color: @sky;
}
#temperature.critical {
color: @red;
}
#window {
font-weight: bold;
}
#workspaces {
font-size: 13px;
}
#workspaces button {
border-bottom: 3px solid transparent;
margin-bottom: 0px;
padding: 0px;
}
#custom-launcher {
color: @lavenderblush;
}
/* @define-color rosewater #f4dbd6; */
/* @define-color flamingo #f0c6c6; */
/* @define-color pink #f5bde6; */
/* @define-color mauve #c6a0f6; */
/* @define-color red #ed8796; */
/* @define-color maroon #ee99a0; */
/* @define-color peach #f5a97f; */
/* @define-color yellow #eed49f; */
/* @define-color green #a6da95; */
/* @define-color teal #8bd5ca; */
/* @define-color sky #91d7e3; */
/* @define-color sapphire #7dc4e4; */
/* @define-color blue #8aadf4; */
/* @define-color lavender #b7bdf8; */
#custom-signal {
color: @lavender;
padding: 0px 5px 0px 5px;
}
#custom-steam {
color: @teal;
padding: 0px 5px 0px 5px;
}
#custom-spotify {
color: @green;
padding: 0px 5px 0px 5px;
}
#custom-firefox {
color: @yellow;
padding: 0px 5px 0px 5px;
}
#custom-slack {
color: @peach;
padding: 0px 5px 0px 5px;
}
#custom-files {
color: @pink;
padding: 0px 5px 0px 5px;
}
#custom-pomo {
color: @red;
padding: 0px 5px 0px 5px;
}
#wiggle {
animation-name: blink-warning;
}
#workspaces button.focused {
border-bottom: 3px solid @green;
margin-bottom: 1px;
padding-left: 0;
}
#workspaces button.urgent {
border-color: @lavender;
color: @yellow;
}
#custom-power {
margin-left: 15px;
margin-right: 15px;
font-size: 15px;
color: @flamingo;
}
#custom-launcher {
font-size: 15px;
margin-left: 15px;
margin-right: 10px;
}
#backlight.icon {
padding-right: 1px;
font-size: 13px;
}

View File

@ -0,0 +1,17 @@
hide_scroll=true
show=drun
width=25%
lines=10
line_wrap=word
term=xfce4-terminal
allow_markup=true
always_parse_args=true
show_all=true
print_command=true
layer=overlay
allow_images=true
insensitive=true
prompt=
image_size=15
display_generic=true
location=center

View File

@ -0,0 +1,9 @@
hide_search=true
hide_scroll=true
insensitive=true
show=dmenu
width=100
lines=4
location=top_right
x=-120
y=10

View File

@ -0,0 +1,9 @@
hide_search=true
hide_scroll=true
insensitive=true
width=1
show=dmenu
lines=5
location=centre
x=870
y=455

View File

@ -0,0 +1,70 @@
/*
Nordic Color Scheme
*/
@define-color nord2 #434c5e;
@define-color nord3 #4c566a;
@define-color nord4 #d8dee9;
@define-color nord8 #88c0d0;
@define-color nord_cyan #8fbcbb;
@define-color nord_orange #d08770;
@define-color nord_red #bf616a;
@define-color nord_green #a3be8c;
@define-color nord_yellow #ebcb8b;
@define-color nord_purple #b48ead;
*{
font-family: Overpass Nerd Font;
font-size: 16;
}
window {
border-radius: 10px;
border: 2px solid @nord_purple;
padding: 5px;
}
#input {
margin-bottom: 15px;
padding:6px;
border-radius: 20px;
border:none;
color: @nord4;
font-family: Overpass Nerd Font 18;
}
#inner-box {
border-radius: 10px;
background-color: @nord3;
}
#outer-box {
border-radius: 10px;
margin: 5px;
padding:15px;
background-color: @nord2;
}
#text {
padding: 5px;
color: @nord4;
}
#entry:nth-child(even) {
background-color: @nord2;
}
#entry:selected {
color: @nord_cyan;
background-color: @nord_cyan;
}
#text:selected {
color: @nord_2;
background-color: @nord_cyan;
}
#scroll {
margin: -2px 0px;
}

View File

@ -0,0 +1,45 @@
/*
Arc-Dark Color Scheme
*/
@define-color highlight #5294e2;
@define-color base1 #404552;
@define-color base2 #40455;
@define-color base3 #4b5160;
*{
font-family: UbuntuMono;
}
#window {
border: 1px solid @highlight;
margin: 0px 5px 0px 5px;
}
#inner-box {
background-color: @base2;
}
#outer-box {
margin: 5px;
padding:10px;
background-color: @base2;
margin-top: -22px;
}
#text {
padding: 5px;
color: white;
}
#entry:nth-child(even) {
background-color: @base1;
}
#entry {
background-color: @base3;
}
#entry:selected {
background-color: @highlight;
}

119
scrappy/dotfiles/wofi/windows.py Executable file
View File

@ -0,0 +1,119 @@
#!/bin/python3
import json
import subprocess
from argparse import ArgumentParser
ENTER = "\n"
def get_windows():
command = "swaymsg -t get_tree"
process = subprocess.Popen(
command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE
)
process = subprocess.Popen(
command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE
)
data = json.loads(process.communicate()[0])
# Select outputs that are active
windows = []
for output in data["nodes"]:
# The scratchpad (under __i3) is not supported
if output.get("name") != "__i3" and output.get("type") == "output":
workspaces = output.get("nodes", [])
for ws in workspaces:
if ws.get("type") == "workspace":
windows.extend(extract_nodes_iterative(ws))
return windows
# Extracts all windows from a sway workspace json object
def extract_nodes_iterative(workspace):
all_nodes = []
floating_nodes = workspace.get("floating_nodes", [])
for floating_node in floating_nodes:
all_nodes.append(floating_node)
nodes = workspace.get("nodes", [])
for node in nodes:
# Leaf node
if not node.get("nodes"):
all_nodes.append(node)
# Nested node, handled iterative
else:
for inner_node in node.get("nodes"):
nodes.append(inner_node)
return all_nodes
# Returns an array of all windows
def parse_windows(windows):
return [window.get("name") for window in windows]
# Returns a newline seperated UFT-8 encoded string of all windows for wofi
def build_wofi_string(windows):
return ENTER.join(windows).encode("UTF-8")
# Executes wofi with the given input string
def show_wofi(windows):
command = 'wofi -c ~/.config/wofi/menu -s ~/.config/wofi/style.css -p "Windows: " -d -i --hide-scroll'
process = subprocess.Popen(
command, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE
)
return process.communicate(input=windows)[0]
# Returns the sway window id of the window that was selected by the user inside wofi
def parse_id(windows, parsed_windows, selected):
if not selected:
return None
else:
selected = (selected.decode("UTF-8"))[:-1] # Remove new line character
window_index = int(
parsed_windows.index(selected)
) # Get index of selected window in the parsed window array
return str(
windows[window_index].get("id")
) # Get sway window id based on the index
# Switches the focus to the given id
def switch_window(id):
command = "swaymsg [con_id={}] focus".format(id)
process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE)
process.communicate()[0]
# Entry point
if __name__ == "__main__":
parser = ArgumentParser(description="Wofi based window switcher")
windows = get_windows()
parsed_windows = parse_windows(windows)
wofi_string = build_wofi_string(parsed_windows)
selected = show_wofi(wofi_string)
# Otherwise no point in running
if selected:
selected_id = parse_id(windows, parsed_windows, selected)
switch_window(selected_id)

View File

@ -0,0 +1,52 @@
# Do not modify this file! It was generated by nixos-generate-config
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{ config, lib, pkgs, modulesPath, ... }:
{
imports =
[ (modulesPath + "/installer/scan/not-detected.nix")
];
boot.initrd.systemd.enable = true;
boot.initrd.availableKernelModules = [ "xhci_pci" "usb_storage" "sd_mod" "sdhci_pci" ];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-intel" ];
boot.extraModulePackages = [ ];
# boot.initrd.luks.devices."enc_source" = {
# device = "/dev/disk/by-uuid/80c9bd6b-5730-4daf-8f7e-ab13a3875921";
# keyFile = "/root/keyfile";
# crypttabExtraOpts = ["nofail"];
# };
fileSystems."/" =
{ device = "/dev/disk/by-uuid/97472fe9-155a-4081-9c30-7515d261a184";
fsType = "ext4";
};
fileSystems."/boot" =
{ device = "/dev/disk/by-uuid/CF4D-BF80";
fsType = "vfat";
options = [ "fmask=0077" "dmask=0077" ];
};
fileSystems."/home/scrappy/source" = {
device = "/dev/mapper/enc_source";
fsType = "ext4";
options = [ "nofail" ]; # Allow the boot to continue even if the mount fails
};
swapDevices =
[ { device = "/dev/disk/by-uuid/2698a2f4-fa59-4c1b-9d89-c3c802c78404"; }
];
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
# (the default) this is the recommended approach. When using systemd-networkd it's
# still possible to use this option, but it's recommended to use it in conjunction
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
networking.useDHCP = lib.mkDefault true;
# networking.interfaces.wlp2s0.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
}

View File

@ -0,0 +1,82 @@
{lib, config, pkgs, inputs, ...}:
let
cfg = config.firefoxApp;
in
{
# imports = [
# inputs.nur.hmModules.nur
# ];
options.firefoxApp = {
enable = lib.mkEnableOption "enable firefox browser";
};
config = lib.mkIf cfg.enable {
programs.firefox = {
# Add pipewire support
# package = (pkgs.wrapFirefox (pkgs.firefox-unwrapped.override { pipewireSupport = true;}) {});
enable = true;
profiles = {
default = {
id = 0;
name = "default";
isDefault = true;
extensions = with pkgs; [
nur.repos.rycee.firefox-addons.darkreader
nur.repos.rycee.firefox-addons.keepassxc-browser
nur.repos.crazazy.firefox-addons.ublock-origin
nur.repos.bandithedoge.firefoxAddons.stylus
];
search = {
# Replace default firefox search engine config with this one
force = true;
default = "Startpage";
engines = {
"Startpage" = {
urls = [{
template = "https://www.startpage.com/sp/search?query={searchTerms}";
}];
};
"Nix Packages" = {
urls = [{
template = "https://search.nixos.org/packages";
params = [
{ name = "type"; value = "packages"; }
{ name = "query"; value = "{searchTerms}"; }
];
}];
icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
definedAliases = [ "@np" ];
};
};
};
settings = {
"browser.startup.blankWindow" = true;
"browser.startup.homepage" = "https://www.startpage.com/do/mypage.pl?prfe=11898a1adf7b7dfb587580692f358773a11ca25e993b8e077476641cec033319e15f2449c345f5be919fd0a082015c3e4ed23143bd4337512466c04c2999831a54abca2eaeb42963c63ff064";
"browser.search.region" = "US";
"browser.search.isUS" = true;
"distribution.searchplugins.defaultLocale" = "en-US";
"general.useragent.locale" = "en-US";
"extensions.activeThemeID" = "{831b8843-7251-4306-9521-e688f18b4aeb}";
"privacy.trackingprotection.enable" = true;
"privacy.trackingprotection.emailtracking.enable" = true;
"privacy.trackingprotection.socialtracking.enable" = true;
"privacy.clearOnShutdown.cookies" = true;
"browser.safebrowsing.passwords.enabled" = false;
"browser.migrate.interactions.passwords" = false;
"pref.privacy.disable_button.view_passwords" = false;
"signon.rememberSignon" = false;
"extensions.formautofill.creditCards.enabled" = false;
"extensions.formautofill.addresses.enabled" = false;
"browser.toolbars.bookmarks.visibility" = "always";
# For applying userContent.css - not being used
# "toolkit.legacyUserProfileCustomizations.stylesheets" = true;
# "browser.newtabpage.pinned" = [{
# title = "NixOS";
# url = "https://nixos.org";
# }];
};
};
};
};
};
}

View File

@ -0,0 +1,405 @@
{ inputs, config, pkgs, ... }:
let
userName = "scrappy";
fullName = "Nathan Anderson";
email = "n8r@tuta.io";
unstable = import inputs.nixpkgs-unstable { system = "x86_64-linux"; config.allowUnfree = true; };
oldstable = import inputs.nixpkgs-23 { system = "x86_64-linux"; config.allowUnfree = true; };
#niri = import inputs.niri { system = "x86_64-linux"; config.allowUnfree = true; };
#davinciDesktop = pkgs.makeDesktopItem {
# name = "davinci-resolve-studio";
# desktopName = "Davinci Resolve Studio";
# exec = "${oldstable.davinci-resolve-studio}";
#};
# overlay-unstable = final: prev: {
# unstable = inputs.nixpkgs-unstable.legacyPackages.x86_64-linux;
# };
# overlay-oldstable = final: prev: {
# pkgs23 = inputs.nixpkgs-23.legacyPackages.x86_64-linux;
# };
# overlay-unstable = final: prev: {
# # unstable = inputs.nixpkgs-unstable.legacyPackages.x86_64-linux;
# unstable = import inputs.nixpkgs-unstable {
# system = "x86_64-linux";
# config = {
# allowUnfreePredicate = (pkg: true);
# allowUnfree = true;
# };
# };
# };
in
{
# nixpkgs.overlays = [
# niri.overlays.niri
# ];
imports = [
../apps/firefox/firefox.nix
];
home.username = userName;
home.homeDirectory = "/home/${userName}";
programs.home-manager.enable = true;
home.stateVersion = "24.05"; # Please read the comment before changing.
# The home.packages option allows you to install Nix packages into your
# environment.
firefoxApp.enable = true;
fonts.fontconfig.enable = true;
wayland.windowManager.hyprland.enable = true; # enable Hyprland
wayland.windowManager.hyprland.settings = {
"$mod" = "Super";
"$terminal" = "foot";
"$fileManager" = "thunar";
"$menu" = "nwg-drawer";
# Autostart
exec-once =
[
"swaylock -C ~/.config/swaylock/boot-config"
"swaybg -i ~/.config/hypr/nix.png"
"nwg-panel"
"nm-applet --indicator"
# May need to kill mako if nwg-panel starts it
"swaync"
# Disable keyboard's power button
"hyprctl keyword 'device[power-button]:enabled' 'false'"
];
input = {
repeat_rate = 50;
repeat_delay = 400;
touchpad = {
natural_scroll = true;
};
};
gestures = {
workspace_swipe = true;
};
general = {
gaps_in = 3;
gaps_out = 5;
border_size = 2;
"col.active_border" = "rgba(33ccffee) rgba(00ff99ee) 45deg";
};
decoration = {
rounding = 8;
inactive_opacity = 0.8;
# Perf improvement
blur = {
enabled = false;
};
drop_shadow = false;
};
bind =
[
"$mod, Q, killactive"
"$mod Shift, Q, exit"
"$mod, W, exec, firefox"
"$mod, D, exec, $menu"
"$mod, T, exec, $fileManager"
"$mod, code:36, exec, $terminal" # Enter code
"$mod, Space, togglefloating"
"$mod, F, fullscreen, 0"
"$mod, Tab, cyclenext"
"$mod Shift, Tab, swapnext"
"$mod, left, movefocus, l"
"$mod, right, movefocus, r"
"$mod, up, movefocus, u"
"$mod, down, movefocus, d"
"$mod Shift, left, movewindow, l"
"$mod Shift, right, movewindow, r"
"$mod Shift, up, movewindow, u"
"$mod Shift, down, movewindow, d"
# Colemak-DH binds
"$mod, N, movefocus, l"
"$mod, O, movefocus, r"
"$mod, E, movefocus, u"
"$mod, I, movefocus, d"
"$mod Shift, N, movewindow, l"
"$mod Shift, O, movewindow, r"
"$mod Shift, E, movewindow, u"
"$mod Shift, I, movewindow, d"
# Disabled laptop keyboard
"$mod SHIFT, K, exec, hyprctl keyword 'device[at-translated-set-2-keyboard]:enabled' 'false' && notify-send 'Laptop keyboard disabled' -i nix-snowflake"
# Reload config
"$mod SHIFT, R, exec, hyprctl reload && notify-send 'Hypr Config Reloaded' -i nix-snowflake"
# Print, exec, grimblast copy area"
]
++ (
# workspaces
# binds $mod + [shift +] {1..9} to [move to] workspace {1..9}
builtins.concatLists (builtins.genList (i:
let ws = i + 1;
in [
"$mod, code:1${toString i}, workspace, ${toString ws}"
"$mod SHIFT, code:1${toString i}, movetoworkspace, ${toString ws}"
]
)
9)
);
bindm = [
"$mod, mouse:272, movewindow" # LMB to move window
"$mod, mouse:273, resizewindow" # RMB to move window
];
bindel = [
# Brightness / Volume Controls
# Chromebook has the printed symbols for these actions, but are really just fn keys
"$mod, F6, exec, brightnessctl s 10%-"
"$mod, F7, exec, brightnessctl s 10%+"
"$mod, F8, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"
"$mod, F9, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-"
"$mod, F10, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+"
# "$mod, XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle"
];
# Lid switch binds
bindl = [
", switch:Lid Switch, exec, swaylock"
];
misc = {
"vfr" = true;
force_default_wallpaper = 0;
disable_hyprland_logo = true;
};
};
# Optional, hint Electron apps to use Wayland:
# home.sessionVariables.
home.packages = with pkgs; [
### ---
### hyprland packages
swaybg
swaylock-effects
wofi
nwg-bar
nwg-menu
nwg-look
nwg-dock-hyprland
nwg-panel
nwg-drawer
nwg-launchers
gopsuinfo # For system stats in panel
wl-clipboard # System clipboard
networkmanagerapplet
libnotify
swaynotificationcenter
lynx
qutebrowser
brightnessctl
### ---
# nur.repos.crazazy.js.eslint
# inputs.nixpkgs-stable.legacyPackages.x86_64-linux.corectrl
chromium
#
# Dev Tools
#
#dbeaver-bin
helix
foot
docker
docker-compose
fossil
fnc
jq
python310
### LSP's
nil # Nix LSP
nodePackages_latest.bash-language-server
openscad-lsp
vscode-langservers-extracted # provides eslint, markdown, json, css, and html lsp
python311Packages.python-lsp-server
# zls
### Misc
# android-udev-rules
# android-tools
# sdkmanager
usbutils
# cli-visualizer
openscad
#
# Gaming
#
#amdgpu_top
#mangohud
#r2modman
#wine-wayland
webcord
#
# Better Unix
#
bat
duf
du-dust
fd
fzf
lsd
ripgrep
tre-command
gtop
htop
neofetch
# Normies
unzip
llpp
nmap
#
# Photo / Video
#
imv
mpv
gimp
ffmpeg
tenacity
yt-dlp
#
# Communication
#
mumble
slack
unstable.signal-desktop
#
# Other
#
keepassxc
yubioath-flutter
#
# Style
#
catppuccin-kvantum
libsForQt5.qtstyleplugin-kvantum
libsForQt5.qt5ct
# Install fonts
lato
(nerdfonts.override { fonts = [ "Hermit" "Overpass" ]; })
recursive
];
# Home Manager is pretty good at managing dotfiles. The primary way to manage
# plain files is through 'home.file'.
home.file."${config.xdg.configHome}" = {
source = ../../dotfiles;
recursive = true;
};
home.sessionVariables = {
BAT_THEME="Catppuccin Macchiato";
EDITOR = "hx";
# For electron apps
NIXOS_OZONE_WL = "1";
};
# Git setup
programs.git = {
enable = true;
userEmail = email;
userName = fullName;
extraConfig = {
include = { path = "${config.xdg.configHome}/macchiato.gitconfig"; };
init = { defaultBranch = "main"; };
pull = { ff = "only"; };
merge = { conflictStyle="zdiff3"; };
push = { autoSetupRemote="true"; };
delta = { features = "Catppuccin Macchiato"; };
};
delta.enable = true;
};
programs = {
direnv = {
enable = true;
enableZshIntegration = true; # see note on other shells below
nix-direnv.enable = true;
};
bash.enable = true; # see note on other shells below
};
# Zsh setup
programs.zsh = {
enable = true;
oh-my-zsh = {
enable = true;
plugins = [ "fossil" "git" ];
theme = "half-life";
};
initExtra = ''
eval "$(direnv hook zsh)"
export SSH_AUTH_SOCK=$XDG_RUNTIME_DIR/ssh-agent
yt-audio() {
nix-shell -p yt-dlp --run "yt-dlp -x $1 --audio-format mp3"
}
# Better Unix Aliases
# alias ask="nix-shell -p python310Packages.openai --run 'python ~/source/python/chat.py'"
alias ls="lsd"
alias l="lsd --almost-all --long"
alias llm="lsd --timesort --long"
alias lS="lsd --oneline --classic"
alias lt="lsd --tree --depth=2"
alias grep="rg"
alias cat="bat --paging=never"
alias rm="rm -i"
alias adaptiveoff="swaymsg 'output * adaptive_sync off'"
alias adaptiveon="swaymsg 'output * adaptive_sync on'"
'';
};
qt = {
enable = true;
platformTheme.name = "qtct";
style.name = "kvantum";
};
gtk = {
enable = true;
cursorTheme = {
package = pkgs.catppuccin-cursors.macchiatoLavender;
name = "Catppuccin-Macchiato-Lavender-Cursors";
};
iconTheme = {
package = pkgs.catppuccin-papirus-folders;
name = "Papirus-Dark";
};
theme = {
name = "catppuccin-macchiato-lavender-compact+rimless";
package = pkgs.catppuccin-gtk.override {
accents = [ "lavender" ];
size = "compact";
tweaks = [ "rimless" ];
variant = "macchiato";
};
};
};
# Symlink in gtk and kvantum theme to ~/.config
xdg.configFile = {
"gtk-4.0/assets".source = "${config.gtk.theme.package}/share/themes/${config.gtk.theme.name}/gtk-4.0/assets";
"gtk-4.0/gtk.css".source = "${config.gtk.theme.package}/share/themes/${config.gtk.theme.name}/gtk-4.0/gtk.css";
"gtk-4.0/gtk-dark.css".source = "${config.gtk.theme.package}/share/themes/${config.gtk.theme.name}/gtk-4.0/gtk-dark.css";
"Kvantum/kvantum.kvconfig".text = ''
[General]
theme=Catppuccin-Frappe-Blue
'';
"Kvantum/Catppuccin-Frappe-Blue".source = "${pkgs.catppuccin-kvantum}/share/Kvantum/Catppuccin-Frappe-Blue";
};
home.file.".icons/default/index.theme".text = ''
[icon theme]
Inherits=Catppuccin-Macchiato-Lavender-Cursors
'';
services.wlsunset = {
enable = true;
sunrise = "07:00";
sunset = "17:00";
temperature.night = 3500;
};
}

View File

@ -0,0 +1,183 @@
{ inputs, lib, config, pkgs, userName, ... }:
let
unstable = import inputs.nixpkgs-unstable { system = "x86_64-linux"; config.allowUnfree = true; };
in
{
options.niriwm = {
enable = lib.mkEnableOption "Enable niri window manager.";
useNonFree = lib.mkOption {
default = false;
example = true;
description = "Whether to enable non-free software in the niri config";
};
systemPackages = lib.mkOption {
default = [];
description = "Add any additional packages desired. Merged with sway defaults.";
};
};
###
## Configuration
###
config = lib.mkIf config.niriwm.enable {
#programs.dconf.enable = true;
#programs.sway.enable = true;
#programs.sway.wrapperFeatures.gtk = true;
nixpkgs.config.allowUnfree = config.niriwm.useNonFree;
###
## XDG portal setup
###
xdg.portal = {
config = {
common = {
default = [
"wlr"
];
};
};
extraPortals = with pkgs; [
# xdg-desktop-portal-kde
xdg-desktop-portal-gnome
];
#wlr.enable = true;
enable = true;
};
xdg.sounds.enable = true;
###
## System Packages
###
environment.systemPackages = with pkgs; lib.lists.flatten [
[
bash
foot
git
glib # gsettings
grim
#sway-contrib.grimshot
libnotify
mako
man-pages
man-pages-posix
ncspot
networkmanagerapplet
#unstable.niri
pavucontrol
slurp
syncthingtray
swaylock
#swayidle
#swaybg
# swww
#tailscale-systray
wl-clipboard
waybar
wdisplays
wofi
xdg-utils
zsh
lxqt.lxqt-policykit
# Fonts
]
config.niriwm.systemPackages
];
environment.variables.QT_STYLE_OVERRIDE = "kvantum";
# adds additional man pages
documentation.dev.enable = true;
# Thunar config
programs.thunar = {
enable = true;
plugins = with pkgs.xfce; [
thunar-archive-plugin
thunar-volman
];
};
programs.file-roller.enable = true;
programs.xfconf.enable = true;
programs.zsh.enable = true;
#programs.steam.enable = config.swaywm.installGaming;
#programs.gamemode.enable = true;
#programs.adb.enable = true;
#programs.kdeconnect.enable = true;
# service file to start the sshAgent
#programs.ssh.startAgent = true;
###
## Services
###
virtualisation.docker.enable = true;
services.blueman.enable = true;
#services.flatpak.enable = true;
services.gvfs.enable = true; # thunar mount, trash, etc
services.tumbler.enable = true; # thunar thumbnails
services.openssh.enable = true;
services.dbus.enable = true;
#services.syncthing.enable = true;
services.gnome.gnome-keyring.enable = true;
#services.usbmuxd.enable = true;
#services.tailscale = {
# enable = true;
# openFirewall = true;
#};
# For betaflight configurator
#services.udev.extraRules = ''
# DFU (Internal bootloader for STM32 and AT32 MCUs)
# SUBSYSTEM=="usb", ATTRS{idVendor}=="2e3c", ATTRS{idProduct}=="df11", MODE="0664", GROUP="dialout"
# SUBSYSTEM=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="df11", MODE="0664", GROUP="dialout"
#'';
# For yubioath desktop
services.pcscd.enable = true;
# Audio
security.rtkit.enable = true;
services.pipewire = {
enable = true;
alsa.enable = true;
pulse.enable = true;
wireplumber.enable = true;
};
sound.enable = false;
###
## Misc
###
# Necessary for home-manager sway setup
security.polkit.enable = true;
#services.greetd = {
# enable = true;
# settings = rec {
# initial_session = {
# command = "${pkgs.sway}/bin/sway";
# user = "nate";
# };
# default_session = initial_session;
# };
#};
# services.xserver.videoDrivers = [ "amdgpu" ];
# Enable HIP
#systemd.tmpfiles.rules = [
# "L+ /opt/rocm/hip - - - - ${pkgs.rocmPackages.clr}"
#];
hardware.bluetooth.enable = true; # enables support for Bluetooth
hardware.bluetooth.powerOnBoot = true; # powers up the default Bluetooth controller on boot
#hardware.opengl = {
# Mesa
# enable = true;
# Vulkan
# driSupport = true;
# Rocm support and vulkan drivers
# extraPackages = with pkgs; [
# rocmPackages.clr.icd
# ];
#};
};
}

View File

@ -0,0 +1,187 @@
{ lib, config, pkgs, userName, ... }:
{
options.swaywm = {
enable = lib.mkEnableOption "Enable sway window manager.";
useNonFree = lib.mkOption {
default = false;
example = true;
description = "Whether to enable non-free software in the sway config";
};
installGaming = lib.mkOption {
default = false;
example = true;
description = "Whether to install gaming software on the system.";
};
systemPackages = lib.mkOption {
default = [];
description = "Add any additional packages desired. Merged with sway defaults.";
};
};
###
## Configuration
###
config = lib.mkIf config.swaywm.enable {
programs.sway.enable = true;
programs.sway.wrapperFeatures.gtk = true;
nixpkgs.config.allowUnfree = config.swaywm.useNonFree;
# For R2ModMan
# nixpkgs.config.permittedInsecurePackages = [
# "electron-25.9.0"
# ];
###
## XDG portal setup
###
xdg.portal = {
config = {
common = {
default = [
"wlr"
];
};
};
extraPortals = with pkgs; [
# xdg-desktop-portal-kde
xdg-desktop-portal-gtk
];
wlr.enable = true;
enable = true;
};
xdg.sounds.enable = true;
###
## System Packages
###
environment.systemPackages = with pkgs; lib.lists.flatten [
[
bash
foot
git
glib # gsettings
grim
sway-contrib.grimshot
libnotify
mako
man-pages
man-pages-posix
ncspot
networkmanagerapplet
pavucontrol
slurp
syncthingtray
swaylock
swayidle
swaybg
# swww
tailscale-systray
wl-clipboard
waybar
wdisplays
wofi
xdg-utils
zsh
lxqt.lxqt-policykit
# Fonts
]
config.swaywm.systemPackages
];
environment.variables.QT_STYLE_OVERRIDE = "kvantum";
# adds additional man pages
documentation.dev.enable = true;
# Thunar config
programs.thunar = {
enable = true;
plugins = with pkgs.xfce; [
thunar-archive-plugin
thunar-volman
];
};
programs.file-roller.enable = true;
programs.xfconf.enable = true;
programs.zsh.enable = true;
programs.steam.enable = config.swaywm.installGaming;
programs.gamemode.enable = true;
programs.adb.enable = true;
programs.kdeconnect.enable = true;
# service file to start the sshAgent
programs.ssh.startAgent = true;
###
## Services
###
virtualisation.docker.enable = true;
services.blueman.enable = true;
services.flatpak.enable = true;
services.gvfs.enable = true; # thunar mount, trash, etc
services.tumbler.enable = true; # thunar thumbnails
services.openssh.enable = true;
services.dbus.enable = true;
services.syncthing.enable = true;
services.gnome.gnome-keyring.enable = true;
services.usbmuxd.enable = true;
services.tailscale = {
enable = true;
openFirewall = true;
};
# For betaflight configurator
services.udev.extraRules = ''
# DFU (Internal bootloader for STM32 and AT32 MCUs)
SUBSYSTEM=="usb", ATTRS{idVendor}=="2e3c", ATTRS{idProduct}=="df11", MODE="0664", GROUP="dialout"
SUBSYSTEM=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="df11", MODE="0664", GROUP="dialout"
'';
# For yubioath desktop
services.pcscd.enable = true;
# Audio
security.rtkit.enable = true;
services.pipewire = {
enable = true;
alsa.enable = true;
pulse.enable = true;
wireplumber.enable = true;
};
sound.enable = false;
###
## Misc
###
# Necessary for home-manager sway setup
security.polkit.enable = true;
services.greetd = {
enable = true;
settings = rec {
initial_session = {
command = "${pkgs.sway}/bin/sway";
user = "nate";
};
default_session = initial_session;
};
};
# services.xserver.videoDrivers = [ "amdgpu" ];
# Enable HIP
systemd.tmpfiles.rules = [
"L+ /opt/rocm/hip - - - - ${pkgs.rocmPackages.clr}"
];
hardware.bluetooth.enable = true; # enables support for Bluetooth
hardware.bluetooth.powerOnBoot = true; # powers up the default Bluetooth controller on boot
hardware.opengl = {
# Mesa
# enable = true;
# Vulkan
# driSupport = true;
# Rocm support and vulkan drivers
extraPackages = with pkgs; [
rocmPackages.clr.icd
];
};
};
}

View File

@ -0,0 +1,57 @@
{ lib, config, pkgs, ... }:
let
cfg = config.main_user;
in
{
options.main_user = {
enable = lib.mkEnableOption "enable user module";
isDesktopUser = lib.mkOption {
default = false;
example = true;
description = "Add additional user groups for desktop users";
};
userName = lib.mkOption {
default = "mainuser";
description = "username";
};
};
config = lib.mkIf cfg.enable {
users.users.${cfg.userName} = lib.mkMerge [
{
isNormalUser = true;
initialPassword = "password";
description = "main user";
shell = pkgs.zsh;
}
(lib.mkIf (!cfg.isDesktopUser) {
extraGroups = [
"wheel"
"networkmanager"
cfg.userName
];
})
(lib.mkIf cfg.isDesktopUser {
extraGroups = [
"wheel"
"networkmanager"
"corectrl"
cfg.userName
"video"
"audio"
# For android
"adbusers"
# For serial interfaces
"dialout"
# For docker
"docker"
];
})
];
};
}