1
0
mirror of https://github.com/ellmau/nixos.git synced 2025-12-19 09:29:36 +01:00

first nicely running config

This commit is contained in:
Stefan Ellmauthaler 2021-09-27 22:03:15 +02:00
parent b45aad9bea
commit 9ba2b79441
20 changed files with 1912 additions and 19 deletions

48
.gitignore vendored Normal file
View File

@ -0,0 +1,48 @@
# -*- mode: gitignore; -*-
*~
\#*\#
/.emacs.desktop
/.emacs.desktop.lock
*.elc
auto-save-list
tramp
.\#*
# Org-mode
.org-id-locations
*_archive
# flymake-mode
*_flymake.*
# eshell files
/eshell/history
/eshell/lastdir
# elpa packages
/elpa/
# reftex files
*.rel
# AUCTeX auto folder
/auto/
# cask packages
.cask/
dist/
# Flycheck
flycheck_*.el
# server auth directory
/server/
# projectiles files
.projectile
# directory configuration
.dir-locals.el
# network security
/network-security.data

View File

@ -9,6 +9,7 @@
[ # Include the results of the hardware scan. [ # Include the results of the hardware scan.
./hardware-configuration.nix ./hardware-configuration.nix
./programs/emacs ./programs/emacs
./programs/aspell.nix
]; ];
# Use the systemd-boot EFI boot loader. # Use the systemd-boot EFI boot loader.
@ -53,10 +54,16 @@
enable = true; enable = true;
extraPackages = with pkgs; [ extraPackages = with pkgs; [
rofi # launcher rofi # launcher
polybar # bar polybarFull # bar
i3lock # lock screen i3lock # lock screen
xss-lock
]; ];
}; };
services.gnome.gnome-keyring.enable = true;
hardware.bluetooth.enable = true;
services.blueman.enable = true;
# Configure keymap in X11 # Configure keymap in X11
@ -89,7 +96,7 @@
environment.systemPackages = with pkgs; [ environment.systemPackages = with pkgs; [
# Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default. # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default.
#emacs #emacs
aspell #aspell
emacs-all-the-icons-fonts emacs-all-the-icons-fonts
wget wget
firefox firefox
@ -101,18 +108,13 @@
rustup rustup
rust-analyzer rust-analyzer
usbutils usbutils
starship gcc
clang
]; ];
#services.emacs.enable = true; #services.emacs.enable = true;
#services.emacs.defaultEditor = true; #services.emacs.defaultEditor = true;
#nixpkgs.overlays = [
# (import (builtins.fetchTarball {
# url = https://github.com/nix-community/emacs-overlay/archive/master.tar.gz;
# }))
#];
environment.shells = [ pkgs.zsh ]; environment.shells = [ pkgs.zsh ];
environment.pathsToLink = [ "/share/zsh" ]; environment.pathsToLink = [ "/share/zsh" ];

245
home/config/i3/config Normal file
View File

@ -0,0 +1,245 @@
# This file has been auto-generated by i3-config-wizard(1).
# It will not be overwritten, so edit it as you like.
#
# Should you change your keyboard layout some time, delete
# this file and re-run i3-config-wizard(1).
#
# initialise kwallet via pam
#exec --no-startup-id /usr/lib/pam_kwallet_init
# i3 config file (v4)
#
# Please see https://i3wm.org/docs/userguide.html for a complete reference!
set $mod Mod4
# Font for window titles. Will also be used by the bar unless a different font
# is used in the bar {} block below.
#font pango:monospace 11
# This font is widely installed, provides lots of unicode glyphs, right-to-left
# text rendering and scalability on retina/hidpi displays (thanks to pango).
#font pango:DejaVu Sans Mono 8
# The combination of xss-lock, nm-applet and pactl is a popular choice, so
# they are included here as an example. Modify as you see fit.
# xss-lock grabs a logind suspend inhibit lock and will use i3lock to lock the
# screen before suspend. Use loginctl lock-session to lock your screen.
exec --no-startup-id xss-lock --transfer-sleep-lock -- i3lock --nofork
# NetworkManager is the most popular way to manage wireless networks on Linux,
# and nm-applet is a desktop environment-independent system tray GUI for it.
exec --no-startup-id nm-applet
# ssh agent
#exec .config/plasma-workspace/env/ssh-agent-startup.sh
# keepass
#exec .config/old-autostart-scripts/keepassxc.sh
# Use pactl to adjust volume in PulseAudio.
set $refresh_i3status killall -SIGUSR1 i3status
bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +10% && $refresh_i3status
bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -10% && $refresh_i3status
bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle && $refresh_i3status
bindsym XF86AudioMicMute exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ toggle && $refresh_i3status
# Use Mouse+$mod to drag floating windows to their wanted position
floating_modifier $mod
# Mod Ctrl d for display resetting
#bindsym $mod+Ctrl+d exec --no-startup-id $HOME/.config/i3/set_xrandr.zsh
# start a terminal
#export TERMINAL=/usr/bin/alacritty
#bindsym $mod+Return exec i3-sensible-terminal
bindsym $mod+Return exec /run/current-system/sw/bin/alacritty
# kill focused window
bindsym $mod+Shift+q kill
# start dmenu (a program launcher)
#bindsym $mod+d exec --no-startup-id dmenu_run
# A more modern dmenu replacement is rofi:
bindcode $mod+40 exec "rofi -modi drun,run -show drun"
# There also is i3-dmenu-desktop which only displays applications shipping a
# .desktop file. It is a wrapper around dmenu, so you need that installed.
# bindcode $mod+40 exec --no-startup-id i3-dmenu-desktop
bindsym Mod1+Tab exec "rofi -show window"
# change focus
bindsym $mod+j focus left
bindsym $mod+k focus down
bindsym $mod+l focus up
bindsym $mod+semicolon focus right
# alternatively, you can use the cursor keys:
bindsym $mod+Left focus left
bindsym $mod+Down focus down
bindsym $mod+Up focus up
bindsym $mod+Right focus right
# move focused window
bindsym $mod+Shift+j move left
bindsym $mod+Shift+k move down
bindsym $mod+Shift+l move up
bindsym $mod+Shift+semicolon move right
# alternatively, you can use the cursor keys:
bindsym $mod+Shift+Left move left
bindsym $mod+Shift+Down move down
bindsym $mod+Shift+Up move up
bindsym $mod+Shift+Right move right
# split in horizontal orientation
bindsym $mod+h split h
# split in vertical orientation
bindsym $mod+v split v
# enter fullscreen mode for the focused container
bindsym $mod+f fullscreen toggle
# change container layout (stacked, tabbed, toggle split)
bindsym $mod+s layout stacking
bindsym $mod+w layout tabbed
bindsym $mod+e layout toggle split
# toggle tiling / floating
bindsym $mod+Shift+space floating toggle
# change focus between tiling / floating windows
bindsym $mod+space focus mode_toggle
# focus the parent container
bindsym $mod+a focus parent
# focus the child container
#bindsym $mod+d focus child
# Define names for default workspaces for which we configure key bindings later on.
# We use variables to avoid repeating the names in multiple places.
set $ws1 "1 :gen"
set $ws2 "2: web"
set $ws3 "3: misc"
set $ws4 "4: comms"
set $ws5 "5"
set $ws6 "6"
set $ws7 "7"
set $ws8 "8"
set $ws9 "9: secondary"
set $ws10 "10: secondary"
workspace 1 output primary
workspace 2 output primary
workspace 3 output primary
workspace 4 output primary
#workspace 9 output eDP-1
#workspace 10 output eDP-1
# switch to workspace
bindsym $mod+1 workspace number $ws1
bindsym $mod+2 workspace number $ws2
bindsym $mod+3 workspace number $ws3
bindsym $mod+4 workspace number $ws4
bindsym $mod+5 workspace number $ws5
bindsym $mod+6 workspace number $ws6
bindsym $mod+7 workspace number $ws7
bindsym $mod+8 workspace number $ws8
bindsym $mod+9 workspace number $ws9
bindsym $mod+0 workspace number $ws10
# move focused container to workspace
bindsym $mod+Shift+1 move container to workspace number $ws1
bindsym $mod+Shift+2 move container to workspace number $ws2
bindsym $mod+Shift+3 move container to workspace number $ws3
bindsym $mod+Shift+4 move container to workspace number $ws4
bindsym $mod+Shift+5 move container to workspace number $ws5
bindsym $mod+Shift+6 move container to workspace number $ws6
bindsym $mod+Shift+7 move container to workspace number $ws7
bindsym $mod+Shift+8 move container to workspace number $ws8
bindsym $mod+Shift+9 move container to workspace number $ws9
bindsym $mod+Shift+0 move container to workspace number $ws10
# reload the configuration file
bindsym $mod+Shift+c reload
# restart i3 inplace (preserves your layout/session, can be used to upgrade i3)
bindsym $mod+Shift+r restart
# exit i3 (logs you out of your X session)
bindsym $mod+Shift+e exec "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -B 'Yes, exit i3' 'i3-msg exit'"
# resize window (you can also use the mouse for that)
mode "resize" {
# These bindings trigger as soon as you enter the resize mode
# Pressing left will shrink the windows width.
# Pressing right will grow the windows width.
# Pressing up will shrink the windows height.
# Pressing down will grow the windows height.
bindsym j resize shrink width 10 px or 10 ppt
bindsym k resize grow height 10 px or 10 ppt
bindsym l resize shrink height 10 px or 10 ppt
bindsym semicolon resize grow width 10 px or 10 ppt
# same bindings, but for the arrow keys
bindsym Left resize shrink width 10 px or 10 ppt
bindsym Down resize grow height 10 px or 10 ppt
bindsym Up resize shrink height 10 px or 10 ppt
bindsym Right resize grow width 10 px or 10 ppt
# back to normal: Enter or Escape or $mod+r
bindsym Return mode "default"
bindsym Escape mode "default"
bindsym $mod+r mode "default"
}
bindsym $mod+r mode "resize"
# Start i3bar to display a workspace bar (plus the system information i3status
# finds out, if available)
#bar {
# status_command i3status-rs ~/.config/i3status-rust/config.toml
# position top
#}
#exec_always --no-startup-id polybar
exec_always --no-startup-id systemctl --user start polybar.service
# lockscreen
set $i3lockwall i3lock -f -t --nofork #-i ~/Pictures/matrix-manjaro.png --nofork
# shutdown / restart / suspend...
set $mode_system System (l) lock, (CTRL+e) logout, (CTRL+r) reboot, (CTRL+s) shutdown
mode "$mode_system" {
bindsym l exec --no-startup-id $i3lockwall, mode "default"
bindsym Ctrl+e exec --no-startup-id i3-msg exit, mode "default"
#bindsym s exec --no-startup-id $i3lockwall && systemctl suspend, mode "default"
#bindsym h exec --no-startup-id $i3lockwall && systemctl hibernate, mode "default"
bindsym Ctrl+r exec --no-startup-id systemctl reboot, mode "default"
bindsym Ctrl+s exec --no-startup-id systemctl poweroff -i, mode "default"
# back to normal: Enter or Escape
bindsym Return mode "default"
bindsym Escape mode "default"
}
bindsym $mod+BackSpace mode "$mode_system"
# keyboard layout toggle
bindsym Mod1+space exec --no-startup-id .config/i3/keyboard_layout_toggle.sh
# application specific stuff
for_window[class="KeePassXC"] floating enable
#assign [class="KeePassXC"] $ws5
#for_window[class="Thunderbird"] move workspace $ws4
#for_window[class="Element"] move workspace $ws4
# autostart normal programs
#exec --not-startup-id i3-msg 'workspace 4:comms; exec element-desktop'
#exec --not-startup-id i3-msg 'workspace 4:comms; exec thunderbird'
#exec --no-startup-id element-desktop
#exec --no-startup-id thunderbird

