You are not logged in.
Lock screen on lid close. ( I had tried xss-lock from aur in past, but it appeared cpu intensive, at list on my laptop)
#!/bin/bash
xlock() {
( slock && xset dpms 0 0 300 ) &
xset dpms 0 0 2
xset dpms force off
}
while true;
do
if [[ $(< /proc/acpi/button/lid/LID0/state) = *closed ]]
then
case $(< /sys/class/power_supply/AC/online) in
1) ( [[ ! "$(pidof slock)" ]] && xlock ) ;;
0) systemctl suspend ;;
esac
fi
sleep 2;
done
This script needs to be run at startup.
Function xlock is inspired from user jakobm https://bbs.archlinux.org/viewtopic.php?id=114993
EDIT: change xlock to check pidof slock to avoid unnecessory calling slock every 2sec when lid is closed.
EDIT2: now suspend when lid close and no power_supply
Last edited by Docbroke (2017-03-13 05:33:23)
Arch is home!
https://github.com/Docbroke
Offline
A little script to set up project file structure for a python data-crunching project.
Inspired by the cookiecutter package in Python, but done in Bash, and modified a bit.
It will create some standard directories and files, then display what was created.
Everything is blank - you have to go in and start writing the files - but the aim is to get a project off the ground in an organized manner, and with some kind of plan.
#! /usr/bin/bash
# This script will set up a general folder structure for a python data project,
# and then display the structure for inspection or modification.
# Optional git initialization is available - including first commit and push to
# establish remote repo.
# Usage: cd into folder that you want the project to be in, and run
# $ mkproj <projectname>
mkdir $1 && cd $1 # Name of project
touch LICENSE # Optional - useful for Github.
touch README.md # Github description, info, etc.
touch Makefile # Regenerate only what is needed.
touch devlog # Development log and TODO ...
mkdir data
mkdir data/external # Non-primary data - corroborating, external sources, etc.
mkdir data/interim # Munged, cleaned, but not done
mkdir data/processed # Data in final state
mkdir data/raw # Immutable, original data (may need to be http links if large, etc.)
mkdir notebooks # IpyNB's for literate step-throughs of reasoning and processing
mkdir reports # finished output
mkdir reports/figures # final saved figures, etc.
touch requirements.txt # Python module requirements for pip
mkdir src
touch src/__init__.py
touch src/acquire_data.py
touch src/process_data.py
mkdir src/visualizations
mkdir src/queries # SQL, HiveQL, etc.
echo "Makefile" > .gitignore
echo "devlog" >> .gitignore
echo "bin/" >> .gitignore # virtualenv stuff - don't backup to git
echo "lib/" >> .gitignore # virtualenv stuff
echo "include/" >> .gitignore # virtualenv stuff
echo "data/" >> .gitignore # Don't commit all data to github (?) (may be large, or may be link to S3, etc.)
echo "Establish Git repo?: [y/N]"
read answer
if
[ -z $answer ] || [ $answer == 'n' ] || [ $answer == 'N' ]
then
echo "Skipping git initialization."
else if
[ $answer == 'y' ]
then
echo "Initializing and pushing git repo"
git init
git remote add origin https://<username>@bitbucket.org/<username>/$1.git
git commit -m "initial commit, repo setup"
git push -u origin master
fi
fi
cd ..
echo "The following structure has been set up:"
printf "\n"
tree $1
printf "\n"
ls -lah --color=auto $1
printf "\n"
The output looks like this:
$ mkproj example_project
Establish Git repo?: [y/N]
y
Initializing and pushing git repo
The following structure has been set up:
example_project
|-- LICENSE
|-- Makefile
|-- README.md
|-- data
| |-- external
| |-- interim
| |-- processed
| `-- raw
|-- devlog
|-- notebooks
|-- reports
| `-- figures
|-- requirements.txt
`-- src
|-- __init__.py
|-- acquire_data.py
|-- process_data.py
|-- queries
`-- visualizations
11 directories, 8 files
total 28K
drwxr-xr-x 6 lx lx 4.0K Mar 2 00:46 .
drwx------ 25 lx lx 4.0K Mar 2 00:46 ..
-rw-r--r-- 1 lx lx 41 Mar 2 00:46 .gitignore
-rw-r--r-- 1 lx lx 0 Mar 2 00:46 LICENSE
-rw-r--r-- 1 lx lx 0 Mar 2 00:46 Makefile
-rw-r--r-- 1 lx lx 0 Mar 2 00:46 README.md
drwxr-xr-x 6 lx lx 4.0K Mar 2 00:46 data
-rw-r--r-- 1 lx lx 0 Mar 2 00:46 devlog
drwxr-xr-x 2 lx lx 4.0K Mar 2 00:46 notebooks
drwxr-xr-x 3 lx lx 4.0K Mar 2 00:46 reports
-rw-r--r-- 1 lx lx 0 Mar 2 00:46 requirements.txt
drwxr-xr-x 4 lx lx 4.0K Mar 2 00:46 src
Offline
Nice one, cpdevlist!
Offline
I finally got around to this one, on-board battery indicators for SIXAXIS controllers:
#!/bin/bash
# Show DualShock and SIXAXIS battery level using controller leds
for modid in $(ls /sys/class/leds/ | grep sony1 | sed 's/::.*//g'); do
# USB connected controllers misreport as 100% and don't have "uniq" set to correlate to their module id.
[[ -n $(cat /sys/module/hid_sony/drivers/hid\:sony/${modid}/input/input*/phys | grep usb) ]] && continue
# Correlate between the part of sysfs that uses their bluetooth MAC and the part that uses their module id.
power=$(cat "/sys/class/power_supply/sony_controller_battery_$(cat /sys/module/hid_sony/drivers/hid\:sony/${modid}/input/input*/uniq)/capacity")
# Animated: Blank leds, count up to battery level, blink it twice
case "$power" in
100)
for n in $(ls /sys/class/leds/${modid}::sony*/brightness); do printf 0 > "${n}" & done
sleep 0.1
for i in $(ls /sys/class/leds/${modid}::sony*/brightness); do printf 1 > "${i}"; sleep 0.2; done
for n in $(ls /sys/class/leds/${modid}::sony*/brightness); do printf 0 > "${n}" & done
sleep 0.1
for i in $(ls /sys/class/leds/${modid}::sony*/brightness); do printf 1 > "${i}" & done
sleep 0.2
for n in $(ls /sys/class/leds/${modid}::sony*/brightness); do printf 0 > "${n}" & done
sleep 0.1
for i in $(ls /sys/class/leds/${modid}::sony*/brightness); do printf 1 > "${i}" & done
sleep 0.2
;;
75)
for n in $(ls /sys/class/leds/${modid}::sony*/brightness); do printf 0 > "${n}" & done
sleep 0.1
i=1; while [ "${i}" -lt 4 ]; do printf 1 > "/sys/class/leds/${modid}::sony${i}/brightness"; ((i++)); sleep 0.2; done
for n in $(ls /sys/class/leds/${modid}::sony*/brightness); do printf 0 > "${n}" & done
sleep 0.1
i=1; while [ "${i}" -lt 4 ]; do printf 1 > "/sys/class/leds/${modid}::sony${i}/brightness" & ((i++)); done
sleep 0.2
for n in $(ls /sys/class/leds/${modid}::sony*/brightness); do printf 0 > "${n}" & done
sleep 0.1
i=1; while [ "${i}" -lt 4 ]; do printf 1 > "/sys/class/leds/${modid}::sony${i}/brightness" & ((i++)); done
sleep 0.2
;;
50)
for n in $(ls /sys/class/leds/${modid}::sony*/brightness); do printf 0 > "${n}" & done
sleep 0.1
i=1; while [ "${i}" -lt 3 ]; do printf 1 > "/sys/class/leds/${modid}::sony${i}/brightness"; ((i++)); sleep 0.2; done
for n in $(ls /sys/class/leds/${modid}::sony*/brightness); do printf 0 > "${n}" & done
sleep 0.1
i=1; while [ "${i}" -lt 3 ]; do printf 1 > "/sys/class/leds/${modid}::sony${i}/brightness" & ((i++)); done
sleep 0.2
for n in $(ls /sys/class/leds/${modid}::sony*/brightness); do printf 0 > "${n}" & done
sleep 0.1
i=1; while [ "${i}" -lt 3 ]; do printf 1 > "/sys/class/leds/${modid}::sony${i}/brightness" & ((i++)); done
sleep 0.2
;;
25)
for n in $(ls /sys/class/leds/${modid}::sony*/brightness); do printf 0 > "${n}" & done
sleep 0.1
printf 1 > "/sys/class/leds/${modid}::sony1/brightness"; sleep 0.2
for n in $(ls /sys/class/leds/${modid}::sony*/brightness); do printf 0 > "${n}" & done
sleep 0.1
printf 1 > "/sys/class/leds/${modid}::sony1/brightness" &
sleep 0.5 # A little longer, as a warning.
for n in $(ls /sys/class/leds/${modid}::sony*/brightness); do printf 0 > "${n}" & done
sleep 0.1
printf 1 > "/sys/class/leds/${modid}::sony1/brightness" &
sleep 0.5 # A little longer, as a warning.
;;
esac
# Reset leds to display their controller's index
player=$(("$(cat /sys/module/hid_sony/drivers/hid\:sony/${modid}/input/input*/js*/dev | sed 's/.*://g')"+1))
for led in $(ls /sys/class/leds/${modid}::sony*/brightness); do
if [ "$(printf "${led}" | grep -o sony[1-4] | sed 's/sony//g')" == "${player}" ]; then
printf 1 > "${led}"
else
printf 0 > "${led}"
fi
done
done
Each controller connected by bluetooth will display its battery level with a utilitarianistically cute animation and then go back to its controller number.
Normally /sys/class/leds/${ModID}::sony[1-4]/brightness can only be written by root. This udev rule allows any user to set them:
KERNEL=="*sony[1-4]", SUBSYSTEM=="leds" RUN+="/usr/bin/chmod go+w /sys/class/leds/%k/brightness"
Last edited by quequotion (2017-03-03 07:43:22)
makepkg-optimize · indicator-powersave · pantheon-{3d,lite} · {pantheon,higan}-qq
Offline
Nice one, cpdevlist!
Thanks, parchd - it will probably have to be adjusted for each project, but should serve as a decent starting point.
Offline
Thanks, parchd - it will probably have to be adjusted for each project, but should serve as a decent starting point.
Yeah, it has given me some new ideas about structuring such projects, which is great!
Offline
Day before yesterday, I was totally bored, didn't knew what to do, so I fired up Geany *(wait a second.. Geany is always opened on my machine ) and crafted: znotes.
There are many variants of stcky notes for Linux. Each and every DE has it's own + million of independant. Somehow, xfce4-notes is most suitable to me, but, from time to time, it simply won't listen and by xsession startup, notes automatically appear on screen *(no matter if I told it to just place it self into tray/notification area) .. and that was a trigger for me to make something alike.
This, however doesn't have anything to do with tray/notification area, nor with daemons of any kind, but it is all about one simple and small bash script that interracts with zenity dialog-box framework.
Script has only one argument and it is either new or list.
1) znotes new - will open up small (--forms) dialog where one can provide name for new file (blank spaces will be automatically replaced with underscore.) that shows in the list later on.
2) znotes list - will open up (--list) list of previously created files. Just for the record, `znote files` are ordinary extensionless plain text files.
Once when file is being selected from the list, than clicked on LOAD SELECTED, new text dialog (--text-info) where one can write/edit memo will appear. Both buttons BACK/MEMORIZE on that dialog will throw one back on the list with mere difference where MEMORIZE will save changes, while BACK - won't (logic for a Pulitzer D: ). If one want's to exit script, that's the list dialog window, and EXIT button. However, if nothing is selected from the list, LOAD SELECTED will do the same - exit. And that's not me, but impossibility to make desired button disabled unitl some list item is not being selected. It appears that Zenity don't have that implemented or I didn't payed enough attention regarding that.
Regarding configuration, there are three lines (19, 20, 21) in the script file.
19 - The directory where files are placed. The directory will be created automatically. Default one is ~/.local/share/znotes. If not appropriate - change it.
20 i 21 are for default width and height.
So.. copy all from code tag below into a new file under name znotes into $HOME/bin (or any of your primary `bin` ), than do chmod a+x ~/bin/znotes and that's it.
After that, commands znotes new and znotes list should give some screen result.
Note that notify-send is used on some places inside script, therefore libnotify, alongside main zenity package should be ready/installed as well.
Here's the entire code:
#!/bin/bash
## Memos and notes based on Zenity; aka - `znotes`
#
# Licence: This file is restricted as much as openbox is. Go figure that.
# Author: Srđan Vukić <tux.lector@gmail.com>
# Date: 03.03.2017
#
# Program name
declare -r bsn=$(basename $0)
# Allow only one instance of znotes
bsnrun=$(ps h -C $bsn | grep -v $$ | wc -l);
[[ $bsnrun > 1 ]] && exit;
## Basic config
# Directory where znote files reside
# $bsn is this very script name
declare -r zn_work_loc=$HOME/.local/share/$bsn
declare -r zn_lw=400; # Default width
declare -r zn_lh=600; # Default height
## End of basic config
[[ -d $zn_work_loc ]] || mkdir -p $zn_work_loc
declare -a all_notes="$(ls -i ${zn_work_loc})"
# Display list of memo/notes
function zn_list
{
local note;
if [[ -z $all_notes ]]
then zenity --info \
--text="There are no memo/notes to view/edit.\
\nYou may want to try with <b>$bsn new</b> command." 2> /dev/null
else
local zty=$(zenity --list \
--radiolist --width=$zn_lw --height=$zn_lh \
--title="Choose the note/memo to view/edit" \
--column="Select" --column="Existing memo/note" $all_notes \
--cancel-label="EXIT" --ok-label="LOAD SELECTED" 2> /dev/null)
if [[ -z $zty ]]
then
if pgrep -x "$bsn" > /dev/null
then pkill -f "$bsn"; fi
else
zn_view_edit $zty 2> /dev/null
fi
fi
}
# Make new znote
function _new
{
local fnpath
zty=$(zenity --forms \
--show-header --width=400 \
--title="Create new note" \
--text="Provide a name for your note" \
--add-entry="Name:" 2> /dev/null)
case $? in
0)
if [[ -z $zty ]]
then
notify-send \
--icon=face-worried \
--expire-time=500 'Name for new memo/note cannot be empty'
else
zty=${zty// /_}; fnpath="$zn_work_loc/$zty"
if [[ -f $fnpath ]]
then
notify-send \
--icon=face-monkey \
--expire-time=500 'This memo/note already exists. Nothing happened.'
else
touch $fnpath
notify-send --icon=face-cool 'New memo/note successfully added!'
fi
fi
;;
1)
notify-send \
--icon=face-sad \
--expire-time=500 "No memo/note has been added." ;;
-1)
notify-send \
--icon=face-devilish \
--expire-time=500 "Kung-fu error has occurred!" ;;
esac
}
# View/edit selected note
function zn_view_edit
{
local file=$zn_work_loc/$1
local t_file="$file.$(date +%s%N).tmp"
local act="--text-info \
--title=$1 --filename=$file \
--width=$zn_lw --height=$zn_lh \
--editable --ok-label=MEMORIZE \
--cancel-label=BACK"
[[ ! -f $t_file ]] || rm -f $t_file
zenity $act > $t_file
if [[ $? -eq 0 ]]
then
cat $t_file > $file
notify-send \
--icon=face-smile-big \
--expire-time=1000 "Memo/note '$1' saved"
rm -f $t_file && sleep 0.1s
zn_list
elif [[ $? -eq 1 ]]
then
rm -f $t_file && sleep 0.1s
zn_list
else
sleep 0.1s && rm -f $t_file
fi
}
# Do `this` or `that`
case $1 in
new)_new; ;;
list) zn_list; ;;
*)
zenity --info \
--text="Unknown parameter <b>'$1'</b>.\
\n\nYou may want to try with\
\n<b>$bsn new</b> or <b>$bsn list</b>\ncommands." 2> /dev/null
;;
esac
Last edited by tux.lector (2017-03-05 21:30:30)
Did You knew that there are more airplanes in the oceans, than submarines in the sky .. ?
PHP powered applications pipe-menu for Openbox Window Manager
Offline
Day before yesterday, I was totally bored, didn't knew what to do, so I fired up Geany ... and crafted: znotes.
Am confused: why choose the same name as the zNotes program which is part of XFCE?
It's an AUR package.
Last edited by ninian (2017-03-05 22:25:05)
Offline
Because I didn't knew it exists. Also, main player is Zenity and memo/notes.. so I followed my own logic.
Note that that name of program I wrote depends on name of the script.
If you paste code content in a file called yabbadabbadooya and You chmod it... then, by calling yabbadabbadooya new or yabbadabbadooya list will produce the expected. `znotes`.
I have no emotions over that script, really. If that's a problem (because I know that I didn't wrote anything spectacular ) I can think of some other name.
Zenity_notes or even better zmemo ..
Now, someone should tell me that there already is zmemo ..
Last edited by tux.lector (2017-03-06 00:05:15)
Did You knew that there are more airplanes in the oceans, than submarines in the sky .. ?
PHP powered applications pipe-menu for Openbox Window Manager
Offline
^ thanks for znotes, cool little script
the word "memorize" was not totally clear what it meant, I just think of it as "save note".
When you create a new note with znote new, I would prefer that it makes the note after you type it the title AND opens it immediately to add stuff, instead of having to give it a title then type, znote list.
Edit: and thanks for the info below on what to change, didn't want to post a new reply in case someone complains about bumping the thread.
Last edited by chickenPie4tea (2017-03-07 15:52:47)
You can like linux without becoming a fanatic!
Offline
Thnx chickenPie4tea!
Regarding memorize, yes. That's exactly what You've think of it. `save changes`. I simply love to goof with casual everyday expressions, can't help my self.
.. and You can change that >> line 103 >> --editable --ok-label=MEMORIZE
If You want your notes to load immediately after creating new, two simple steps are needed:
Step 1)
- MOVE (cut/paste) whole line 25 declare -a all_notes="$(ls -i ${zn_work_loc})" inside function zn_list just right below local note; (line 30)
# Display list of memo/notes
function zn_list
{
local note;
declare -a all_notes="$(ls -i ${zn_work_loc})"
if [[ -z $all_notes ]]
...
...
...
Step 2)
- Line 79.
Add && zn_view_edit $zty right after touch $fnpath so it looks like this:
touch $fnpath && zn_view_edit $zty
And that should do it.
Last edited by tux.lector (2017-03-06 13:45:24)
Did You knew that there are more airplanes in the oceans, than submarines in the sky .. ?
PHP powered applications pipe-menu for Openbox Window Manager
Offline
Hey Everyone,
Here's a script I've written to put a bootable Arch install into various media:
Offline
^^
I don't want to say that there is no reason one should try your code above, but what's wrong with simple dd if/of/sync or maybe even better easy2boot ?
ps: don't get me wrong, I think the same for my `notes` over any other official sticky-notes application.
Did You knew that there are more airplanes in the oceans, than submarines in the sky .. ?
PHP powered applications pipe-menu for Openbox Window Manager
Offline
Tux.lector, the purpose of that script is to install an arch linux system, not just write a live iso to a medium.
"UNIX is simple and coherent" - Dennis Ritchie; "GNU's Not Unix" - Richard Stallman
Offline
Well, that's not an arch anymore. That's maybe the first step towards new distro based on Arch with him as a proud - founder.
Nevermind, I got the point.
Last edited by tux.lector (2017-03-08 13:28:00)
Did You knew that there are more airplanes in the oceans, than submarines in the sky .. ?
PHP powered applications pipe-menu for Openbox Window Manager
Offline
How is that not arch? Arch linux is meant to be installed, not just run from a live usb created with `dd` as you seem to be suggesting. The right alternative would not be `dd` but would be the installation guide on the wiki.
I'd discourage anyone else from using that script for several reasons. One of them certainly is that if they use someone else's script to install arch then we can't really help them here. But many arch users have their own scripts used on their own system: sharing such things is exactly what this thread is for.
By all means provide feedback on the script. I could start with noting a couple uses of `pacman -Sy <package>` which is dangerous. Also it seems to depend on pacaur and does not check whether pacaur is actually available. This later point however reinforces my previous point: this is not meant to be used by others, but is greyltc's own tool.
"UNIX is simple and coherent" - Dennis Ritchie; "GNU's Not Unix" - Richard Stallman
Offline
The right alternative would not be `dd` but would be the installation guide on the wiki.
... ??!? ... USB flash installation media
Using dd
Note: This method is recommended due to its simplicity. If it does not work, switch to the alternative method #Using manual formatting below.
Should I maybe re-check my English as it really isn't my native, nor primary .. ? You are free to be the judge. Ok. Just forget about my first sentence in previous post (I will delete it if needed).
Concerning greyltc effort, I didn't had anything negative on my mind. greyltc is probably quite profound programmer/scripting architect I might guess, and I have nothing against new and well crafted distros.
And this `scripty` greyltc posted, just makes me think that one new and possibly good little distro is cooking.
Last edited by tux.lector (2017-03-08 14:44:10)
Did You knew that there are more airplanes in the oceans, than submarines in the sky .. ?
PHP powered applications pipe-menu for Openbox Window Manager
Offline
The right alternative would not be `dd` but would be the installation guide on the wiki.
... ??!? ... USB flash installation media
I think Trilby means this: https://wiki.archlinux.org/index.php/In … _a_USB_key
Offline
^^
well.. If that's the case, maybe I really should re-check my English...
Did You knew that there are more airplanes in the oceans, than submarines in the sky .. ?
PHP powered applications pipe-menu for Openbox Window Manager
Offline
How is that not arch? Arch linux is meant to be installed, not just run from a live usb created with `dd` as you seem to be suggesting. The right alternative would not be `dd` but would be the installation guide on the wiki.
I'd discourage anyone else from using that script for several reasons. One of them certainly is that if they use someone else's script to install arch then we can't really help them here. But many arch users have their own scripts used on their own system: sharing such things is exactly what this thread is for.
By all means provide feedback on the script. I could start with noting a couple uses of `pacman -Sy <package>` which is dangerous. Also it seems to depend on pacaur and does not check whether pacaur is actually available. This later point however reinforces my previous point: this is not meant to be used by others, but is greyltc's own tool.
Thanks for the feedback!
You're right. There is one place I assume pacaur is installed, that's when the user requests an alarm (Arch Linux ARM) target (a lightly tested use case I must admit). I use pacaur to install qemu-user-static and binfmt-support so that when I chroot into the install I can use qemu to run the arm binaries that are in there. This should be fixed up now. AUR helpers like pacaur are only put into the install when the `ENABLE_AUR` variable is true (but it's true by default).
Also, I very much agree with your discouraging other people from just using this the way it is. There are a number of undocumented/unconfigurable "goodies" in my script that some may be unhappy to find in their install. For example, you might not want sshd running immediately on the first boot. I do though. This script represents how *I* like *my* Arch and I use it to help me quickly get a new machine to that point.
I posted my script here to get feedback and so that maybe others could borrow various bits from it and tailor it to their needs.
Offline
The following oneliner takes advantage of sam's structural (as opposed to line-based) regular expressions to replace my older, infinitely more complicated addressbook script. For those unfamiliar with rc, ^ is the string concatenation operator, and $"* means "the variable $*'s contents, as a single string"; $* contains the script's arguments.
#!/usr/bin/env rc
ssam -n 'x/(.+\n)+/ g/'^$"*^'/ p' $home/notes/addressbook
Given an addressbook that looks something like this,
name: J. Random Friend
phone: 555.555.5555
email: nobody@nowhere.com
name: Foobie Bletch
email: foobieb@nowhere.com
birthday: 31st February, 2038
place: Pizza Land
phone: 555.555.5554
it simply prints out the full stanza(s) matching whatever text I typed in ("J.", for instance, or "Pizza". If I want to get more complicated (e.g., extract emails to pass on to mail), that's trivially accomplished by piping to further text tools.
Offline
@escondida
what the hell is rc !
You can like linux without becoming a fanatic!
Offline
A better shell...
Find it in the plan9port package.
https://en.wikipedia.org/wiki/Rc
Offline
chickenPie4tea: It's a shell developed by Tom Duff. It's Bourne-descended, but unlike sh itself or sh's other descendents, it has a simple and well-defined grammar (even created using lex!). Top-notch for scripting, and I find it very serviceable for interactive use.
As Ambrevar pointed out, it's available from plan9port. Its complete specifcation is here: http://doc.cat-v.org/plan_9/4th_edition/papers/rc
Share & enjoy!
Offline
Yay, another shell! Infinite diversity in infinite combinations. Surak is pleased.
Offline