dendrify: comfy-station
118
old/modules/bin/nix-scripts.nix
Normal file
@@ -0,0 +1,118 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
isHM,
|
||||
...
|
||||
}: let
|
||||
cfg = config.hive.nix-scripts;
|
||||
home-rebuild =
|
||||
pkgs.writeShellScriptBin ".home-rebuild"
|
||||
''
|
||||
set -e
|
||||
pushd ~/.hive/
|
||||
${pkgs.alejandra}/bin/alejandra . &>/dev/null
|
||||
${pkgs.git}/bin/git diff -U0
|
||||
echo "NixOS Rebuilding..."
|
||||
home-manager switch --flake ~/.hive -b backup --log-format internal-json |& ${pkgs.nix-output-monitor}/bin/nom --json
|
||||
gen=$(home-manager generations | head -n1 | ${pkgs.gawk}/bin/awk '{print "Gen" $5 " @ " $1 "-" $2}')
|
||||
by="$(${pkgs.coreutils-full}/bin/whoami)@$(${pkgs.nettools}/bin/hostname)"
|
||||
${pkgs.git}/bin/git commit --no-gpg-sign -am "Home $gen by $by"
|
||||
popd
|
||||
'';
|
||||
rebuild =
|
||||
pkgs.writeShellScriptBin ".nixos-rebuild"
|
||||
''
|
||||
set -e
|
||||
pushd ~/.hive/
|
||||
${pkgs.alejandra}/bin/alejandra . &>/dev/null
|
||||
${pkgs.git}/bin/git diff -U0
|
||||
echo "NixOS Rebuilding..."
|
||||
${pkgs.nh}/bin/nh os switch ~/.hive
|
||||
gen=$(sudo nix-env --list-generations --profile /nix/var/nix/profiles/system | ${pkgs.gnugrep}/bin/grep current | ${pkgs.gawk}/bin/awk '{print "Gen" $1 " @ " $2 "-" $3}')
|
||||
by="$(${pkgs.coreutils-full}/bin/whoami)@$(${pkgs.nettools}/bin/hostname)"
|
||||
${pkgs.git}/bin/git commit --no-gpg-sign -am "System $gen by $by"
|
||||
popd
|
||||
'';
|
||||
upgrade =
|
||||
pkgs.writeShellScriptBin ".nixos-upgrade"
|
||||
''
|
||||
set -e
|
||||
pushd ~/.hive/
|
||||
if [ -n "$(${pkgs.git}/bin/git status --porcelain)" ]; then
|
||||
echo ".hive is unclean!"
|
||||
exit 1
|
||||
fi
|
||||
branch_staging="staging-update"
|
||||
|
||||
if ${pkgs.git}/bin/git rev-parse --verify "$branch_staging" >/dev/null 2>&1; then
|
||||
echo "Using staging update branch."
|
||||
else
|
||||
echo "No staging update branch found."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
${pkgs.git}/bin/git checkout "$branch_staging" flake.lock
|
||||
echo "Updating nix-flake..."
|
||||
nix flake update --flake .
|
||||
echo "NixOS Rebuilding..."
|
||||
${pkgs.nh}/bin/nh os switch ~/.hive
|
||||
gen=$(sudo nix-env --list-generations --profile /nix/var/nix/profiles/system | ${pkgs.gnugrep}/bin/grep current | ${pkgs.gawk}/bin/awk '{print "Gen" $1 " @ " $2 "-" $3}')
|
||||
by="$(${pkgs.coreutils-full}/bin/whoami)@$(${pkgs.nettools}/bin/hostname)"
|
||||
${pkgs.git}/bin/git commit --no-gpg-sign -am "Upgrade $gen by $by"
|
||||
${pkgs.git}/bin/git branch -D "$branch_staging"
|
||||
popd
|
||||
'';
|
||||
update =
|
||||
pkgs.writeShellScriptBin ".nixos-update"
|
||||
''
|
||||
set -e
|
||||
pushd ~/.hive/
|
||||
if [ -n "$(${pkgs.git}/bin/git status --porcelain)" ]; then
|
||||
echo ".hive is unclean!"
|
||||
exit 1
|
||||
fi
|
||||
branch_staging="staging-update"
|
||||
branch_current="$(${pkgs.git}/bin/git branch --show-current)"
|
||||
|
||||
if ${pkgs.git}/bin/git rev-parse --verify "$branch_staging" >/dev/null 2>&1; then
|
||||
echo "There is already a staging update branch."
|
||||
else
|
||||
echo "Creating a new staging update branch."
|
||||
${pkgs.git}/bin/git switch -c "$branch_staging"
|
||||
nix flake update --verbose --flake .
|
||||
${pkgs.git}/bin/git add flake.lock
|
||||
${pkgs.git}/bin/git commit --no-gpg-sign -m "staging update"
|
||||
${pkgs.git}/bin/git switch "$branch_current"
|
||||
fi
|
||||
|
||||
nix store --log-format internal-json -v diff-closures \
|
||||
'.?ref='"$branch_current"'#nixosConfigurations.'"$(${pkgs.hostname}/bin/hostname)"'.config.system.build.toplevel' \
|
||||
'.?ref='"$branch_staging"'#nixosConfigurations.'"$(${pkgs.hostname}/bin/hostname)"'.config.system.build.toplevel' \
|
||||
|& ${pkgs.nix-output-monitor}/bin/nom --json
|
||||
|
||||
popd
|
||||
'';
|
||||
in {
|
||||
options = {
|
||||
hive.nix-scripts.enable = lib.mkEnableOption "Enable the nix build/update scripts";
|
||||
};
|
||||
|
||||
config =
|
||||
lib.mkIf cfg.enable
|
||||
(
|
||||
if isHM
|
||||
then {
|
||||
home.packages = [
|
||||
home-rebuild
|
||||
];
|
||||
}
|
||||
else {
|
||||
environment.systemPackages = [
|
||||
rebuild
|
||||
upgrade
|
||||
update
|
||||
];
|
||||
}
|
||||
);
|
||||
}
|
||||
60
old/modules/default.nix
Normal file
@@ -0,0 +1,60 @@
|
||||
{
|
||||
isHM ? null,
|
||||
lib,
|
||||
...
|
||||
}: {
|
||||
assertions = [
|
||||
{
|
||||
assertion = isHM != null;
|
||||
message = "The \"home-manager\" flag isHM is required.";
|
||||
}
|
||||
];
|
||||
imports =
|
||||
[
|
||||
# modules containing both system and home-manager configs
|
||||
./bin/nix-scripts.nix
|
||||
]
|
||||
++ lib.optionals (! isHM) [
|
||||
# pure system modules
|
||||
./desktop/de
|
||||
./desktop/dm
|
||||
./desktop/themes
|
||||
./hardware/bluetooth.nix
|
||||
./hardware/sound.nix
|
||||
./hardware/yubikey.nix
|
||||
./networking/wireguard
|
||||
./programs/creative.nix
|
||||
./programs/games.nix
|
||||
./programs/spotify-shortcuts.nix
|
||||
./programs/utils.nix
|
||||
./services/borg-server.nix
|
||||
./services/gitea-instance.nix
|
||||
./services/gotify-instance.nix
|
||||
./services/kdeconnect.nix
|
||||
./services/minecraft-server
|
||||
./services/nextcloud-instance.nix
|
||||
./services/virt-manager.nix
|
||||
]
|
||||
++ lib.optionals isHM [
|
||||
# pure home-manager modules
|
||||
./home/doom
|
||||
./home/firefox.nix
|
||||
./home/flameshot.nix
|
||||
./home/gotify.nix
|
||||
./home/hyprland
|
||||
./home/jj.nix
|
||||
./home/kdeconnect.nix
|
||||
./home/kitty
|
||||
./home/nextcloud
|
||||
./home/plasma.nix
|
||||
./home/ranger
|
||||
./home/ssh.nix
|
||||
./home/swaync
|
||||
./home/themes/layan.nix
|
||||
./home/waybar
|
||||
./home/wlogout
|
||||
./home/wofi
|
||||
./home/yubikey.nix
|
||||
./home/zsh
|
||||
];
|
||||
}
|
||||
7
old/modules/desktop/de/default.nix
Normal file
@@ -0,0 +1,7 @@
|
||||
{...}: {
|
||||
imports = [
|
||||
./hyprland.nix
|
||||
./kwallet.nix
|
||||
./plasma.nix
|
||||
];
|
||||
}
|
||||
39
old/modules/desktop/de/hyprland.nix
Normal file
@@ -0,0 +1,39 @@
|
||||
{
|
||||
lib,
|
||||
config,
|
||||
pkgs,
|
||||
...
|
||||
}: let
|
||||
cfg = config.hive.hyprland;
|
||||
in {
|
||||
options.hive.hyprland = {
|
||||
enable = lib.mkEnableOption "enable hyprland desktop environment";
|
||||
};
|
||||
config = lib.mkIf cfg.enable {
|
||||
services = {
|
||||
libinput.enable = true;
|
||||
dbus.enable = true;
|
||||
};
|
||||
|
||||
xdg.portal = {
|
||||
enable = true;
|
||||
extraPortals = with pkgs; [
|
||||
xdg-desktop-portal-wlr
|
||||
xdg-desktop-portal-hyprland
|
||||
kdePackages.xdg-desktop-portal-kde
|
||||
];
|
||||
};
|
||||
|
||||
environment.systemPackages = with pkgs; [spaceFM];
|
||||
|
||||
services.udisks2.enable = true;
|
||||
|
||||
programs.hyprland = {
|
||||
enable = true;
|
||||
withUWSM = true;
|
||||
xwayland.enable = true;
|
||||
};
|
||||
programs.hyprlock.enable = true;
|
||||
security.pam.services.hyprlock = {};
|
||||
};
|
||||
}
|
||||
24
old/modules/desktop/de/plasma.nix
Normal file
@@ -0,0 +1,24 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}: let
|
||||
cfg = config.hive.plasma;
|
||||
in {
|
||||
options.hive.plasma = {
|
||||
enable = lib.mkEnableOption "Enable Plasma desktop environment with sddm";
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
services.desktopManager.plasma6.enable = true;
|
||||
|
||||
xdg.portal = {
|
||||
enable = true;
|
||||
extraPortals = with pkgs; [
|
||||
kdePackages.xdg-desktop-portal-kde
|
||||
xdg-desktop-portal-gtk
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
36
old/modules/desktop/dm/default.nix
Normal file
@@ -0,0 +1,36 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
...
|
||||
}: let
|
||||
cfg = config.hive.displayManager;
|
||||
in {
|
||||
options.hive.displayManager = with lib; {
|
||||
name = mkOption {
|
||||
type = types.enum ["sddm" "gdm" "cosmic"];
|
||||
default = "sddm";
|
||||
description = "The display manager to use.";
|
||||
};
|
||||
autologin = mkOption {
|
||||
type = types.nullOr types.str;
|
||||
default = null;
|
||||
description = "The autologin username or null for no autologin.";
|
||||
};
|
||||
};
|
||||
|
||||
imports = [
|
||||
./gdm.nix
|
||||
./sddm.nix
|
||||
];
|
||||
|
||||
config = {
|
||||
services.xserver.enable = true;
|
||||
services.xserver = {
|
||||
xkb.layout = "de";
|
||||
xkb.variant = "";
|
||||
xkb.options = "caps:ctrl_modifier";
|
||||
};
|
||||
services.displayManager.autoLogin.enable = cfg.autologin != null;
|
||||
services.displayManager.autoLogin.user = cfg.autologin;
|
||||
};
|
||||
}
|
||||
14
old/modules/desktop/dm/gdm.nix
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
lib,
|
||||
config,
|
||||
...
|
||||
}: let
|
||||
cfg = config.hive.displayManager;
|
||||
in {
|
||||
config = lib.mkIf (cfg.name == "gdm") {
|
||||
services.xserver.displayManager.gdm = {
|
||||
enable = true;
|
||||
wayland = true;
|
||||
};
|
||||
};
|
||||
}
|
||||
15
old/modules/desktop/dm/sddm.nix
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
lib,
|
||||
config,
|
||||
pkgs,
|
||||
...
|
||||
}: let
|
||||
cfg = config.hive.displayManager;
|
||||
in {
|
||||
config = lib.mkIf (cfg.name == "sddm") {
|
||||
services.displayManager.sddm = {
|
||||
enable = true;
|
||||
wayland.enable = true;
|
||||
};
|
||||
};
|
||||
}
|
||||
5
old/modules/desktop/themes/default.nix
Normal file
@@ -0,0 +1,5 @@
|
||||
{...}: {
|
||||
imports = [
|
||||
./layan.nix
|
||||
];
|
||||
}
|
||||
21
old/modules/desktop/themes/layan.nix
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
lib,
|
||||
config,
|
||||
pkgs,
|
||||
...
|
||||
}: let
|
||||
cfg = config.hive.themes.layan;
|
||||
in {
|
||||
options.hive.themes.layan = {
|
||||
enable = lib.mkEnableOption "Layan theme configuration";
|
||||
};
|
||||
config = lib.mkIf cfg.enable {
|
||||
environment.systemPackages = [
|
||||
pkgs.hive.layan-qt6
|
||||
pkgs.kdePackages.qtstyleplugin-kvantum
|
||||
pkgs.unstable.layan-cursors
|
||||
pkgs.layan-gtk-theme
|
||||
pkgs.tela-circle-icon-theme
|
||||
];
|
||||
};
|
||||
}
|
||||
5
old/modules/home/doom/default.nix
Normal file
@@ -0,0 +1,5 @@
|
||||
{...}: {
|
||||
imports = [
|
||||
./doom.nix
|
||||
];
|
||||
}
|
||||
288
old/modules/home/doom/doom.nix
Normal file
@@ -0,0 +1,288 @@
|
||||
{
|
||||
config,
|
||||
pkgs,
|
||||
lib,
|
||||
...
|
||||
}: let
|
||||
cfg = config.hive.doom;
|
||||
doom-pkgs = with pkgs; [
|
||||
cmake
|
||||
emacs-all-the-icons-fonts
|
||||
fira
|
||||
fira-code-symbols
|
||||
fontconfig
|
||||
gcc
|
||||
nerd-fonts.fira-code
|
||||
];
|
||||
default-core-pkgs = with pkgs; [
|
||||
(ripgrep.override {withPCRE2 = true;})
|
||||
(aspellWithDicts (d: [d.en d.de d.en-computers d.en-science]))
|
||||
binutils
|
||||
editorconfig-core-c
|
||||
fd
|
||||
git
|
||||
gnumake
|
||||
gnutls
|
||||
ispell
|
||||
libtool
|
||||
vscode-langservers-extracted
|
||||
(pkgs.stdenvNoCC.mkDerivation {
|
||||
name = "epdfinfo";
|
||||
phases = "installPhase";
|
||||
installPhase = ''
|
||||
mkdir -p $out/bin
|
||||
ln -s $(${pkgs.findutils}/bin/find ${pkgs.emacsPackages.pdf-tools}/ -name epdfinfo) $out/bin/
|
||||
'';
|
||||
})
|
||||
];
|
||||
default-shell-pkgs = with pkgs; [
|
||||
bash-language-server
|
||||
];
|
||||
default-nix-pkgs = with pkgs; [
|
||||
alejandra
|
||||
nixd
|
||||
];
|
||||
default-latex-pkgs = with pkgs; [
|
||||
pandoc
|
||||
poppler
|
||||
texlab
|
||||
texlive.combined.scheme-medium
|
||||
];
|
||||
default-cxx-pkgs = with pkgs; [
|
||||
clang
|
||||
clang-tools
|
||||
cmake
|
||||
cppcheck
|
||||
doxygen
|
||||
gdb
|
||||
ninja
|
||||
];
|
||||
default-python-pkgs = with pkgs; [
|
||||
python312
|
||||
python312Packages.black
|
||||
pyright
|
||||
];
|
||||
doom-path-pkgs =
|
||||
lib.optionals cfg.withLatexPkgs (cfg.overrideLatexPkgs default-latex-pkgs)
|
||||
++ lib.optionals cfg.withShellPkgs (cfg.overrideShellPkgs default-shell-pkgs)
|
||||
++ lib.optionals cfg.withNixPkgs (cfg.overrideNixPkgs default-nix-pkgs)
|
||||
++ lib.optionals cfg.withCXXPkgs (cfg.overrideCXXPkgs default-cxx-pkgs)
|
||||
++ lib.optionals cfg.withPythonPkgs (cfg.overridePythonPkgs default-python-pkgs)
|
||||
++ lib.optional cfg.enableCopilot pkgs.unstable.copilot-language-server
|
||||
++ default-core-pkgs;
|
||||
doom-socket-name = "main";
|
||||
wrapped-emacs = pkgs.symlinkJoin {
|
||||
name = "wrapped-emacs";
|
||||
paths = [pkgs.emacs30];
|
||||
nativeBuildInputs = [pkgs.makeBinaryWrapper];
|
||||
postBuild = ''
|
||||
wrapProgram $out/bin/emacs \
|
||||
--prefix PATH : ${lib.makeBinPath doom-path-pkgs} \
|
||||
--add-flags "--init-directory=${config.xdg.configHome}/doom-emacs" \
|
||||
--set DOOMDIR "${config.home.sessionVariables.DOOMDIR}" \
|
||||
--set DOOMLOCALDIR "${config.home.sessionVariables.DOOMLOCALDIR}"
|
||||
|
||||
wrapProgram $out/bin/emacsclient \
|
||||
--prefix PATH : ${lib.makeBinPath doom-path-pkgs} \
|
||||
--set DOOMDIR "${config.home.sessionVariables.DOOMDIR}" \
|
||||
--set DOOMLOCALDIR "${config.home.sessionVariables.DOOMLOCALDIR}"
|
||||
'';
|
||||
};
|
||||
doom-setup = pkgs.writeShellScript "doom-setup" ''
|
||||
export PATH="${lib.makeBinPath doom-path-pkgs}:$PATH"
|
||||
export EMACS="${wrapped-emacs}/bin/emacs"
|
||||
export DOOMDIR="${config.home.sessionVariables.DOOMDIR}"
|
||||
export DOOMLOCALDIR="${config.home.sessionVariables.DOOMLOCALDIR}"
|
||||
if [ ! -d "$DOOMLOCALDIR" ]; then
|
||||
${config.xdg.configHome}/doom-emacs/bin/doom install --force --no-env
|
||||
else
|
||||
${config.xdg.configHome}/doom-emacs/bin/doom "$@"
|
||||
fi
|
||||
'';
|
||||
doom-open = pkgs.writeShellScriptBin "doom-open" ''
|
||||
export EMACS_SOCKET_NAME="$XDG_RUNTIME_DIR/emacs/${doom-socket-name}"
|
||||
if [ -t 0 ]; then
|
||||
exec ${wrapped-emacs}/bin/emacsclient -t "$@"
|
||||
else
|
||||
exec ${wrapped-emacs}/bin/emacsclient -c "$@"
|
||||
fi
|
||||
'';
|
||||
in {
|
||||
options.hive.doom = {
|
||||
enable = lib.mkEnableOption "Enable Doom Emacs";
|
||||
asDefaultEditor = lib.mkEnableOption "set the EDITOR variable to use the current emacs server (graphical/non-graphical)";
|
||||
enableCopilot = lib.mkEnableOption "Enable Copilot in Doom Emacs";
|
||||
enableTidal = lib.mkEnableOption "Enable TidalCycles";
|
||||
withLatexPkgs = lib.mkEnableOption "Enable LaTeX packages in doom path";
|
||||
withShellPkgs = lib.mkEnableOption "Enable shell packages in doom path";
|
||||
withNixPkgs = lib.mkEnableOption "Enable LaTeX packages in doom path";
|
||||
withCXXPkgs = lib.mkEnableOption "Enable CXX packages in doom path";
|
||||
withPythonPkgs = lib.mkEnableOption "Enable python packages in doom path";
|
||||
overrideLatexPkgs = lib.mkOption {
|
||||
type = lib.types.functionTo (lib.types.listOf lib.types.package);
|
||||
default = pkgs: pkgs;
|
||||
example = ''
|
||||
prev: with pkgs; [
|
||||
texlive.combined.scheme-full
|
||||
]
|
||||
'';
|
||||
description = "Override the default LaTeX packages in the doom path.";
|
||||
};
|
||||
overrideShellPkgs = lib.mkOption {
|
||||
type = lib.types.functionTo (lib.types.listOf lib.types.package);
|
||||
default = pkgs: pkgs;
|
||||
example = ''
|
||||
prev: with pkgs; [
|
||||
shellcheck
|
||||
]
|
||||
'';
|
||||
description = "Override the default shell packages in the doom path.";
|
||||
};
|
||||
overrideNixPkgs = lib.mkOption {
|
||||
type = lib.types.functionTo (lib.types.listOf lib.types.package);
|
||||
default = pkgs: pkgs;
|
||||
example = ''
|
||||
prev: with pkgs; [
|
||||
nixpkgs-fmt
|
||||
]
|
||||
'';
|
||||
description = "Override the default Nix packages in the doom path.";
|
||||
};
|
||||
overrideCXXPkgs = lib.mkOption {
|
||||
type = lib.types.functionTo (lib.types.listOf lib.types.package);
|
||||
default = pkgs: pkgs;
|
||||
example = ''
|
||||
prev: with pkgs; [
|
||||
openmp
|
||||
]
|
||||
'';
|
||||
description = "Override the default C++ packages in the doom path.";
|
||||
};
|
||||
overridePythonPkgs = lib.mkOption {
|
||||
type = lib.types.functionTo (lib.types.listOf lib.types.package);
|
||||
default = pkgs: pkgs;
|
||||
example = ''
|
||||
prev: with pkgs; [
|
||||
pythonPackages.black
|
||||
]
|
||||
'';
|
||||
description = "Override the default Python packages in the doom path.";
|
||||
};
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
fonts.fontconfig.enable = true;
|
||||
|
||||
programs.emacs = {
|
||||
enable = true;
|
||||
package = wrapped-emacs;
|
||||
};
|
||||
|
||||
home = {
|
||||
sessionPath = ["${config.xdg.configHome}/doom-emacs/bin"];
|
||||
sessionVariables =
|
||||
{
|
||||
DOOMDIR = "${config.xdg.configHome}/doom-config";
|
||||
DOOMLOCALDIR = "${config.xdg.configHome}/doom-local";
|
||||
}
|
||||
// lib.optionalAttrs cfg.asDefaultEditor {
|
||||
EDITOR = "${doom-open.name}";
|
||||
};
|
||||
packages = doom-pkgs ++ lib.optional cfg.asDefaultEditor doom-open;
|
||||
};
|
||||
|
||||
systemd.user.services.doom-emacs-server = {
|
||||
Unit = {
|
||||
Description = "Doom Emacs Server";
|
||||
};
|
||||
Service = {
|
||||
ExecStart = "${wrapped-emacs}/bin/emacs --fg-daemon=${doom-socket-name}";
|
||||
SuccessExitStatus = 15;
|
||||
};
|
||||
Install = {
|
||||
WantedBy = []; # Lazy start by socket
|
||||
};
|
||||
};
|
||||
systemd.user.sockets.doom-emacs-server = {
|
||||
Socket = {
|
||||
ListenStream = "/run/user/%U/emacs/${doom-socket-name}";
|
||||
DirectoryMode = "0700";
|
||||
};
|
||||
Install = {
|
||||
WantedBy = ["sockets.target"];
|
||||
};
|
||||
};
|
||||
|
||||
xdg = {
|
||||
enable = true;
|
||||
configFile = {
|
||||
"doom-config/splash.png" = {
|
||||
source = ./static/splash.png;
|
||||
};
|
||||
"doom-config/config.el" = {
|
||||
source = ./static/config.el;
|
||||
};
|
||||
"doom-config/config.d/copilot.el" = {
|
||||
enable = cfg.enableCopilot;
|
||||
source = ./static/config.d/copilot.el;
|
||||
};
|
||||
"doom-config/packages/treesit-docgen.el" = {
|
||||
source = ./static/packages/treesit-docgen.el;
|
||||
};
|
||||
"doom-config/init.el" = {
|
||||
source = ./static/init.el;
|
||||
onChange = "${doom-setup} sync --force -e";
|
||||
};
|
||||
"doom-config/packages.el" = {
|
||||
source = ./static/packages.el;
|
||||
onChange = "${doom-setup} sync --force -u -e";
|
||||
};
|
||||
"doom-config/packages.d/copilot.el" = {
|
||||
enable = cfg.enableCopilot;
|
||||
source = ./static/packages.d/copilot.el;
|
||||
onChange = "${doom-setup} sync --force -u -e";
|
||||
};
|
||||
"doom-config/packages.d/tidal.el" = {
|
||||
enable = cfg.enableTidal;
|
||||
source = ./static/packages.d/tidal.el;
|
||||
onChange = "${doom-setup} sync --force -u -e";
|
||||
};
|
||||
"doom-emacs" = {
|
||||
source = builtins.fetchGit {
|
||||
url = "https://github.com/doomemacs/doomemacs";
|
||||
rev = "a0d6aac43fc94def29c98826e2f0088bcb703d13";
|
||||
};
|
||||
onChange = "${doom-setup} --force sync -u -e";
|
||||
};
|
||||
};
|
||||
desktopEntries = {
|
||||
emacs = {
|
||||
name = "Doom Emacs";
|
||||
genericName = "Text Editor";
|
||||
icon = ./static/icon.png;
|
||||
exec = "${wrapped-emacs}/bin/emacs %F";
|
||||
terminal = false;
|
||||
categories = ["Application" "Development" "TextEditor"];
|
||||
mimeType = ["text/*"];
|
||||
settings = {
|
||||
StartupWMClass = "Doom Emacs";
|
||||
};
|
||||
};
|
||||
emacsclient = {
|
||||
name = "Doom Emacs (Client)";
|
||||
genericName = "Text Editor";
|
||||
icon = ./static/icon.png;
|
||||
exec = ''
|
||||
sh -c "if [ -n \\"\\$*\\" ]; then exec ${wrapped-emacs}/bin/emacsclient --alternate-editor= --display=\\"\\$DISPLAY\\" \\"\\$@\\"; else exec emacsclient --alternate-editor= --create-frame; fi" sh %F
|
||||
'';
|
||||
terminal = false;
|
||||
categories = ["Application" "Development" "TextEditor"];
|
||||
mimeType = ["text/*"];
|
||||
settings = {
|
||||
StartupWMClass = "Doom Emacs";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
8
old/modules/home/doom/static/config.d/copilot.el
Normal file
@@ -0,0 +1,8 @@
|
||||
;; accept completion from copilot and fallback to company
|
||||
(use-package! copilot
|
||||
:hook (prog-mode . copilot-mode)
|
||||
:bind (:map copilot-completion-map
|
||||
("<tab>" . 'copilot-accept-completion)
|
||||
("TAB" . 'copilot-accept-completion)
|
||||
("C-TAB" . 'copilot-accept-completion-by-word)
|
||||
("C-<tab>" . 'copilot-accept-completion-by-word)))
|
||||
266
old/modules/home/doom/static/config.el
Normal file
@@ -0,0 +1,266 @@
|
||||
;;; $DOOMDIR/config.el -*- lexical-binding: t; -*-
|
||||
|
||||
;; Place your private configuration here! Remember, you do not need to run 'doom
|
||||
;; sync' after modifying this file!
|
||||
|
||||
|
||||
;; Some functionality uses this to identify you, e.g. GPG configuration, email
|
||||
;; clients, file templates and snippets. It is optional.
|
||||
;; (setq user-full-name "John Doe"
|
||||
;; user-mail-address "john@doe.com")
|
||||
|
||||
;; Doom exposes five (optional) variables for controlling fonts in Doom:
|
||||
;;
|
||||
;; - `doom-font' -- the primary font to use
|
||||
;; - `doom-variable-pitch-font' -- a non-monospace font (where applicable)
|
||||
;; - `doom-big-font' -- used for `doom-big-font-mode'; use this for
|
||||
;; presentations or streaming.
|
||||
;; - `doom-symbol-font' -- for symbols
|
||||
;; - `doom-serif-font' -- for the `fixed-pitch-serif' face
|
||||
;;
|
||||
;; See 'C-h v doom-font' for documentation and more examples of what they
|
||||
;; accept. For example:
|
||||
;;
|
||||
;; (setq doom-font (font-spec :family "Fira Code" :size 12 :weight 'semi-light)
|
||||
;; doom-variable-pitch-font (font-spec :family "Fira Sans" :size 13))
|
||||
(setq doom-font (font-spec :family "FiraCode Nerd Font Mono" :size 14 :weight 'semi-light)
|
||||
doom-variable-pitch-font (font-spec :family "Fira Sans" :size 15))
|
||||
;;
|
||||
;; If you or Emacs can't find your font, use 'M-x describe-font' to look them
|
||||
;; up, `M-x eval-region' to execute elisp code, and 'M-x doom/reload-font' to
|
||||
;; refresh your font settings. If Emacs still can't find your font, it likely
|
||||
;; wasn't installed correctly. Font issues are rarely Doom issues!
|
||||
|
||||
;; There are two ways to load a theme. Both assume the theme is installed and
|
||||
;; available. You can either set `doom-theme' or manually load a theme with the
|
||||
;; `load-theme' function. This is the default:
|
||||
(setq doom-theme 'doom-gruvbox)
|
||||
(custom-set-faces! `(font-lock-operator-face :foreground ,(doom-color 'operators)))
|
||||
|
||||
;; This determines the style of line numbers in effect. If set to `nil', line
|
||||
;; numbers are disabled. For relative line numbers, set this to `relative'.
|
||||
(setq display-line-numbers-type 'relative)
|
||||
|
||||
;; If you use `org' and don't want your org files in the default location below,
|
||||
;; change `org-directory'. It must be set before org loads!
|
||||
(setq org-directory "~/org/")
|
||||
|
||||
|
||||
;; Whenever you reconfigure a package, make sure to wrap your config in an
|
||||
;; `after!' block, otherwise Doom's defaults may override your settings. E.g.
|
||||
;;
|
||||
;; (after! PACKAGE
|
||||
;; (setq x y))
|
||||
;;
|
||||
;; The exceptions to this rule:
|
||||
;;
|
||||
;; - Setting file/directory variables (like `org-directory')
|
||||
;; - Setting variables which explicitly tell you to set them before their
|
||||
;; package is loaded (see 'C-h v VARIABLE' to look up their documentation).
|
||||
;; - Setting doom variables (which start with 'doom-' or '+').
|
||||
;;
|
||||
;; Here are some additional functions/macros that will help you configure Doom.
|
||||
;;
|
||||
;; - `load!' for loading external *.el files relative to this one
|
||||
;; - `use-package!' for configuring packages
|
||||
;; - `after!' for running code after a package has loaded
|
||||
;; - `add-load-path!' for adding directories to the `load-path', relative to
|
||||
;; this file. Emacs searches the `load-path' when you load packages with
|
||||
;; `require' or `use-package'.
|
||||
;; - `map!' for binding new keys
|
||||
;;
|
||||
;; To get information about any of these functions/macros, move the cursor over
|
||||
;; the highlighted symbol at press 'K' (non-evil users must press 'C-c c k').
|
||||
;; This will open documentation for it, including demos of how they are used.
|
||||
;; Alternatively, use `C-h o' to look up a symbol (functions, variables, faces,
|
||||
;; etc).
|
||||
;;
|
||||
;; You can also try 'gd' (or 'C-c c d') to jump to their definition and see how
|
||||
;; they are implemented.
|
||||
(use-package! treemacs
|
||||
:init
|
||||
(setq +treemacs-git-mode 'deferred)
|
||||
:config
|
||||
(setq treemacs-position 'right)
|
||||
)
|
||||
|
||||
(add-hook 'git-commit-mode-hook #'conventional-commit-setup)
|
||||
|
||||
(use-package! rainbow-delimiters
|
||||
:hook ((prog-mode . rainbow-delimiters-mode))
|
||||
:config
|
||||
(setq rainbow-delimiters-max-face-count 6))
|
||||
|
||||
(map! :leader
|
||||
:desc "Project VTerm" "p RET" #'projectile-run-vterm)
|
||||
|
||||
(map! :leader
|
||||
:desc "File Symbols" "c s" #'consult-lsp-file-symbols
|
||||
:desc "All Symbols" "c S" #'consult-lsp-symbols)
|
||||
|
||||
(use-package envrc
|
||||
:hook (after-init . envrc-global-mode))
|
||||
|
||||
(after! markdown-mode
|
||||
(setq markdown-split-window-direction 'right)
|
||||
(setq markdown-command "pandoc -t html5 -f markdown_mmd --embed-resources --standalone --mathjax --quiet --highlight-style=zenburn")
|
||||
(setq markdown-enable-math t))
|
||||
|
||||
(add-hook! 'markdown-mode-hook 'pandoc-mode)
|
||||
|
||||
(require 'dap-cpptools)
|
||||
|
||||
(use-package! graphviz-dot-mode
|
||||
:ensure t
|
||||
:config
|
||||
(setq graphviz-dot-indent-width 4))
|
||||
|
||||
(after! auctex
|
||||
(add-hook! 'LaTeX-mode-hook 'lsp)
|
||||
(map! :map LaTeX-mode-map
|
||||
:localleader
|
||||
:desc "Sync View PDF" "v" (lambda () (interactive) (TeX-pdf-tools-sync-view)))
|
||||
(setq +latex-viewers '(pdf-tools)))
|
||||
|
||||
(set-frame-parameter nil 'alpha-background 85)
|
||||
(add-to-list 'default-frame-alist '(alpha-background . 85))
|
||||
|
||||
(after! lsp-clangd
|
||||
(setq lsp-clients-clangd-args
|
||||
'("--background-index"
|
||||
"--clang-tidy"
|
||||
"--completion-style=detailed"
|
||||
"--header-insertion=never"
|
||||
"--header-insertion-decorators=0"
|
||||
"--compile-commands-dir=build"
|
||||
))
|
||||
(set-lsp-priority! 'clangd 2))
|
||||
|
||||
(after! ccls
|
||||
(setq ccls-initialization-options '(:index (:comments 2) :completion (:detailedLabel t) :compilationDatabaseDirectory "build" :cache (:directory ".cache/ccls" :format "binary")))
|
||||
(set-lsp-priority! 'ccls 1))
|
||||
|
||||
|
||||
(setq apheleia-formatters-respect-indent-level nil)
|
||||
|
||||
(defun my-ui-doc-glance-then-focus ()
|
||||
"Glances UI-Doc if not present, otherwise focus"
|
||||
(interactive)
|
||||
(if (lsp-ui-doc--visible-p)
|
||||
(lsp-ui-doc-focus-frame)
|
||||
(lsp-ui-doc-glance)))
|
||||
|
||||
|
||||
(map! :map (cpp-mode-map c-mode-map c++-mode-map lsp-mode-map)
|
||||
:desc "Show Doc-UI" :n "C-h" #'my-ui-doc-glance-then-focus)
|
||||
|
||||
(set-formatter! 'alejandra '("alejandra" "--quiet") :modes '(nix-mode nix-ts-mode))
|
||||
|
||||
;; nixd
|
||||
(after! 'lsp-mode
|
||||
(lsp-register-client
|
||||
(make-lsp-client :new-connection (lsp-stdio-connection "nixd")
|
||||
:major-modes '(nix-mode)
|
||||
:priority 0
|
||||
:server-id 'nixd)))
|
||||
|
||||
;;Use TS-modes
|
||||
(after! treesit
|
||||
(load! "packages/treesit-docgen.el"))
|
||||
;;
|
||||
;;(defconst mode-ts-mode-mapping
|
||||
;; '((python-mode . python-ts-mode)
|
||||
;; (css-mode . css-ts-mode)
|
||||
;; (typescript-mode . typescript-ts-mode)
|
||||
;; (js-mode . typescript-ts-mode)
|
||||
;; (js2-mode . typescript-ts-mode)
|
||||
;; (c-mode . c-ts-mode)
|
||||
;; (c++-mode . c++-ts-mode)
|
||||
;; (c-or-c++-mode . c-or-c++-ts-mode)
|
||||
;; (bash-mode . bash-ts-mode)
|
||||
;; (css-mode . css-ts-mode)
|
||||
;; (json-mode . json-ts-mode)
|
||||
;; (js-json-mode . json-ts-mode)
|
||||
;; (sh-mode . bash-ts-mode)
|
||||
;; (c-or-c++-mode . c-or-c++-ts-mode)
|
||||
;; (sh-base-mode . bash-ts-mode))
|
||||
;; "A map from original mode to the ts-mode")
|
||||
;;
|
||||
;;(use-package! treesit
|
||||
;; :defer t
|
||||
;; :mode (("\\.tsx\\'" . tsx-ts-mode)
|
||||
;; ("\\.js\\'" . typescript-ts-mode)
|
||||
;; ("\\.mjs\\'" . typescript-ts-mode)
|
||||
;; ("\\.mts\\'" . typescript-ts-mode)
|
||||
;; ("\\.cjs\\'" . typescript-ts-mode)
|
||||
;; ("\\.ts\\'" . typescript-ts-mode)
|
||||
;; ("\\.jsx\\'" . tsx-ts-mode)
|
||||
;; ("\\.json\\'" . json-ts-mode)
|
||||
;; ("\\.Dockerfile\\'" . dockerfile-ts-mode)
|
||||
;; ("\\.c\\'" . c-ts-mode)
|
||||
;; ("\\.h\\'" . c-or-c++-ts-mode)
|
||||
;; ("\\.cpp\\'" . c++-ts-mode)
|
||||
;; ("\\.py\\'" . python-ts-mode)
|
||||
;; ("\\.sh\\'" . bash-ts-mode)
|
||||
;; )
|
||||
;; :preface
|
||||
;; (dolist (mapping mode-ts-mode-mapping)
|
||||
;; (add-to-list 'major-mode-remap-alist mapping)))
|
||||
;;
|
||||
;;;; Integrate with legacy tree-sitter mode
|
||||
;;(use-package! tree-sitter
|
||||
;; :hook ((c++-ts-mode . tree-sitter-mode)
|
||||
;; (c-ts-mode . tree-sitter-mode)
|
||||
;; (c-or-c++-ts-mode . tree-sitter-mode)
|
||||
;; (python-ts-mode . tree-sitter-mode)
|
||||
;; (css-ts-mode . tree-sitter-mode)
|
||||
;; (typescript-ts-mode . tree-sitter-mode)
|
||||
;; (js-ts-mode . tree-sitter-mode)
|
||||
;; (bash-ts-mode . tree-sitter-mode)
|
||||
;; (json-ts-mode . tree-sitter-mode)
|
||||
;; (tree-sitter-mode . tree-sitter-hl-mode))
|
||||
;; :config
|
||||
;; (let (result)
|
||||
;; (dolist (mapping tree-sitter-major-mode-language-alist)
|
||||
;; (let* ((pre-mode (car mapping))
|
||||
;; (ts-lang (cdr mapping))
|
||||
;; (post-mode (cdr (assoc pre-mode mode-ts-mode-mapping))))
|
||||
;; (when post-mode
|
||||
;; (push (cons post-mode ts-lang) result))))
|
||||
;; (dolist (mapping result)
|
||||
;; (add-to-list 'tree-sitter-major-mode-language-alist mapping))))
|
||||
|
||||
|
||||
;; Integrate with lsp-mode
|
||||
(use-package lsp-mode
|
||||
:defer t
|
||||
:hook ((lsp-mode . lsp-diagnostics-mode)
|
||||
(lsp-mode . lsp-enable-which-key-integration)
|
||||
(python-ts-mode . lsp-deferred)
|
||||
(css-ts-mode . lsp-deferred)
|
||||
(typescript-ts-mode . lsp-deferred)
|
||||
(js-ts-mode . lsp-deferred)
|
||||
(c-ts-mode . lsp-deferred)
|
||||
(c++-ts-mode . lsp-deferred)
|
||||
(haskell-ts-mode . lsp-deferred)
|
||||
(c-or-c++-ts-mode . lsp-deferred)
|
||||
(bash-ts-mode . lsp-deferred)
|
||||
(json-ts-mode . lsp-deferred)))
|
||||
|
||||
|
||||
(after! jj-mode
|
||||
(map! :leader
|
||||
(:prefix ("j" . "Jujutsu")
|
||||
:desc "Log" "j" #'jj-log
|
||||
:desc "Describe" "d" #'jj-describe
|
||||
:desc "Abandon" "a" #'jj-abandon
|
||||
:desc "New" "n" #'jj-new
|
||||
)))
|
||||
|
||||
(setq auto-mode-alist (cons '("\\.smt$" . smtlib-mode) auto-mode-alist))
|
||||
(autoload 'smtlib-mode "smtlib" "Major mode for SMTLIB" t)
|
||||
|
||||
(let ((config-dir (expand-file-name "config.d" doom-user-dir)))
|
||||
(when (file-directory-p config-dir)
|
||||
(dolist (file (directory-files config-dir t "\\.el$" t))
|
||||
(load file))))
|
||||
BIN
old/modules/home/doom/static/icon.png
Normal file
|
After Width: | Height: | Size: 126 KiB |
198
old/modules/home/doom/static/init.el
Normal file
@@ -0,0 +1,198 @@
|
||||
;;; init.el -*- lexical-binding: t; -*-
|
||||
|
||||
;; This file controls what Doom modules are enabled and what order they load
|
||||
;; in. Remember to run 'doom sync' after modifying it!
|
||||
|
||||
;; NOTE Press 'SPC h d h' (or 'C-h d h' for non-vim users) to access Doom's
|
||||
;; documentation. There you'll find a link to Doom's Module Index where all
|
||||
;; of our modules are listed, including what flags they support.
|
||||
|
||||
;; NOTE Move your cursor over a module's name (or its flags) and press 'K' (or
|
||||
;; 'C-c c k' for non-vim users) to view its documentation. This works on
|
||||
;; flags as well (those symbols that start with a plus).
|
||||
;;
|
||||
;; Alternatively, press 'gd' (or 'C-c c d') on a module to browse its
|
||||
;; directory (for easy access to its source code).
|
||||
|
||||
(doom! :input
|
||||
;;bidi ; (tfel ot) thgir etirw uoy gnipleh
|
||||
;;chinese
|
||||
;;japanese
|
||||
;;layout ; auie,ctsrnm is the superior home row
|
||||
|
||||
:completion
|
||||
(company +childframe) ; the ultimate code completion backend
|
||||
;;(corfu +orderless) ; complete with cap(f), cape and a flying feather!
|
||||
;;helm ; the *other* search engine for love and life
|
||||
;;ido ; the other *other* search engine...
|
||||
;;ivy ; a search engine for love and life
|
||||
vertico ; the search engine of the future
|
||||
|
||||
:ui
|
||||
;;deft ; notational velocity for Emacs
|
||||
doom ; what makes DOOM look the way it does
|
||||
doom-dashboard ; a nifty splash screen for Emacs
|
||||
;;doom-quit ; DOOM quit-message prompts when you quit Emacs
|
||||
(emoji +unicode +github) ; 🙂
|
||||
hl-todo ; highlight TODO/FIXME/NOTE/DEPRECATED/HACK/REVIEW
|
||||
;;hydra
|
||||
;;indent-guides ; highlighted indent columns
|
||||
ligatures ; ligatures and symbols to make your code pretty again
|
||||
;;minimap ; show a map of the code on the side
|
||||
modeline ; snazzy, Atom-inspired modeline, plus API
|
||||
;;nav-flash ; blink cursor line after big motions
|
||||
;;neotree ; a project drawer, like NERDTree for vim
|
||||
ophints ; highlight the region an operation acts on
|
||||
(popup +defaults) ; tame sudden yet inevitable temporary windows
|
||||
;;tabs ; a tab bar for Emacs
|
||||
treemacs ; a project drawer, like neotree but cooler
|
||||
;;unicode ; extended unicode support for various languages
|
||||
(vc-gutter +pretty) ; vcs diff in the fringe
|
||||
vi-tilde-fringe ; fringe tildes to mark beyond EOB
|
||||
window-select ; visually switch windows
|
||||
workspaces ; tab emulation, persistence & separate workspaces
|
||||
zen ; distraction-free coding or writing
|
||||
|
||||
:editor
|
||||
(evil +everywhere); come to the dark side, we have cookies
|
||||
file-templates ; auto-snippets for empty files
|
||||
fold ; (nigh) universal code folding
|
||||
(format +onsave) ; automated prettiness
|
||||
;;god ; run Emacs commands without modifier keys
|
||||
;;lispy ; vim for lisp, for people who don't like vim
|
||||
;;multiple-cursors ; editing in many places at once
|
||||
;;objed ; text object editing for the innocent
|
||||
;;parinfer ; turn lisp into python, sort of
|
||||
;;rotate-text ; cycle region at point between text candidates
|
||||
snippets ; my elves. They type so I don't have to
|
||||
;;word-wrap ; soft wrapping with language-aware indent
|
||||
|
||||
:emacs
|
||||
dired ; making dired pretty [functional]
|
||||
electric ; smarter, keyword-based electric-indent
|
||||
(ibuffer +icons) ; interactive buffer management
|
||||
|
||||
(undo +tree) ; persistent, smarter undo for your inevitable mistakes
|
||||
vc ; version-control and Emacs, sitting in a tree
|
||||
|
||||
:term
|
||||
;;eshell ; the elisp shell that works everywhere
|
||||
;;shell ; simple shell REPL for Emacs
|
||||
;;term ; basic terminal emulator for Emacs
|
||||
vterm ; the best terminal emulation in Emacs
|
||||
|
||||
:checkers
|
||||
syntax ; tasing you for every semicolon you forget
|
||||
(spell +flyspell) ; tasing you for misspelling mispelling
|
||||
grammar ; tasing grammar mistake every you make
|
||||
|
||||
:tools
|
||||
;;ansible
|
||||
;;biblio ; Writes a PhD for you (citation needed)
|
||||
;;collab ; buffers with friends
|
||||
(debugger +realgud +lsp) ; FIXME stepping through code, to help you add bugs
|
||||
;;direnv
|
||||
;;docker
|
||||
;;editorconfig ; let someone else argue about tabs vs spaces
|
||||
ein ; tame Jupyter notebooks with emacs
|
||||
(eval +overlay) ; run code, run (also, repls)
|
||||
lookup ; navigate your code and its documentation
|
||||
lsp ; M-x vscode
|
||||
magit ; a git porcelain for Emacs
|
||||
;;make ; run make tasks from Emacs
|
||||
;;pass ; password manager for nerds
|
||||
pdf ; pdf enhancements
|
||||
;;prodigy ; FIXME managing external services & code builders
|
||||
;;rgb ; creating color strings
|
||||
;;taskrunner ; taskrunner for all your projects
|
||||
;;terraform ; infrastructure as code
|
||||
;;tmux ; an API for interacting with tmux
|
||||
tree-sitter ; syntax and parsing, sitting in a tree...
|
||||
;;upload ; map local to remote projects via ssh/ftp
|
||||
|
||||
:os
|
||||
(:if (featurep :system 'macos) macos) ; improve compatibility with macOS
|
||||
(tty +osc) ; improve the terminal Emacs experience
|
||||
|
||||
:lang
|
||||
;;agda ; types of types of types of types...
|
||||
;;beancount ; mind the GAAP
|
||||
(cc +lsp +tree-sitter) ; C > C++ == 1
|
||||
;;clojure ; java with a lisp
|
||||
;;common-lisp ; if you've seen one lisp, you've seen them all
|
||||
;;coq ; proofs-as-programs
|
||||
;;crystal ; ruby at the speed of c
|
||||
;;csharp ; unity, .NET, and mono shenanigans
|
||||
;;data ; config/data formats
|
||||
;;(dart +flutter) ; paint ui and not much else
|
||||
;;dhall
|
||||
;;elixir ; erlang done right
|
||||
;;elm ; care for a cup of TEA?
|
||||
emacs-lisp ; drown in parentheses
|
||||
;;erlang ; an elegant language for a more civilized age
|
||||
;;ess ; emacs speaks statistics
|
||||
;;factor
|
||||
;;faust ; dsp, but you get to keep your soul
|
||||
;;fortran ; in FORTRAN, GOD is REAL (unless declared INTEGER)
|
||||
;;fsharp ; ML stands for Microsoft's Language
|
||||
;;fstar ; (dependent) types and (monadic) effects and Z3
|
||||
;;gdscript ; the language you waited for
|
||||
;;(go +lsp) ; the hipster dialect
|
||||
;;(graphql +lsp) ; Give queries a REST
|
||||
(haskell +lsp +tree-sitter) ; a language that's lazier than I am
|
||||
;;hy ; readability of scheme w/ speed of python
|
||||
;;idris ; a language you can depend on
|
||||
(json +tree-sitter) ; At least it ain't XML
|
||||
(java +lsp +tree-sitter) ; the poster child for carpal tunnel syndrome
|
||||
;;javascript ; all(hope(abandon(ye(who(enter(here))))))
|
||||
;;julia ; a better, faster MATLAB
|
||||
;;kotlin ; a better, slicker Java(Script)
|
||||
(latex +lsp +latexmk) ; writing papers in Emacs has never been so fun
|
||||
;;lean ; for folks with too much to prove
|
||||
;;ledger ; be audit you can be
|
||||
;;lua ; one-based indices? one-based indices
|
||||
(markdown +tree-sitter) ; writing docs for people to ignore
|
||||
;;nim ; python + lisp at the speed of c
|
||||
(nix +tree-sitter +lsp) ; I hereby declare "nix geht mehr!"
|
||||
;;ocaml ; an objective camel
|
||||
(org +brain +dagndrop +noter +pretty +roam2) ; organize your plain life in plain text
|
||||
;;php ; perl's insecure younger brother
|
||||
;;plantuml ; diagrams for confusing people more
|
||||
;;purescript ; javascript, but functional
|
||||
(python +lsp +pyenv +pyright +tree-sitter) ; beautiful is better than ugly
|
||||
;;qt ; the 'cutest' gui framework ever
|
||||
;;racket ; a DSL for DSLs
|
||||
;;raku ; the artist formerly known as perl6
|
||||
;;rest ; Emacs as a REST client
|
||||
;;rst ; ReST in peace
|
||||
;;(ruby +rails) ; 1.step {|i| p "Ruby is #{i.even? ? 'love' : 'life'}"}
|
||||
(rust +lsp +tree-sitter) ; Fe2O3.unwrap().unwrap().unwrap().unwrap()
|
||||
;;scala ; java, but good
|
||||
;;(scheme +guile) ; a fully conniving family of lisps
|
||||
(sh +tree-sitter) ; she sells {ba,z,fi}sh shells on the C xor
|
||||
;;sml
|
||||
;;solidity ; do you need a blockchain? No.
|
||||
;;swift ; who asked for emoji variables?
|
||||
;;terra ; Earth and Moon in alignment for performance.
|
||||
;;web ; the tubes
|
||||
(yaml +tree-sitter) ; JSON, but readable
|
||||
;;zig ; C, but simpler
|
||||
|
||||
:email
|
||||
;;(mu4e +org +gmail)
|
||||
;;notmuch
|
||||
;;(wanderlust +gmail)
|
||||
|
||||
:app
|
||||
;;calendar
|
||||
;;emms
|
||||
;;everywhere ; *leave* Emacs!? You must be joking
|
||||
;;irc ; how neckbeards socialize
|
||||
;;(rss +org) ; emacs as an RSS reader
|
||||
;;twitter ; twitter client https://twitter.com/vnought
|
||||
|
||||
:config
|
||||
;;literate
|
||||
(default +bindings +smartparens))
|
||||
|
||||
(setq fancy-splash-image "~/.config/doom-config/splash.png")
|
||||
2
old/modules/home/doom/static/packages.d/copilot.el
Normal file
@@ -0,0 +1,2 @@
|
||||
(package! copilot
|
||||
:recipe (:host github :repo "copilot-emacs/copilot.el" :files ("*.el")))
|
||||
1
old/modules/home/doom/static/packages.d/tidal.el
Normal file
@@ -0,0 +1 @@
|
||||
(package! tidal)
|
||||
97
old/modules/home/doom/static/packages.el
Normal file
@@ -0,0 +1,97 @@
|
||||
;; -*- no-byte-compile: t; -*-
|
||||
;;; $DOOMDIR/packages.el
|
||||
|
||||
;; To install a package with Doom you must declare them here and run 'doom sync'
|
||||
;; on the command line, then restart Emacs for the changes to take effect -- or
|
||||
;; use 'M-x doom/reload'.
|
||||
|
||||
|
||||
;; To install SOME-PACKAGE from MELPA, ELPA or emacsmirror:
|
||||
;; (package! some-package)
|
||||
|
||||
;; To install a package directly from a remote git repo, you must specify a
|
||||
;; `:recipe'. You'll find documentation on what `:recipe' accepts here:
|
||||
;; https://github.com/radian-software/straight.el#the-recipe-format
|
||||
;; (package! another-package
|
||||
;; :recipe (:host github :repo "username/repo"))
|
||||
|
||||
;; If the package you are trying to install does not contain a PACKAGENAME.el
|
||||
;; file, or is located in a subdirectory of the repo, you'll need to specify
|
||||
;; `:files' in the `:recipe':
|
||||
;; (package! this-package
|
||||
;; :recipe (:host github :repo "username/repo"
|
||||
;; :files ("some-file.el" "src/lisp/*.el")))
|
||||
|
||||
;; If you'd like to disable a package included with Doom, you can do so here
|
||||
;; with the `:disable' property:
|
||||
;; (package! builtin-package :disable t)
|
||||
|
||||
;; You can override the recipe of a built in package without having to specify
|
||||
;; all the properties for `:recipe'. These will inherit the rest of its recipe
|
||||
;; from Doom or MELPA/ELPA/Emacsmirror:
|
||||
;; (package! builtin-package :recipe (:nonrecursive t))
|
||||
;; (package! builtin-package-2 :recipe (:repo "myfork/package"))
|
||||
|
||||
;; Specify a `:branch' to install a package from a particular branch or tag.
|
||||
;; This is required for some packages whose default branch isn't 'master' (which
|
||||
;; our package manager can't deal with; see radian-software/straight.el#279)
|
||||
;; (package! builtin-package :recipe (:branch "develop"))
|
||||
|
||||
;; Use `:pin' to specify a particular commit to install.
|
||||
;; (package! builtin-package :pin "1a2b3c4d5e")
|
||||
|
||||
|
||||
;; Doom's packages are pinned to a specific commit and updated from release to
|
||||
;; release. The `unpin!' macro allows you to unpin single packages...
|
||||
;; (unpin! pinned-package)
|
||||
;; ...or multiple packages
|
||||
;; (unpin! pinned-package another-pinned-package)
|
||||
;; ...Or *all* packages (NOT RECOMMENDED; will likely break things)
|
||||
;; (unpin! t)
|
||||
|
||||
(package! conventional-commit
|
||||
:recipe (:host github :repo "akirak/conventional-commit.el" :files ("conventional-commit.el")))
|
||||
|
||||
;; TODO: Remove this when a fix for https://github.com/doomemacs/doomemacs/issues/8286 is included
|
||||
(package! package-lint :pin "21edc6d0d0eadd2d0a537f422fb9b7b8a3ae6991")
|
||||
|
||||
(package! ws-butler
|
||||
:recipe (:host github
|
||||
:repo "emacsmirror/nongnu_elpa"
|
||||
:branch "elpa/ws-butler"
|
||||
:local-repo "ws-butler")
|
||||
:pin "9ee5a7657a22e836618813c2e2b64a548d27d2ff")
|
||||
|
||||
(package! smtlib-mode
|
||||
:recipe (:host github
|
||||
:repo "chsticksel/smtlib-mode"
|
||||
:branch "master"
|
||||
:local-repo "smtlib-mode")
|
||||
:pin "ed387e63b64091228e6a8a429b02b8fba165f5b5")
|
||||
|
||||
;; Usabel ein PR branch. Original is deprecated
|
||||
(package! ein
|
||||
:recipe (:host github
|
||||
:repo "natsirtguy/emacs-ipython-notebook"
|
||||
:branch "fix-polymode-compatibility")
|
||||
:pin "2ff01b4adbb6302798fc84464d1e420e337113fd")
|
||||
|
||||
(package! envrc
|
||||
:recipe (:host github
|
||||
:repo "Grimpper/envrc"
|
||||
:branch "support-async-execution"
|
||||
)
|
||||
:pin "71f67971bc5eb2974ae2f738512c8f09f0822527")
|
||||
|
||||
(package! pdf-tools)
|
||||
(package! eww)
|
||||
(package! pandoc-mode)
|
||||
(package! tramp)
|
||||
(package! graphviz-dot-mode)
|
||||
(package! rainbow-delimiters)
|
||||
(package! jj-mode :recipe (:host github :repo "bolivier/jj-mode.el"))
|
||||
|
||||
(let ((package-dir (expand-file-name "packages.d" doom-user-dir)))
|
||||
(when (file-directory-p package-dir)
|
||||
(dolist (file (directory-files package-dir t "\\.el$" t))
|
||||
(load file))))
|
||||
71
old/modules/home/doom/static/packages/treesit-docgen.el
Normal file
@@ -0,0 +1,71 @@
|
||||
(defun treesit-docgen--get-function-node (node)
|
||||
"Get the function node the given NODE belongs to. Or nil"
|
||||
(treesit-parent-until node
|
||||
(lambda (n)
|
||||
(or (equal (treesit-node-type n) "function_definition")
|
||||
(and (equal (treesit-node-type n) "declaration"))
|
||||
(equal (treesit-node-type (treesit-node-child-by-field-name n "declarator"))
|
||||
"function_declarator")))
|
||||
t)
|
||||
)
|
||||
|
||||
(defun treesit-docgen--fn-template-node (fn-node)
|
||||
"Get the template node of a function or nil"
|
||||
(let* ((par (treesit-node-parent fn-node))
|
||||
(par-t (treesit-node-type par)))
|
||||
(when (string= par-t "template_declaration") par)
|
||||
))
|
||||
|
||||
(defun treesit-docgen--fn-tpars (fn-node)
|
||||
"Get the template parameters of the function node or nil"
|
||||
(let* ((template (treesit-docgen--fn-template-node fn-node))
|
||||
(tpars (treesit-node-child-by-field-name template "parameters")))
|
||||
(when tpars
|
||||
(delq nil
|
||||
(mapcar (lambda (tpar) (when (string= (treesit-node-type tpar) "type_parameter_declaration")
|
||||
(treesit-node-text tpar)))
|
||||
(treesit-node-children tpars))))))
|
||||
|
||||
(defun treesit-docgen--fn-type (fn-node)
|
||||
"Get the return type of the function node"
|
||||
(let ((fn-type-node (treesit-node-child-by-field-name fn-node "type")))
|
||||
(treesit-node-text fn-type-node)))
|
||||
|
||||
(defun treesit-docgen--fn-pars (fn-node)
|
||||
"Get the parameter names of the function node"
|
||||
(let* ((fn-node-decl (treesit-node-child-by-field-name fn-node "declarator"))
|
||||
(fn-node-pars (treesit-node-child-by-field-name fn-node-decl "parameters"))
|
||||
)
|
||||
(when fn-node-pars
|
||||
(delq nil
|
||||
(mapcar (lambda (par) (when (string= (treesit-node-type par) "parameter_declaration")
|
||||
(treesit-node-text par)))
|
||||
(treesit-node-children fn-node-pars))))))
|
||||
|
||||
(defun treesit-docgen-insert-doc ()
|
||||
"Insert a documentation template for the function at point"
|
||||
(interactive)
|
||||
(let* ((node (treesit-node-at (point)))
|
||||
(fn-node (treesit-docgen--get-function-node node)))
|
||||
(when fn-node
|
||||
(let* ((fn-type (treesit-docgen--fn-type fn-node))
|
||||
(fn-pars (treesit-docgen--fn-pars fn-node))
|
||||
(fn-tpars (treesit-docgen--fn-tpars fn-node)))
|
||||
(goto-char (treesit-node-start
|
||||
(or (treesit-docgen--fn-template-node fn-node)
|
||||
fn-node)))
|
||||
(insert "///\n")
|
||||
(insert "///@brief\n")
|
||||
(insert "///\n")
|
||||
(when fn-tpars
|
||||
(dolist (tpar fn-tpars)
|
||||
(insert "///@tparam " tpar "\n"))
|
||||
(insert "///\n"))
|
||||
(when fn-pars
|
||||
(dolist (par fn-pars)
|
||||
(insert "///@param " par "\n"))
|
||||
(insert "///\n"))
|
||||
(when fn-type
|
||||
(insert "///@return " fn-type "\n")
|
||||
(insert "///\n")
|
||||
)))))
|
||||
BIN
old/modules/home/doom/static/splash.png
Normal file
|
After Width: | Height: | Size: 165 KiB |
96
old/modules/home/firefox.nix
Normal file
@@ -0,0 +1,96 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
inputs,
|
||||
pkgs,
|
||||
...
|
||||
}: let
|
||||
cfg = config.hive.firefox;
|
||||
in {
|
||||
options.hive.firefox = {
|
||||
enable = lib.mkEnableOption "Enable Firefox";
|
||||
plasmaIntegration = lib.mkEnableOption "Enable Plasma Integration";
|
||||
passFF = lib.mkEnableOption "Enable PassFF";
|
||||
};
|
||||
config = lib.mkIf cfg.enable {
|
||||
programs.firefox = {
|
||||
enable = true;
|
||||
nativeMessagingHosts = lib.optional cfg.passFF pkgs.passff-host;
|
||||
|
||||
# Default profile
|
||||
profiles.jonas = {
|
||||
name = "Jonas";
|
||||
id = 0;
|
||||
isDefault = true;
|
||||
|
||||
# Search
|
||||
search = {
|
||||
default = "ddg";
|
||||
order = ["ddg" "google"];
|
||||
force = true;
|
||||
engines = {
|
||||
"Nix Packages" = {
|
||||
urls = [
|
||||
{
|
||||
template = "https://search.nixos.org/packages";
|
||||
params = [
|
||||
{
|
||||
name = "type";
|
||||
value = "packages";
|
||||
}
|
||||
{
|
||||
name = "query";
|
||||
value = "{searchTerms}";
|
||||
}
|
||||
];
|
||||
}
|
||||
];
|
||||
};
|
||||
"Noogle" = {
|
||||
urls = [
|
||||
{
|
||||
template = "https://noogle.dev/q";
|
||||
params = [
|
||||
{
|
||||
name = "term";
|
||||
value = "{searchTerms}";
|
||||
}
|
||||
];
|
||||
}
|
||||
];
|
||||
};
|
||||
"cppreference" = {
|
||||
urls = [
|
||||
{
|
||||
template = "https://en.cppreference.com/mwiki/index.php";
|
||||
params = [
|
||||
{
|
||||
name = "title";
|
||||
value = "Special%3ASearch";
|
||||
}
|
||||
{
|
||||
name = "search";
|
||||
value = "{searchTerms}";
|
||||
}
|
||||
{
|
||||
name = "Go";
|
||||
value = "go";
|
||||
}
|
||||
];
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
# Extensions
|
||||
extensions.packages = with inputs.firefox-addons.packages."x86_64-linux"; ([
|
||||
ublock-origin
|
||||
violentmonkey
|
||||
]
|
||||
++ lib.optional cfg.plasmaIntegration plasma-integration
|
||||
++ lib.optional cfg.passFF passff);
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
12
old/modules/home/flameshot.nix
Normal file
@@ -0,0 +1,12 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
...
|
||||
}: let
|
||||
cfg = config.hive.flameshot;
|
||||
in {
|
||||
options.hive.flameshot.enable = lib.mkEnableOption "Flameshot service.";
|
||||
config = lib.mkIf cfg.enable {
|
||||
services.flameshot.enable = true;
|
||||
};
|
||||
}
|
||||
153
old/modules/home/gotify.nix
Normal file
@@ -0,0 +1,153 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}: let
|
||||
cfg = config.hive.gotify;
|
||||
cli-config = {
|
||||
token = config.sops.placeholder.${cfg.cli.tokenSopsKey};
|
||||
inherit (cfg.cli) url defaultPriority;
|
||||
};
|
||||
daemon-config = {
|
||||
gotify =
|
||||
{
|
||||
inherit (cfg.daemon) url;
|
||||
token = config.sops.placeholder.${cfg.daemon.tokenSopsKey};
|
||||
auto_delete = cfg.daemon.autoDelete;
|
||||
min_priority = cfg.daemon.minPriority;
|
||||
}
|
||||
// lib.optionalAttrs (cfg.daemon.onMsgCommand != null) {
|
||||
on_msg_command = cfg.daemon.onMsgCommand;
|
||||
};
|
||||
};
|
||||
|
||||
valueToString = val:
|
||||
if (builtins.typeOf val == "string")
|
||||
then "\"${val}\""
|
||||
else
|
||||
(
|
||||
if (builtins.typeOf val == "int")
|
||||
then "${toString val}"
|
||||
else
|
||||
(
|
||||
if (builtins.typeOf val == "bool")
|
||||
then
|
||||
(
|
||||
if val
|
||||
then "true"
|
||||
else "false"
|
||||
)
|
||||
else (abort "Expected string int or bool, got ${builtins.typeOf val} with value ${toString val}")
|
||||
)
|
||||
);
|
||||
|
||||
toTOML = attrs:
|
||||
lib.concatStrings (
|
||||
lib.attrValues (
|
||||
lib.mapAttrs (
|
||||
name: config: ''
|
||||
[${name}]
|
||||
${lib.concatStringsSep "\n" (lib.attrValues (lib.mapAttrs (k: v: "${k} = ${valueToString v}") config))}
|
||||
''
|
||||
)
|
||||
attrs
|
||||
)
|
||||
);
|
||||
in {
|
||||
options.hive.gotify = {
|
||||
cli = {
|
||||
enable = lib.mkEnableOption "Enable Gotify cli tool";
|
||||
url = lib.mkOption {
|
||||
type = lib.types.singleLineStr;
|
||||
default = "https://${cfg.host}:${toString cfg.port}";
|
||||
example = "http://gotify.example.com";
|
||||
description = "The http url of the gotify server (for the cli tool)";
|
||||
};
|
||||
tokenSopsKey = lib.mkOption {
|
||||
type = lib.types.singleLineStr;
|
||||
description = "The sops key of the token secret";
|
||||
};
|
||||
defaultPriority = lib.mkOption {
|
||||
type = lib.types.int;
|
||||
default = 0;
|
||||
example = 3;
|
||||
description = "The default priority of the dispatched messages";
|
||||
};
|
||||
};
|
||||
daemon = {
|
||||
enable = lib.mkEnableOption "Enable the Gotify desktop notification daemon";
|
||||
url = lib.mkOption {
|
||||
type = lib.types.singleLineStr;
|
||||
default = "wss://${cfg.host}:${toString cfg.port}";
|
||||
example = "ws://gotify.example.com";
|
||||
description = "The websocket url of the gotify server (for the desktop tool)";
|
||||
};
|
||||
tokenSopsKey = lib.mkOption {
|
||||
type = lib.types.singleLineStr;
|
||||
description = "The sops key of the token secret";
|
||||
};
|
||||
autoDelete = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = false;
|
||||
example = true;
|
||||
description = "Delete messages that have been handled";
|
||||
};
|
||||
minPriority = lib.mkOption {
|
||||
type = lib.types.int;
|
||||
default = 0;
|
||||
example = 1;
|
||||
description = "Ignore messages with priority lower than given value";
|
||||
};
|
||||
onMsgCommand = lib.mkOption {
|
||||
type = lib.types.nullOr lib.types.singleLineStr;
|
||||
default = null;
|
||||
example = "/usr/bin/beep";
|
||||
description = '' A command to tun for each message with env vars
|
||||
GOTIFY_MSG_PRIORITY, GOTIFY_MSG_TITLE and GOTIFY_MSG_TEXTs
|
||||
If unset use the standard desktop notification passing
|
||||
'';
|
||||
};
|
||||
};
|
||||
host = lib.mkOption {
|
||||
type = lib.types.singleLineStr;
|
||||
example = "example.com";
|
||||
description = "The hostname of the gotify server";
|
||||
};
|
||||
port = lib.mkOption {
|
||||
type = lib.types.int;
|
||||
default = 443;
|
||||
example = 443;
|
||||
description = "The port of the gotify server";
|
||||
};
|
||||
};
|
||||
|
||||
config = let
|
||||
cli = lib.mkIf cfg.cli.enable {
|
||||
home.packages = [pkgs.gotify-cli];
|
||||
sops.templates."gotify-cli-json" = {
|
||||
content = lib.generators.toJSON {} cli-config;
|
||||
path = "${config.xdg.configHome}/gotify/cli.json";
|
||||
};
|
||||
};
|
||||
daemon = lib.mkIf cfg.daemon.enable {
|
||||
systemd.user.services.gotify-desktop = {
|
||||
Unit = {
|
||||
Description = "Gotify Desktop notification service";
|
||||
After = ["sops-nix.service"]; # After the secrets have been rendered
|
||||
};
|
||||
Service = {
|
||||
ExecStart = "${pkgs.gotify-desktop}/bin/gotify-desktop";
|
||||
};
|
||||
Install = {
|
||||
WantedBy = ["multi-user.target"];
|
||||
};
|
||||
};
|
||||
sops.templates."gotify-daemon-toml" = {
|
||||
content = toTOML daemon-config;
|
||||
path = "${config.xdg.configHome}/gotify-desktop/config.toml";
|
||||
};
|
||||
};
|
||||
in
|
||||
lib.mkMerge [cli daemon];
|
||||
}
|
||||
362
old/modules/home/hyprland/config.nix
Normal file
@@ -0,0 +1,362 @@
|
||||
{
|
||||
config,
|
||||
pkgs,
|
||||
lib,
|
||||
...
|
||||
}: let
|
||||
cfg = config.hive.hyprland;
|
||||
screenshot = pkgs.writeShellScriptBin "screenshot" ''
|
||||
region=0
|
||||
clip=0
|
||||
while [[ "$#" -gt 0 ]]; do
|
||||
case $1 in
|
||||
--region) region=1; ;;
|
||||
--clip) clip=1; ;;
|
||||
*) echo "Unknown parameter passed: $1"; exit 1 ;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
if [[ $region -eq 1 ]]; then
|
||||
if [[ $clip -eq 1 ]]; then
|
||||
${pkgs.grim}/bin/grim -g "$(${pkgs.slurp}/bin/slurp)" - | ${pkgs.wl-clipboard}/bin/wl-copy
|
||||
else
|
||||
${pkgs.grim}/bin/grim -g "$(${pkgs.slurp}/bin/slurp)" ~/Pictures/Screenshots/$(${pkgs.coreutils}/bin/date +'%Y-%m-%d_%H-%M-%S').png
|
||||
fi
|
||||
else
|
||||
if [[ $clip -eq 1 ]]; then
|
||||
${pkgs.grim}/bin/grim - | ${pkgs.wl-clipboard}/bin/wl-copy
|
||||
else
|
||||
${pkgs.grim}/bin/grim ~/Pictures/Screenshots/$(${pkgs.coreutils}/bin/date +'%Y-%m-%d_%H-%M-%S').png
|
||||
fi
|
||||
fi
|
||||
'';
|
||||
in {
|
||||
config = lib.mkIf cfg.enable {
|
||||
services.hypridle.settings = {
|
||||
general = {
|
||||
# lock_cmd = notify-send "lock!" # dbus/sysd lock command (loginctl lock-session)
|
||||
# unlock_cmd = notify-send "unlock!" # same as above, but unlock
|
||||
ignore_dbus_inhibit = "false"; # whether to ignore dbus-sent idle-inhibit requests (used by e.g. firefox or steam)
|
||||
lock_cmd = "pidof hyprlock || hyprlock"; # avoid starting multiple hyprlock instances.
|
||||
before_sleep_cmd = "loginctl lock-session"; # lock before suspend.
|
||||
after_sleep_cmd = "hyprctl dispatch dpms on"; # to avoid having to press a key twice to turn on the display.
|
||||
};
|
||||
|
||||
listener = [
|
||||
# Screenlock
|
||||
{
|
||||
timeout = 180; # in seconds
|
||||
on-timeout = "hyprlock"; # command to run when timeout has passed
|
||||
# on-resume = notify-send "Welcome back to your desktop!" # command to run when activity is detected after timeout has fired.
|
||||
}
|
||||
# Suspend
|
||||
{
|
||||
timeout = 360; # in seconds
|
||||
on-timeout = "systemctl suspend"; # command to run when timeout has passed
|
||||
# on-resume = notify-send "Welcome back to your desktop!" # command to run when activity is detected after timeout has fired.
|
||||
}
|
||||
];
|
||||
};
|
||||
|
||||
programs.hyprlock = {
|
||||
enable = true;
|
||||
settings = {
|
||||
background = [
|
||||
{
|
||||
path = "screenshot"; # only png supported for now
|
||||
# color = $color1
|
||||
|
||||
# all these options are taken from hyprland, see https://wiki.hyprland.org/Configuring/Variables/#blur for explanations
|
||||
blur_size = 4;
|
||||
blur_passes = 3; # 0 disables blurring
|
||||
noise = 0.0117;
|
||||
contrast = 1.3000; # Vibrant!!!
|
||||
brightness = 0.8000;
|
||||
vibrancy = 0.2100;
|
||||
vibrancy_darkness = 0.0;
|
||||
}
|
||||
];
|
||||
|
||||
# Hours
|
||||
label = [
|
||||
{
|
||||
text = ''cmd[update:1000] echo "<b><big> $(date +"%H") </big></b>"'';
|
||||
#color = $color6
|
||||
font_size = 112;
|
||||
# font_family = Geist Mono 10
|
||||
shadow_passes = 3;
|
||||
shadow_size = 4;
|
||||
|
||||
position = "0, 220";
|
||||
halign = "center";
|
||||
valign = "center";
|
||||
}
|
||||
{
|
||||
text = ''cmd[update:1000] echo "<b><big> $(date +"%M") </big></b>"'';
|
||||
# color = $color6
|
||||
font_size = 112;
|
||||
# font_family = Geist Mono 10
|
||||
shadow_passes = 3;
|
||||
shadow_size = 4;
|
||||
|
||||
position = "0, 80";
|
||||
halign = "center";
|
||||
valign = "center";
|
||||
}
|
||||
{
|
||||
text = ''cmd[update:18000000] echo "<b><big> "$(date +'%A')" </big></b>"'';
|
||||
# color = $color7
|
||||
font_size = 22;
|
||||
# font_family = JetBrainsMono Nerd Font 10
|
||||
|
||||
position = "0, -10";
|
||||
halign = "center";
|
||||
valign = "center";
|
||||
}
|
||||
{
|
||||
text = ''cmd[update:18000000] echo "<b> "$(${pkgs.coreutils-full}/bin/date +'%d %b')" </b>"'';
|
||||
# color = $color7
|
||||
font_size = 18;
|
||||
#font_family = JetBrainsMono Nerd Font 10
|
||||
|
||||
position = "0, -40";
|
||||
halign = "center";
|
||||
valign = "center";
|
||||
}
|
||||
{
|
||||
text = ''cmd[update:18000000] echo "<b>So ca. <big> $(${pkgs.curl}/bin/curl -s 'wttr.in?format=%t' | ${pkgs.coreutils-full}/bin/tr -d '+')</big> oder watt.</b>"'';
|
||||
#color = $color7
|
||||
font_size = 18;
|
||||
# font_family = Geist Mono 10
|
||||
|
||||
position = "0, 40";
|
||||
halign = "center";
|
||||
valign = "bottom";
|
||||
}
|
||||
];
|
||||
|
||||
input-field = [
|
||||
{
|
||||
size = "250, 50";
|
||||
outline_thickness = 3;
|
||||
|
||||
dots_size = 0.26; # Scale of input-field height, 0.2 - 0.8
|
||||
dots_spacing = 0.64; # Scale of dots' absolute size, 0.0 - 1.0
|
||||
dots_center = true;
|
||||
dots_rouding = -1;
|
||||
|
||||
rounding = 22;
|
||||
# outer_color = $color0
|
||||
# inner_color = $color0
|
||||
# font_color = $color6
|
||||
fade_on_empty = true;
|
||||
placeholder_text = ''<i>Password...</i>''; # Text rendered in the input box when it's empty.
|
||||
|
||||
position = "0, 120";
|
||||
halign = "center";
|
||||
valign = "bottom";
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
|
||||
wayland.windowManager.hyprland = {
|
||||
settings = {
|
||||
exec-once = [
|
||||
"${pkgs.wpaperd}/bin/wpaperd &"
|
||||
];
|
||||
|
||||
"$mod" = "SUPER";
|
||||
bind =
|
||||
[
|
||||
"$mod, RETURN, exec, ${pkgs.kitty}/bin/kitty"
|
||||
"$mod, d, exec, ${pkgs.wofi}/bin/wofi --show drun"
|
||||
"$mod, h, movefocus, l"
|
||||
"$mod, j, movefocus, d"
|
||||
"$mod, k, movefocus, u"
|
||||
"$mod, l, movefocus, r"
|
||||
"$mod, LEFT, movefocus, l"
|
||||
"$mod, DOWN, movefocus, d"
|
||||
"$mod, UP, movefocus, u"
|
||||
"$mod, RIGHT, movefocus, r"
|
||||
"$mod SHIFT, h, movewindow, l"
|
||||
"$mod SHIFT, j, movewindow, d"
|
||||
"$mod SHIFT, k, movewindow, u"
|
||||
"$mod SHIFT, l, movewindow, r"
|
||||
"$mod SHIFT, LEFT, movewindow, l"
|
||||
"$mod SHIFT, DOWN, movewindow, d"
|
||||
"$mod SHIFT, UP, movewindow, u"
|
||||
|
||||
"$mod CTRL SHIFT, LEFT, moveactive, -10 0"
|
||||
"$mod CTRL SHIFT, DOWN, moveactive, 0 10"
|
||||
"$mod CTRL SHIFT, UP, moveactive, 0 -10"
|
||||
"$mod CTRL SHIFT, RIGHT, moveactive, 10 0"
|
||||
"$mod CTRL SHIFT, h, moveactive, -10 0"
|
||||
"$mod CTRL SHIFT, j, moveactive, 0 10"
|
||||
"$mod CTRL SHIFT, k, moveactive, 0 -10"
|
||||
"$mod CTRL SHIFT, l, moveactive, 10 0"
|
||||
"$mod SHIFT, q, killactive"
|
||||
"$mod CTRL, h, resizeactive, -5% 0%"
|
||||
"$mod CTRL, l, resizeactive, 5% 0%"
|
||||
"$mod CTRL, j, resizeactive, 0% -5%"
|
||||
"$mod CTRL, k, resizeactive, 0% 5%"
|
||||
"$mod, SPACE, togglefloating, active"
|
||||
"$mod SHIFT, SPACE, centerwindow"
|
||||
"$mod, f, fullscreen, 1"
|
||||
"$mod SHIFT, f, fullscreen, 0"
|
||||
"$mod CTRL, f, fullscreenstate, -1 2"
|
||||
"$mod SHIFT, s, pin"
|
||||
"$mod SHIFT, x, exec, ${pkgs.hyprland}/bin/hyprctl kill"
|
||||
", XF86AudioRaiseVolume, exec, ${pkgs.pulsemixer}/bin/pulsemixer --change-volume +5"
|
||||
", XF86AudioLowerVolume, exec, ${pkgs.pulsemixer}/bin/pulsemixer --change-volume -5"
|
||||
", XF86AudioMute, exec, ${pkgs.pulsemixer}/bin/pulsemixer --toggle-mute"
|
||||
", XF86AudioMicMute, exec, ${pkgs.pulsemixer}/bin/pulsemixer --toggle-mute --id 1"
|
||||
", XF86MonBrightnessUp, exec, ${pkgs.brightnessctl}/bin/brightnessctl set +5%"
|
||||
", XF86MonBrightnessDown, exec, ${pkgs.brightnessctl}/bin/brightnessctl set 5%-"
|
||||
"$mod, 9, exec, ${pkgs.hyprlock}/bin/hyprlock"
|
||||
"$mod, 0, exec, ${pkgs.wlogout}/bin/wlogout -b 5"
|
||||
"$mod, n, exec, ${pkgs.swaynotificationcenter}/bin/swaync-client -t"
|
||||
", Print, exec, ${screenshot}/bin/screenshot"
|
||||
"CTRL, Print, exec, ${screenshot}/bin/screenshot --region"
|
||||
"SHIFT, Print, exec, ${screenshot}/bin/screenshot --clip"
|
||||
"CTRL SHIFT, Print, exec, ${screenshot}/bin/screenshot --region --clip"
|
||||
]
|
||||
++ (
|
||||
# workspaces
|
||||
# binds $mod + [shift +] {1..10} to [move to] workspace {1..10}
|
||||
builtins.concatLists (builtins.genList (
|
||||
x: let
|
||||
ws = builtins.toString (x + 1);
|
||||
in [
|
||||
"$mod, ${ws}, workspace, ${ws}"
|
||||
"$mod SHIFT, ${ws}, movetoworkspace, ${ws}"
|
||||
"$mod CTRL, ${ws}, movetoworkspacesilent, ${ws}"
|
||||
]
|
||||
)
|
||||
8)
|
||||
);
|
||||
# See https://wiki.hyprland.org/Configuring/Monitors/
|
||||
monitor = ",preferred,auto,1";
|
||||
env = [
|
||||
"GDK_SCALE,1"
|
||||
"XCURSOR_SIZE,12"
|
||||
];
|
||||
|
||||
xwayland = {
|
||||
force_zero_scaling = true;
|
||||
};
|
||||
|
||||
# See https://wiki.hyprland.org/Configuring/Keywords/ for more
|
||||
|
||||
# Execute your favorite apps at launch
|
||||
# exec-once = waybar & hyprpaper & firefox
|
||||
|
||||
# Source a file (multi-file configs)
|
||||
# source = ~/.config/hypr/myColors.conf
|
||||
|
||||
# For all categories, see https://wiki.hyprland.org/Configuring/Variables/
|
||||
input = {
|
||||
kb_layout = "de";
|
||||
kb_variant = "deadacute";
|
||||
kb_model = "";
|
||||
kb_options = "caps:ctrl_modifier";
|
||||
kb_rules = "";
|
||||
repeat_delay = 250;
|
||||
repeat_rate = 30;
|
||||
follow_mouse = 1;
|
||||
|
||||
touchpad = {
|
||||
natural_scroll = "yes";
|
||||
};
|
||||
|
||||
sensitivity = 0; # -1.0 - 1.0, 0 means no modification.
|
||||
};
|
||||
|
||||
general = {
|
||||
# See https://wiki.hyprland.org/Configuring/Variables/ for more
|
||||
|
||||
gaps_in = 5;
|
||||
gaps_out = 10;
|
||||
border_size = 2;
|
||||
"col.active_border" = "rgba(33ccffee) rgba(00ff99ee) 45deg";
|
||||
"col.inactive_border" = "rgba(595959aa)";
|
||||
|
||||
layout = "dwindle";
|
||||
|
||||
# Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on
|
||||
allow_tearing = false;
|
||||
};
|
||||
|
||||
layerrule = [
|
||||
# blur for wlogout
|
||||
"blur, logout_dialog"
|
||||
|
||||
# blur for swaync
|
||||
"blur, swaync-control-center"
|
||||
"blur, swaync-notification-window"
|
||||
"ignorezero, swaync-control-center"
|
||||
"ignorezero, swaync-notification-window"
|
||||
"ignorealpha 0.5, swaync-control-center"
|
||||
"ignorealpha 0.5, swaync-notification-window"
|
||||
];
|
||||
|
||||
decoration = {
|
||||
# See https://wiki.hyprland.org/Configuring/Variables/ for more
|
||||
|
||||
rounding = 10;
|
||||
|
||||
blur = {
|
||||
enabled = true;
|
||||
size = 8;
|
||||
passes = 1;
|
||||
new_optimizations = true;
|
||||
};
|
||||
};
|
||||
|
||||
animations = {
|
||||
enabled = "yes";
|
||||
|
||||
# Some default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more
|
||||
|
||||
bezier = "myBezier, 0.05, 0.9, 0.1, 1.05";
|
||||
|
||||
animation = [
|
||||
"windows, 1, 7, myBezier"
|
||||
"windowsOut, 1, 7, default, popin 80%"
|
||||
"border, 1, 10, default"
|
||||
"borderangle, 1, 8, default"
|
||||
"fade, 1, 7, default"
|
||||
"workspaces, 1, 6, default"
|
||||
];
|
||||
};
|
||||
|
||||
dwindle = {
|
||||
# See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more
|
||||
pseudotile = "yes"; # master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below
|
||||
preserve_split = "yes"; # you probably want this
|
||||
};
|
||||
|
||||
master = {
|
||||
# See https://wiki.hyprland.org/Configuring/Master-Layout/ for more
|
||||
# new_is_master = true;
|
||||
};
|
||||
|
||||
ecosystem = {
|
||||
no_update_news = true;
|
||||
};
|
||||
|
||||
misc = {
|
||||
# See https://wiki.hyprland.org/Configuring/Variables/ for more
|
||||
force_default_wallpaper = 0; # Set to 0 to disable the anime mascot wallpapers
|
||||
};
|
||||
|
||||
# Example per-device config
|
||||
# See https://wiki.hyprland.org/Configuring/Keywords/#executing for more
|
||||
# "device:epic-mouse-v1" = {
|
||||
# sensitivity = -0.5;
|
||||
# };
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
10
old/modules/home/hyprland/default.nix
Normal file
@@ -0,0 +1,10 @@
|
||||
{lib, ...}: {
|
||||
options.hive.hyprland = {
|
||||
enable = lib.mkEnableOption "Enable Hyprland configuration";
|
||||
};
|
||||
|
||||
imports = [
|
||||
./config.nix
|
||||
./hyprland.nix
|
||||
];
|
||||
}
|
||||
32
old/modules/home/hyprland/hyprland.nix
Normal file
@@ -0,0 +1,32 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}: let
|
||||
cfg = config.hive.hyprland;
|
||||
in {
|
||||
config = lib.mkIf cfg.enable {
|
||||
wayland.windowManager.hyprland = {
|
||||
enable = true;
|
||||
systemd.enable = false;
|
||||
systemd.variables = ["--all"];
|
||||
xwayland.enable = true;
|
||||
};
|
||||
|
||||
home.packages = with pkgs; [
|
||||
wl-clipboard
|
||||
];
|
||||
|
||||
services.hypridle.enable = true;
|
||||
|
||||
services.wpaperd = {
|
||||
enable = true;
|
||||
settings = {
|
||||
default = {
|
||||
path = ../../../static/wallpaper/stones.jpg;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
36
old/modules/home/jj.nix
Normal file
@@ -0,0 +1,36 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}: let
|
||||
cfg = config.hive.jj;
|
||||
in {
|
||||
options.hive.jj = {
|
||||
enable = lib.mkEnableOption "Enable jj vcs";
|
||||
followGit = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = true;
|
||||
description = "Follow the current git configuration";
|
||||
};
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
home.packages = with pkgs; [
|
||||
jujutsu
|
||||
];
|
||||
|
||||
programs.jujutsu = {
|
||||
enable = true;
|
||||
settings = {
|
||||
user = lib.optionalAttrs cfg.followGit {
|
||||
name = config.programs.git.settings.user.name;
|
||||
email = config.programs.git.settings.user.email;
|
||||
};
|
||||
ui = lib.optionalAttrs (cfg.followGit && config.programs.difftastic.enable) {
|
||||
diff-formatter = ["${pkgs.difftastic}/bin/difft" "--color=always" "$left" "$right"];
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
22
old/modules/home/kdeconnect.nix
Normal file
@@ -0,0 +1,22 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
...
|
||||
}: let
|
||||
cfg = config.hive.kdeconnect;
|
||||
in {
|
||||
options.hive.kdeconnect = {
|
||||
enable = lib.mkEnableOption "Enable KDE Connect";
|
||||
indicatorOnly = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = false;
|
||||
description = ''
|
||||
Only enable the incicator service.
|
||||
'';
|
||||
};
|
||||
};
|
||||
config = lib.mkIf cfg.enable {
|
||||
services.kdeconnect.enable = ! cfg.indicatorOnly;
|
||||
services.kdeconnect.indicator = true;
|
||||
};
|
||||
}
|
||||
29
old/modules/home/kitty/default.nix
Normal file
@@ -0,0 +1,29 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}: let
|
||||
cfg = config.hive.kitty;
|
||||
in {
|
||||
options.hive.kitty = {
|
||||
enable = lib.mkEnableOption "Enable kitty terminal";
|
||||
};
|
||||
config = lib.mkIf cfg.enable {
|
||||
programs.kitty = {
|
||||
enable = true;
|
||||
shellIntegration.enableZshIntegration = true;
|
||||
font = {
|
||||
package = pkgs.nerd-fonts.fira-code;
|
||||
name = "FiraCode Nerd Font";
|
||||
size = 12;
|
||||
};
|
||||
themeFile = "Molokai";
|
||||
settings = {
|
||||
background_opacity = "0.6";
|
||||
enable_audio_bell = false;
|
||||
confirm_os_window_close = 0;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
19
old/modules/home/nextcloud/default.nix
Normal file
@@ -0,0 +1,19 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}: let
|
||||
cfg = config.hive.nextcloud;
|
||||
in {
|
||||
options.hive.nextcloud = {
|
||||
enable = lib.mkEnableOption "Enable Nextcloud client";
|
||||
};
|
||||
config = lib.mkIf cfg.enable {
|
||||
services.nextcloud-client = {
|
||||
enable = true;
|
||||
startInBackground = true;
|
||||
package = pkgs.nextcloud-client;
|
||||
};
|
||||
};
|
||||
}
|
||||
147
old/modules/home/plasma.nix
Normal file
@@ -0,0 +1,147 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}: let
|
||||
cfg = config.hive.plasma;
|
||||
in {
|
||||
options.hive.plasma.enable = lib.mkEnableOption "Plasma configuration";
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
# load hm-vars in x-session
|
||||
xsession.enable = true;
|
||||
|
||||
# symlink wallpapers
|
||||
home.file.".local/share/wallpaper" = {
|
||||
source = ../../static/wallpaper;
|
||||
recursive = true;
|
||||
};
|
||||
|
||||
# provide kvantum and nord theme
|
||||
home.packages = [
|
||||
pkgs.kdePackages.qtstyleplugin-kvantum
|
||||
pkgs.layan-kde
|
||||
pkgs.nordzy-cursor-theme
|
||||
pkgs.qt6ct
|
||||
pkgs.tela-circle-icon-theme
|
||||
];
|
||||
|
||||
programs.konsole = {
|
||||
enable = true;
|
||||
defaultProfile = "default";
|
||||
profiles = {
|
||||
default = {
|
||||
name = "default";
|
||||
colorScheme = "Layan";
|
||||
font = {
|
||||
name = "Fira Code";
|
||||
size = 10;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
# use kvantum theme
|
||||
qt.enable = true;
|
||||
qt.style.name = "kvantum";
|
||||
home.sessionVariables = {
|
||||
QT_STYLE_OVERRIDE = "kvantum";
|
||||
};
|
||||
|
||||
# add nord like gtk theme
|
||||
gtk = {
|
||||
enable = true;
|
||||
cursorTheme = {
|
||||
package = pkgs.nordzy-cursor-theme;
|
||||
name = "Nordzy-cursors";
|
||||
};
|
||||
theme = {
|
||||
package = pkgs.nordic;
|
||||
name = "Nordic";
|
||||
};
|
||||
iconTheme = {
|
||||
package = pkgs.tela-circle-icon-theme;
|
||||
name = "Tela-circle-nord";
|
||||
};
|
||||
};
|
||||
|
||||
programs.plasma = {
|
||||
enable = true;
|
||||
|
||||
#
|
||||
# Some high-level settings:
|
||||
#
|
||||
workspace = {
|
||||
clickItemTo = "select";
|
||||
lookAndFeel = "com.github.vinceliuice.Layan";
|
||||
cursor = {
|
||||
theme = "Nordzy-cursors";
|
||||
size = 24;
|
||||
};
|
||||
iconTheme = "Tela-circle-nord";
|
||||
wallpaper = "/home/jonas/.local/share/wallpaper/nord.png";
|
||||
};
|
||||
|
||||
hotkeys.commands."launch-konsole" = {
|
||||
name = "Launch Konsole";
|
||||
key = "Meta+Return";
|
||||
command = "konsole";
|
||||
};
|
||||
|
||||
kwin = {
|
||||
edgeBarrier = 0; # Disables the edge-barriers introduced in plasma 6.1
|
||||
cornerBarrier = false;
|
||||
|
||||
scripts.polonium.enable = false;
|
||||
};
|
||||
|
||||
kscreenlocker = {
|
||||
lockOnResume = true;
|
||||
timeout = 10;
|
||||
};
|
||||
|
||||
#
|
||||
# Some mid-level settings:
|
||||
#
|
||||
shortcuts = {
|
||||
ksmserver = {
|
||||
"Lock Session" = ["Screensaver" "Meta+Ctrl+Alt+L"];
|
||||
};
|
||||
|
||||
kwin =
|
||||
{
|
||||
"Expose" = "Meta+,";
|
||||
"Switch Window Down" = "Meta+J";
|
||||
"Switch Window Left" = "Meta+H";
|
||||
"Switch Window Right" = "Meta+L";
|
||||
"Switch Window Up" = "Meta+K";
|
||||
"Window Quick Tile Bottom" = "Meta+Shift+J";
|
||||
"Window Quick Tile Left" = "Meta+Shift+H";
|
||||
"Window Quick Tile Right" = "Meta+Shift+L";
|
||||
"Window Quick Tile Top" = "Meta+Shift+K";
|
||||
"Kill Window" = "Meta+Alt+Q";
|
||||
"Window Close" = "Meta+Shift+Q";
|
||||
}
|
||||
// (
|
||||
with lib; let
|
||||
desktops = map toString (lists.range 1 8);
|
||||
in
|
||||
listToAttrs
|
||||
(map
|
||||
(i: {
|
||||
name = "Switch to Desktop ${i}";
|
||||
value = "Meta+${i}";
|
||||
})
|
||||
desktops)
|
||||
// listToAttrs (map
|
||||
(i: {
|
||||
name = "Window to Desktop ${i}";
|
||||
value = "Meta+Shift+${i}";
|
||||
})
|
||||
desktops)
|
||||
);
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
68
old/modules/home/ranger/default.nix
Normal file
@@ -0,0 +1,68 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
...
|
||||
}: let
|
||||
cfg = config.hive.ranger;
|
||||
in {
|
||||
options.hive.ranger = {
|
||||
enable = lib.mkEnableOption "Enable ranger";
|
||||
};
|
||||
config = lib.mkIf cfg.enable {
|
||||
programs.ranger = {
|
||||
enable = true;
|
||||
settings = {
|
||||
preview_images = true;
|
||||
preview_images_method =
|
||||
if config.programs.kitty.enable
|
||||
then "kitty"
|
||||
else "ueberzug";
|
||||
};
|
||||
extraConfig = lib.strings.concatStringsSep "\n" [
|
||||
"default_linemode devicons"
|
||||
];
|
||||
mappings = {
|
||||
f = "console fzf_filter%space";
|
||||
};
|
||||
plugins =
|
||||
[
|
||||
{
|
||||
name = "ranger_fzf_filter";
|
||||
src = builtins.fetchGit {
|
||||
url = "https://github.com/MuXiu1997/ranger-fzf-filter";
|
||||
rev = "bf16de2e4ace415b685ff7c58306d0c5146f9f43";
|
||||
};
|
||||
}
|
||||
{
|
||||
name = "ranger_archives";
|
||||
src = builtins.fetchGit {
|
||||
url = "https://github.com/maximtrp/ranger-archives";
|
||||
rev = "b4e136b24fdca7670e0c6105fb496e5df356ef25";
|
||||
};
|
||||
}
|
||||
{
|
||||
name = "ranger_devicons";
|
||||
src = builtins.fetchGit {
|
||||
url = "https://github.com/alexanderjeurissen/ranger_devicons";
|
||||
rev = "f227f212e14996fbb366f945ec3ecaf5dc5f44b0";
|
||||
};
|
||||
}
|
||||
]
|
||||
++ (
|
||||
if config.services.kdeconnect.enable
|
||||
then
|
||||
lib.lists.singleton
|
||||
{
|
||||
name = "ranger_kdeconnect.py";
|
||||
src =
|
||||
builtins.fetchGit {
|
||||
url = "https://github.com/bwconrad/ranger-kdeconnect";
|
||||
rev = "710c600bb894fed3e293f6518930c16a494dd154";
|
||||
}
|
||||
+ "/kdeconnect_send.py";
|
||||
}
|
||||
else []
|
||||
);
|
||||
};
|
||||
};
|
||||
}
|
||||
46
old/modules/home/ssh.nix
Normal file
@@ -0,0 +1,46 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
...
|
||||
}: let
|
||||
cfg = config.hive.ssh;
|
||||
in {
|
||||
options.hive.ssh = {
|
||||
enable = lib.mkEnableOption "SSH keys and config";
|
||||
keys = lib.mkOption {
|
||||
type = lib.types.listOf (lib.types.str);
|
||||
default = [];
|
||||
description = ''
|
||||
A list of SSH key names. Each one results in a id_<name> file in .ssh
|
||||
'';
|
||||
};
|
||||
sopsFile = lib.mkOption {
|
||||
type = lib.types.path;
|
||||
default = null;
|
||||
description = ''
|
||||
Path to the sops file containing the SSH keys.
|
||||
Requires a config key. And for each private key names in <keys> an keys.<name> entry.
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
sops.secrets =
|
||||
{
|
||||
"ssh/config" = {
|
||||
inherit (cfg) sopsFile;
|
||||
key = "config";
|
||||
path = "${config.home.homeDirectory}/.ssh/config";
|
||||
};
|
||||
}
|
||||
// builtins.listToAttrs (map (name: {
|
||||
name = "ssh/id_${name}";
|
||||
value = {
|
||||
inherit (cfg) sopsFile;
|
||||
key = "keys/${name}";
|
||||
path = "${config.home.homeDirectory}/.ssh/id_${name}";
|
||||
};
|
||||
})
|
||||
cfg.keys);
|
||||
};
|
||||
}
|
||||
121
old/modules/home/swaync/default.nix
Normal file
@@ -0,0 +1,121 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}: let
|
||||
cfg = config.hive.swaync;
|
||||
in {
|
||||
options.hive.swaync = {
|
||||
enable = lib.mkEnableOption "Enable swaync";
|
||||
};
|
||||
config = lib.mkIf cfg.enable {
|
||||
xdg.enable = true;
|
||||
xdg.configFile = {
|
||||
"swaync/themes" = {
|
||||
source = ./themes;
|
||||
};
|
||||
"swaync/icons" = {
|
||||
source = ./icons;
|
||||
recursive = true;
|
||||
};
|
||||
};
|
||||
services.swaync.enable = true;
|
||||
services.swaync.style = ''
|
||||
@import 'themes/nova-dark/notifications.css';
|
||||
@import 'themes/nova-dark/central_control.css';
|
||||
'';
|
||||
services.swaync.settings = {
|
||||
positionX = "right";
|
||||
positionY = "top";
|
||||
cssPriority = "user";
|
||||
|
||||
control-center-width = 380;
|
||||
control-center-height = 860;
|
||||
control-center-margin-top = 2;
|
||||
control-center-margin-bottom = 2;
|
||||
control-center-margin-right = 1;
|
||||
control-center-margin-left = 0;
|
||||
|
||||
notification-window-width = 400;
|
||||
notification-icon-size = 48;
|
||||
notification-body-image-height = 160;
|
||||
notification-body-image-width = 200;
|
||||
|
||||
timeout = 4;
|
||||
timeout-low = 2;
|
||||
timeout-critical = 6;
|
||||
|
||||
fit-to-screen = false;
|
||||
keyboard-shortcuts = true;
|
||||
image-visibility = "when-available";
|
||||
transition-time = 200;
|
||||
hide-on-clear = false;
|
||||
hide-on-action = false;
|
||||
script-fail-notify = true;
|
||||
scripts = {
|
||||
example-script = {
|
||||
exec = "echo 'Do something...'";
|
||||
urgency = "Normal";
|
||||
};
|
||||
};
|
||||
notification-visibility = {
|
||||
example-name = {
|
||||
state = "muted";
|
||||
urgency = "Low";
|
||||
app-name = "Spotify";
|
||||
};
|
||||
};
|
||||
widgets = [
|
||||
"label"
|
||||
"buttons-grid"
|
||||
"mpris"
|
||||
"title"
|
||||
"dnd"
|
||||
"notifications"
|
||||
];
|
||||
widget-config = {
|
||||
title = {
|
||||
text = "Notifications";
|
||||
clear-all-button = true;
|
||||
button-text = " ";
|
||||
};
|
||||
dnd = {
|
||||
text = "Do not disturb";
|
||||
};
|
||||
label = {
|
||||
max-lines = 1;
|
||||
text = " ";
|
||||
};
|
||||
mpris = {
|
||||
image-size = 96;
|
||||
image-radius = 12;
|
||||
};
|
||||
volume = {
|
||||
label = "";
|
||||
show-per-app = true;
|
||||
};
|
||||
buttons-grid = {
|
||||
actions = [
|
||||
{
|
||||
label = " ";
|
||||
command = "${pkgs.alsa-utils}/bin/amixer set Master toggle";
|
||||
}
|
||||
{
|
||||
label = "";
|
||||
command = "${pkgs.alsa-utils}/bin/amixer set Capture toggle";
|
||||
}
|
||||
{
|
||||
label = " ";
|
||||
command = "${pkgs.networkmanagerapplet}/bin/nm-connection-editor";
|
||||
}
|
||||
{
|
||||
label = "";
|
||||
command = "${pkgs.blueman}/bin/blueman-manager";
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
BIN
old/modules/home/swaync/icons/bolt.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
old/modules/home/swaync/icons/brightness-100.png
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
old/modules/home/swaync/icons/brightness-20.png
Normal file
|
After Width: | Height: | Size: 7.3 KiB |
BIN
old/modules/home/swaync/icons/brightness-40.png
Normal file
|
After Width: | Height: | Size: 8.0 KiB |
BIN
old/modules/home/swaync/icons/brightness-60.png
Normal file
|
After Width: | Height: | Size: 9.0 KiB |
BIN
old/modules/home/swaync/icons/brightness-80.png
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
old/modules/home/swaync/icons/gamemode.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
old/modules/home/swaync/icons/microphone-mute.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
old/modules/home/swaync/icons/microphone.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
old/modules/home/swaync/icons/music.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
old/modules/home/swaync/icons/palette.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
old/modules/home/swaync/icons/picture.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
old/modules/home/swaync/icons/play.png
Normal file
|
After Width: | Height: | Size: 6.0 KiB |
BIN
old/modules/home/swaync/icons/timer.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
BIN
old/modules/home/swaync/icons/volume-high.png
Normal file
|
After Width: | Height: | Size: 28 KiB |
BIN
old/modules/home/swaync/icons/volume-low.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
old/modules/home/swaync/icons/volume-mid.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
BIN
old/modules/home/swaync/icons/volume-mute.png
Normal file
|
After Width: | Height: | Size: 18 KiB |
BIN
old/modules/home/swaync/icons/wand.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
258
old/modules/home/swaync/themes/nova-dark/central_control.css
Normal file
@@ -0,0 +1,258 @@
|
||||
@define-color text @foreground;
|
||||
@define-color background-alt alpha(@color1, .4);
|
||||
@define-color selected @color6;
|
||||
@define-color hover alpha(@selected, .4);
|
||||
@define-color urgent @color2;
|
||||
|
||||
/* Temporary color defs */
|
||||
@define-color background rgb(0,10,20);
|
||||
@define-color background-alt rgb(0,20,30);
|
||||
@define-color selected rgb(0,30,130);
|
||||
|
||||
* {
|
||||
color: @text;
|
||||
|
||||
all: unset;
|
||||
font-size: 14px;
|
||||
/*font-family: "JetBrains Mono Nerd Font 10";*/
|
||||
transition: 200ms;
|
||||
|
||||
}
|
||||
|
||||
/* Avoid 'annoying' backgroud */
|
||||
.blank-window {
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
/* CONTROL CENTER ------------------------------------------------------------------------ */
|
||||
|
||||
.control-center {
|
||||
background: alpha(@background, .55);
|
||||
border-radius: 24px;
|
||||
border: 1px solid @selected;
|
||||
box-shadow: 0 0 10px 0 rgba(0,0,0,.6);
|
||||
margin: 18px;
|
||||
padding: 12px;
|
||||
}
|
||||
|
||||
/* Notifications */
|
||||
.control-center .notification-row .notification-background,
|
||||
.control-center .notification-row .notification-background .notification.critical {
|
||||
background-color: @background-alt;
|
||||
border-radius: 16px;
|
||||
margin: 4px 0px;
|
||||
padding: 4px;
|
||||
}
|
||||
|
||||
.control-center .notification-row .notification-background .notification.critical {
|
||||
color: @urgent;
|
||||
}
|
||||
|
||||
.control-center .notification-row .notification-background .notification .notification-content {
|
||||
margin: 6px;
|
||||
padding: 8px 6px 2px 2px;
|
||||
}
|
||||
|
||||
.control-center .notification-row .notification-background .notification > *:last-child > * {
|
||||
min-height: 3.4em;
|
||||
}
|
||||
|
||||
.control-center .notification-row .notification-background .notification > *:last-child > * .notification-action {
|
||||
background: alpha(@selected, .6);
|
||||
color: @text;
|
||||
border-radius: 12px;
|
||||
margin: 6px;
|
||||
}
|
||||
|
||||
.control-center .notification-row .notification-background .notification > *:last-child > * .notification-action:hover {
|
||||
background: @selected;
|
||||
}
|
||||
|
||||
.control-center .notification-row .notification-background .notification > *:last-child > * .notification-action:active {
|
||||
background-color: @selected;
|
||||
}
|
||||
|
||||
/* Buttons */
|
||||
|
||||
.control-center .notification-row .notification-background .close-button {
|
||||
background: transparent;
|
||||
border-radius: 6px;
|
||||
color: @text;
|
||||
margin: 0px;
|
||||
padding: 4px;
|
||||
}
|
||||
|
||||
.control-center .notification-row .notification-background .close-button:hover {
|
||||
background-color: @selected;
|
||||
}
|
||||
|
||||
.control-center .notification-row .notification-background .close-button:active {
|
||||
background-color: @selected;
|
||||
}
|
||||
|
||||
progressbar,
|
||||
progress,
|
||||
trough {
|
||||
border-radius: 12px;
|
||||
}
|
||||
|
||||
progressbar {
|
||||
background-color: rgba(255,255,255,.1);
|
||||
}
|
||||
|
||||
/* Notifications expanded-group */
|
||||
|
||||
.notification-group {
|
||||
margin: 2px 8px 2px 8px;
|
||||
|
||||
}
|
||||
.notification-group-headers {
|
||||
font-weight: bold;
|
||||
font-size: 1.25rem;
|
||||
color: @text;
|
||||
letter-spacing: 2px;
|
||||
}
|
||||
|
||||
.notification-group-icon {
|
||||
color: @text;
|
||||
}
|
||||
|
||||
.notification-group-collapse-button,
|
||||
.notification-group-close-all-button {
|
||||
background: transparent;
|
||||
color: @text;
|
||||
margin: 4px;
|
||||
border-radius: 6px;
|
||||
padding: 4px;
|
||||
}
|
||||
|
||||
.notification-group-collapse-button:hover,
|
||||
.notification-group-close-all-button:hover {
|
||||
background: @hover;
|
||||
}
|
||||
|
||||
/* WIDGETS --------------------------------------------------------------------------- */
|
||||
|
||||
/* Notification clear button */
|
||||
.widget-title {
|
||||
font-size: 1.2em;
|
||||
margin: 6px;
|
||||
}
|
||||
|
||||
.widget-title button {
|
||||
background: @background-alt;
|
||||
border-radius: 6px;
|
||||
padding: 4px 16px;
|
||||
}
|
||||
|
||||
.widget-title button:hover {
|
||||
background-color: @hover;
|
||||
}
|
||||
|
||||
.widget-title button:active {
|
||||
background-color: @selected;
|
||||
}
|
||||
|
||||
/* Do not disturb */
|
||||
.widget-dnd {
|
||||
margin: 6px;
|
||||
font-size: 1.2rem;
|
||||
}
|
||||
|
||||
.widget-dnd > switch {
|
||||
background: @background-alt;
|
||||
font-size: initial;
|
||||
border-radius: 8px;
|
||||
box-shadow: none;
|
||||
padding: 2px;
|
||||
}
|
||||
|
||||
.widget-dnd > switch:hover {
|
||||
background: @hover;
|
||||
}
|
||||
|
||||
.widget-dnd > switch:checked {
|
||||
background: @selected;
|
||||
}
|
||||
|
||||
.widget-dnd > switch:checked:hover {
|
||||
background: @hover;
|
||||
}
|
||||
|
||||
.widget-dnd > switch slider {
|
||||
background: @text;
|
||||
border-radius: 6px;
|
||||
}
|
||||
|
||||
/* Buttons menu */
|
||||
.widget-buttons-grid {
|
||||
font-size: x-large;
|
||||
padding: 6px 2px;
|
||||
margin: 6px;
|
||||
border-radius: 12px;
|
||||
background: @background-alt;
|
||||
}
|
||||
|
||||
.widget-buttons-grid>flowbox>flowboxchild>button {
|
||||
margin: 4px 10px;
|
||||
padding: 6px 12px;
|
||||
background: transparent;
|
||||
border-radius: 8px;
|
||||
}
|
||||
|
||||
.widget-buttons-grid>flowbox>flowboxchild>button:hover {
|
||||
background: @hover;
|
||||
}
|
||||
|
||||
|
||||
/* Music player */
|
||||
.widget-mpris {
|
||||
background: @background-alt;
|
||||
border-radius: 16px;
|
||||
color: @text;
|
||||
margin: 20px 6px;
|
||||
}
|
||||
|
||||
/* NOTE: Background need *opacity 1* otherwise will turn into the album art blurred */
|
||||
.widget-mpris-player {
|
||||
background-color: @background-sec;
|
||||
border-radius: 22px;
|
||||
padding: 6px 14px;
|
||||
margin: 6px;
|
||||
}
|
||||
|
||||
.widget-mpris > box > button {
|
||||
color: @text;
|
||||
border-radius: 20px;
|
||||
}
|
||||
|
||||
.widget-mpris button {
|
||||
color: alpha(@text, .6);
|
||||
}
|
||||
|
||||
.widget-mpris button:hover {
|
||||
color: @text;
|
||||
}
|
||||
|
||||
.widget-mpris-album-art {
|
||||
border-radius: 16px;
|
||||
}
|
||||
|
||||
.widget-mpris-title {
|
||||
font-weight: 700;
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
.widget-mpris-subtitle {
|
||||
font-weight: 500;
|
||||
font-size: 0.8rem;
|
||||
}
|
||||
|
||||
/* Volume */
|
||||
.widget-volume {
|
||||
background: @background-sec;
|
||||
color: @background;
|
||||
padding: 4px;
|
||||
margin: 6px;
|
||||
border-radius: 6px;
|
||||
}
|
||||
115
old/modules/home/swaync/themes/nova-dark/notifications.css
Normal file
@@ -0,0 +1,115 @@
|
||||
@define-color text @foreground;
|
||||
@define-color background-alt @color1;
|
||||
@define-color selected @color3;
|
||||
@define-color hover @color5;
|
||||
@define-color urgent @color2;
|
||||
/* Temporary color defs */
|
||||
@define-color background rgb(0,10,20);
|
||||
@define-color background-alt rgb(0,20,30);
|
||||
@define-color selected rgb(0,30,130);
|
||||
|
||||
* {
|
||||
|
||||
/*background-alt: @color1; Buttons background */
|
||||
/*selected: @color2; Button selected */
|
||||
/*hover: @color5; Hover button */
|
||||
/*urgent: @color6; Urgency critical */
|
||||
/*text-selected: @background; */
|
||||
|
||||
color: @text;
|
||||
|
||||
all: unset;
|
||||
font-size: 14px;
|
||||
font-family: "JetBrains Mono Nerd Font 10";
|
||||
transition: 200ms;
|
||||
|
||||
}
|
||||
|
||||
.notification-row {
|
||||
outline: none;
|
||||
margin: 0;
|
||||
padding: 0px;
|
||||
}
|
||||
|
||||
.floating-notifications.background .notification-row .notification-background {
|
||||
background: alpha(@background, .55);
|
||||
box-shadow: 0 0 8px 0 rgba(0,0,0,.6);
|
||||
border: 1px solid @selected;
|
||||
border-radius: 24px;
|
||||
margin: 16px;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.floating-notifications.background .notification-row .notification-background .notification {
|
||||
padding: 6px;
|
||||
border-radius: 12px;
|
||||
}
|
||||
|
||||
.floating-notifications.background .notification-row .notification-background .notification.critical {
|
||||
border: 2px solid @urgent;
|
||||
}
|
||||
|
||||
.floating-notifications.background .notification-row .notification-background .notification .notification-content {
|
||||
margin: 14px;
|
||||
}
|
||||
|
||||
.floating-notifications.background .notification-row .notification-background .notification > *:last-child > * {
|
||||
min-height: 3.4em;
|
||||
}
|
||||
|
||||
.floating-notifications.background .notification-row .notification-background .notification > *:last-child > * .notification-action {
|
||||
border-radius: 8px;
|
||||
background-color: @background-alt ;
|
||||
margin: 6px;
|
||||
border: 1px solid transparent;
|
||||
}
|
||||
|
||||
.floating-notifications.background .notification-row .notification-background .notification > *:last-child > * .notification-action:hover {
|
||||
background-color: @hover;
|
||||
border: 1px solid @selected;
|
||||
}
|
||||
|
||||
.floating-notifications.background .notification-row .notification-background .notification > *:last-child > * .notification-action:active {
|
||||
background-color: @selected;
|
||||
color: @background;
|
||||
}
|
||||
|
||||
.image {
|
||||
margin: 10px 20px 10px 0px;
|
||||
}
|
||||
|
||||
.summary {
|
||||
font-weight: 800;
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
.body {
|
||||
font-size: 0.8rem;
|
||||
}
|
||||
|
||||
.floating-notifications.background .notification-row .notification-background .close-button {
|
||||
margin: 6px;
|
||||
padding: 2px;
|
||||
border-radius: 6px;
|
||||
background-color: transparent;
|
||||
border: 1px solid transparent;
|
||||
}
|
||||
|
||||
.floating-notifications.background .notification-row .notification-background .close-button:hover {
|
||||
background-color: @selected;
|
||||
}
|
||||
|
||||
.floating-notifications.background .notification-row .notification-background .close-button:active {
|
||||
background-color: @selected;
|
||||
color: @background;
|
||||
}
|
||||
|
||||
.notification.critical progress {
|
||||
background-color: @selected;
|
||||
}
|
||||
|
||||
.notification.low progress,
|
||||
.notification.normal progress {
|
||||
background-color: @selected;
|
||||
}
|
||||
|
||||
56
old/modules/home/themes/layan.nix
Normal file
@@ -0,0 +1,56 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}: let
|
||||
cfg = config.hive.themes.layan;
|
||||
in {
|
||||
options.hive.themes.layan = {
|
||||
enable = lib.mkEnableOption "Layan theme configuration";
|
||||
pkgsInHome = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = false;
|
||||
description = "Whether to install Layan theme packages in the user's home directory.";
|
||||
};
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
home.packages = lib.optionals cfg.pkgsInHome [
|
||||
pkgs.hive.layan-qt6
|
||||
pkgs.kdePackages.qtstyleplugin-kvantum
|
||||
pkgs.unstable.layan-cursors
|
||||
pkgs.layan-gtk-theme
|
||||
pkgs.tela-circle-icon-theme
|
||||
];
|
||||
|
||||
qt.enable = false;
|
||||
qt.style.name = "kvantum";
|
||||
qt.style.package = pkgs.kdePackages.qtstyleplugin-kvantum;
|
||||
qt.platformTheme.name = "gtk";
|
||||
systemd.user.settings.Manager.DefaultEnvironment = lib.mapAttrs (_: lib.mkDefault) {
|
||||
QT_STYLE_OVERRIDE = "kvantum";
|
||||
QT_QPA_PLATFORMTHEME = "gtk";
|
||||
};
|
||||
xdg.configFile."Kvantum/kvantum.kvconfig".text = lib.generators.toINI {} {
|
||||
General.theme = "LayanDark";
|
||||
};
|
||||
|
||||
# add nord like gtk theme
|
||||
gtk = {
|
||||
enable = true;
|
||||
cursorTheme = {
|
||||
package = pkgs.unstable.layan-cursors;
|
||||
name = "Layan-cursors";
|
||||
};
|
||||
theme = {
|
||||
package = pkgs.layan-gtk-theme;
|
||||
name = "Layan-Dark";
|
||||
};
|
||||
iconTheme = {
|
||||
package = pkgs.tela-circle-icon-theme;
|
||||
name = "Tela-circle-dark";
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
266
old/modules/home/waybar/default.nix
Normal file
@@ -0,0 +1,266 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}: let
|
||||
cfg = config.hive.waybar;
|
||||
in {
|
||||
options.hive.waybar = {
|
||||
enable = lib.mkEnableOption "Enable Waybar";
|
||||
};
|
||||
config = lib.mkIf cfg.enable {
|
||||
programs.waybar.enable = true;
|
||||
programs.waybar.systemd.enable = true;
|
||||
|
||||
services.blueman-applet.enable = true;
|
||||
services.network-manager-applet.enable = true;
|
||||
services.pasystray.enable = true;
|
||||
|
||||
# is already fixed on latest home-manager rev
|
||||
systemd.user.services = {
|
||||
blueman-applet.Unit.After = lib.mkForce ["graphical-session.target"];
|
||||
network-manager-applet.Unit.After = lib.mkForce ["graphical-session.target"];
|
||||
pasystray.Unit.After = lib.mkForce ["graphical-session.target"];
|
||||
waybar.Unit.After = lib.mkForce ["graphical-session.target"];
|
||||
};
|
||||
|
||||
home.packages = with pkgs; [
|
||||
pulsemixer
|
||||
pavucontrol
|
||||
networkmanagerapplet
|
||||
];
|
||||
|
||||
programs.waybar = {
|
||||
settings.mainBar = {
|
||||
position = "top";
|
||||
layer = "top";
|
||||
height = 5;
|
||||
margin-top = 0;
|
||||
margin-bottom = 0;
|
||||
margin-left = 0;
|
||||
margin-right = 0;
|
||||
modules-left = [
|
||||
"custom/launcher"
|
||||
"hyprland/workspaces"
|
||||
];
|
||||
modules-center = [
|
||||
"hyprland/window"
|
||||
];
|
||||
modules-right = [
|
||||
"clock"
|
||||
"cpu"
|
||||
"memory"
|
||||
"disk"
|
||||
"battery"
|
||||
"network"
|
||||
"tray"
|
||||
];
|
||||
clock = {
|
||||
calendar = {
|
||||
format = {today = "<span color='#b4befe'><b>{}</b></span>";};
|
||||
};
|
||||
format = " {:%H:%M}";
|
||||
tooltip = "true";
|
||||
tooltip-format = "<big>{:%Y %B}</big>\n<tt><small>{calendar}</small></tt>";
|
||||
format-alt = " {:%d/%m}";
|
||||
};
|
||||
"hyprland/workspaces" = {
|
||||
active-only = false;
|
||||
disable-scroll = true;
|
||||
format = "{icon}";
|
||||
on-click = "activate";
|
||||
format-icons = {
|
||||
"1" = "1";
|
||||
"2" = "2";
|
||||
"3" = "3";
|
||||
"4" = "4";
|
||||
"5" = "5";
|
||||
"6" = "6";
|
||||
"7" = "7";
|
||||
"8" = "8";
|
||||
urgent = "";
|
||||
default = "";
|
||||
sort-by-number = true;
|
||||
};
|
||||
persistent-workspaces = {
|
||||
"1" = [];
|
||||
"2" = [];
|
||||
"3" = [];
|
||||
"4" = [];
|
||||
"5" = [];
|
||||
"6" = [];
|
||||
"7" = [];
|
||||
"8" = [];
|
||||
};
|
||||
};
|
||||
memory = {
|
||||
format = " {}%";
|
||||
format-alt = " {used} GiB"; #
|
||||
interval = 2;
|
||||
};
|
||||
cpu = {
|
||||
format = " {usage}%";
|
||||
format-alt = " {avg_frequency} GHz";
|
||||
interval = 2;
|
||||
};
|
||||
disk = {
|
||||
# path = "/";
|
||||
format = " {percentage_used}%";
|
||||
interval = 60;
|
||||
};
|
||||
network = {
|
||||
format-wifi = " {signalStrength}%";
|
||||
format-ethernet = " ";
|
||||
tooltip-format = "Connected to {essid} {ifname} via {gwaddr}";
|
||||
format-linked = "{ifname} (No IP)";
|
||||
format-disconnected = " ";
|
||||
};
|
||||
tray = {
|
||||
icon-size = 20;
|
||||
spacing = 8;
|
||||
};
|
||||
pulseaudio = {
|
||||
format = "{icon} {volume}%";
|
||||
format-muted = " {volume}%";
|
||||
format-icons = {
|
||||
default = [" "];
|
||||
};
|
||||
scroll-step = 5;
|
||||
on-click = "pamixer -t";
|
||||
};
|
||||
battery = {
|
||||
format = "{icon} {capacity}%";
|
||||
format-icons = [" " " " " " " " " "];
|
||||
format-charging = " {capacity}%";
|
||||
format-full = " {capacity}%";
|
||||
format-warning = " {capacity}%";
|
||||
interval = 5;
|
||||
states = {
|
||||
warning = 20;
|
||||
};
|
||||
format-time = "{H}h{M}m";
|
||||
tooltip = true;
|
||||
tooltip-format = "{time}";
|
||||
};
|
||||
"custom/launcher" = {
|
||||
format = "";
|
||||
on-click = "${pkgs.wofi}/bin/wofi --show drun";
|
||||
tooltip = "false";
|
||||
};
|
||||
};
|
||||
style = ''
|
||||
* {
|
||||
border: none;
|
||||
font-family: Font Awesome, Roboto, Arial, sans-serif;
|
||||
font-size: 13px;
|
||||
color: #ffffff;
|
||||
border-radius: 15px;
|
||||
}
|
||||
|
||||
window {
|
||||
/*font-weight: bold;*/
|
||||
}
|
||||
window#waybar {
|
||||
border-style: none;
|
||||
border-width: 1px;
|
||||
border-color: #33ccff;
|
||||
background: rgba(0, 0, 0, 0);
|
||||
}
|
||||
/*-----module groups----*/
|
||||
.modules-right {
|
||||
background-color: rgba(0,43,51,0.85);
|
||||
margin: 2px 10px 2px 0;
|
||||
}
|
||||
.modules-left {
|
||||
margin: 2px 0 2px 5px;
|
||||
background-color: rgba(0,119,179,0.6);
|
||||
}
|
||||
/*-----modules indv----*/
|
||||
#workspaces button {
|
||||
padding: 1px 5px;
|
||||
background-color: transparent;
|
||||
}
|
||||
#workspaces button:hover {
|
||||
box-shadow: inherit;
|
||||
background-color: rgba(0,153,153,1);
|
||||
}
|
||||
#workspaces button.empty {
|
||||
color: rgba(0 ,40, 40, 40);
|
||||
}
|
||||
#workspaces button.active {
|
||||
background-color: rgba(0,43,51,0.85);
|
||||
}
|
||||
#window {
|
||||
border-style: solid;
|
||||
background-color: rgba(0,43,51,0.5);
|
||||
margin: 2px 5px;
|
||||
padding: 2px 5px;
|
||||
border-width: 1px;
|
||||
border-color: #33ccff;
|
||||
}
|
||||
#window.empty {
|
||||
border-style: none;
|
||||
background-color: transparent;
|
||||
}
|
||||
#custom-launcher {
|
||||
background-color: rgba(0,119,179,0.6);
|
||||
border-radius: 100px;
|
||||
margin: 5px 5px;
|
||||
}
|
||||
|
||||
#clock,
|
||||
#battery,
|
||||
#cpu,
|
||||
#memory,
|
||||
#temperature,
|
||||
#network,
|
||||
#pulseaudio,
|
||||
#custom-media,
|
||||
#tray,
|
||||
#mode,
|
||||
#custom-power,
|
||||
#custom-menu,
|
||||
#idle_inhibitor {
|
||||
padding: 0 10px;
|
||||
}
|
||||
#mode {
|
||||
color: #cc3436;
|
||||
font-weight: bold;
|
||||
}
|
||||
#custom-power {
|
||||
background-color: rgba(0,119,179,0.6);
|
||||
border-radius: 100px;
|
||||
margin: 5px 5px;
|
||||
padding: 1px 1px 1px 6px;
|
||||
}
|
||||
/*-----Indicators----*/
|
||||
#idle_inhibitor.activated {
|
||||
color: #2dcc36;
|
||||
}
|
||||
#pulseaudio.muted {
|
||||
color: #cc3436;
|
||||
}
|
||||
#battery.charging {
|
||||
color: #2dcc36;
|
||||
}
|
||||
#battery.warning:not(.charging) {
|
||||
color: #e6e600;
|
||||
}
|
||||
#battery.critical:not(.charging) {
|
||||
color: #cc3436;
|
||||
}
|
||||
#temperature.critical {
|
||||
color: #cc3436;
|
||||
}
|
||||
/*-----Colors----*/
|
||||
/*
|
||||
*rgba(0,85,102,1),#005566 --> Indigo(dye)
|
||||
*rgba(0,43,51,1),#002B33 --> Dark Green
|
||||
*RGBA(0,153,153,1),#009999 --> PERSIAN GREEN
|
||||
*
|
||||
*/
|
||||
'';
|
||||
};
|
||||
};
|
||||
}
|
||||
80
old/modules/home/wlogout/default.nix
Normal file
@@ -0,0 +1,80 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
...
|
||||
}: let
|
||||
cfg = config.hive.wlogout;
|
||||
in {
|
||||
options.hive.wlogout = {
|
||||
enable = lib.mkEnableOption "Enable Wlogout";
|
||||
};
|
||||
config = lib.mkIf cfg.enable {
|
||||
programs.wlogout.enable = true;
|
||||
programs.wlogout.layout = [
|
||||
{
|
||||
label = "shutdown";
|
||||
action = "systemctl poweroff";
|
||||
text = "Shutdown";
|
||||
keybind = "s";
|
||||
}
|
||||
{
|
||||
label = "reboot";
|
||||
action = "systemctl reboot";
|
||||
text = "Reboot";
|
||||
keybind = "r";
|
||||
}
|
||||
{
|
||||
label = "logout";
|
||||
action = "loginctl kill-session $XDG_SESSION_ID";
|
||||
text = "Logout";
|
||||
keybind = "e";
|
||||
}
|
||||
{
|
||||
label = "hibernate";
|
||||
action = "hyprlock --immediate & (sleep 1; systemctl hibernate -i)";
|
||||
text = "Hibernate";
|
||||
keybind = "h";
|
||||
}
|
||||
{
|
||||
label = "lock";
|
||||
action = "hyprlock";
|
||||
text = "Lock";
|
||||
keybind = "l";
|
||||
}
|
||||
];
|
||||
programs.wlogout.style = builtins.readFile ./style.css;
|
||||
xdg.enable = true;
|
||||
xdg.configFile = {
|
||||
"wlogout/icons/hibernate.png" = {
|
||||
source = ./icons/hibernate.png;
|
||||
};
|
||||
"wlogout/icons/lock.png" = {
|
||||
source = ./icons/lock.png;
|
||||
};
|
||||
"wlogout/icons/logout.png" = {
|
||||
source = ./icons/logout.png;
|
||||
};
|
||||
"wlogout/icons/power.png" = {
|
||||
source = ./icons/power.png;
|
||||
};
|
||||
"wlogout/icons/restart.png" = {
|
||||
source = ./icons/restart.png;
|
||||
};
|
||||
"wlogout/icons/hibernate-hover.png" = {
|
||||
source = ./icons/hibernate-hover.png;
|
||||
};
|
||||
"wlogout/icons/lock-hover.png" = {
|
||||
source = ./icons/lock-hover.png;
|
||||
};
|
||||
"wlogout/icons/logout-hover.png" = {
|
||||
source = ./icons/logout-hover.png;
|
||||
};
|
||||
"wlogout/icons/power-hover.png" = {
|
||||
source = ./icons/power-hover.png;
|
||||
};
|
||||
"wlogout/icons/restart-hover.png" = {
|
||||
source = ./icons/restart-hover.png;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
BIN
old/modules/home/wlogout/icons/hibernate-hover.png
Normal file
|
After Width: | Height: | Size: 5.9 KiB |
BIN
old/modules/home/wlogout/icons/hibernate.png
Normal file
|
After Width: | Height: | Size: 5.9 KiB |
BIN
old/modules/home/wlogout/icons/lock-hover.png
Normal file
|
After Width: | Height: | Size: 5.4 KiB |
BIN
old/modules/home/wlogout/icons/lock.png
Normal file
|
After Width: | Height: | Size: 5.4 KiB |
BIN
old/modules/home/wlogout/icons/logout-hover.png
Normal file
|
After Width: | Height: | Size: 6.1 KiB |
BIN
old/modules/home/wlogout/icons/logout.png
Normal file
|
After Width: | Height: | Size: 6.1 KiB |
BIN
old/modules/home/wlogout/icons/power-hover.png
Normal file
|
After Width: | Height: | Size: 9.9 KiB |
BIN
old/modules/home/wlogout/icons/power.png
Normal file
|
After Width: | Height: | Size: 9.9 KiB |
BIN
old/modules/home/wlogout/icons/restart-hover.png
Normal file
|
After Width: | Height: | Size: 7.9 KiB |
BIN
old/modules/home/wlogout/icons/restart.png
Normal file
|
After Width: | Height: | Size: 7.9 KiB |
BIN
old/modules/home/wlogout/icons/sleep-hover.png
Normal file
|
After Width: | Height: | Size: 9.8 KiB |
BIN
old/modules/home/wlogout/icons/sleep.png
Normal file
|
After Width: | Height: | Size: 9.8 KiB |
80
old/modules/home/wlogout/style.css
Normal file
@@ -0,0 +1,80 @@
|
||||
/* ----------- 💫 https://github.com/JaKooLit 💫 -------- */
|
||||
/* pywal-wlogout */
|
||||
|
||||
/* Importing pywal colors */
|
||||
|
||||
/*
|
||||
@import '../../.cache/wal/colors-waybar.css';
|
||||
*/
|
||||
|
||||
window {
|
||||
font-family: Fira Code Medium;
|
||||
font-size: 16pt;
|
||||
/* color: @foreground; */
|
||||
color: rgba(255, 255, 255, 0.9);
|
||||
background-color: rgba(24, 27, 32, 0.2);
|
||||
|
||||
}
|
||||
|
||||
button {
|
||||
background-repeat: no-repeat;
|
||||
background-position: center;
|
||||
background-size: 20%;
|
||||
background-color: transparent;
|
||||
animation: gradient_f 20s ease-in infinite;
|
||||
transition: all 0.3s ease-in;
|
||||
box-shadow: 0 0 10px 2px transparent;
|
||||
border-radius: 36px;
|
||||
border-style: none;
|
||||
margin: 10px;
|
||||
}
|
||||
|
||||
button:focus {
|
||||
box-shadow: none;
|
||||
background-size : 20%;
|
||||
}
|
||||
|
||||
button:hover {
|
||||
background-size: 50%;
|
||||
box-shadow: 0 0 10px 3px rgba(0,0,0,.4);
|
||||
/* background-color: @color6;*/
|
||||
background-color: rgba(24, 27, 32, 0);
|
||||
color: transparent;
|
||||
transition: all 0.3s cubic-bezier(.55, 0.0, .28, 1.682), box-shadow 0.5s ease-in;
|
||||
}
|
||||
|
||||
#shutdown {
|
||||
background-image: image(url("./icons/power.png"));
|
||||
}
|
||||
#shutdown:hover {
|
||||
background-image: image(url("./icons/power-hover.png"));
|
||||
}
|
||||
|
||||
#logout {
|
||||
background-image: image(url("./icons/logout.png"));
|
||||
|
||||
}
|
||||
#logout:hover {
|
||||
background-image: image(url("./icons/logout-hover.png"));
|
||||
}
|
||||
|
||||
#reboot {
|
||||
background-image: image(url("./icons/restart.png"));
|
||||
}
|
||||
#reboot:hover {
|
||||
background-image: image(url("./icons/restart-hover.png"));
|
||||
}
|
||||
|
||||
#lock {
|
||||
background-image: image(url("./icons/lock.png"));
|
||||
}
|
||||
#lock:hover {
|
||||
background-image: image(url("./icons/lock-hover.png"));
|
||||
}
|
||||
|
||||
#hibernate {
|
||||
background-image: image(url("./icons/hibernate.png"));
|
||||
}
|
||||
#hibernate:hover {
|
||||
background-image: image(url("./icons/hibernate-hover.png"));
|
||||
}
|
||||
101
old/modules/home/wofi/default.nix
Normal file
@@ -0,0 +1,101 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
...
|
||||
}: let
|
||||
cfg = config.hive.wofi;
|
||||
in {
|
||||
options.hive.wofi = {
|
||||
enable = lib.mkEnableOption "Enable Wofi";
|
||||
};
|
||||
config = lib.mkIf cfg.enable {
|
||||
programs.wofi.enable = true;
|
||||
programs.wofi.settings = {
|
||||
location = "center";
|
||||
allow_images = true;
|
||||
allow_markup = true;
|
||||
key_expand = "Tab";
|
||||
key_up = "Ctrl-k";
|
||||
key_down = "Ctrl-j";
|
||||
key_left = "Ctrl-h";
|
||||
key_right = "Ctrl-l";
|
||||
insensitive = true;
|
||||
};
|
||||
|
||||
programs.wofi.style = ''
|
||||
#window {
|
||||
border-radius: 15px;
|
||||
border-color: #33ccff;
|
||||
border-width: 2px;
|
||||
border-style: solid;
|
||||
background-color: rgba(0, 0, 0, 0.6);
|
||||
}
|
||||
|
||||
#input {
|
||||
margin: 5px;
|
||||
border-radius: 15px;
|
||||
border-color: #33ccff;
|
||||
border-width: 2px;
|
||||
border-style: solid;
|
||||
background: transparent;
|
||||
color: white;
|
||||
}
|
||||
|
||||
#input {
|
||||
margin: 5px;
|
||||
border-radius: 15px;
|
||||
border-color: #33ccff;
|
||||
border-width: 2px;
|
||||
border-style: solid;
|
||||
background: transparent;
|
||||
color: white;
|
||||
}
|
||||
|
||||
#img {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
#inner-box {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
#outer-box {
|
||||
margin: 2px;
|
||||
padding: 10px;
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
#scroll {
|
||||
margin: 5px;
|
||||
}
|
||||
|
||||
#text {
|
||||
padding: 4px;
|
||||
color: white;
|
||||
background: transparent;
|
||||
border: none;
|
||||
}
|
||||
|
||||
#entry {
|
||||
background: transparent;
|
||||
border: none;
|
||||
}
|
||||
|
||||
#entry:selected {
|
||||
border-radius: 15px;
|
||||
border-color: #33ccff;
|
||||
border-width: 2px;
|
||||
border-style: solid;
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
#expander {
|
||||
border-radius: 15px;
|
||||
border-color: #33ccff;
|
||||
border-width: 2px;
|
||||
border-style: solid;
|
||||
background: transparent;
|
||||
}
|
||||
'';
|
||||
};
|
||||
}
|
||||
63
old/modules/home/yubikey.nix
Normal file
@@ -0,0 +1,63 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}: let
|
||||
cfg = config.hive.yubikey;
|
||||
in {
|
||||
options.hive.yubikey = with lib; {
|
||||
enable = mkEnableOption "Yubikey support";
|
||||
pinentry = mkOption {
|
||||
type = types.enum ["qt" "gnome3"];
|
||||
default = "qt";
|
||||
description = "The pinentry flavour to use";
|
||||
};
|
||||
withCCID = mkOption {
|
||||
type = types.bool;
|
||||
default = true;
|
||||
description = "Use stand-alone CCID (instead of a running pcscd service)";
|
||||
};
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
programs.gpg = {
|
||||
enable = true;
|
||||
mutableKeys = false;
|
||||
mutableTrust = false;
|
||||
publicKeys = [
|
||||
{
|
||||
source = ../../static/keys/my_pub.asc;
|
||||
trust = "ultimate";
|
||||
}
|
||||
];
|
||||
scdaemonSettings = lib.mkIf (!cfg.withCCID) {
|
||||
disable-ccid = true;
|
||||
};
|
||||
};
|
||||
services.gpg-agent = {
|
||||
enable = true;
|
||||
enableSshSupport = true;
|
||||
enableZshIntegration = true;
|
||||
pinentry =
|
||||
if cfg.pinentry == "gnome3"
|
||||
then {
|
||||
package = pkgs.pinentry-gnome3;
|
||||
program = "pinentry-gnome3";
|
||||
}
|
||||
else if cfg.pinentry == "qt"
|
||||
then {
|
||||
package = pkgs.pinentry-qt;
|
||||
program = "pinentry-qt";
|
||||
}
|
||||
else {};
|
||||
sshKeys = [config.programs.git.signing.key];
|
||||
};
|
||||
home.sessionVariables = {
|
||||
SSH_AUTH_SOCK = "$XDG_RUNTIME_DIR/gnupg/S.gpg-agent.ssh";
|
||||
};
|
||||
systemd.user.settings.Manager.DefaultEnvironment = {
|
||||
SSH_AUTH_SOCK = "/run/user/%U/gnupg/S.gpg-agent.ssh";
|
||||
};
|
||||
};
|
||||
}
|
||||
80
old/modules/home/zsh/default.nix
Normal file
@@ -0,0 +1,80 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}: let
|
||||
cfg = config.hive.zsh;
|
||||
omz_custom = "${config.home.homeDirectory}/.config/omz_custom";
|
||||
in {
|
||||
options.hive.zsh = {
|
||||
enable = lib.mkEnableOption "Enable Zsh";
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
home.file."${omz_custom}" = {
|
||||
source = ./static/omz_custom;
|
||||
recursive = true;
|
||||
};
|
||||
|
||||
# direnv
|
||||
programs.direnv = {
|
||||
enable = true;
|
||||
enableZshIntegration = true;
|
||||
nix-direnv.enable = true;
|
||||
};
|
||||
|
||||
# fancy ls command
|
||||
programs.lsd = {
|
||||
enable = true;
|
||||
};
|
||||
|
||||
# Zsh
|
||||
programs.zsh = {
|
||||
enable = true;
|
||||
enableCompletion = true;
|
||||
syntaxHighlighting.enable = true;
|
||||
|
||||
history.size = 10000;
|
||||
history.path = "${config.xdg.dataHome}/zsh/history";
|
||||
oh-my-zsh = {
|
||||
enable = true;
|
||||
plugins = [
|
||||
"docker"
|
||||
"docker-compose"
|
||||
"fzf"
|
||||
"git"
|
||||
"pass"
|
||||
"poetry"
|
||||
"python"
|
||||
"rust"
|
||||
];
|
||||
theme = "my_bureau";
|
||||
custom = omz_custom;
|
||||
};
|
||||
};
|
||||
|
||||
home.packages = with pkgs; [
|
||||
bat
|
||||
fzf
|
||||
git
|
||||
htop
|
||||
killall
|
||||
mmtui
|
||||
nh
|
||||
nix-output-monitor
|
||||
nix-search-cli
|
||||
nix-tree
|
||||
nixpkgs-fmt
|
||||
pass
|
||||
pay-respects
|
||||
ranger
|
||||
unzip
|
||||
vim
|
||||
w3m
|
||||
wget
|
||||
yt-dlp
|
||||
zip
|
||||
];
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,154 @@
|
||||
# oh-my-zsh Bureau Theme
|
||||
|
||||
### NVM
|
||||
|
||||
ZSH_THEME_NVM_PROMPT_PREFIX="%B⬡%b "
|
||||
ZSH_THEME_NVM_PROMPT_SUFFIX=""
|
||||
|
||||
### Git [±master ▾●]
|
||||
|
||||
ZSH_THEME_GIT_PROMPT_PREFIX="[%{$fg_bold[green]%}±%{$reset_color%}%{$fg_bold[white]%}"
|
||||
ZSH_THEME_GIT_PROMPT_SUFFIX="%{$reset_color%}]"
|
||||
ZSH_THEME_GIT_PROMPT_CLEAN="%{$fg_bold[green]%}✓%{$reset_color%}"
|
||||
ZSH_THEME_GIT_PROMPT_AHEAD="%{$fg[cyan]%}▴%{$reset_color%}"
|
||||
ZSH_THEME_GIT_PROMPT_BEHIND="%{$fg[magenta]%}▾%{$reset_color%}"
|
||||
ZSH_THEME_GIT_PROMPT_STAGED="%{$fg_bold[green]%}●%{$reset_color%}"
|
||||
ZSH_THEME_GIT_PROMPT_UNSTAGED="%{$fg_bold[yellow]%}●%{$reset_color%}"
|
||||
ZSH_THEME_GIT_PROMPT_UNTRACKED="%{$fg_bold[red]%}●%{$reset_color%}"
|
||||
ZSH_THEME_GIT_PROMPT_STASHED="(%{$fg_bold[blue]%}✹%{$reset_color%})"
|
||||
|
||||
bureau_nix_shell () {
|
||||
if [ -n "$IN_NIX_SHELL" ]; then
|
||||
if [ -n "$out" ]; then
|
||||
local name=$(basename $(realpath -mL "$out/../../"))
|
||||
echo -n "[nix-shell@$name]"
|
||||
else
|
||||
echo -n "[nix-shell]"
|
||||
fi
|
||||
else
|
||||
echo -n ""
|
||||
fi
|
||||
}
|
||||
|
||||
bureau_nix_shell_prompt () {
|
||||
if [ -n "$IN_NIX_SHELL" ]; then
|
||||
echo -n "[nix]"
|
||||
else
|
||||
echo -n ""
|
||||
fi
|
||||
}
|
||||
|
||||
bureau_git_info () {
|
||||
local ref
|
||||
ref=$(command git symbolic-ref HEAD 2> /dev/null) || \
|
||||
ref=$(command git rev-parse --short HEAD 2> /dev/null) || return
|
||||
echo "${ref#refs/heads/}"
|
||||
}
|
||||
|
||||
bureau_git_status() {
|
||||
local result gitstatus
|
||||
gitstatus="$(command git status --porcelain -b 2>/dev/null)"
|
||||
|
||||
# check status of files
|
||||
local gitfiles="$(tail -n +2 <<< "$gitstatus")"
|
||||
if [[ -n "$gitfiles" ]]; then
|
||||
if [[ "$gitfiles" =~ $'(^|\n)[AMRD]. ' ]]; then
|
||||
result+="$ZSH_THEME_GIT_PROMPT_STAGED"
|
||||
fi
|
||||
if [[ "$gitfiles" =~ $'(^|\n).[MTD] ' ]]; then
|
||||
result+="$ZSH_THEME_GIT_PROMPT_UNSTAGED"
|
||||
fi
|
||||
if [[ "$gitfiles" =~ $'(^|\n)\\?\\? ' ]]; then
|
||||
result+="$ZSH_THEME_GIT_PROMPT_UNTRACKED"
|
||||
fi
|
||||
if [[ "$gitfiles" =~ $'(^|\n)UU ' ]]; then
|
||||
result+="$ZSH_THEME_GIT_PROMPT_UNMERGED"
|
||||
fi
|
||||
else
|
||||
result+="$ZSH_THEME_GIT_PROMPT_CLEAN"
|
||||
fi
|
||||
|
||||
# check status of local repository
|
||||
local gitbranch="$(head -n 1 <<< "$gitstatus")"
|
||||
if [[ "$gitbranch" =~ '^## .*ahead' ]]; then
|
||||
result+="$ZSH_THEME_GIT_PROMPT_AHEAD"
|
||||
fi
|
||||
if [[ "$gitbranch" =~ '^## .*behind' ]]; then
|
||||
result+="$ZSH_THEME_GIT_PROMPT_BEHIND"
|
||||
fi
|
||||
if [[ "$gitbranch" =~ '^## .*diverged' ]]; then
|
||||
result+="$ZSH_THEME_GIT_PROMPT_DIVERGED"
|
||||
fi
|
||||
|
||||
# check if there are stashed changes
|
||||
if command git rev-parse --verify refs/stash &> /dev/null; then
|
||||
result+="$ZSH_THEME_GIT_PROMPT_STASHED"
|
||||
fi
|
||||
|
||||
echo $result
|
||||
}
|
||||
|
||||
bureau_git_prompt() {
|
||||
# ignore non git folders and hidden repos (adapted from lib/git.zsh)
|
||||
if ! command git rev-parse --git-dir &> /dev/null \
|
||||
|| [[ "$(command git config --get oh-my-zsh.hide-info 2>/dev/null)" == 1 ]]; then
|
||||
return
|
||||
fi
|
||||
|
||||
# check git information
|
||||
local gitinfo=$(bureau_git_info)
|
||||
if [[ -z "$gitinfo" ]]; then
|
||||
return
|
||||
fi
|
||||
|
||||
# quote % in git information
|
||||
local output="${gitinfo:gs/%/%%}"
|
||||
|
||||
# check git status
|
||||
local gitstatus=$(bureau_git_status)
|
||||
if [[ -n "$gitstatus" ]]; then
|
||||
output+=" $gitstatus"
|
||||
fi
|
||||
|
||||
echo "${ZSH_THEME_GIT_PROMPT_PREFIX}${output}${ZSH_THEME_GIT_PROMPT_SUFFIX}"
|
||||
}
|
||||
|
||||
|
||||
_PATH="%{$fg_bold[white]%}%~%{$reset_color%}"
|
||||
|
||||
if [[ $EUID -eq 0 ]]; then
|
||||
_USERNAME="%{$fg_bold[red]%}%n"
|
||||
_LIBERTY="%{$fg[red]%}#"
|
||||
else
|
||||
_USERNAME="%{$fg_bold[white]%}%n"
|
||||
_LIBERTY="%{$fg[green]%}$"
|
||||
fi
|
||||
_USERNAME="$_USERNAME%{$reset_color%}@%m"
|
||||
_LIBERTY="$_LIBERTY%{$reset_color%}"
|
||||
|
||||
|
||||
get_space () {
|
||||
local STR=$1$2
|
||||
local zero='%([BSUbfksu]|([FB]|){*})'
|
||||
local LENGTH=${#${(S%%)STR//$~zero/}}
|
||||
local SPACES=$(( COLUMNS - LENGTH - ${ZLE_RPROMPT_INDENT:-1} ))
|
||||
|
||||
(( SPACES > 0 )) || return
|
||||
printf ' %.0s' {1..$SPACES}
|
||||
}
|
||||
|
||||
_1LEFT="$_USERNAME $_PATH"
|
||||
_1RIGHT="[%*]"
|
||||
|
||||
bureau_precmd () {
|
||||
_1SPACES=`get_space $_1LEFT $_1RIGHT`
|
||||
print
|
||||
print -rP "$_1LEFT$_1SPACES$_1RIGHT"
|
||||
}
|
||||
|
||||
setopt prompt_subst
|
||||
PROMPT='$(bureau_nix_shell_prompt)> $_LIBERTY '
|
||||
RPROMPT='$(nvm_prompt_info) $(bureau_nix_shell) $(bureau_git_prompt)'
|
||||
|
||||
autoload -U add-zsh-hook
|
||||
add-zsh-hook precmd bureau_precmd
|
||||
89
old/modules/programs/creative.nix
Normal file
@@ -0,0 +1,89 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}: let
|
||||
cfg = config.hive.programs.creative;
|
||||
avidemux-wayland-fix = pkgs.avidemux.overrideAttrs (prev: {
|
||||
installPhase =
|
||||
(prev.installPhase or "")
|
||||
+ ''
|
||||
wrapProgram $out/bin/avidemux3_qt5 \
|
||||
--add-flags "--platform" \
|
||||
--add-flags "xcb"
|
||||
'';
|
||||
});
|
||||
in {
|
||||
options.hive.programs.creative = {
|
||||
enable = lib.mkEnableOption "Enable creative programs (video/image editing, etc.)";
|
||||
image-management = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = true;
|
||||
description = ''
|
||||
Enable image management tools.
|
||||
'';
|
||||
};
|
||||
image-editing = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = false;
|
||||
description = ''
|
||||
Enable image editing tools.
|
||||
'';
|
||||
};
|
||||
image-raw-processing = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = false;
|
||||
description = ''
|
||||
Enable raw processing programs.
|
||||
'';
|
||||
};
|
||||
video-editing-light = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = false;
|
||||
description = ''
|
||||
Enable light video editing tools.
|
||||
'';
|
||||
};
|
||||
video-editing-heavy = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = false;
|
||||
description = ''
|
||||
Enable heavy video editing tools.
|
||||
'';
|
||||
};
|
||||
daws = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = false;
|
||||
description = ''
|
||||
Enable DAWs (currently bitwig beta)
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
environment.systemPackages = with pkgs;
|
||||
lib.optionals cfg.image-editing [gimp krita drawio]
|
||||
++ lib.optional cfg.image-management digikam
|
||||
++ lib.optionals cfg.image-raw-processing [
|
||||
enblend-enfuse
|
||||
hdrmerge
|
||||
hugin
|
||||
rawtherapee
|
||||
unstable.darktable
|
||||
unstable.rapidraw
|
||||
]
|
||||
++ lib.optionals cfg.video-editing-light [
|
||||
avidemux-wayland-fix
|
||||
ffmpeg
|
||||
hive.bulk-transcode
|
||||
losslesscut-bin
|
||||
]
|
||||
++ lib.optionals cfg.video-editing-heavy [
|
||||
davinci-resolve
|
||||
kdePackages.kdenlive
|
||||
obs-studio
|
||||
]
|
||||
++ lib.optional cfg.daws bitwig-studio-latest;
|
||||
};
|
||||
}
|
||||
36
old/modules/programs/spotify-shortcuts.nix
Normal file
@@ -0,0 +1,36 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}: let
|
||||
cfg = config.hive.programs.spotify-shortcuts;
|
||||
in {
|
||||
options.hive.programs.spotify-shortcuts = {
|
||||
enable = lib.mkEnableOption "Enable Spotify Shortcuts";
|
||||
clientIdSopsKey = lib.mkOption {
|
||||
type = lib.types.singleLineStr;
|
||||
description = "Spotify API Client ID sops secret name";
|
||||
};
|
||||
clientSecretSopsKey = lib.mkOption {
|
||||
type = lib.types.singleLineStr;
|
||||
description = "Spotify API Client Secret Path sops secret name";
|
||||
};
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
environment.systemPackages = [pkgs.hive.spotify-shortcuts];
|
||||
environment.variables = {
|
||||
SPOTIFY_SHORTCUTS_CONFIG = config.sops.templates."spotify-shortcuts-client.json".path;
|
||||
};
|
||||
sops.templates."spotify-shortcuts-client.json" = {
|
||||
mode = "444";
|
||||
content = ''
|
||||
{
|
||||
"clientId": "${config.sops.placeholder.${cfg.clientIdSopsKey}}",
|
||||
"clientSecret": "${config.sops.placeholder.${cfg.clientSecretSopsKey}}"
|
||||
}
|
||||
'';
|
||||
};
|
||||
};
|
||||
}
|
||||
26
old/modules/programs/utils.nix
Normal file
@@ -0,0 +1,26 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}: let
|
||||
cfg = config.hive.programs.utils;
|
||||
in {
|
||||
options.hive.programs.utils = {
|
||||
enable = lib.mkEnableOption "Enable utilities";
|
||||
camera = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = false;
|
||||
description = ''
|
||||
Camera utilities
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
environment.systemPackages = lib.optionals cfg.camera [
|
||||
pkgs.cheese
|
||||
pkgs.obs-studio
|
||||
];
|
||||
};
|
||||
}
|
||||
61
old/modules/services/borg-server.nix
Normal file
@@ -0,0 +1,61 @@
|
||||
{
|
||||
lib,
|
||||
config,
|
||||
pkgs,
|
||||
...
|
||||
}: let
|
||||
cfg = config.hive.borg-server;
|
||||
in {
|
||||
options.hive.borg-server = {
|
||||
enable = lib.mkEnableOption "Enable the borg server";
|
||||
package = lib.mkOption {
|
||||
type = lib.types.package;
|
||||
default = pkgs.borgbackup;
|
||||
example = "pkgs.borgbackup";
|
||||
description = "The borg package to use";
|
||||
};
|
||||
borg_user = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
example = "borg";
|
||||
default = "borg";
|
||||
description = "The user for the borg repository home.";
|
||||
};
|
||||
repositories_path = lib.mkOption {
|
||||
type = lib.types.path;
|
||||
example = "/var/lib/borg-repositories";
|
||||
default = "/var/lib/borg-repositories";
|
||||
description = "The user for the borg repository home.";
|
||||
};
|
||||
repositories = lib.mkOption {
|
||||
type = lib.types.attrsOf (lib.types.submodule {
|
||||
options = {
|
||||
name = lib.mkOption {
|
||||
type = lib.types.nullOr (lib.types.strMatching "^[a-zA-Z0-9._-]+$");
|
||||
default = null;
|
||||
example = "borg-repo";
|
||||
description = "The name of the borg repository. If null, use key of attrset";
|
||||
};
|
||||
ssh_public_key = lib.mkOption {
|
||||
type = lib.types.singleLineStr;
|
||||
example = "ssh-rsa AAAA...";
|
||||
description = "The path to the public key for the borg repository.";
|
||||
};
|
||||
};
|
||||
});
|
||||
};
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
users.users.${cfg.borg_user} = {
|
||||
isNormalUser = true;
|
||||
description = "Borg user";
|
||||
home = cfg.repositories_path;
|
||||
createHome = true;
|
||||
extraGroups = ["borg"];
|
||||
openssh.authorizedKeys.keys =
|
||||
lib.attrsets.mapAttrsToList
|
||||
(key: repo: "command=\"${cfg.package}/bin/borg serve --restrict-to-path=${cfg.repositories_path}/${lib.defaultTo key repo.name}\",restrict ${repo.ssh_public_key}")
|
||||
cfg.repositories;
|
||||
};
|
||||
};
|
||||
}
|
||||
123
old/modules/services/gitea-instance.nix
Normal file
@@ -0,0 +1,123 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
...
|
||||
}: let
|
||||
cfg = config.hive.gitea-instance;
|
||||
in {
|
||||
options.hive.gitea-instance = {
|
||||
enable = lib.mkEnableOption "Enable the Gitea instance";
|
||||
|
||||
instanceFQDN = lib.mkOption {
|
||||
type = lib.types.singleLineStr;
|
||||
example = "git.example.com";
|
||||
description = "Fully qualified domain name of the Gitea instance";
|
||||
};
|
||||
|
||||
databasePasswordFile = lib.mkOption {
|
||||
type = lib.types.path;
|
||||
example = "/etc/gitea-db-pass.txt";
|
||||
description = "Path to the file containing the Gitea database password";
|
||||
};
|
||||
nativeRunner = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
description = "Install a gitea act_runner using the native nix store";
|
||||
default = false;
|
||||
};
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
# Gitea instance
|
||||
services.gitea = {
|
||||
enable = true;
|
||||
lfs.enable = true;
|
||||
appName = "Git yourself some Tea!";
|
||||
database = {
|
||||
name = "gitea";
|
||||
type = "postgres";
|
||||
passwordFile = cfg.databasePasswordFile;
|
||||
};
|
||||
settings = {
|
||||
server.PROTOCOL = "http+unix";
|
||||
server.ROOT_URL = "https://${cfg.instanceFQDN}/";
|
||||
server.DOMAIN = cfg.instanceFQDN;
|
||||
service.DISABLE_REGISTRATION = true;
|
||||
};
|
||||
};
|
||||
|
||||
# Fallback server with only 403
|
||||
services.nginx.virtualHosts.${config.networking.domain} = lib.mkDefault {
|
||||
default = true;
|
||||
locations."/".return = 403;
|
||||
forceSSL = true;
|
||||
enableACME = true;
|
||||
};
|
||||
|
||||
# Virtual host for gitea
|
||||
services.nginx.virtualHosts."${cfg.instanceFQDN}" = {
|
||||
forceSSL = true;
|
||||
enableACME = true;
|
||||
locations."/" = {
|
||||
proxyPass = "http://unix:/run/gitea/gitea.sock";
|
||||
};
|
||||
};
|
||||
|
||||
# Database setup
|
||||
services.postgresql = {
|
||||
enable = true;
|
||||
ensureDatabases = [config.services.gitea.user];
|
||||
ensureUsers = [
|
||||
{
|
||||
name = config.services.gitea.database.user;
|
||||
ensureDBOwnership = true;
|
||||
}
|
||||
];
|
||||
};
|
||||
|
||||
# act_runner
|
||||
services.gitea-actions-runner = lib.mkIf cfg.nativeRunner {
|
||||
instances.nixos-host = {
|
||||
enable = true;
|
||||
name = "nixos-host-runner";
|
||||
url = "https://${cfg.instanceFQDN}";
|
||||
tokenFile = "/var/lib/gitea-registration/nixos-host";
|
||||
|
||||
labels = ["nixos:host"];
|
||||
|
||||
settings = {
|
||||
runner = {
|
||||
capacity = 1;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
systemd.services.gitea-runner-nixos-host = lib.mkIf cfg.nativeRunner {
|
||||
after = ["gitea-runner-gen-token.service"];
|
||||
requires = ["gitea-runner-gen-token.service"];
|
||||
serviceConfig.Environment = ''
|
||||
PATH=/run/current-system/sw/bin:/usr/bin:/bin
|
||||
'';
|
||||
};
|
||||
systemd.services.gitea-runner-gen-token = lib.mkIf cfg.nativeRunner {
|
||||
wantedBy = ["multi-user.target"];
|
||||
after = ["gitea.service"];
|
||||
environment = {
|
||||
GITEA_CUSTOM = "/var/lib/gitea/custom";
|
||||
GITEA_WORK_DIR = "/var/lib/gitea";
|
||||
};
|
||||
script = ''
|
||||
set -euo pipefail
|
||||
token=$(${config.services.gitea.package}/bin/gitea actions generate-runner-token)
|
||||
echo "TOKEN=$token" > /var/lib/gitea-registration/nixos-host
|
||||
'';
|
||||
unitConfig.ConditionPathExists = ["!/var/lib/gitea-registration/nixos-host"];
|
||||
serviceConfig = {
|
||||
User = "gitea";
|
||||
Group = "gitea";
|
||||
StateDirectory = "gitea-registration";
|
||||
Type = "oneshot";
|
||||
RemainAfterExit = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
131
old/modules/services/gotify-instance.nix
Normal file
@@ -0,0 +1,131 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
...
|
||||
}: let
|
||||
cfg = config.hive.gotify-instance;
|
||||
server-config = {
|
||||
server = {
|
||||
listenaddr = "localhost";
|
||||
port = 54545;
|
||||
ssl.enabled = false;
|
||||
ssl.redirecttohttps = false;
|
||||
cors.alloworigins = ["${cfg.instanceFQDN}"];
|
||||
stream.allowedorigins = ["${cfg.instanceFQDN}"];
|
||||
};
|
||||
database = {
|
||||
dialect = "postgres";
|
||||
connection = "host=/run/postgresql dbname=${cfg.user} user=${cfg.user}";
|
||||
};
|
||||
defaultuser = {
|
||||
name = "admin";
|
||||
pass = config.sops.placeholder.${cfg.adminPasswordSopsKey};
|
||||
};
|
||||
registration = false;
|
||||
};
|
||||
server-config-yaml = lib.generators.toYAML {} server-config;
|
||||
in {
|
||||
options.hive.gotify-instance = {
|
||||
enable = lib.mkEnableOption "Enable the Gotify instance";
|
||||
instanceFQDN = lib.mkOption {
|
||||
type = lib.types.singleLineStr;
|
||||
example = "gotify.example.com";
|
||||
description = "Fully qualified domain name of the Gotify instance";
|
||||
};
|
||||
user = lib.mkOption {
|
||||
type = lib.types.singleLineStr;
|
||||
default = "gotify";
|
||||
description = "The user to run the service as";
|
||||
};
|
||||
group = lib.mkOption {
|
||||
type = lib.types.singleLineStr;
|
||||
default = "gotify";
|
||||
description = "The group to run the service as";
|
||||
};
|
||||
adminPasswordSopsKey = lib.mkOption {
|
||||
type = lib.types.singleLineStr;
|
||||
description = "The SOPS key for the default admin user";
|
||||
};
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
services.gotify.enable = true;
|
||||
|
||||
# Config setup
|
||||
sops.templates."gotify-server-config.yml" = {
|
||||
owner = cfg.user;
|
||||
content = server-config-yaml;
|
||||
};
|
||||
environment.etc."gotify/config.yml".source = config.sops.templates."gotify-server-config.yml".path;
|
||||
|
||||
# User setup
|
||||
users.users = lib.mkIf (cfg.user == "gotify") {
|
||||
gotify = {
|
||||
description = "Gotify service";
|
||||
useDefaultShell = true;
|
||||
group = cfg.group;
|
||||
isSystemUser = true;
|
||||
};
|
||||
};
|
||||
|
||||
users.groups = lib.mkIf (cfg.group == "gotify") {
|
||||
gotify = {};
|
||||
};
|
||||
|
||||
# Configure gotify to run as the specified user (for postgres authentication)
|
||||
systemd.services.gotify-server = {
|
||||
serviceConfig = {
|
||||
DynamicUser = lib.mkForce false;
|
||||
User = cfg.user;
|
||||
RuntimeDirectory = "gotify";
|
||||
};
|
||||
};
|
||||
|
||||
# Fallback server with only 403
|
||||
services.nginx.virtualHosts.${config.networking.domain} = lib.mkDefault {
|
||||
default = true;
|
||||
locations."/".return = 403;
|
||||
forceSSL = true;
|
||||
enableACME = true;
|
||||
};
|
||||
|
||||
# Virtual host for gotify
|
||||
services.nginx.virtualHosts."${cfg.instanceFQDN}" = {
|
||||
forceSSL = true;
|
||||
enableACME = true;
|
||||
locations."/" = {
|
||||
proxyPass = "http://${server-config.server.listenaddr}:${toString server-config.server.port}";
|
||||
extraConfig = ''
|
||||
# Ensuring it can use websockets
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "upgrade";
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto http;
|
||||
proxy_redirect http:// $scheme://;
|
||||
|
||||
# The proxy must preserve the host because gotify verifies the host with the origin
|
||||
# for WebSocket connections
|
||||
proxy_set_header Host $host;
|
||||
|
||||
# These sets the timeout so that the websocket can stay alive
|
||||
proxy_connect_timeout 1m;
|
||||
proxy_send_timeout 1m;
|
||||
proxy_read_timeout 1m;
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
# Database setup
|
||||
services.postgresql = {
|
||||
enable = true;
|
||||
ensureDatabases = [cfg.user];
|
||||
ensureUsers = [
|
||||
{
|
||||
name = cfg.user;
|
||||
ensureDBOwnership = true;
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||
17
old/modules/services/kdeconnect.nix
Normal file
@@ -0,0 +1,17 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}: let
|
||||
cfg = config.hive.services.kdeconnect;
|
||||
in {
|
||||
options.hive.services.kdeconnect = {
|
||||
enable = lib.mkEnableOption "KDE Connect system service (plasma6)";
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
programs.kdeconnect.enable = true;
|
||||
programs.kdeconnect.package = lib.mkForce pkgs.kdePackages.kdeconnect-kde;
|
||||
};
|
||||
}
|
||||
44
old/modules/services/minecraft-server/default.nix
Normal file
@@ -0,0 +1,44 @@
|
||||
{
|
||||
config,
|
||||
pkgs,
|
||||
lib,
|
||||
...
|
||||
}: let
|
||||
cfg = config.hive.minecraft-server;
|
||||
|
||||
modpack = pkgs.callPackage ./loadCurseForge.nix {
|
||||
url = "https://mediafilez.forgecdn.net/files/7765/203/BMC3_Server_Pack_v44.zip";
|
||||
hash = "sha256-doqPzo9fhYM9ng/3RO6OPqhKA2ibfoaKx3Es7M0lpuU=";
|
||||
};
|
||||
|
||||
mcVersion = modpack.variables.MINECRAFT_VERSION;
|
||||
loader = lib.toLower modpack.variables.MODLOADER;
|
||||
loaderVersion = modpack.variables.MODLOADER_VERSION;
|
||||
serverVersion = lib.replaceStrings ["."] ["_"] "${loader}-${mcVersion}";
|
||||
in {
|
||||
options.hive.minecraft-server = {
|
||||
enable = lib.mkEnableOption "Enable BMC3 server";
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
services.minecraft-servers = {
|
||||
enable = true;
|
||||
eula = true;
|
||||
openFirewall = true;
|
||||
|
||||
servers.bmc3 = lib.optionalAttrs cfg.enable {
|
||||
enable = true;
|
||||
autoStart = false;
|
||||
package = pkgs."${loader}Servers".${serverVersion}.override {inherit loaderVersion;};
|
||||
jvmOpts = modpack.variables.JAVA_ARGS;
|
||||
symlinks = {
|
||||
"mods" = "${modpack.root}/mods";
|
||||
};
|
||||
serverProperties = {
|
||||
motd = "Woher kommt der Stein?";
|
||||
white-list = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
36
old/modules/services/minecraft-server/loadCurseForge.nix
Normal file
@@ -0,0 +1,36 @@
|
||||
{
|
||||
url ? null,
|
||||
hash ? null,
|
||||
pkgs,
|
||||
lib,
|
||||
...
|
||||
}: let
|
||||
modpack = pkgs.fetchzip {
|
||||
inherit url hash;
|
||||
stripRoot = false;
|
||||
};
|
||||
|
||||
variablesStr = builtins.readFile "${modpack}/variables.txt";
|
||||
variableLines =
|
||||
builtins.filter (l: l != "" && (lib.strings.elemAt (lib.stringToCharacters l) 0) != "#")
|
||||
(lib.strings.splitString "\n" variablesStr);
|
||||
|
||||
stripQuotes = s:
|
||||
if builtins.match "^\".*\"$" s != null
|
||||
then builtins.substring 1 (builtins.stringLength s - 2) s
|
||||
else s;
|
||||
|
||||
parseLine = line: let
|
||||
parts = lib.strings.splitString "=" line;
|
||||
in {
|
||||
name = builtins.elemAt parts 0;
|
||||
value = stripQuotes (builtins.concatStringsSep "=" (builtins.tail parts));
|
||||
};
|
||||
|
||||
variables = builtins.listToAttrs (map parseLine variableLines);
|
||||
in {
|
||||
inherit variables;
|
||||
root = modpack;
|
||||
mods = "${modpack}/mods";
|
||||
config = "${modpack}/config";
|
||||
}
|
||||
134
old/modules/services/nextcloud-instance.nix
Normal file
@@ -0,0 +1,134 @@
|
||||
{
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
...
|
||||
}: let
|
||||
cfg = config.hive.nextcloud-instance;
|
||||
in {
|
||||
options.hive.nextcloud-instance = {
|
||||
enable = lib.mkEnableOption "Enable the Nextcloud instance";
|
||||
|
||||
instanceFQDN = lib.mkOption {
|
||||
type = lib.types.str;
|
||||
example = "nextcloud.example.com";
|
||||
description = "Fully qualified domain name of the Nextcloud instance";
|
||||
};
|
||||
|
||||
ssl = lib.mkOption {
|
||||
type = lib.types.bool;
|
||||
default = true;
|
||||
description = "Use SSL and auto-update certificates";
|
||||
};
|
||||
|
||||
adminPasswordFile = lib.mkOption {
|
||||
type = lib.types.path;
|
||||
example = "/etc/nc-admin-pass.txt";
|
||||
description = "Path to the file containing the Nextcloud admin password";
|
||||
};
|
||||
};
|
||||
|
||||
config = lib.mkIf cfg.enable {
|
||||
services.nextcloud = {
|
||||
# Instance
|
||||
enable = true;
|
||||
package = pkgs.nextcloud33;
|
||||
hostName = cfg.instanceFQDN;
|
||||
https = cfg.ssl;
|
||||
configureRedis = true;
|
||||
|
||||
# DB
|
||||
config.dbtype = "pgsql";
|
||||
config.dbhost = "/run/postgresql";
|
||||
config.adminpassFile = cfg.adminPasswordFile;
|
||||
|
||||
#Mail
|
||||
settings = {
|
||||
mail_smtpmode = "sendmail";
|
||||
mail_sendmailmode = "pipe";
|
||||
};
|
||||
|
||||
# Apps
|
||||
extraAppsEnable = true;
|
||||
extraApps = {
|
||||
inherit
|
||||
(config.services.nextcloud.package.packages.apps)
|
||||
calendar
|
||||
contacts
|
||||
tasks
|
||||
;
|
||||
drop_account = pkgs.fetchNextcloudApp {
|
||||
sha256 = "sha256-J+bZVNIb/MokuTYQu8RBKdnZFakh180pa1pW5KHlC80=";
|
||||
url = "https://packages.framasoft.org/projects/nextcloud-apps/drop-account/drop_account-3.0.0.tar.gz";
|
||||
license = "agpl3Only";
|
||||
};
|
||||
};
|
||||
|
||||
# Raise Upload limit
|
||||
maxUploadSize = "20G";
|
||||
|
||||
# Preview settings (video may be a security risk)
|
||||
settings = {
|
||||
enable_previews = true;
|
||||
enabledPreviewProviders = [
|
||||
"OC\\Preview\\BMP"
|
||||
"OC\\Preview\\GIF"
|
||||
"OC\\Preview\\JPEG"
|
||||
"OC\\Preview\\Krita"
|
||||
"OC\\Preview\\MarkDown"
|
||||
"OC\\Preview\\MP3"
|
||||
"OC\\Preview\\OpenDocument"
|
||||
"OC\\Preview\\PNG"
|
||||
"OC\\Preview\\TXT"
|
||||
"OC\\Preview\\XBitmap"
|
||||
"OC\\Preview\\Movie"
|
||||
"OC\\Preview\\MP4"
|
||||
"OC\\Preview\\AVI"
|
||||
"OC\\Preview\\MKV"
|
||||
];
|
||||
preview_ffmpeg_path = "${pkgs.ffmpeg}/bin/ffmpeg";
|
||||
};
|
||||
};
|
||||
|
||||
# Fallback server with only 403
|
||||
services.nginx.virtualHosts.${config.networking.domain} = lib.mkDefault {
|
||||
default = true;
|
||||
locations."/".return = 403;
|
||||
forceSSL = cfg.ssl;
|
||||
enableACME = cfg.ssl;
|
||||
};
|
||||
|
||||
# Webserver setup with optional SSL
|
||||
services.nginx.virtualHosts.${cfg.instanceFQDN} =
|
||||
if cfg.ssl
|
||||
then {
|
||||
forceSSL = true;
|
||||
enableACME = true;
|
||||
}
|
||||
else {
|
||||
listen = [
|
||||
{
|
||||
addr = "0.0.0.0";
|
||||
port = 80;
|
||||
}
|
||||
];
|
||||
};
|
||||
security.acme = lib.mkIf cfg.ssl {
|
||||
acceptTerms = true;
|
||||
defaults.email = "jonas.roeger+acme@gmail.com";
|
||||
};
|
||||
networking.firewall.allowedTCPPorts = [80] ++ lib.optional cfg.ssl 443;
|
||||
|
||||
# DB setup
|
||||
services.postgresql = {
|
||||
enable = true;
|
||||
ensureDatabases = ["nextcloud"];
|
||||
ensureUsers = [
|
||||
{
|
||||
name = "nextcloud";
|
||||
ensureDBOwnership = true;
|
||||
}
|
||||
];
|
||||
};
|
||||
};
|
||||
}
|
||||