245
home/config/i3/config~ Normal file
View File

@ -0,0 +1,245 @@
# This file has been auto-generated by i3-config-wizard(1).
# It will not be overwritten, so edit it as you like.
#
# Should you change your keyboard layout some time, delete
# this file and re-run i3-config-wizard(1).
#
# initialise kwallet via pam
#exec --no-startup-id /usr/lib/pam_kwallet_init
# i3 config file (v4)
#
# Please see https://i3wm.org/docs/userguide.html for a complete reference!
set $mod Mod4
# Font for window titles. Will also be used by the bar unless a different font
# is used in the bar {} block below.
#font pango:monospace 11
# This font is widely installed, provides lots of unicode glyphs, right-to-left
# text rendering and scalability on retina/hidpi displays (thanks to pango).
#font pango:DejaVu Sans Mono 8
# The combination of xss-lock, nm-applet and pactl is a popular choice, so
# they are included here as an example. Modify as you see fit.
# xss-lock grabs a logind suspend inhibit lock and will use i3lock to lock the
# screen before suspend. Use loginctl lock-session to lock your screen.
exec --no-startup-id xss-lock --transfer-sleep-lock -- i3lock --nofork
# NetworkManager is the most popular way to manage wireless networks on Linux,
# and nm-applet is a desktop environment-independent system tray GUI for it.
#exec --no-startup-id nm-applet
# ssh agent
#exec .config/plasma-workspace/env/ssh-agent-startup.sh
# keepass
#exec .config/old-autostart-scripts/keepassxc.sh
# Use pactl to adjust volume in PulseAudio.
set $refresh_i3status killall -SIGUSR1 i3status
bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +10% && $refresh_i3status
bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -10% && $refresh_i3status
bindsym XF86AudioMute exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle && $refresh_i3status
bindsym XF86AudioMicMute exec --no-startup-id pactl set-source-mute @DEFAULT_SOURCE@ toggle && $refresh_i3status
# Use Mouse+$mod to drag floating windows to their wanted position
floating_modifier $mod
# Mod Ctrl d for display resetting
#bindsym $mod+Ctrl+d exec --no-startup-id $HOME/.config/i3/set_xrandr.zsh
# start a terminal
#export TERMINAL=/usr/bin/alacritty
#bindsym $mod+Return exec i3-sensible-terminal
bindsym $mod+Return exec /run/current-system/sw/bin/alacritty
# kill focused window
bindsym $mod+Shift+q kill
# start dmenu (a program launcher)
#bindsym $mod+d exec --no-startup-id dmenu_run
# A more modern dmenu replacement is rofi:
bindcode $mod+40 exec "rofi -modi drun,run -show drun"
# There also is i3-dmenu-desktop which only displays applications shipping a
# .desktop file. It is a wrapper around dmenu, so you need that installed.
# bindcode $mod+40 exec --no-startup-id i3-dmenu-desktop
bindsym Mod1+Tab exec "rofi -show window"
# change focus
bindsym $mod+j focus left
bindsym $mod+k focus down
bindsym $mod+l focus up
bindsym $mod+semicolon focus right
# alternatively, you can use the cursor keys:
bindsym $mod+Left focus left
bindsym $mod+Down focus down
bindsym $mod+Up focus up
bindsym $mod+Right focus right
# move focused window
bindsym $mod+Shift+j move left
bindsym $mod+Shift+k move down
bindsym $mod+Shift+l move up
bindsym $mod+Shift+semicolon move right
# alternatively, you can use the cursor keys:
bindsym $mod+Shift+Left move left
bindsym $mod+Shift+Down move down
bindsym $mod+Shift+Up move up
bindsym $mod+Shift+Right move right
# split in horizontal orientation
bindsym $mod+h split h
# split in vertical orientation
bindsym $mod+v split v
# enter fullscreen mode for the focused container
bindsym $mod+f fullscreen toggle
# change container layout (stacked, tabbed, toggle split)
bindsym $mod+s layout stacking
bindsym $mod+w layout tabbed
bindsym $mod+e layout toggle split
# toggle tiling / floating
bindsym $mod+Shift+space floating toggle
# change focus between tiling / floating windows
bindsym $mod+space focus mode_toggle
# focus the parent container
bindsym $mod+a focus parent
# focus the child container
#bindsym $mod+d focus child
# Define names for default workspaces for which we configure key bindings later on.
# We use variables to avoid repeating the names in multiple places.
set $ws1 "1 :gen"
set $ws2 "2: web"
set $ws3 "3: misc"
set $ws4 "4: comms"
set $ws5 "5"
set $ws6 "6"
set $ws7 "7"
set $ws8 "8"
set $ws9 "9: secondary"
set $ws10 "10: secondary"
workspace 1 output primary
workspace 2 output primary
workspace 3 output primary
workspace 4 output primary
#workspace 9 output eDP-1
#workspace 10 output eDP-1
# switch to workspace
bindsym $mod+1 workspace number $ws1
bindsym $mod+2 workspace number $ws2
bindsym $mod+3 workspace number $ws3
bindsym $mod+4 workspace number $ws4
bindsym $mod+5 workspace number $ws5
bindsym $mod+6 workspace number $ws6
bindsym $mod+7 workspace number $ws7
bindsym $mod+8 workspace number $ws8
bindsym $mod+9 workspace number $ws9
bindsym $mod+0 workspace number $ws10
# move focused container to workspace
bindsym $mod+Shift+1 move container to workspace number $ws1
bindsym $mod+Shift+2 move container to workspace number $ws2
bindsym $mod+Shift+3 move container to workspace number $ws3
bindsym $mod+Shift+4 move container to workspace number $ws4
bindsym $mod+Shift+5 move container to workspace number $ws5
bindsym $mod+Shift+6 move container to workspace number $ws6
bindsym $mod+Shift+7 move container to workspace number $ws7
bindsym $mod+Shift+8 move container to workspace number $ws8
bindsym $mod+Shift+9 move container to workspace number $ws9
bindsym $mod+Shift+0 move container to workspace number $ws10
# reload the configuration file
bindsym $mod+Shift+c reload
# restart i3 inplace (preserves your layout/session, can be used to upgrade i3)
bindsym $mod+Shift+r restart
# exit i3 (logs you out of your X session)
bindsym $mod+Shift+e exec "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -B 'Yes, exit i3' 'i3-msg exit'"
# resize window (you can also use the mouse for that)
mode "resize" {
# These bindings trigger as soon as you enter the resize mode
# Pressing left will shrink the windows width.
# Pressing right will grow the windows width.
# Pressing up will shrink the windows height.
# Pressing down will grow the windows height.
bindsym j resize shrink width 10 px or 10 ppt
bindsym k resize grow height 10 px or 10 ppt
bindsym l resize shrink height 10 px or 10 ppt
bindsym semicolon resize grow width 10 px or 10 ppt
# same bindings, but for the arrow keys
bindsym Left resize shrink width 10 px or 10 ppt
bindsym Down resize grow height 10 px or 10 ppt
bindsym Up resize shrink height 10 px or 10 ppt
bindsym Right resize grow width 10 px or 10 ppt
# back to normal: Enter or Escape or $mod+r
bindsym Return mode "default"
bindsym Escape mode "default"
bindsym $mod+r mode "default"
}
bindsym $mod+r mode "resize"
# Start i3bar to display a workspace bar (plus the system information i3status
# finds out, if available)
#bar {
# status_command i3status-rs ~/.config/i3status-rust/config.toml
# position top
#}
#exec_always --no-startup-id polybar
exec_always --no-startup-id systemctl --user start polybar.service
# lockscreen
set $i3lockwall i3lock -f -t --nofork #-i ~/Pictures/matrix-manjaro.png --nofork
# shutdown / restart / suspend...
set $mode_system System (l) lock, (CTRL+e) logout, (CTRL+r) reboot, (CTRL+s) shutdown
mode "$mode_system" {
bindsym l exec --no-startup-id $i3lockwall, mode "default"
bindsym Ctrl+e exec --no-startup-id i3-msg exit, mode "default"
#bindsym s exec --no-startup-id $i3lockwall && systemctl suspend, mode "default"
#bindsym h exec --no-startup-id $i3lockwall && systemctl hibernate, mode "default"
bindsym Ctrl+r exec --no-startup-id systemctl reboot, mode "default"
bindsym Ctrl+s exec --no-startup-id systemctl poweroff -i, mode "default"
# back to normal: Enter or Escape
bindsym Return mode "default"
bindsym Escape mode "default"
}
bindsym $mod+BackSpace mode "$mode_system"
# keyboard layout toggle
bindsym Mod1+space exec --no-startup-id .config/i3/keyboard_layout_toggle.sh
# application specific stuff
for_window[class="KeePassXC"] floating enable
#assign [class="KeePassXC"] $ws5
#for_window[class="Thunderbird"] move workspace $ws4
#for_window[class="Element"] move workspace $ws4
# autostart normal programs
#exec --not-startup-id i3-msg 'workspace 4:comms; exec element-desktop'
#exec --not-startup-id i3-msg 'workspace 4:comms; exec thunderbird'
#exec --no-startup-id element-desktop
#exec --no-startup-id thunderbird

View File

@ -0,0 +1,7 @@
#!/bin/sh
if [[ `setxkbmap -query | awk '$1 == "layout:"{print($2)}'` = "us" ]]; then
setxkbmap -layout de
else
setxkbmap -layout us
fi

View File

@ -0,0 +1,38 @@
{ pkgs, ...}:
{
services.dunst = {
enable = true;
iconTheme = {
package = pkgs.numix-icon-theme;
name = "Numix";
size = "26";
};
settings = {
global = {
geometry = "300x5-30+50";
transparency = 10;
frame_color = "#839496";
font = "Hasklug Nerd Font 10";
timeout = 5;
follow = "mouse";
markup = "full";
icon_position = "left";
history_length = 32;
dmenu = "${pkgs.rofi}/bin/rofi -dmenu";
word_wrap = true;
};
urgency_critical = {
foreground = "#fdf6e3";
background = "#dc322f";
};
urgency_normal = {
foreground = "#fdf6e3";
background = "#859900";
};
urgency_low = {
foreground = "#fdf6e3";
background = "#2aa198";
};
};
};
}

View File

@ -0,0 +1,38 @@
{ pkgs, ...}:
{
services.dunst = {
enable = true;
iconTheme = {
package = pkgs.numix-icon-theme;
name = "Numix";
size = "24";
};
settings = {
global = {
geometry = "300x5-30+50";
transparency = 10;
frame_color = "#839496";
font = "Hasklug Nerd Font 10";
timeout = 5;
follow = "mouse";
markup = "full";
icon_position = "left";
history_length = 32;
dmenu = "${pkgs.rofi}/bin/rofi -dmenu";
word_wrap = true;
};
urgency_critical = {
foreground = "#fdf6e3";
background = "#dc322f";
};
urgency_normal = {
foreground = "#fdf6e3";
background = "#859900";
};
urgency_low = {
foreground = "#fdf6e3";
background = "#2aa198";
};
};
};
}

View File

@ -0,0 +1,24 @@
{ pkgs, ... }:
{
imports =
[
./polybar.nix
./dunst.nix
./zsh.nix
];
home.packages = [
pkgs.htop
pkgs.pavucontrol
];
services.blueman-applet.enable = true;
services.network-manager-applet.enable = true ;
services.gnome-keyring = {
enable = true;
components = [ "pkcs11" "secrets" ];
};
programs.home-manager = {
enable = true;
};
}

View File

@ -0,0 +1,57 @@
{ pkgs, ... }:
{
imports =
[
./polybar.nix
];
home.packages = [
pkgs.htop
pkgs.pavucontrol
];
programs.starship = {
enable = true;
enableZshIntegration = true;
settings = {
add_newline = false;
format = "$all";
username.show_always = false;
git_commit.tag_disabled = false;
hostname.ssh_only = false;
directory.truncate_to_repo = true;
};
};
services.network-manager-applet.enable = true ;
services.gnome-keyring = {
enable = true;
components = [ "pkcs11" "secrets" ];
};
programs.zsh = {
enable = true;
defaultKeymap = "emacs";
oh-my-zsh.enable = false;
# remove extra stuff on the right side of the prompt
initExtra = ''
unset RPS1
# Color man pages
export LESS_TERMCAP_mb=$'\E[01;32m'
export LESS_TERMCAP_md=$'\E[01;32m'
export LESS_TERMCAP_me=$'\E[0m'
export LESS_TERMCAP_se=$'\E[0m'
export LESS_TERMCAP_so=$'\E[01;47;34m'
export LESS_TERMCAP_ue=$'\E[0m'
export LESS_TERMCAP_us=$'\E[01;36m'
export LESS=-R
'';
};
programs.exa.enable = true;
programs.exa.enableAliases = false;
programs.home-manager = {
enable = true;
};
}

View File

@ -0,0 +1,265 @@
{ pkgs, ...}:
{
services.polybar = {
enable = true;
package = pkgs.polybarFull;
settings =
let
background_col = "#120030";
foreground_col = "#9e66ff";
foreground_altcol = "#66deff";
primary_col = "#ffb52a";
secondary_col = "#e60053";
alert_col = "#bd2c40";
in
{
"bar/main" = {
font = [
"Hasklig:style=Regular"
"all-the-icons:style=Regular"
"Webdings:style=Regular"
"Noto Emoji:scale=10"
"Unifont:style=Regular"
"Material Icons:size=12;0"
"Weather Icons:size=12;0"
"Hasklug Nerd Font,Hasklig Medium:style=Medium,Regular"
];
modules = {
left = "i3";
center = "";
right = " xbacklight xkeyboard eth wlan battery date powermenu volume ";
};
background = background_col;
foreground = foreground_col;
monitor = ''
''${env:MONITOR:}
'';
width = "100%";
module-margin = 1;
tray = {
position = "right";
padding = 2;
background = foreground_col;
};
};
"module/volume" = {
type = "internal/pulseaudio";
format.volume = "<ramp-volume> <label-volume>";
label.muted.text = "🔇";
label.muted.foreground = "#666";
ramp.volume = ["🔈" "🔉" "🔊"];
click.right = "${pkgs.pavucontrol}/bin/pavucontrol &";
};
"module/i3" = {
type = "internal/i3";
format = "<label-state> <label-mode>";
index-sort = "true";
wrapping-scroll = "false";
#; Only show workspaces on the same output as the bar
pin-workspaces = "true";
label-mode-padding = "2";
label-mode-foreground = "#000";
label-mode-background = primary_col;
#; focused = Active workspace on focused monitor
label-focused = "%name%";
#;label-focused-background = ${colors.background-alt}
#;label-focused-background = #9f78e1
label-focused-background = foreground_col;
label-focused-underline= primary_col;
label-focused-foreground = "#cccccc";
label-focused-padding = "2";
#; unfocused = Inactive workspace on any monitor
label-unfocused = "%name%";
label-unfocused-padding = "2";
#; visible = Active workspace on unfocused monitor
label-visible = "%index%";
label-visible-background = "#6c419a";
label-visible-underline = primary_col;
label-visible-padding = 2;
#; urgent = Workspace with urgency hint set
label-urgent = "%name%";
label-urgent-background = alert_col;
label-urgent-padding = "2";
#; Separator in between workspaces
#; label-separator = |
};
"module/xkeyboard" = {
type = "internal/xkeyboard";
blacklist-0 = "num lock";
interval = "5";
format-prefix = ''""'';
format-prefix-foreground = foreground_altcol;
format-prefix-underline = secondary_col;
label-layout = "%layout%";
label-layout-underline = secondary_col;
label-indicator-padding = "2";
label-indicator-margin = "1";
label-indicator-background = secondary_col;
label-indicator-underline = secondary_col;
};
"module/wlan" = {
type = "internal/network";
interface = "wlp0s20f3";
interval = "3.0";
format-connected = " <ramp-signal> <label-connected>";
format-connected-underline = "#9f78e1";
label-connected = "%essid%";
ramp-signal-0 = ''"0.0"'';
ramp-signal-1 = ''"0.5"'';
ramp-signal-2 = ''"1.0"'';
ramp-signal-3 = ''"1.0"'';
ramp-signal-4 = ''"1.0"'';
format-disconnected = "";
# ;format-disconnected = <label-disconnected>
#;format-disconnected-underline = ${self.format-connected-underline}
#;label-disconnected = %ifname% disconnected
#;label-disconnected-foreground = ${colors.foreground-alt}
ramp-signal-foreground = foreground_altcol;
};
"module/eth" = {
type = "internal/network";
interface = "eno1";
interval = "3.0";
format-connected-underline = "#55aa55";
format-connected = " <label-connected>";
format-connected-prefix-foreground = foreground_altcol;
label-connected = "%local_ip%";
format-disconnected = "";
format-disconnected-background = "#5479b7";
#;format-disconnected = <label-disconnected>
#;format-disconnected-underline = ${self.format-connected-underline}
#;label-disconnected = %ifname% disconnected
#;label-disconnected-foreground = ${colors.foreground-alt}
};
"module/date" = {
type = "internal/date";
interval = "5";
date = ''" %Y-%m-%d"'';
date-alt = ''" %Y-%m-%d"'';
time = "%H:%M";
time-alt = "%H:%M:%S";
#format-prefix = "";
#format-prefix-foreground = foreground_altcol;
format-underline = "#0a6cf5";
label = "%date% %time%";
};
"module/battery" = {
type = "internal/battery";
battery = "BAT0";
adapter = "ADP1";
full-at = "98";
format-charging-background= "#689d6a";
format-charging-prefix = ''" "'';
format-charging = "<label-charging>";
format-discharging-prefix = ''" "'';
format-discharging = "<label-discharging>";
format-discharging-background= "#689d6a";
format-full-prefix = ''" "'';
format-charging-underline = "#ffaa55";
format-full-prefix-foreground = foreground_altcol;
format-full-underline = "#ffaa55";
ormat-full-padding = "1";
format-charging-padding = "1";
format-discharging-padding = "1";
};
"module/temperature" = {
type = "internal/temperature";
thermal-zone = "0";
warn-temperature = "60";
format = "<ramp> <label>";
format-underline = "#f50a4d";
format-warn = "<ramp> <label-warn>";
format-warn-underline = "#f50a4d";
label = " %temperature-c%";
label-warn = "%temperature-c%";
label-warn-foreground = secondary_col;
ramp-0 = "l";
ramp-1 = "m";
ramp-2 = "h";
ramp-foreground = foreground_altcol;
};
"module/powermenu" = {
type = "custom/menu";
expand-right = "true";
format-spacing = "1";
label-open = ''""'';
label-open-foreground = secondary_col;
label-close = " cancel";
label-close-foreground = secondary_col;
label-separator = "|";
label-separator-foreground = foreground_altcol;
menu-0-0 = "reboot";
menu-0-0-exec = "menu-open-1";
menu-0-1 = "power off";
menu-0-1-exec = "menu-open-2";
menu-1-0 = "cancel";
menu-1-0-exec = "menu-open-0";
menu-1-1 = "reboot";
menu-1-1-exec = "sudo reboot";
menu-2-0 = "power off";
menu-2-0-exec = "sudo poweroff";
menu-2-1 = "cancel";
menu-2-1-exec = "menu-open-0";
};
"module/xbacklight" = {
type = "internal/xbacklight";
format = "<label> <bar>";
label = "BL";
bar-width = "10";
bar-indicator = "|";
bar-indicator-foreground = "#fff";
bar-indicator-font = "2";
bar-fill = "";
bar-fill-font = "2";
bar-fill-foreground = "#9f78e1";
bar-empty = "";
bar-empty-font = "2";
bar-empty-foreground = foreground_altcol;
};
};
script = ''
for m in $(polybar --list-monitors | ${pkgs.coreutils}/bin/cut -d":" -f1); do
MONITOR=$m polybar --reload main &
done;
'';
};
}

View File

@ -0,0 +1,265 @@
{ pkgs, ...}:
{
services.polybar = {
enable = true;
package = pkgs.polybarFull;
settings =
let
background_col = "#120030";
foreground_col = "#9e66ff";
foreground_altcol = "#66deff";
primary_col = "#ffb52a";
secondary_col = "#e60053";
alert_col = "#bd2c40";
in
{
"bar/main" = {
font = [
"Hasklig:style=Regular"
"all-the-icons:style=Regular"
"Webdings:style=Regular"
"Noto Emoji:scale=10"
"Unifont:style=Regular"
"Material Icons:size=12;0"
"Weather Icons:size=12;0"
"Hasklug Nerd Font,Hasklig Medium:style=Medium,Regular"
];
modules = {
left = "i3";
center = "";
right = " xbacklight xkeyboard eth wlan battery date powermenu volume ";
};
background = background_col;
foreground = foreground_col;
monitor = ''
''${env:MONITOR:}
'';
width = "100%";
module-margin = 1;
tray = {
position = "right";
padding = 2;
background = foreground_col;
};
};
"module/volume" = {
type = "internal/pulseaudio";
format.volume = "<ramp-volume> <label-volume>";
label.muted.text = "🔇";
label.muted.foreground = "#666";
ramp.volume = ["🔈" "🔉" "🔊"];
click.right = "pavucontrol &";
};
"module/i3" = {
type = "internal/i3";
format = "<label-state> <label-mode>";
index-sort = "true";
wrapping-scroll = "false";
#; Only show workspaces on the same output as the bar
pin-workspaces = "true";
label-mode-padding = "2";
label-mode-foreground = "#000";
label-mode-background = primary_col;
#; focused = Active workspace on focused monitor
label-focused = "%name%";
#;label-focused-background = ${colors.background-alt}
#;label-focused-background = #9f78e1
label-focused-background = foreground_col;
label-focused-underline= primary_col;
label-focused-foreground = "#cccccc";
label-focused-padding = "2";
#; unfocused = Inactive workspace on any monitor
label-unfocused = "%name%";
label-unfocused-padding = "2";
#; visible = Active workspace on unfocused monitor
label-visible = "%index%";
label-visible-background = "#6c419a";
label-visible-underline = primary_col;
label-visible-padding = 2;
#; urgent = Workspace with urgency hint set
label-urgent = "%name%";
label-urgent-background = alert_col;
label-urgent-padding = "2";
#; Separator in between workspaces
#; label-separator = |
};
"module/xkeyboard" = {
type = "internal/xkeyboard";
blacklist-0 = "num lock";
interval = "5";
format-prefix = ''""'';
format-prefix-foreground = foreground_altcol;
format-prefix-underline = secondary_col;
label-layout = "%layout%";
label-layout-underline = secondary_col;
label-indicator-padding = "2";
label-indicator-margin = "1";
label-indicator-background = secondary_col;
label-indicator-underline = secondary_col;
};
"module/wlan" = {
type = "internal/network";
interface = "wlp0s20f3";
interval = "3.0";
format-connected = " <ramp-signal> <label-connected>";
format-connected-underline = "#9f78e1";
label-connected = "%essid%";
ramp-signal-0 = ''"0.0"'';
ramp-signal-1 = ''"0.5"'';
ramp-signal-2 = ''"1.0"'';
ramp-signal-3 = ''"1.0"'';
ramp-signal-4 = ''"1.0"'';
format-disconnected = "";
# ;format-disconnected = <label-disconnected>
#;format-disconnected-underline = ${self.format-connected-underline}
#;label-disconnected = %ifname% disconnected
#;label-disconnected-foreground = ${colors.foreground-alt}
ramp-signal-foreground = foreground_altcol;
};
"module/eth" = {
type = "internal/network";
interface = "eno1";
interval = "3.0";
format-connected-underline = "#55aa55";
format-connected = " <label-connected>";
format-connected-prefix-foreground = foreground_altcol;
label-connected = "%local_ip%";
format-disconnected = "";
format-disconnected-background = "#5479b7";
#;format-disconnected = <label-disconnected>
#;format-disconnected-underline = ${self.format-connected-underline}
#;label-disconnected = %ifname% disconnected
#;label-disconnected-foreground = ${colors.foreground-alt}
};
"module/date" = {
type = "internal/date";
interval = "5";
date = ''" %Y-%m-%d"'';
date-alt = ''" %Y-%m-%d"'';
time = "%H:%M";
time-alt = "%H:%M:%S";
#format-prefix = "";
#format-prefix-foreground = foreground_altcol;
format-underline = "#0a6cf5";
label = "%date% %time%";
};
"module/battery" = {
type = "internal/battery";
battery = "BAT0";
adapter = "ADP1";
full-at = "98";
format-charging-background= "#689d6a";
format-charging-prefix = ''" "'';
format-charging = "<label-charging>";
format-discharging-prefix = ''" "'';
format-discharging = "<label-discharging>";
format-discharging-background= "#689d6a";
format-full-prefix = ''" "'';
format-charging-underline = "#ffaa55";
format-full-prefix-foreground = foreground_altcol;
format-full-underline = "#ffaa55";
ormat-full-padding = "1";
format-charging-padding = "1";
format-discharging-padding = "1";
};
"module/temperature" = {
type = "internal/temperature";
thermal-zone = "0";
warn-temperature = "60";
format = "<ramp> <label>";
format-underline = "#f50a4d";
format-warn = "<ramp> <label-warn>";
format-warn-underline = "#f50a4d";
label = " %temperature-c%";
label-warn = "%temperature-c%";
label-warn-foreground = secondary_col;
ramp-0 = "l";
ramp-1 = "m";
ramp-2 = "h";
ramp-foreground = foreground_altcol;
};
"module/powermenu" = {
type = "custom/menu";
expand-right = "true";
format-spacing = "1";
label-open = ''""'';
label-open-foreground = secondary_col;
label-close = " cancel";
label-close-foreground = secondary_col;
label-separator = "|";
label-separator-foreground = foreground_altcol;
menu-0-0 = "reboot";
menu-0-0-exec = "menu-open-1";
menu-0-1 = "power off";
menu-0-1-exec = "menu-open-2";
menu-1-0 = "cancel";
menu-1-0-exec = "menu-open-0";
menu-1-1 = "reboot";
menu-1-1-exec = "sudo reboot";
menu-2-0 = "power off";
menu-2-0-exec = "sudo poweroff";
menu-2-1 = "cancel";
menu-2-1-exec = "menu-open-0";
};
"module/xbacklight" = {
type = "internal/xbacklight";
format = "<label> <bar>";
label = "BL";
bar-width = "10";
bar-indicator = "|";
bar-indicator-foreground = "#fff";
bar-indicator-font = "2";
bar-fill = "";
bar-fill-font = "2";
bar-fill-foreground = "#9f78e1";
bar-empty = "";
bar-empty-font = "2";
bar-empty-foreground = foreground_altcol;
};
};
script = ''
for m in $(polybar --list-monitors | ${pkgs.coreutils}/bin/cut -d":" -f1); do
MONITOR=$m polybar --reload main &
done;
'';
};
}

View File

@ -0,0 +1,59 @@
{ pkgs, ... }:
{
programs = {
zsh = {
enable = true;
defaultKeymap = "emacs";
oh-my-zsh.enable = false;
# remove extra stuff on the right side of the prompt
initExtra = ''
unset RPS1
# Color man pages
export LESS_TERMCAP_mb=$'\E[01;32m'
export LESS_TERMCAP_md=$'\E[01;32m'
export LESS_TERMCAP_me=$'\E[0m'
export LESS_TERMCAP_se=$'\E[0m'
export LESS_TERMCAP_so=$'\E[01;47;34m'
export LESS_TERMCAP_ue=$'\E[0m'
export LESS_TERMCAP_us=$'\E[01;36m'
export LESS=-R
'';
shellAliases = {
cp = "cp -i";
ls = "exa --icons";
ll = "exa --long --icons --grid --binary --group";
lal = "ll --all";
lla = "ll --all";
};
};
starship = {
enable = true;
enableZshIntegration = true;
settings = {
add_newline = false;
format = "$all";
username.show_always = false;
git_commit.tag_disabled = false;
hostname.ssh_only = false;
directory.truncate_to_repo = true;
};
};
zoxide = {
enable = true;
enableZshIntegration = true;
};
bat = {
enable = true;
config = { theme = "ansi"; };
};
exa = {
enable = true;
enableAliases = false;
};
};
}

View File

@ -0,0 +1,59 @@
{ pkgs, ... };
{
programs = {
zsh = {
enable = true;
defaultKeymap = "emacs";
oh-my-zsh.enable = false;
# remove extra stuff on the right side of the prompt
initExtra = ''
unset RPS1
# Color man pages
export LESS_TERMCAP_mb=$'\E[01;32m'
export LESS_TERMCAP_md=$'\E[01;32m'
export LESS_TERMCAP_me=$'\E[0m'
export LESS_TERMCAP_se=$'\E[0m'
export LESS_TERMCAP_so=$'\E[01;47;34m'
export LESS_TERMCAP_ue=$'\E[0m'
export LESS_TERMCAP_us=$'\E[01;36m'
export LESS=-R
'';
shellAliases = {
cp = "cp -i";
ls = "exa --icons";
ll = "exa --long --icons --grid --binary --group";
lal = "ll --all";
lla = "ll --all";
};
};
starship = {
enable = true;
enableZshIntegration = true;
settings = {
add_newline = false;
format = "$all";
username.show_always = false;
git_commit.tag_disabled = false;
hostname.ssh_only = false;
directory.truncate_to_repo = true;
};
};
zoxide = {
enable = true;
enableZshIntegration = true;
};
bat = {
enable = true;
config = { theme = "ansi"; };
};
exa = {
enable = true;
enableAliases = false;
};
};
}

15
programs/aspell.nix Normal file
View File

@ -0,0 +1,15 @@
{ config, pkgs, ... }:
let
aspellConf = ''
data-dir /run/current-system/sw/lib/aspell
dict-dir /run/current-system/sw/lib/aspell
master en_GB-ise
extra-dicts en-computers.rws
add-extra-dicts en_GB-science.rws
'';
in
{
environment.systemPackages = [ pkgs.aspell ]
++ (with pkgs.aspellDicts; [ de en sv en-computers en-science ]);
}

View File

@ -2,11 +2,7 @@
(setq package-enable-at-startup nil) (setq package-enable-at-startup nil)
(package-initialize) (package-initialize)
(use-package spacemacs-theme (load-theme 'spacemacs-dark t)
:ensure t
:config (load-theme 'spacemacs-dark t))
;(load-theme 'spacemacs-dark t)
;; Tab-width ;; Tab-width
(setq tab-width 2) (setq tab-width 2)

336
programs/emacs/default.el~ Normal file
View File

@ -0,0 +1,336 @@
(require 'package)
(setq package-enable-at-startup nil)
(package-initialize)
(use-package spacemacs-theme
:ensure t
:config (load-theme 'spacemacs-dark t))
;(load-theme 'spacemacs-dark t)
;; Tab-width
(setq tab-width 2)
;; prolog
(setq auto-mode-alist (append '(("\\.pl$" . prolog-mode)) auto-mode-alist))
(setq auto-mode-alist (append '(("\\.lp$" . prolog-mode)) auto-mode-alist))
(setq auto-mode-alist (append '(("\\.rls$" . prolog-mode)) auto-mode-alist))
;; spellchecking
(setq ispell-dictionary "british")
(add-hook 'LaTeX-mode-hook '(lambda () (flyspell-mode 1)))
;; ido
(ido-mode 1)
(setq ido-enable-flex-matching t); flexible matching
(define-key (cdr ido-minor-mode-map-entry) [remap write-file] nil) ;do not suggest name when save as
;; make ido show suggestions one per line and not in one line
;; (make-local-variable 'ido-decorations)
;; (setf (nth 2 ido-decorations) "\n")
;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;;;;;;;;;;;;;;; org-mode ;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(bind-key "C-c l" 'org-toggle-link-display) ;shows org links in plain text
(require 'org-roam)
(require 'org-roam-protocol)
(require 'ox-md)
(setq org-roam-directory "~/org-notes")
(setq org-roam-dailies-directory "~/org-notes/daily")
(add-hook 'after-init-hook 'org-roam-mode) ;init org-roam at startup
(bind-key [f8] 'org-roam-jump-to-index) ;jump to org roam index
(bind-key "C-c n f" 'org-roam-find-file) ; find a note
(bind-key "C-c n c" 'org-roam-capture) ; create a note
(bind-key "C-c n i" 'org-roam-insert) ;insert a link
(bind-key "C-c n l" 'org-roam-insert) ;insert a link
(bind-key "C-c n b" 'org-roam) ;shows backlink window
(bind-key "C-c n t" 'org-roam-tag-add) ;adds an org roam tag
(bind-key "C-c n d" 'org-roam-dailies-capture-date) ;adds notes to daily event cards
(setq org-roam-completion-system 'ivy)
(setq org-roam-capture-templates
'(("d" "default" plain (function org-roam--capture-get-point)
"%?"
:file-name "%<%Y%m%d%H%M%S>-${slug}"
:head "#+title: ${title}\n#+roam_tags: %^{org-roam-tags}\n"
:unnarrowed t)))
(setq org-roam-server-host "127.0.0.1"
org-roam-server-port 8080
org-roam-server-authenticate nil
org-roam-server-export-inline-images t
org-roam-server-serve-files nil
org-roam-server-served-file-extensions '("pdf" "mp4" "ogv")
org-roam-server-network-poll t
org-roam-server-network-arrows nil
org-roam-server-network-label-truncate t
org-roam-server-network-label-truncate-length 60
org-roam-server-network-label-wrap-length 20)
;; tally-list
(defun coffee-tally-add (n)
(interactive "nN: ")
(org-entry-put
nil "COFFEETALLY"
(format "%s" (+ n (string-to-number
(or (org-entry-get nil "COFFEETALLY") "0"))))))
;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;;;;;;;;;;;;;;;; MAGIT ;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(use-package magit
:defer t
:commands (magit-blame magit-log magit-status)
:bind (("<f5>" . magit-blame)
("<f6>" . magit-log)
("<f7>" . magit-status))
:custom
(magit-commit-signoff t)
(magit-define-global-key-bindings t)
(magit-revert-buffers 'silent t)
(magit-use-overlays nil))
(custom-set-variables
'(inhibit-startup-screen t)
'(org-angeda-files '("~/org-notes/daily/" "~/org-notes/"))
)
;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;;;;;;;;;;;;;;;; LaTeX ;;;;;;;;;;;;;;;;;
;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(add-hook 'LateX-mode-hook 'turn-on-reftex)
;; auctex
(load "auctex.el" nil t t)
(load "preview-latex.el" nil t t)
(setq TeX-toggle-debug-warnings t)
(setq TeX-toggle-debug-bad-boxes t)
(setq TeX-PDF-mode t)
;; reftex
(setq reftex-plug-into-AUCTeX t)
;; ##### Don't forget to configure
;; ##### Okular to use emacs in
;; ##### "Configuration/Configure Okular/Editor"
;; ##### => Editor => Emacsclient. (you should see
;; ##### emacsclient -a emacs --no-wait +%l %f
;; ##### in the field "Command".
;; ##### Always ask for the master file
;; ##### when creating a new TeX file.
;(setq-default TeX-master nil)
;; ##### Enable synctex correlation. From Okular just press
;; ##### Shift + Left click to go to the good line.
(setq TeX-source-correlate-mode t
TeX-source-correlate-start-server t)
;; ### Set Okular as the default PDF viewer.
(eval-after-load "tex"
'(setcar (cdr (assoc 'output-pdf TeX-view-program-selection)) "Okular"))
(use-package company-reftex
:defer t
:init
(with-eval-after-load 'company
(add-to-list 'company-backends '(company-reftex-labels company-reftex-citations))))
(use-package company-auctex
:defer t
:init
(with-eval-after-load 'company
(company-auctex-init)))
(use-package company-bibtex
:defines company-backends
:defer t
:init
(with-eval-after-load 'company
(add-to-list 'company-backends '(company-bibtex))))
;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;;;;;;;;;;;;;;;; projectile ;;;;;;;;;;;;;;;;;
;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(use-package projectile
:init
(projectile-mode t)
:bind-keymap (("C-c p" . projectile-command-map))
:preface
(defun se/projectile-project-root (orig-fn &rest args)
"Disable projectile-modelining on remote hosts because it's unusably slow."
(unless (file-remote-p default-directory)
(apply orig-fn args)))
:config
(advice-add 'projectile-project-root :around #'se/projectile-project-root)
:custom
(projectile-enable-caching t)
(projectile-file-exists-remote-cache-expire (* 10 60))
(projectile-switch-project-action 'projectile-find-file)
(projectile-find-dir-includes-top-level t)
(projectile-completion-system 'default)
(projectile-globally-ignored-file-suffixes
'(".synctex.gz" ".bcf" ".blg" ".run.xml" ".thm" ".toc" ".out" ".idx" ".ilg" ".ind" ".tdo" ".bbl" ".aux" ".log"))
(projectile-mode-line '(:eval (format " [%s]" (projectile-project-name))))
(projectile-project-root-files-bottom-up
'(".projectile" ".hg" "_darcs" ".fslckout" "_FOSSIL_" ".bzr" ".git")))
(use-package projectile-ripgrep
:bind (:map projectile-command-map
("s s" . 'projectile-ripgrep))
:after projectile)
;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;;;;;;;;;;;;;;;; Rust ;;;;;;;;;;;;;;;;;
;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; rustic
;(push 'rustic-clippy flycheck-checkers)
;; company mode
(add-hook 'rustic-mode-hook 'company-mode)
;; lsp mode
(setq lsp-rust-analyzer-server-display-inlay-hints t)
(setq lsp-rust-analyzer-cargo-watch-command "clippy")
(setq lsp-keymap-prefix "C-l")
;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; ;;;;;;;;;;;;;;;; beacon ;;;;;;;;;;;;;;;;;
;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(use-package beacon
:diminish beacon-mode
:defer t
:init
(beacon-mode t)
:custom
(beacon-blink-delay 0.1)
(beacon-blink-duration 0.2)
(beacon-blink-when-focused t)
(beacon-blink-when-point-moves-horizontally 10)
(beacon-blink-when-point-moves-vertically 5)
(beacon-color "#2aa198")
(beacon-size 16))
(custom-set-variables
;; custom-set-variables was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
'(inhibit-startup-screen t)
'(org-agenda-files '("~/org-notes/daily/" "~/org-notes/"))
'(package-selected-packages
'(projectile-ripgrep projectile yaml-mode ox-pandoc use-package treemacs-all-the-icons treemacs-magit ivy org-roam-server org-roam ob-rust magit zenburn-theme treemacs spacemacs-theme rustic monokai-theme moe-theme lsp-ui gruvbox-theme company-lsp bind-key)))
(custom-set-faces
;; custom-set-faces was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
)
(use-package highlight-indentation
:diminish highlight-indentation-mode
:commands highlight-indentation-mode
:defer t
:hook ((text-mode prog-mode) . highlight-indentation-mode))
(use-package multiple-cursors
:bind (("C-S-c C-S-c" . mc/edit-lines)
("C->" . mc/mark-next-like-this)
("C-<" . mc/mark-previous-like-this)
("C-c C-<" . mc/mark/all-like-this)))
;; direnv
(use-package direnv
:config
(direnv-mode t))
;; dap
(use-package dap-mode
:after lsp-mode
:custom
(dap-mode t)
(dap-ui-mode t))
;; flycheck
(use-package flycheck
:demand t
:custom
(flycheck-highlighting-mode 'sexps)
(flycheck-mode-line-prefix ""))
;; flyspell
(use-package flyspell
:defer t
:hook (prog-mode . flyspell-prog-mode)
:custom
(flyspell-mode-line-string nil))
;; lsp
(use-package lsp-mode
:after flycheck
:commands lsp
:preface
:hook (((
; ada-mode
clojure-mode
cmake-mode
c++-mode
css-mode
;; dockerfile-mode
js2-mode
f90-mode
html-mode
haskell-mode
java-mode
json-mode
;; lua-mode
;; markdown-mode
nix-mode
;; ocaml-mode
;; pascal-mode
;; perl-mode
;; php-mode
;; prolog-mode
python-mode
;; ess-mode
;; ruby-mode
rust-mode
;; sql-mode
typescript-mode
vue-mode
;; xml-mode
;; yaml-mode
web-mode
) . lsp)
(lsp-mode . flycheck-mode)
(sh-mode . (lambda ()
(unless (apply #'derived-mode-p '(direnv-envrc-mode))
(lsp-mode t)))))
:diminish eldoc-mode
:custom
(lsp-keymap-prefix "C-c")
(lsp-eldoc-render-all t)
(lsp-file-watch-threshold 5000)
(lsp-ui-doc-border "#586e75")
(lsp-ui-doc-header t)
(lsp-ui-doc-include-signature t))
;:custom-face
;(lsp-ui-sideline-code-action ((t (:foreground "#b58900"))))
;(lsp-ui-sideline-current-symbol ((t (:foreground "#d33682" :box (:line-width -1 :color "#d33682") :weight ultra-bold :height 0.99)))))
;; misc
(use-package academic-phrases
:defer t
:commands
(academic-phrases
academic-phrases-by-section))

View File

@ -3,10 +3,10 @@
let let
defaultEl = ./default.el; defaultEl = ./default.el;
defaultConfig = pkgs.runCommand "default.el" { } '' # defaultConfig = pkgs.runCommand "default.el" { } ''
mkdir -p $out/share/emacs/site-lisp # mkdir -p $out/share/emacs/site-lisp
cp ${defaultEl} $out/share/emacs/site-lisp/default.el # cp ${defaultEl} $out/share/emacs/site-lisp/default.el
''; #'';
emacsPackage = (pkgs.emacsPackagesGen pkgs.emacs).emacsWithPackages emacsPackage = (pkgs.emacsPackagesGen pkgs.emacs).emacsWithPackages
(epkgs: (epkgs:
@ -21,6 +21,7 @@ let
# gnupg # gnupg
# nixpkgs-fmt # nixpkgs-fmt
#]) #])
#[(defaultConfig)] ++
[(with epkgs.elpaPackages; [ [(with epkgs.elpaPackages; [
auctex auctex
org org
@ -41,6 +42,7 @@ let
company-flx company-flx
company-quickhelp company-quickhelp
company-reftex company-reftex
dap-mode
dockerfile-mode dockerfile-mode
docker-compose-mode docker-compose-mode
flycheck flycheck
@ -50,12 +52,14 @@ let
json-mode json-mode
less-css-mode less-css-mode
lsp-mode lsp-mode
lsp-ui
magit magit
moe-theme
multiple-cursors multiple-cursors
nix-mode nix-mode
nixpkgs-fmt nixpkgs-fmt
org-bullets org-bullets
#org-roam org-roam
#org-roam-server #org-roam-server
pasp-mode pasp-mode
pdf-tools pdf-tools
@ -63,9 +67,12 @@ let
projectile-ripgrep projectile-ripgrep
rustic rustic
spacemacs-theme spacemacs-theme
solarized-theme
sparql-mode sparql-mode
sudo-edit
use-package use-package
yaml-mode yaml-mode
yasnippet
])); ]));
in in
{ {

View File

@ -0,0 +1,93 @@
{ config, lib, pkgs, ... }:
let
defaultEl = ./default.el;
# defaultConfig = pkgs.runCommand "default.el" { } ''
# mkdir -p $out/share/emacs/site-lisp
# cp ${defaultEl} $out/share/emacs/site-lisp/default.el
#'';
emacsPackage = (pkgs.emacsPackagesGen pkgs.emacs).emacsWithPackages
(epkgs:
#let
# lpkgs = import ./packages.nix {
# inherit config lib pkgs epkgs;
# };
#in
#[ (defaultConfig lpkgs) ] ++ (with pkgs; [
# aspell
# emacs-all-the-icons-fonts
# gnupg
# nixpkgs-fmt
#])
#[(defaultConfig)] ++
[(with epkgs.elpaPackages; [
auctex
org
flymake
])]
++ (with epkgs.melpaStablePackages; [ ]) ++ (with epkgs.melpaPackages; [
academic-phrases
add-hooks
alert
all-the-icons
all-the-icons-dired
beacon
bln-mode
cargo-mode
company
company-auctex
company-bibtex
company-flx
company-quickhelp
company-reftex
dap-mode
dockerfile-mode
docker-compose-mode
flycheck
free-keys
highlight-indentation
ivy
json-mode
less-css-mode
lsp-mode
lsp-ui
magit
moe-theme
multiple-cursors
nix-mode
nixpkgs-fmt
org-bullets
org-roam
#org-roam-server
pasp-mode
pdf-tools
projectile
projectile-ripgrep
rustic
spacemacs-theme
solarized-theme
sparql-mode
sudo-edit
use-package
yaml-mode
yasnippet
]));
in
{
services.emacs = {
enable = true;
defaultEditor = true;
package = emacsPackage;
};
#nixpkgs.overlays = [ (self: super: { emacsOrig = super.emacs; }) (import (builtins.fetchTarball {
# url = https://github.com/nix-community/emacs-overlay/archive/master.tar.gz;
#})) ];
nixpkgs.overlays = [
(import (builtins.fetchTarball {
url = https://github.com/nix-community/emacs-overlay/archive/master.tar.gz;
}))
];
}

47
programs/emacs/emacs.nix Normal file
View File

@ -0,0 +1,47 @@
{ config, pkgs, ...}:
{
environment.systemPackages = [
(emacsWithPackagesFromUsePackage {
# Your Emacs config file. Org mode babel files are also
# supported.
# NB: Config files cannot contain unicode characters, since
# they're being parsed in nix, which lacks unicode
# support.
# config = ./emacs.org;
config = ./default.el;
# Package is optional, defaults to pkgs.emacs
#package = pkgs.emacs;
# By default emacsWithPackagesFromUsePackage will only pull in
# packages with `:ensure`, `:ensure t` or `:ensure <package name>`.
# Setting `alwaysEnsure` to `true` emulates `use-package-always-ensure`
# and pulls in all use-package references not explicitly disabled via
# `:ensure nil` or `:disabled`.
# Note that this is NOT recommended unless you've actually set
# `use-package-always-ensure` to `t` in your config.
#alwaysEnsure = true;
# For Org mode babel files, by default only code blocks with
# `:tangle yes` are considered. Setting `alwaysTangle` to `true`
# will include all code blocks missing the `:tangle` argument,
# defaulting it to `yes`.
# Note that this is NOT recommended unless you have something like
# `#+PROPERTY: header-args:emacs-lisp :tangle yes` in your config,
# which defaults `:tangle` to `yes`.
alwaysTangle = true;
# Optionally provide extra packages not in the configuration file.
extraEmacsPackages = epkgs: [
epkgs.cask
];
# Optionally override derivations.
override = epkgs: epkgs // {
weechat = epkgs.melpaPackages.weechat.overrideAttrs(old: {
patches = [ ./weechat-el.patch ];
});
};
})
];
}

47
programs/emacs/emacs.nix~ Normal file
View File

@ -0,0 +1,47 @@
{ config, pkgs, ...}:
{
environment.systemPackages = [
(emacsWithPackagesFromUsePackage {
# Your Emacs config file. Org mode babel files are also
# supported.
# NB: Config files cannot contain unicode characters, since
# they're being parsed in nix, which lacks unicode
# support.
# config = ./emacs.org;
config = ./default.el;
# Package is optional, defaults to pkgs.emacs
package = pkgs.emacsGit;
# By default emacsWithPackagesFromUsePackage will only pull in
# packages with `:ensure`, `:ensure t` or `:ensure <package name>`.
# Setting `alwaysEnsure` to `true` emulates `use-package-always-ensure`
# and pulls in all use-package references not explicitly disabled via
# `:ensure nil` or `:disabled`.
# Note that this is NOT recommended unless you've actually set
# `use-package-always-ensure` to `t` in your config.
alwaysEnsure = true;
# For Org mode babel files, by default only code blocks with
# `:tangle yes` are considered. Setting `alwaysTangle` to `true`
# will include all code blocks missing the `:tangle` argument,
# defaulting it to `yes`.
# Note that this is NOT recommended unless you have something like
# `#+PROPERTY: header-args:emacs-lisp :tangle yes` in your config,
# which defaults `:tangle` to `yes`.
alwaysTangle = true;
# Optionally provide extra packages not in the configuration file.
extraEmacsPackages = epkgs: [
epkgs.cask
];
# Optionally override derivations.
override = epkgs: epkgs // {
weechat = epkgs.melpaPackages.weechat.overrideAttrs(old: {
patches = [ ./weechat-el.patch ];
});
};
})
];
}